• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}