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}