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}