• 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 BaseModel from "./BaseModel";
17import common from "../data/commonData";
18import mmsTable from "../data/tableData";
19import HiLog from "../utils/HiLog";
20import LooseObject from "../data/LooseObject"
21import MmsDatabaseHelper from "../utils/MmsDatabaseHelper";
22import ohosDataRdb from "@ohos.data.rdb";
23
24import dataShare from "@ohos.data.dataShare";
25import dataSharePredicates from "@ohos.data.dataSharePredicates";
26
27const TAG = "ConversationListModel";
28
29export default class ConversationListModel extends BaseModel {
30    async querySessionList(actionData) {
31        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
32        let numberType = actionData.numberType;
33        if (numberType != null) {
34            await predicates.equalTo(mmsTable.sessionField.smsType, numberType);
35        }
36        await predicates.orderByDesc(mmsTable.sessionField.time);
37        await predicates.limitAs(actionData.limit);
38        let offset = actionData.page < 3 ? (actionData.page - 1) * 50 : (actionData.page - 2) * 100 + 50;
39        await predicates.offsetAs(offset);
40        let resultSet = await globalThis.MmsDatabaseHelper.query(predicates);
41        let sessionList = [];
42        if (resultSet != undefined) {
43            while (resultSet.goToNextRow()) {
44                let item = await this.buildResultSet(resultSet);
45                sessionList.push(item);
46            }
47        }
48        let result = {
49            response: sessionList,
50        }
51        return result;
52    }
53
54    async querySessionByTelephone(telephone) {
55        HiLog.i(TAG, "query session by telephone")
56        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
57        if (telephone) {
58            await predicates.equalTo(mmsTable.sessionField.telephone, telephone);
59        }
60
61        let resultSet = await globalThis.MmsDatabaseHelper.query(predicates);
62        if(resultSet === null) {
63            return null;
64        }
65        resultSet.goToFirstRow();
66        let result = await this.buildResultSet(resultSet);
67        return result;
68    }
69
70    async querySessionById(threadId) {
71        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
72        if (threadId) {
73            await predicates.equalTo(mmsTable.sessionField.id, threadId);
74        }
75        let resultSet = await globalThis.MmsDatabaseHelper.query(predicates);
76        resultSet.goToFirstRow();
77        let result = await this.buildResultSet(resultSet);
78        return result;
79    }
80
81    async searchSessionByTelephone(telephone, numberType) {
82        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
83        if (telephone != common.string.EMPTY_STR) {
84            await predicates.like(mmsTable.sessionField.telephone, "%" + telephone + "%");
85        }
86        if (numberType != null) {
87            await predicates.equalTo(mmsTable.sessionField.smsType, numberType);
88        }
89        let resultSet = await globalThis.MmsDatabaseHelper.query(predicates);
90        let sessionList = [];
91        if (resultSet != undefined) {
92            while (resultSet.goToNextRow()) {
93                let item = await this.buildResultSet(resultSet);
94                sessionList.push(item);
95            }
96        }
97        return sessionList;
98    }
99
100    async buildResultSet(resultSet) {
101        let result: LooseObject = {};
102        result.id = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.id)));
103        result.time = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.time)));
104        result.hasDraft = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasDraft)));
105        result.smsType = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.smsType)));
106        result.telephone = await resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.telephone));
107        result.content = await resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.content));
108        result.contactsNum = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.contactsNum)));
109        result.unreadCount = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.unreadCount)));
110        result.messageCount = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.messageCount)));
111        result.hasMms = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasMms)));
112        result.sendStatus = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.sendStatus)));
113        result.hasAttachment = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasAttachment)));
114        result.hasLock = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasLock)));
115        result.telephoneFormat = result.telephone;
116        return result;
117    }
118
119    async countSessionList(actionData) {
120        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
121        let numberType = actionData.numberType;
122        if (numberType != null) {
123            await predicates.equalTo(mmsTable.sessionField.smsType, numberType);
124        }
125        let resultSet = await globalThis.MmsDatabaseHelper.query(predicates);
126        let count = resultSet.rowCount;
127        let result = {
128            total: count,
129        }
130        return result;
131    }
132
133    async statisticalData(actionData, callback) {
134        let mmsContext;
135        if (actionData.mmsContext) {
136            mmsContext = actionData.mmsContext;
137        } else {
138            mmsContext = globalThis.mmsContext;
139        }
140        let resultColumns = [
141            "totalListCount",
142            "unreadCount",
143            "unreadTotalOfInfo"
144        ];
145        let condition = new dataSharePredicates.DataSharePredicates();
146        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_UNREAD_COUNT;
147        let dataShareHelper = await dataShare.createDataShareHelper(mmsContext, common.string.URI_MESSAGE_LOG);
148        dataShareHelper.query(managerUri, condition, resultColumns, (err, resultSet) => {
149            let result: LooseObject = {};
150            if (resultSet != undefined) {
151                if (resultSet.goToLastRow()) {
152                    result.totalListCount = resultSet.getString(0);
153                    result.unreadCount = resultSet.getString(1);
154                    result.unreadTotalOfInfo = resultSet.getString(2);
155                }
156            }
157            callback(this.encapsulateReturnResult(common.int.SUCCESS, result));
158        });
159    }
160
161    async markAllAsRead(threadIds, valueBucket) {
162        HiLog.i(TAG, "markAllAsRead, threadIds:" + JSON.stringify(threadIds));
163        this.updateById(threadIds, valueBucket);
164    }
165
166    async markAllToRead(smsType) {
167        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
168        predicates.equalTo(mmsTable.sessionField.smsType, smsType);
169        predicates.greaterThan(mmsTable.sessionField.unreadCount, 0);
170        let valueBucket = {
171            "unread_count": 0
172        };
173        globalThis.MmsDatabaseHelper.update(predicates, valueBucket);
174    }
175
176    async updateById(threadIds, valueBucket) {
177        HiLog.i(TAG, ", updateById, threadIds: " + JSON.stringify(threadIds))
178        if (threadIds.length != 0) {
179            for (let threadId of threadIds) {
180                let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
181                await predicates.equalTo(mmsTable.sessionField.id, threadId);
182                globalThis.MmsDatabaseHelper.update(predicates, valueBucket);
183                HiLog.d(TAG, ", update session TAB end")
184            }
185        }
186    }
187
188    async deleteMessageById(threadIds) {
189        HiLog.i(TAG, "deleteMessageById, threadIds: " + JSON.stringify(threadIds));
190        if (threadIds.length != 0) {
191            for (let threadId of threadIds) {
192                let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
193                await predicates.equalTo(mmsTable.sessionField.id, threadId);
194                globalThis.MmsDatabaseHelper.deleteItem(predicates);
195                HiLog.d(TAG, ", delete session TAB end")
196            }
197        }
198    }
199
200    insertSession(valueBucket, callback) {
201        let insertPromise = globalThis.MmsDatabaseHelper.insert(MmsDatabaseHelper.TABLE.SESSION, valueBucket);
202        let result: LooseObject = {};
203        insertPromise.then((ret) => {
204            result.code = common.int.SUCCESS;
205            result.rowId = ret;
206            callback(result);
207        }).catch((err) => {
208            HiLog.e(TAG, "insertSession, error: " + JSON.stringify(err.message));
209            result.code = common.int.FAILURE;
210            callback(result);
211        });
212    }
213}