1048147e0Sopenharmony_ci/** 2048147e0Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3048147e0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4048147e0Sopenharmony_ci * you may not use this file except in compliance with the License. 5048147e0Sopenharmony_ci * You may obtain a copy of the License at 6048147e0Sopenharmony_ci * 7048147e0Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8048147e0Sopenharmony_ci * 9048147e0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10048147e0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11048147e0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12048147e0Sopenharmony_ci * See the License for the specific language governing permissions and 13048147e0Sopenharmony_ci * limitations under the License. 14048147e0Sopenharmony_ci */ 15048147e0Sopenharmony_ci 16048147e0Sopenharmony_ciimport dataShare from '@ohos.data.dataShare'; 17048147e0Sopenharmony_ciimport dataSharePredicates from '@ohos.data.dataSharePredicates'; 18048147e0Sopenharmony_ci 19048147e0Sopenharmony_ciimport BaseModel from './BaseModel'; 20048147e0Sopenharmony_ciimport common from '../data/commonData'; 21048147e0Sopenharmony_ciimport mmsTable from '../data/tableData'; 22048147e0Sopenharmony_ciimport HiLog from '../utils/HiLog'; 23048147e0Sopenharmony_ciimport LooseObject from '../data/LooseObject'; 24048147e0Sopenharmony_ci 25048147e0Sopenharmony_ciconst TAG = 'ConversationModel'; 26048147e0Sopenharmony_ci 27048147e0Sopenharmony_ci 28048147e0Sopenharmony_ciexport default class ConversationModel extends BaseModel { 29048147e0Sopenharmony_ci public async insertSmsMmsInfo(valueBucket, callback, context): Promise<void> { 30048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, 31048147e0Sopenharmony_ci common.string.URI_MESSAGE_LOG); 32048147e0Sopenharmony_ci let managerUri: string = common.string.URI_MESSAGE_LOG + 33048147e0Sopenharmony_ci common.string.URI_MESSAGE_INFO_TABLE; 34048147e0Sopenharmony_ci dataHelper.insert(managerUri, valueBucket).then(res => { 35048147e0Sopenharmony_ci if (callback) { 36048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 37048147e0Sopenharmony_ci } 38048147e0Sopenharmony_ci }).catch(error => { 39048147e0Sopenharmony_ci HiLog.e(TAG, 'insertSmsMmsInfo fail, error: ' + JSON.stringify(error)); 40048147e0Sopenharmony_ci if (callback) { 41048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 42048147e0Sopenharmony_ci } 43048147e0Sopenharmony_ci }); 44048147e0Sopenharmony_ci } 45048147e0Sopenharmony_ci 46048147e0Sopenharmony_ci public async deleteSmsMmsInfoByCondition(actionData, callback, context): Promise<void> { 47048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 48048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 49048147e0Sopenharmony_ci this.buildQuerySmsMmsInfoCondition(actionData); 50048147e0Sopenharmony_ci let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 51048147e0Sopenharmony_ci dataHelper.delete(managerUri, condition).then(res => { 52048147e0Sopenharmony_ci if (callback) { 53048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 54048147e0Sopenharmony_ci } 55048147e0Sopenharmony_ci }).catch(error => { 56048147e0Sopenharmony_ci HiLog.e(TAG, 'deleteSmsMmsInfoByCondition fail, error: ' + JSON.stringify(error)); 57048147e0Sopenharmony_ci if (callback) { 58048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 59048147e0Sopenharmony_ci } 60048147e0Sopenharmony_ci }); 61048147e0Sopenharmony_ci } 62048147e0Sopenharmony_ci 63048147e0Sopenharmony_ci public async updateSmsMmsInfoByCondition(actionData, valueBucket, callback, context): Promise<void> { 64048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 65048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 66048147e0Sopenharmony_ci this.buildQuerySmsMmsInfoCondition(actionData); 67048147e0Sopenharmony_ci let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 68048147e0Sopenharmony_ci dataHelper.update(managerUri, condition, valueBucket).then(res => { 69048147e0Sopenharmony_ci if (callback) { 70048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, res)); 71048147e0Sopenharmony_ci } 72048147e0Sopenharmony_ci }).catch(error => { 73048147e0Sopenharmony_ci HiLog.e(TAG, 'updateSmsMmsInfoByCondition fail, error: ' + JSON.stringify(error)); 74048147e0Sopenharmony_ci if (callback) { 75048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 76048147e0Sopenharmony_ci } 77048147e0Sopenharmony_ci }); 78048147e0Sopenharmony_ci } 79048147e0Sopenharmony_ci 80048147e0Sopenharmony_ci public async querySmsMmsInfoByCondition(actionData, callback, context): Promise<void> { 81048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 82048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 83048147e0Sopenharmony_ci this.buildQuerySmsMmsInfoCondition(actionData); 84048147e0Sopenharmony_ci let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 85048147e0Sopenharmony_ci dataHelper.query(managerUri, condition, this.buildSmsMmsInfoTableColumns()).then(resultSet => { 86048147e0Sopenharmony_ci let resultList: Array<LooseObject> = []; 87048147e0Sopenharmony_ci if (resultSet.rowCount > 0) { 88048147e0Sopenharmony_ci while (resultSet.goToNextRow()) { 89048147e0Sopenharmony_ci resultList.push(this.buildSmsMmsInfoResult(resultSet)); 90048147e0Sopenharmony_ci } 91048147e0Sopenharmony_ci } 92048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList)); 93048147e0Sopenharmony_ci resultSet.close(); 94048147e0Sopenharmony_ci }).catch(error => { 95048147e0Sopenharmony_ci HiLog.e(TAG, 'querySmsMmsInfoByCondition fail, error: ' + JSON.stringify(error)); 96048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 97048147e0Sopenharmony_ci }); 98048147e0Sopenharmony_ci } 99048147e0Sopenharmony_ci 100048147e0Sopenharmony_ci public async querySmsMmsInfoSizeByCondition(actionData, callback, context): Promise<void> { 101048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 102048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 103048147e0Sopenharmony_ci this.buildQuerySmsMmsInfoCondition(actionData); 104048147e0Sopenharmony_ci let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE; 105048147e0Sopenharmony_ci dataHelper.query(managerUri, condition, this.buildSmsMmsInfoTableColumns()).then(resultSet => { 106048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, resultSet.rowCount)); 107048147e0Sopenharmony_ci resultSet.close(); 108048147e0Sopenharmony_ci }).catch(error => { 109048147e0Sopenharmony_ci HiLog.e(TAG, 'querySmsMmsInfoSizeByCondition fail, error: ' + JSON.stringify(error)); 110048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 111048147e0Sopenharmony_ci }); 112048147e0Sopenharmony_ci } 113048147e0Sopenharmony_ci 114048147e0Sopenharmony_ci public async queryMaxGroupId(callback, context): Promise<void> { 115048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 116048147e0Sopenharmony_ci let resultColumns: Array<string> = ['maxGroupId']; 117048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 118048147e0Sopenharmony_ci new dataSharePredicates.DataSharePredicates(); 119048147e0Sopenharmony_ci let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MAX_GROUP; 120048147e0Sopenharmony_ci dataHelper.query(managerUri, condition, resultColumns).then(resultSet => { 121048147e0Sopenharmony_ci let maxGroupId: number = 0; 122048147e0Sopenharmony_ci if (resultSet.rowCount > 0) { 123048147e0Sopenharmony_ci if (resultSet.goToLastRow()) { 124048147e0Sopenharmony_ci maxGroupId = (resultSet.getString(0) == 125048147e0Sopenharmony_ci common.string.EMPTY_STR) ? 0 : Number(resultSet.getString(0)); 126048147e0Sopenharmony_ci HiLog.i(TAG, 'queryMaxGroupId, maxGroupId: ' + maxGroupId); 127048147e0Sopenharmony_ci } 128048147e0Sopenharmony_ci } 129048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, maxGroupId)); 130048147e0Sopenharmony_ci resultSet.close(); 131048147e0Sopenharmony_ci }).catch(error => { 132048147e0Sopenharmony_ci HiLog.e(TAG, 'queryMaxGroupId fail, error: ' + JSON.stringify(error)); 133048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 134048147e0Sopenharmony_ci }); 135048147e0Sopenharmony_ci } 136048147e0Sopenharmony_ci 137048147e0Sopenharmony_ci public async statisticalData(callback, context) { 138048147e0Sopenharmony_ci let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 139048147e0Sopenharmony_ci let resultColumns: Array<string> = [ 140048147e0Sopenharmony_ci 'totalListCount', 141048147e0Sopenharmony_ci 'unreadCount', 142048147e0Sopenharmony_ci 'unreadTotalOfInfo' 143048147e0Sopenharmony_ci ]; 144048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 145048147e0Sopenharmony_ci new dataSharePredicates.DataSharePredicates(); 146048147e0Sopenharmony_ci let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_UNREAD_COUNT; 147048147e0Sopenharmony_ci dataHelper.query(managerUri, condition, resultColumns).then(resultSet => { 148048147e0Sopenharmony_ci let result: LooseObject = { 149048147e0Sopenharmony_ci 'totalListCount': 0, 150048147e0Sopenharmony_ci 'unreadCount': 0, 151048147e0Sopenharmony_ci 'unreadTotalOfInfo': 0 152048147e0Sopenharmony_ci }; 153048147e0Sopenharmony_ci if (resultSet.rowCount > 0) { 154048147e0Sopenharmony_ci if (resultSet.goToLastRow()) { 155048147e0Sopenharmony_ci result.totalListCount = Number(resultSet.getString(0)); 156048147e0Sopenharmony_ci result.unreadCount = Number(resultSet.getString(1)); 157048147e0Sopenharmony_ci result.unreadTotalOfInfo = Number(resultSet.getString(2)); 158048147e0Sopenharmony_ci } 159048147e0Sopenharmony_ci } 160048147e0Sopenharmony_ci callback(this.encapsulateReturnResult(common.int.SUCCESS, result)); 161048147e0Sopenharmony_ci }).catch(error => { 162048147e0Sopenharmony_ci HiLog.e(TAG, 'statisticalData, error: ' + JSON.stringify(error)); 163048147e0Sopenharmony_ci callback(this.encapsulateReturnCode(common.int.FAILURE)); 164048147e0Sopenharmony_ci }); 165048147e0Sopenharmony_ci } 166048147e0Sopenharmony_ci 167048147e0Sopenharmony_ci private buildQuerySmsMmsInfoCondition(actionData): dataSharePredicates.DataSharePredicates { 168048147e0Sopenharmony_ci let condition: dataSharePredicates.DataSharePredicates = 169048147e0Sopenharmony_ci new dataSharePredicates.DataSharePredicates(); 170048147e0Sopenharmony_ci condition.isNotNull(mmsTable.messageInfo.msgId) 171048147e0Sopenharmony_ci if (actionData.threadId != null) { 172048147e0Sopenharmony_ci let sessionId: string = actionData.threadId + common.string.EMPTY_STR; 173048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.sessionId, sessionId); 174048147e0Sopenharmony_ci } 175048147e0Sopenharmony_ci if (actionData.hasLock != null) { 176048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.isLock, actionData.hasLock); 177048147e0Sopenharmony_ci } 178048147e0Sopenharmony_ci if (actionData.hasRead != null) { 179048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.isRead, actionData.hasRead); 180048147e0Sopenharmony_ci } 181048147e0Sopenharmony_ci if (actionData.smsType != null) { 182048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.smsType, actionData.smsType); 183048147e0Sopenharmony_ci } 184048147e0Sopenharmony_ci if (actionData.msgId != null) { 185048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.msgId, actionData.msgId); 186048147e0Sopenharmony_ci } 187048147e0Sopenharmony_ci if (actionData.isDraft != null && actionData.isDraft) { 188048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.groupId, actionData.groupId); 189048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.msgState, actionData.sendStatus); 190048147e0Sopenharmony_ci } 191048147e0Sopenharmony_ci if (actionData.threadIds != null && actionData.threadIds.length > 0) { 192048147e0Sopenharmony_ci condition.and().in(mmsTable.messageInfo.sessionId, actionData.threadIds); 193048147e0Sopenharmony_ci } 194048147e0Sopenharmony_ci if (actionData.msgIds != null && actionData.msgIds.length > 0) { 195048147e0Sopenharmony_ci condition.and().in(mmsTable.messageInfo.msgId, actionData.msgIds); 196048147e0Sopenharmony_ci } 197048147e0Sopenharmony_ci if (actionData.groupIds != null && actionData.groupIds.length > 0) { 198048147e0Sopenharmony_ci condition.and().in(mmsTable.messageInfo.groupId, actionData.groupIds); 199048147e0Sopenharmony_ci } 200048147e0Sopenharmony_ci if (actionData.groupId != null) { 201048147e0Sopenharmony_ci condition.and().equalTo(mmsTable.messageInfo.groupId, actionData.groupId); 202048147e0Sopenharmony_ci } 203048147e0Sopenharmony_ci return condition; 204048147e0Sopenharmony_ci } 205048147e0Sopenharmony_ci 206048147e0Sopenharmony_ci private buildSmsMmsInfoTableColumns(): Array<string> { 207048147e0Sopenharmony_ci let resultColumns: Array<string> = [ 208048147e0Sopenharmony_ci mmsTable.messageInfo.msgId, 209048147e0Sopenharmony_ci mmsTable.messageInfo.slotId, 210048147e0Sopenharmony_ci mmsTable.messageInfo.receiverNumber, 211048147e0Sopenharmony_ci mmsTable.messageInfo.senderNumber, 212048147e0Sopenharmony_ci mmsTable.messageInfo.startTime, 213048147e0Sopenharmony_ci mmsTable.messageInfo.endTime, 214048147e0Sopenharmony_ci mmsTable.messageInfo.msgType, 215048147e0Sopenharmony_ci mmsTable.messageInfo.smsType, 216048147e0Sopenharmony_ci mmsTable.messageInfo.msgTitle, 217048147e0Sopenharmony_ci mmsTable.messageInfo.msgContent, 218048147e0Sopenharmony_ci mmsTable.messageInfo.msgState, 219048147e0Sopenharmony_ci 220048147e0Sopenharmony_ci mmsTable.messageInfo.operatorServiceNumber, 221048147e0Sopenharmony_ci mmsTable.messageInfo.msgCode, 222048147e0Sopenharmony_ci mmsTable.messageInfo.isLock, 223048147e0Sopenharmony_ci mmsTable.messageInfo.isRead, 224048147e0Sopenharmony_ci mmsTable.messageInfo.isCollect, 225048147e0Sopenharmony_ci mmsTable.messageInfo.sessionType, 226048147e0Sopenharmony_ci mmsTable.messageInfo.retryNumber, 227048147e0Sopenharmony_ci mmsTable.messageInfo.isSubsection, 228048147e0Sopenharmony_ci mmsTable.messageInfo.sessionId, 229048147e0Sopenharmony_ci mmsTable.messageInfo.groupId, 230048147e0Sopenharmony_ci mmsTable.messageInfo.isSender, 231048147e0Sopenharmony_ci mmsTable.messageInfo.isSendReport 232048147e0Sopenharmony_ci ]; 233048147e0Sopenharmony_ci return resultColumns; 234048147e0Sopenharmony_ci } 235048147e0Sopenharmony_ci 236048147e0Sopenharmony_ci private buildSmsMmsInfoResult(resultSet): LooseObject { 237048147e0Sopenharmony_ci let result: LooseObject = {}; 238048147e0Sopenharmony_ci result.msgId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgId))); 239048147e0Sopenharmony_ci result.slotId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.slotId))); 240048147e0Sopenharmony_ci result.receiverNumber = resultSet.getString( 241048147e0Sopenharmony_ci resultSet.getColumnIndex(mmsTable.messageInfo.receiverNumber)); 242048147e0Sopenharmony_ci result.senderNumber = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.senderNumber)); 243048147e0Sopenharmony_ci result.startTime = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.startTime)); 244048147e0Sopenharmony_ci result.endTime = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.endTime)); 245048147e0Sopenharmony_ci result.msgType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgType))); 246048147e0Sopenharmony_ci result.smsType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.smsType))); 247048147e0Sopenharmony_ci result.msgTitle = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgTitle)); 248048147e0Sopenharmony_ci result.msgContent = resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgContent)); 249048147e0Sopenharmony_ci result.msgState = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgState))); 250048147e0Sopenharmony_ci 251048147e0Sopenharmony_ci result.operatorServiceNumber = resultSet.getString( 252048147e0Sopenharmony_ci resultSet.getColumnIndex(mmsTable.messageInfo.operatorServiceNumber)); 253048147e0Sopenharmony_ci result.msgCode = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.msgCode))); 254048147e0Sopenharmony_ci result.isLock = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isLock))); 255048147e0Sopenharmony_ci result.isRead = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isRead))); 256048147e0Sopenharmony_ci result.isCollect = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isCollect))); 257048147e0Sopenharmony_ci result.sessionType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.sessionType))); 258048147e0Sopenharmony_ci result.retryNumber = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.retryNumber))); 259048147e0Sopenharmony_ci result.isSubsection = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSubsection))); 260048147e0Sopenharmony_ci result.sessionId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.sessionId))); 261048147e0Sopenharmony_ci result.groupId = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.groupId))); 262048147e0Sopenharmony_ci result.isSender = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSender))); 263048147e0Sopenharmony_ci result.isSendReport = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.messageInfo.isSendReport))); 264048147e0Sopenharmony_ci return result; 265048147e0Sopenharmony_ci } 266048147e0Sopenharmony_ci}