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, 31 common.string.URI_MESSAGE_LOG); 32 let managerUri: string = common.string.URI_MESSAGE_LOG + 33 common.string.URI_MESSAGE_INFO_TABLE; 34 dataHelper.insert(managerUri, valueBucket).then(res => { 35 if (callback) { 36 callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 37 } 38 }).catch(error => { 39 HiLog.e(TAG, 'insertSmsMmsInfo fail, error: ' + JSON.stringify(error)); 40 if (callback) { 41 callback(this.encapsulateReturnCode(common.int.FAILURE)); 42 } 43 }); 44 } 45 46 public async deleteSmsMmsInfoByCondition(actionData, callback, context): Promise<void> { 47 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 48 let condition: dataSharePredicates.DataSharePredicates = 49 this.buildQuerySmsMmsInfoCondition(actionData); 50 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 51 dataHelper.delete(managerUri, condition).then(res => { 52 if (callback) { 53 callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 54 } 55 }).catch(error => { 56 HiLog.e(TAG, 'deleteSmsMmsInfoByCondition fail, error: ' + JSON.stringify(error)); 57 if (callback) { 58 callback(this.encapsulateReturnCode(common.int.FAILURE)); 59 } 60 }); 61 } 62 63 public async updateSmsMmsInfoByCondition(actionData, valueBucket, callback, context): Promise<void> { 64 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 65 let condition: dataSharePredicates.DataSharePredicates = 66 this.buildQuerySmsMmsInfoCondition(actionData); 67 let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 68 dataHelper.update(managerUri, condition, valueBucket).then(res => { 69 if (callback) { 70 callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 71 } 72 }).catch(error => { 73 HiLog.e(TAG, 'updateSmsMmsInfoByCondition fail, error: ' + JSON.stringify(error)); 74 if (callback) { 75 callback(this.encapsulateReturnCode(common.int.FAILURE)); 76 } 77 }); 78 } 79 80 public async querySmsMmsInfoByCondition(actionData, callback, context): Promise<void> { 81 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 82 let condition: dataSharePredicates.DataSharePredicates = 83 this.buildQuerySmsMmsInfoCondition(actionData); 84 let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 85 dataHelper.query(managerUri, condition, this.buildSmsMmsInfoTableColumns()).then(resultSet => { 86 let resultList: Array<LooseObject> = []; 87 if (resultSet.rowCount > 0) { 88 while (resultSet.goToNextRow()) { 89 resultList.push(this.buildSmsMmsInfoResult(resultSet)); 90 } 91 } 92 callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList)); 93 resultSet.close(); 94 }).catch(error => { 95 HiLog.e(TAG, 'querySmsMmsInfoByCondition fail, error: ' + JSON.stringify(error)); 96 callback(this.encapsulateReturnCode(common.int.FAILURE)); 97 }); 98 } 99 100 public async querySmsMmsInfoSizeByCondition(actionData, callback, context): Promise<void> { 101 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 102 let condition: dataSharePredicates.DataSharePredicates = 103 this.buildQuerySmsMmsInfoCondition(actionData); 104 let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 105 dataHelper.query(managerUri, condition, this.buildSmsMmsInfoTableColumns()).then(resultSet => { 106 callback(this.encapsulateReturnResult(common.int.SUCCESS, resultSet.rowCount)); 107 resultSet.close(); 108 }).catch(error => { 109 HiLog.e(TAG, 'querySmsMmsInfoSizeByCondition fail, error: ' + JSON.stringify(error)); 110 callback(this.encapsulateReturnCode(common.int.FAILURE)); 111 }); 112 } 113 114 public async queryMaxGroupId(callback, context): Promise<void> { 115 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 116 let resultColumns: Array<string> = ['maxGroupId']; 117 let condition: dataSharePredicates.DataSharePredicates = 118 new dataSharePredicates.DataSharePredicates(); 119 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MAX_GROUP; 120 dataHelper.query(managerUri, condition, resultColumns).then(resultSet => { 121 let maxGroupId: number = 0; 122 if (resultSet.rowCount > 0) { 123 if (resultSet.goToLastRow()) { 124 maxGroupId = (resultSet.getString(0) == 125 common.string.EMPTY_STR) ? 0 : Number(resultSet.getString(0)); 126 HiLog.i(TAG, 'queryMaxGroupId, maxGroupId: ' + maxGroupId); 127 } 128 } 129 callback(this.encapsulateReturnResult(common.int.SUCCESS, maxGroupId)); 130 resultSet.close(); 131 }).catch(error => { 132 HiLog.e(TAG, 'queryMaxGroupId fail, error: ' + JSON.stringify(error)); 133 callback(this.encapsulateReturnCode(common.int.FAILURE)); 134 }); 135 } 136 137 public async statisticalData(callback, context) { 138 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 139 let resultColumns: Array<string> = [ 140 'totalListCount', 141 'unreadCount', 142 'unreadTotalOfInfo' 143 ]; 144 let condition: dataSharePredicates.DataSharePredicates = 145 new dataSharePredicates.DataSharePredicates(); 146 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_UNREAD_COUNT; 147 dataHelper.query(managerUri, condition, resultColumns).then(resultSet => { 148 let result: LooseObject = { 149 'totalListCount': 0, 150 'unreadCount': 0, 151 'unreadTotalOfInfo': 0 152 }; 153 if (resultSet.rowCount > 0) { 154 if (resultSet.goToLastRow()) { 155 result.totalListCount = Number(resultSet.getString(0)); 156 result.unreadCount = Number(resultSet.getString(1)); 157 result.unreadTotalOfInfo = Number(resultSet.getString(2)); 158 } 159 } 160 callback(this.encapsulateReturnResult(common.int.SUCCESS, result)); 161 }).catch(error => { 162 HiLog.e(TAG, 'statisticalData, error: ' + JSON.stringify(error)); 163 callback(this.encapsulateReturnCode(common.int.FAILURE)); 164 }); 165 } 166 167 private buildQuerySmsMmsInfoCondition(actionData): dataSharePredicates.DataSharePredicates { 168 let condition: dataSharePredicates.DataSharePredicates = 169 new dataSharePredicates.DataSharePredicates(); 170 condition.isNotNull(mmsTable.messageInfo.msgId) 171 if (actionData.threadId != null) { 172 let sessionId: string = actionData.threadId + common.string.EMPTY_STR; 173 condition.and().equalTo(mmsTable.messageInfo.sessionId, sessionId); 174 } 175 if (actionData.hasLock != null) { 176 condition.and().equalTo(mmsTable.messageInfo.isLock, actionData.hasLock); 177 } 178 if (actionData.hasRead != null) { 179 condition.and().equalTo(mmsTable.messageInfo.isRead, actionData.hasRead); 180 } 181 if (actionData.smsType != null) { 182 condition.and().equalTo(mmsTable.messageInfo.smsType, actionData.smsType); 183 } 184 if (actionData.msgId != null) { 185 condition.and().equalTo(mmsTable.messageInfo.msgId, actionData.msgId); 186 } 187 if (actionData.isDraft != null && actionData.isDraft) { 188 condition.and().equalTo(mmsTable.messageInfo.groupId, actionData.groupId); 189 condition.and().equalTo(mmsTable.messageInfo.msgState, actionData.sendStatus); 190 } 191 if (actionData.threadIds != null && actionData.threadIds.length > 0) { 192 condition.and().in(mmsTable.messageInfo.sessionId, actionData.threadIds); 193 } 194 if (actionData.msgIds != null && actionData.msgIds.length > 0) { 195 condition.and().in(mmsTable.messageInfo.msgId, actionData.msgIds); 196 } 197 if (actionData.groupIds != null && actionData.groupIds.length > 0) { 198 condition.and().in(mmsTable.messageInfo.groupId, actionData.groupIds); 199 } 200 if (actionData.groupId != null) { 201 condition.and().equalTo(mmsTable.messageInfo.groupId, actionData.groupId); 202 } 203 return condition; 204 } 205 206 private buildSmsMmsInfoTableColumns(): Array<string> { 207 let resultColumns: Array<string> = [ 208 mmsTable.messageInfo.msgId, 209 mmsTable.messageInfo.slotId, 210 mmsTable.messageInfo.receiverNumber, 211 mmsTable.messageInfo.senderNumber, 212 mmsTable.messageInfo.startTime, 213 mmsTable.messageInfo.endTime, 214 mmsTable.messageInfo.msgType, 215 mmsTable.messageInfo.smsType, 216 mmsTable.messageInfo.msgTitle, 217 mmsTable.messageInfo.msgContent, 218 mmsTable.messageInfo.msgState, 219 220 mmsTable.messageInfo.operatorServiceNumber, 221 mmsTable.messageInfo.msgCode, 222 mmsTable.messageInfo.isLock, 223 mmsTable.messageInfo.isRead, 224 mmsTable.messageInfo.isCollect, 225 mmsTable.messageInfo.sessionType, 226 mmsTable.messageInfo.retryNumber, 227 mmsTable.messageInfo.isSubsection, 228 mmsTable.messageInfo.sessionId, 229 mmsTable.messageInfo.groupId, 230 mmsTable.messageInfo.isSender, 231 mmsTable.messageInfo.isSendReport 232 ]; 233 return resultColumns; 234 } 235 236 private buildSmsMmsInfoResult(resultSet): LooseObject { 237 let result: LooseObject = {}; 238 result.msgId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgId))); 239 result.slotId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.slotId))); 240 result.receiverNumber = resultSet.getString( 241 resultSet.getColumnIndex(mmsTable.messageInfo.receiverNumber)); 242 result.senderNumber = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.senderNumber)); 243 result.startTime = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.startTime)); 244 result.endTime = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.endTime)); 245 result.msgType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgType))); 246 result.smsType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.smsType))); 247 result.msgTitle = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgTitle)); 248 result.msgContent = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgContent)); 249 result.msgState = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgState))); 250 251 result.operatorServiceNumber = resultSet.getString( 252 resultSet.getColumnIndex(mmsTable.messageInfo.operatorServiceNumber)); 253 result.msgCode = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgCode))); 254 result.isLock = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isLock))); 255 result.isRead = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isRead))); 256 result.isCollect = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isCollect))); 257 result.sessionType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.sessionType))); 258 result.retryNumber = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.retryNumber))); 259 result.isSubsection = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSubsection))); 260 result.sessionId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.sessionId))); 261 result.groupId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.groupId))); 262 result.isSender = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSender))); 263 result.isSendReport = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSendReport))); 264 return result; 265 } 266}