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 HiLog from '../utils/HiLog'; 17import common from '../data/commonData'; 18import telephoneUtil from '../utils/TelephoneUtil'; 19import LooseObject from '../data/LooseObject' 20 21const TAG = 'ContractService'; 22 23export default { 24 25 /** 26 * Querying the contact list 27 * 28 * @param actionData 29 * @callback callback 30 */ 31 queryContact(actionData, callback) { 32 // Obtain rawContractIds and query contacts. 33 globalThis.DataWorker.sendRequest('queryContact', { 34 actionData: actionData, 35 context: globalThis.mmsContext 36 }, rawContractIds => { 37 let result: LooseObject = {}; 38 actionData.contractIds = rawContractIds; 39 globalThis.DataWorker.sendRequest('queryContactDataByIds', { 40 actionData: actionData, 41 context: globalThis.mmsContext 42 }, contracts => { 43 result.code = common.int.SUCCESS; 44 this.convertContracts(contracts, messageList => { 45 result.response = messageList; 46 callback(result); 47 }); 48 }); 49 }); 50 }, 51 52 /** 53 * Counting the number of rows of contacts 54 * 55 * @param actionData 56 * @callback callback 57 */ 58 countContact(actionData, callback) { 59 // Obtain rawContractIds and query contacts. 60 globalThis.DataWorker.sendRequest('countContact', { 61 actionData: actionData, 62 context: globalThis.mmsContext 63 }, count => { 64 let result: LooseObject = {}; 65 result.code = common.int.SUCCESS; 66 result.response = count; 67 callback(result); 68 }); 69 }, 70 71 /** 72 * Convert contact parameters 73 * 74 * @param contracts 75 * @callback callback 76 */ 77 async convertContracts(contracts, callback) { 78 let messageList = []; 79 for (let contract of contracts) { 80 let item: LooseObject = {}; 81 item.contactName = contract.displayName; 82 item.headImage = 'icon/user_avatar_full_fill.svg'; 83 item.telephone = contract.detailInfo; 84 item.telephoneFormat = contract.detailInfo; 85 item.select = false; 86 messageList.push(item); 87 } 88 callback(messageList); 89 }, 90 91 /** 92 * Process contact parameters 93 * 94 * @param contactObjects 95 */ 96 dealContractParams(contactObjects): LooseObject { 97 let contractParams: LooseObject = {}; 98 if (contactObjects && contactObjects != common.string.EMPTY_STR) { 99 let params: Array<LooseObject> = []; 100 try { 101 params = JSON.parse(contactObjects); 102 } catch (Error) { 103 HiLog.i(TAG, `JSON.parse error ${Error}`); 104 return contractParams; 105 } 106 let contactsNumber: string = common.string.EMPTY_STR; 107 let contactsName: string = common.string.EMPTY_STR; 108 let contactsNumberFormat: string = common.string.EMPTY_STR; 109 let length: number = params.length; 110 for (let item of params) { 111 contactsNumber = contactsNumber + item.telephone + common.string.COMMA; 112 contactsNumberFormat = contactsNumberFormat + item.telephone + common.string.COMMA; 113 if (item.contactsName) { 114 contactsName += (item.contactsName + common.string.COMMA); 115 } else if (length > 1) { 116 contactsName += (item.telephone + common.string.COMMA); 117 } 118 } 119 let telephone: string = contactsNumber.substring(0, contactsNumber.length - 1); 120 contactsNumber = telephoneUtil.dealTelephoneSort(telephone); 121 contractParams.strContactsNumber = contactsNumber; 122 contractParams.strContactsNumberFormat = contactsNumber; 123 contractParams.strContactsName = contactsName.substring(0, contactsName.length - 1); 124 contractParams.contactsNum = length; 125 } 126 return contractParams; 127 }, 128 129 /** 130 * Query a contact by mobile number. 131 * 132 * @param actionData 133 * @callback callback 134 */ 135 queryContactDataByTelephone(actionData, callback) { 136 globalThis.DataWorker.sendRequest('queryContactDataByTelephone', { 137 actionData: actionData, 138 context: globalThis.mmsContext 139 }, contracts => { 140 callback(contracts); 141 }); 142 }, 143 144 /** 145 * Fuzzy search for contacts 146 * 147 * @param actionData 148 * @callback callback 149 */ 150 searchContracts(actionData, callback) { 151 let result: LooseObject = {}; 152 globalThis.DataWorker.sendRequest('searchContracts', { 153 actionData: actionData, 154 context: globalThis.mmsContext 155 }, (res) =>{ 156 result.code = res.code 157 if (res.code == common.int.SUCCESS) { 158 result.response = this.dealSearchContracts(res.abilityResult); 159 callback(result); 160 } 161 }); 162 }, 163 164 dealSearchContracts(contracts) { 165 let searchContracts = [] 166 for (let item of contracts) { 167 let searchContract: LooseObject = {}; 168 searchContract.headImage = 'icon/user_avatar_full_fill.svg'; 169 searchContract.contactName = item.displayName; 170 searchContract.telephone = item.detailInfo; 171 searchContract.telephoneFormat = item.detailInfo; 172 searchContracts.push(searchContract); 173 } 174 return searchContracts; 175 }, 176 177 /** 178 * Check whether a business card exists. 179 * 180 * @param actionData 181 * @callback callback 182 */ 183 judgeIsExitProfile(actionData, callback) { 184 globalThis.DataWorker.sendRequest('queryProfile', { 185 actionData: actionData, 186 context: globalThis.mmsContext 187 }, res => { 188 let result = false; 189 if (res > 0) { 190 result = true; 191 } 192 callback(result); 193 }); 194 } 195}