• 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 HiLog from "../utils/HiLog";
19import mmsTable from "../data/tableData";
20import LooseObject from "../data/LooseObject"
21
22import dataShare from "@ohos.data.dataShare";
23import dataSharePredicates from "@ohos.data.dataSharePredicates";
24
25const TAG = "ContactsModel";
26
27export default class ContactsModel extends BaseModel {
28    async queryContactDataByIds(actionData, callback, context?) {
29        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
30        common.string.URI_ROW_CONTACTS);
31        let resultColumns = [
32            mmsTable.contactDataColumns.detailInfo,
33            mmsTable.contactDataColumns.displayName,
34        ];
35        let condition = new dataSharePredicates.DataSharePredicates();
36        let contactDataUri = common.string.URI_ROW_CONTACTS + common.string.CONTACT_DATA_URI;
37        condition.in(mmsTable.contactDataColumns.contactId, actionData.contractIds);
38        condition.and();
39        condition.equalTo(mmsTable.contactDataColumns.typeId, "5");
40        condition.and();
41        condition.equalTo(mmsTable.contactDataColumns.hasDelete, "0");
42        dataHelper.query(contactDataUri, condition, resultColumns).then(resultSet => {
43            callback(this.dealResultSet(resultSet));
44        }).catch(error => {
45            HiLog.e(TAG, "queryContactDataByIds, error: " + JSON.stringify(error.message));
46        });
47    }
48
49    async queryContactDataByTelephone(actionData, callback, context?) {
50        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
51                                common.string.URI_ROW_CONTACTS);
52        let resultColumns = [
53            mmsTable.contactDataColumns.detailInfo,
54            mmsTable.contactDataColumns.displayName,
55        ];
56        let condition = new dataSharePredicates.DataSharePredicates();
57        let contactDataUri = common.string.URI_ROW_CONTACTS + common.string.CONTACT_DATA_URI;
58        condition.in(mmsTable.contactDataColumns.detailInfo, actionData.telephones);
59        condition.and();
60        condition.equalTo(mmsTable.contactDataColumns.typeId, "5");
61        condition.and();
62        condition.equalTo(mmsTable.contactDataColumns.hasDelete, "0");
63        dataHelper.query(contactDataUri, condition, resultColumns).then(resultSet => {
64            callback(this.dealResultSet(resultSet));
65        }).catch(error => {
66            HiLog.e(TAG, "queryContactDataByTelephone, error: " + JSON.stringify(error.message));
67            callback([]);
68        });
69    }
70
71    dealResultSet(resultSet) {
72        let contracts = [];
73        if (resultSet != undefined) {
74            while (resultSet.goToNextRow()) {
75                let contract: LooseObject = {};
76                contract.detailInfo = resultSet.getString(0);
77                contract.displayName = resultSet.getString(1);
78                contracts.push(contract);
79            }
80        }
81        return contracts;
82    }
83
84    async queryContact(actionData, callback, context?) {
85        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
86        common.string.URI_ROW_CONTACTS);
87        let resultColumns = [
88            mmsTable.contactColumns.id
89        ];
90        let condition = new dataSharePredicates.DataSharePredicates();
91        let rawContactUri = common.string.URI_ROW_CONTACTS + common.string.CONTACT_URI;
92        let offset = (actionData.page - 1) * actionData.limit;
93        condition.limit(actionData.limit, offset).orderByDesc(mmsTable.contactColumns.lastestContactedTime);
94        dataHelper.query(rawContactUri, condition, resultColumns).then(resultSet => {
95            let rawContactIds = [];
96            if (resultSet != undefined) {
97                while (resultSet.goToNextRow()) {
98                    rawContactIds.push(resultSet.getString(0));
99                }
100            }
101            callback(rawContactIds);
102        }).catch(error => {
103            HiLog.e(TAG, "queryContact, error: " + JSON.stringify(error.message));
104        });
105    }
106
107    async countContact(actionData, callback, context?) {
108        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
109        common.string.URI_ROW_CONTACTS);
110        let resultColumns = [
111            mmsTable.contactColumns.id
112        ];
113        let condition = new dataSharePredicates.DataSharePredicates();
114        let rawContactUri = common.string.URI_ROW_CONTACTS + common.string.CONTACT_URI;
115        condition.orderByDesc(mmsTable.contactColumns.lastestContactedTime);
116        dataHelper.query(rawContactUri, condition, resultColumns).then(resultSet => {
117            let count = 0;
118            if (resultSet != undefined) {
119                count = resultSet.rowCount;
120            }
121            callback(count);
122        }).catch(error => {
123            HiLog.e(TAG, "countContact, error: " + JSON.stringify(error.message));
124        });
125    }
126
127    async searchContracts(actionData, callback, context?) {
128        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
129        common.string.URI_ROW_CONTACTS);
130        let resultColumns = [
131            mmsTable.searchContactView.detailInfo,
132            mmsTable.searchContactView.displayName
133        ];
134        let condition = new dataSharePredicates.DataSharePredicates();
135        let searchContactsUri = common.string.URI_ROW_CONTACTS + common.string.CONTACT_SEARCHE;
136        condition.equalTo(mmsTable.searchContactView.contentType, "phone")
137            .beginWrap()
138            .contains(mmsTable.searchContactView.displayName, actionData.telephone)
139            .or()
140            .contains(mmsTable.searchContactView.detailInfo, actionData.telephone)
141            .endWrap();
142        dataHelper.query(searchContactsUri, condition, resultColumns).then(resultSet => {
143            let contracts = this.dealResultSet(resultSet);
144            callback(this.encapsulateReturnResult(common.int.SUCCESS, contracts));
145        }).catch(error => {
146            HiLog.e(TAG, "searchContracts, error: " + JSON.stringify(error.message));
147            callback(this.encapsulateReturnCode(common.int.FAILURE));
148        });
149    }
150
151    /**
152     * Querying business card data
153     *
154     * @param actionData query parameters
155     * @callback callback
156     * @param context
157     */
158    async queryProfile(actionData, callback, context?) {
159        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
160        common.string.URI_ROW_CONTACTS);
161        let resultColumns = [
162            mmsTable.contactDataColumns.id,
163        ];
164        let condition = new dataSharePredicates.DataSharePredicates();
165        let contactDataUri = common.string.URI_ROW_CONTACTS + common.string.PROFILE_DATA_URI;
166        dataHelper.query(contactDataUri, condition, resultColumns).then(resultSet => {
167            let count = 0;
168            if (resultSet != undefined) {
169                count = resultSet.rowCount;
170                HiLog.i(TAG, "queryProfile, goToNextRow: " + count);
171                resultSet.close();
172            }
173            callback(count);
174        }).catch(error => {
175            HiLog.e(TAG, "queryProfile, error: " + JSON.stringify(error.message));
176        });
177    }
178}