• 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';
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}