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