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