1/** 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import dataShare from '@ohos.data.dataShare'; 17import dataSharePredicates from '@ohos.data.dataSharePredicates'; 18 19import BaseModel from './BaseModel'; 20import common from '../data/commonData'; 21import mmsTable from '../data/tableData'; 22import HiLog from '../utils/HiLog'; 23import LooseObject from '../data/LooseObject'; 24 25const TAG = "ConversationModel"; 26 27 28export default class ConversationModel extends BaseModel { 29 public async insertSmsMmsInfo(valueBucket, callback, context): Promise<void> { 30 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 31 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 32 dataHelper.insert(managerUri, valueBucket).then(res => { 33 if (callback) { 34 callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 35 } 36 }).catch(error => { 37 HiLog.e(TAG, "insertSmsMmsInfo fail, error: " + JSON.stringify(error)); 38 if (callback) { 39 callback(this.encapsulateReturnCode(common.int.FAILURE)); 40 } 41 }); 42 } 43 44 public async deleteSmsMmsInfoByCondition(actionData, callback, context): Promise<void> { 45 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 46 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySmsMmsInfoCondition(actionData); 47 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 48 dataHelper.delete(managerUri, condition).then(res => { 49 if (callback) { 50 callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 51 } 52 }).catch(error => { 53 HiLog.e(TAG, "deleteSmsMmsInfoByCondition fail, error: " + JSON.stringify(error)); 54 if (callback) { 55 callback(this.encapsulateReturnCode(common.int.FAILURE)); 56 } 57 }); 58 } 59 60 public async updateSmsMmsInfoByCondition(actionData, valueBucket, callback, context): Promise<void> { 61 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 62 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySmsMmsInfoCondition(actionData); 63 let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 64 dataHelper.update(managerUri, condition, valueBucket).then(res => { 65 if (callback) { 66 callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 67 } 68 }).catch(error => { 69 HiLog.e(TAG, "updateSmsMmsInfoByCondition fail, error: " + JSON.stringify(error)); 70 if (callback) { 71 callback(this.encapsulateReturnCode(common.int.FAILURE)); 72 } 73 }); 74 } 75 76 public async querySmsMmsInfoByCondition(actionData, callback, context): Promise<void> { 77 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 78 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySmsMmsInfoCondition(actionData); 79 let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 80 dataHelper.query(managerUri, condition, this.buildSmsMmsInfoTableColumns()).then(resultSet => { 81 let resultList: Array<LooseObject> = []; 82 if (resultSet.rowCount > 0) { 83 while (resultSet.goToNextRow()) { 84 resultList.push(this.buildSmsMmsInfoResult(resultSet)); 85 } 86 } 87 callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList)); 88 resultSet.close(); 89 }).catch(error => { 90 HiLog.e(TAG, "querySmsMmsInfoByCondition fail, error: " + JSON.stringify(error)); 91 callback(this.encapsulateReturnCode(common.int.FAILURE)); 92 }); 93 } 94 95 public async querySmsMmsInfoSizeByCondition(actionData, callback, context): Promise<void> { 96 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 97 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySmsMmsInfoCondition(actionData); 98 let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 99 dataHelper.query(managerUri, condition, this.buildSmsMmsInfoTableColumns()).then(resultSet => { 100 callback(this.encapsulateReturnResult(common.int.SUCCESS, resultSet.rowCount)); 101 resultSet.close(); 102 }).catch(error => { 103 HiLog.e(TAG, "querySmsMmsInfoSizeByCondition fail, error: " + JSON.stringify(error)); 104 callback(this.encapsulateReturnCode(common.int.FAILURE)); 105 }); 106 } 107 108 public async queryMaxGroupId(callback, context): Promise<void> { 109 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 110 let resultColumns: Array<string> = ["maxGroupId"]; 111 let condition: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 112 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MAX_GROUP; 113 dataHelper.query(managerUri, condition, resultColumns).then(resultSet => { 114 let maxGroupId: number = 0; 115 if (resultSet.rowCount > 0) { 116 if (resultSet.goToLastRow()) { 117 maxGroupId = (resultSet.getString(0) == common.string.EMPTY_STR) ? 0 : Number(resultSet.getString(0)); 118 HiLog.i(TAG, "queryMaxGroupId, maxGroupId: " + maxGroupId); 119 } 120 } 121 callback(this.encapsulateReturnResult(common.int.SUCCESS, maxGroupId)); 122 resultSet.close(); 123 }).catch(error => { 124 HiLog.e(TAG, "queryMaxGroupId fail, error: " + JSON.stringify(error)); 125 callback(this.encapsulateReturnCode(common.int.FAILURE)); 126 }); 127 } 128 129 public async statisticalData(callback, context) { 130 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 131 let resultColumns: Array<string> = [ 132 "totalListCount", 133 "unreadCount", 134 "unreadTotalOfInfo" 135 ]; 136 let condition: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 137 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_UNREAD_COUNT; 138 dataHelper.query(managerUri, condition, resultColumns).then(resultSet => { 139 let result: LooseObject = { 140 "totalListCount": 0, 141 "unreadCount": 0, 142 "unreadTotalOfInfo": 0 143 }; 144 if (resultSet.rowCount > 0) { 145 if (resultSet.goToLastRow()) { 146 result.totalListCount = Number(resultSet.getString(0)); 147 result.unreadCount = Number(resultSet.getString(1)); 148 result.unreadTotalOfInfo = Number(resultSet.getString(2)); 149 } 150 } 151 callback(this.encapsulateReturnResult(common.int.SUCCESS, result)); 152 }).catch(error => { 153 HiLog.e(TAG, "statisticalData, error: " + JSON.stringify(error)); 154 callback(this.encapsulateReturnCode(common.int.FAILURE)); 155 }); 156 } 157 158 private buildQuerySmsMmsInfoCondition(actionData): dataSharePredicates.DataSharePredicates { 159 let condition: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 160 condition.isNotNull(mmsTable.messageInfo.msgId) 161 if (actionData.threadId != null) { 162 let sessionId: string = actionData.threadId + common.string.EMPTY_STR; 163 condition.and().equalTo(mmsTable.messageInfo.sessionId, sessionId); 164 } 165 if (actionData.hasLock != null) { 166 condition.and().equalTo(mmsTable.messageInfo.isLock, actionData.hasLock); 167 } 168 if (actionData.hasRead != null) { 169 condition.and().equalTo(mmsTable.messageInfo.isRead, actionData.hasRead); 170 } 171 if (actionData.smsType != null) { 172 condition.and().equalTo(mmsTable.messageInfo.smsType, actionData.smsType); 173 } 174 if (actionData.msgId != null) { 175 condition.and().equalTo(mmsTable.messageInfo.msgId, actionData.msgId); 176 } 177 if (actionData.isDraft != null && actionData.isDraft) { 178 condition.and().equalTo(mmsTable.messageInfo.groupId, actionData.groupId); 179 condition.and().equalTo(mmsTable.messageInfo.msgState, actionData.sendStatus); 180 } 181 if (actionData.threadIds != null && actionData.threadIds.length > 0) { 182 condition.and().in(mmsTable.messageInfo.sessionId, actionData.threadIds); 183 } 184 if (actionData.msgIds != null && actionData.msgIds.length > 0) { 185 condition.and().in(mmsTable.messageInfo.msgId, actionData.msgIds); 186 } 187 if (actionData.groupIds != null && actionData.groupIds.length > 0) { 188 condition.and().in(mmsTable.messageInfo.groupId, actionData.groupIds); 189 } 190 if (actionData.groupId != null) { 191 condition.and().equalTo(mmsTable.messageInfo.groupId, actionData.groupId); 192 } 193 return condition; 194 } 195 196 private buildSmsMmsInfoTableColumns(): Array<string> { 197 let resultColumns: Array<string> = [ 198 mmsTable.messageInfo.msgId, 199 mmsTable.messageInfo.slotId, 200 mmsTable.messageInfo.receiverNumber, 201 mmsTable.messageInfo.senderNumber, 202 mmsTable.messageInfo.startTime, 203 mmsTable.messageInfo.endTime, 204 mmsTable.messageInfo.msgType, 205 mmsTable.messageInfo.smsType, 206 mmsTable.messageInfo.msgTitle, 207 mmsTable.messageInfo.msgContent, 208 mmsTable.messageInfo.msgState, 209 210 mmsTable.messageInfo.operatorServiceNumber, 211 mmsTable.messageInfo.msgCode, 212 mmsTable.messageInfo.isLock, 213 mmsTable.messageInfo.isRead, 214 mmsTable.messageInfo.isCollect, 215 mmsTable.messageInfo.sessionType, 216 mmsTable.messageInfo.retryNumber, 217 mmsTable.messageInfo.isSubsection, 218 mmsTable.messageInfo.sessionId, 219 mmsTable.messageInfo.groupId, 220 mmsTable.messageInfo.isSender, 221 mmsTable.messageInfo.isSendReport 222 ]; 223 return resultColumns; 224 } 225 226 private buildSmsMmsInfoResult(resultSet): LooseObject { 227 let result: LooseObject = {}; 228 result.msgId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgId))); 229 result.slotId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.slotId))); 230 result.receiverNumber = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.receiverNumber)); 231 result.senderNumber = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.senderNumber)); 232 result.startTime = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.startTime)); 233 result.endTime = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.endTime)); 234 result.msgType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgType))); 235 result.smsType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.smsType))); 236 result.msgTitle = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgTitle)); 237 result.msgContent = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgContent)); 238 result.msgState = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgState))); 239 240 result.operatorServiceNumber = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.operatorServiceNumber)); 241 result.msgCode = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgCode))); 242 result.isLock = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isLock))); 243 result.isRead = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isRead))); 244 result.isCollect = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isCollect))); 245 result.sessionType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.sessionType))); 246 result.retryNumber = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.retryNumber))); 247 result.isSubsection = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSubsection))); 248 result.sessionId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.sessionId))); 249 result.groupId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.groupId))); 250 result.isSender = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSender))); 251 result.isSendReport = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSendReport))); 252 return result; 253 } 254}