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