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}