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'; 24import StringUtil from '../utils/StringUtil'; 25 26const TAG = "ConversationListModel"; 27 28export default class ConversationListModel extends BaseModel { 29 public async insertSession(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_SESSION_TABLE; 32 dataHelper.insert(managerUri, valueBucket).then(data => { 33 if (callback) { 34 callback(this.encapsulateReturnResult(common.int.SUCCESS, data)); 35 } 36 }).catch(error => { 37 HiLog.e(TAG, "insertSession fail, error: " + JSON.stringify(error)); 38 if (callback) { 39 callback(this.encapsulateReturnCode(common.int.FAILURE)); 40 } 41 }); 42 } 43 44 public async deleteSessionByCondition(actionData, callback, context): Promise<void> { 45 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 46 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySessionCondition(actionData); 47 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_SESSION_TABLE; 48 dataHelper.delete(managerUri, condition).then(data => { 49 if (callback) { 50 callback(this.encapsulateReturnResult(common.int.SUCCESS, data)); 51 } 52 }).catch(error => { 53 HiLog.e(TAG, "deleteSessionByCondition, error: " + JSON.stringify(error)); 54 if (callback) { 55 callback(this.encapsulateReturnCode(common.int.FAILURE)); 56 } 57 }); 58 } 59 60 public async updateSessionByCondition(actionData, valueBucket, callback, context): Promise<void> { 61 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 62 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySessionCondition(actionData); 63 if (valueBucket == null) { 64 HiLog.e(TAG, "updateSessionByCondition fail, valueBucket is null!"); 65 if (callback) { 66 callback(this.encapsulateReturnCode(common.int.FAILURE)); 67 } 68 } 69 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_SESSION_TABLE; 70 dataHelper.update(managerUri, condition, valueBucket).then(data => { 71 if (callback) { 72 callback(this.encapsulateReturnResult(common.int.SUCCESS, data)); 73 } 74 }).catch(error => { 75 HiLog.e(TAG, "updateSessionByCondition fail, error: " + JSON.stringify(error)); 76 if (callback) { 77 callback(this.encapsulateReturnCode(common.int.FAILURE)); 78 } 79 }); 80 } 81 82 public async querySessionByCondition(actionData, callback, context): Promise<void> { 83 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 84 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySessionCondition(actionData); 85 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_SESSION_TABLE; 86 dataHelper.query(managerUri, condition, this.buildSessionTableColumns()).then(resultSet => { 87 let resultList: Array<LooseObject> = []; 88 if (resultSet.rowCount > 0) { 89 while (resultSet.goToNextRow()) { 90 resultList.push(this.buildSessionResult(resultSet)); 91 } 92 } else { 93 resultSet.goToFirstRow(); 94 resultList.push(this.buildSessionResult(resultSet)); 95 } 96 callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList)); 97 resultSet.close(); 98 }).catch(error => { 99 HiLog.e(TAG, "querySessionByCondition fail, error: " + JSON.stringify(error)); 100 callback(this.encapsulateReturnCode(common.int.FAILURE)); 101 }); 102 } 103 104 public async querySessionSizeByCondition(actionData, callback, context): Promise<void> { 105 let dataHelper = await dataShare.createDataShareHelper(context, common.string.URI_MESSAGE_LOG); 106 let condition: dataSharePredicates.DataSharePredicates = this.buildQuerySessionCondition(actionData); 107 let managerUri: string = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_SESSION_TABLE; 108 dataHelper.query(managerUri, condition, this.buildSessionTableColumns()).then(resultSet => { 109 callback(this.encapsulateReturnResult(common.int.SUCCESS, resultSet.rowCount)); 110 }).catch(error => { 111 HiLog.e(TAG, "querySessionSizeByCondition, fail, error: " + JSON.stringify(error)); 112 callback(this.encapsulateReturnCode(common.int.FAILURE)); 113 }); 114 } 115 116 private buildQuerySessionCondition(actionData): dataSharePredicates.DataSharePredicates { 117 let condition: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 118 condition.isNotNull(mmsTable.sessionField.id); 119 if (actionData.smsType != null) { 120 condition.and().equalTo(mmsTable.sessionField.smsType, actionData.smsType); 121 } 122 if (actionData.telephone != null) { 123 condition.and().equalTo(mmsTable.sessionField.telephone, actionData.telephone); 124 } 125 if (actionData.telephone_like != null) { 126 condition.and().like(mmsTable.sessionField.telephone, "%" + actionData.telephone_like + "%"); 127 } 128 if (actionData.threadId != null) { 129 condition.and().equalTo(mmsTable.sessionField.id, actionData.threadId); 130 } 131 if (actionData.threadIds != null && actionData.threadIds.length > 0) { 132 condition.and().in(mmsTable.sessionField.id, actionData.threadIds); 133 } 134 if (actionData.unreadCount_greaterThan != null) { 135 condition.and().greaterThan(mmsTable.sessionField.unreadCount, actionData.unreadCount_greaterThan); 136 } 137 if (actionData.orderByTimeDesc) { 138 condition.orderByDesc(mmsTable.sessionField.time); 139 } 140 if (actionData.page != null && actionData.limit != null) { 141 condition.limit(actionData.limit, StringUtil.getOffsetForSession(actionData.page)); 142 } 143 return condition; 144 } 145 146 private buildSessionResult(resultSet): LooseObject { 147 let result: LooseObject = {}; 148 result.id = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.id))); 149 result.time = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.time))); 150 result.telephone = resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.telephone)); 151 result.content = resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.content)); 152 result.contactsNum = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.contactsNum))); 153 result.smsType = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.smsType))); 154 result.unreadCount = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.unreadCount))); 155 result.sendStatus = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.sendStatus))); 156 result.hasDraft = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasDraft))); 157 result.hasLock = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasLock))); 158 result.messageCount = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.messageCount))); 159 result.hasMms = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasMms))); 160 result.hasAttachment = Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasAttachment))); 161 result.telephoneFormat = result.telephone; 162 return result; 163 } 164 165 private buildSessionTableColumns(): Array<string> { 166 let sessionTableColumns: Array<string> = [ 167 mmsTable.sessionField.id, 168 mmsTable.sessionField.time, 169 mmsTable.sessionField.telephone, 170 mmsTable.sessionField.content, 171 mmsTable.sessionField.contactsNum, 172 mmsTable.sessionField.smsType, 173 mmsTable.sessionField.unreadCount, 174 mmsTable.sessionField.sendStatus, 175 mmsTable.sessionField.hasDraft, 176 mmsTable.sessionField.hasLock, 177 mmsTable.sessionField.messageCount, 178 mmsTable.sessionField.hasMms, 179 mmsTable.sessionField.hasAttachment 180 ]; 181 return sessionTableColumns; 182 } 183}