1048147e0Sopenharmony_ci/** 2048147e0Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3048147e0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4048147e0Sopenharmony_ci * you may not use this file except in compliance with the License. 5048147e0Sopenharmony_ci * You may obtain a copy of the License at 6048147e0Sopenharmony_ci * 7048147e0Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8048147e0Sopenharmony_ci * 9048147e0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10048147e0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11048147e0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12048147e0Sopenharmony_ci * See the License for the specific language governing permissions and 13048147e0Sopenharmony_ci * limitations under the License. 14048147e0Sopenharmony_ci */ 15048147e0Sopenharmony_ci 16048147e0Sopenharmony_ciimport HiLog from '../utils/HiLog'; 17048147e0Sopenharmony_ciimport common from '../data/commonData'; 18048147e0Sopenharmony_ciimport telephoneUtil from '../utils/TelephoneUtil'; 19048147e0Sopenharmony_ciimport LooseObject from '../data/LooseObject'; 20048147e0Sopenharmony_ciimport ContactsModel from '../model/ContactsModel'; 21048147e0Sopenharmony_ci 22048147e0Sopenharmony_ciconst TAG = 'ContactsService'; 23048147e0Sopenharmony_ci 24048147e0Sopenharmony_ciexport default class ContactsService { 25048147e0Sopenharmony_ci private static instance: ContactsService; 26048147e0Sopenharmony_ci private contactsModel = new ContactsModel(); 27048147e0Sopenharmony_ci 28048147e0Sopenharmony_ci private constructor() { 29048147e0Sopenharmony_ci } 30048147e0Sopenharmony_ci 31048147e0Sopenharmony_ci public static getInstance(): ContactsService { 32048147e0Sopenharmony_ci if (ContactsService.instance == null) { 33048147e0Sopenharmony_ci ContactsService.instance = new ContactsService(); 34048147e0Sopenharmony_ci } 35048147e0Sopenharmony_ci return ContactsService.instance; 36048147e0Sopenharmony_ci } 37048147e0Sopenharmony_ci 38048147e0Sopenharmony_ci public async queryContactDataByCondition(actionData, callback, context): Promise<void> { 39048147e0Sopenharmony_ci let mmsContext = context ? context : globalThis.mmsContext; 40048147e0Sopenharmony_ci if (globalThis.DataWorker != null) { 41048147e0Sopenharmony_ci globalThis.DataWorker.sendRequest(common.RUN_IN_WORKER_METHOD.queryContactDataByCondition, { 42048147e0Sopenharmony_ci actionData: actionData, 43048147e0Sopenharmony_ci context: mmsContext 44048147e0Sopenharmony_ci }, res => { 45048147e0Sopenharmony_ci callback(res); 46048147e0Sopenharmony_ci }); 47048147e0Sopenharmony_ci } else { 48048147e0Sopenharmony_ci this.contactsModel.queryContactDataByCondition(actionData, callback, mmsContext); 49048147e0Sopenharmony_ci } 50048147e0Sopenharmony_ci 51048147e0Sopenharmony_ci } 52048147e0Sopenharmony_ci 53048147e0Sopenharmony_ci public async queryContactDataSizeByCondition(actionData, callback, context): Promise<void> { 54048147e0Sopenharmony_ci let mmsContext = context ? context : globalThis.mmsContext; 55048147e0Sopenharmony_ci if (globalThis.DataWorker != null) { 56048147e0Sopenharmony_ci globalThis.DataWorker.sendRequest(common.RUN_IN_WORKER_METHOD.queryContactDataSizeByCondition, { 57048147e0Sopenharmony_ci actionData: actionData, 58048147e0Sopenharmony_ci context: mmsContext 59048147e0Sopenharmony_ci }, res => { 60048147e0Sopenharmony_ci callback(res); 61048147e0Sopenharmony_ci }); 62048147e0Sopenharmony_ci } else { 63048147e0Sopenharmony_ci this.contactsModel.queryContactDataSizeByCondition(actionData, callback, mmsContext); 64048147e0Sopenharmony_ci } 65048147e0Sopenharmony_ci } 66048147e0Sopenharmony_ci 67048147e0Sopenharmony_ci public async queryContactByCondition(actionData, callback, context): Promise<void> { 68048147e0Sopenharmony_ci let mmsContext = context ? context : globalThis.mmsContext; 69048147e0Sopenharmony_ci if (globalThis.DataWorker != null) { 70048147e0Sopenharmony_ci globalThis.DataWorker.sendRequest(common.RUN_IN_WORKER_METHOD.queryContactByCondition, { 71048147e0Sopenharmony_ci actionData: actionData, 72048147e0Sopenharmony_ci context: mmsContext 73048147e0Sopenharmony_ci }, res => { 74048147e0Sopenharmony_ci callback(res); 75048147e0Sopenharmony_ci }); 76048147e0Sopenharmony_ci } else { 77048147e0Sopenharmony_ci this.contactsModel.queryContactByCondition(actionData, callback, mmsContext); 78048147e0Sopenharmony_ci } 79048147e0Sopenharmony_ci } 80048147e0Sopenharmony_ci 81048147e0Sopenharmony_ci public async queryContactSizeByCondition(actionData, callback, context): Promise<void> { 82048147e0Sopenharmony_ci let mmsContext = context ? context : globalThis.mmsContext; 83048147e0Sopenharmony_ci if (globalThis.DataWorker != null) { 84048147e0Sopenharmony_ci globalThis.DataWorker.sendRequest(common.RUN_IN_WORKER_METHOD.queryContactSizeByCondition, { 85048147e0Sopenharmony_ci actionData: actionData, 86048147e0Sopenharmony_ci context: mmsContext 87048147e0Sopenharmony_ci }, res => { 88048147e0Sopenharmony_ci callback(res); 89048147e0Sopenharmony_ci }); 90048147e0Sopenharmony_ci } else { 91048147e0Sopenharmony_ci this.contactsModel.queryContactSizeByCondition(actionData, callback, mmsContext); 92048147e0Sopenharmony_ci } 93048147e0Sopenharmony_ci } 94048147e0Sopenharmony_ci 95048147e0Sopenharmony_ci public async queryRawContactSizeByCondition(actionData, callback, context): Promise<void> { 96048147e0Sopenharmony_ci let mmsContext = context ? context : globalThis.mmsContext; 97048147e0Sopenharmony_ci if (globalThis.DataWorker != null) { 98048147e0Sopenharmony_ci globalThis.DataWorker.sendRequest(common.RUN_IN_WORKER_METHOD.queryRawContactSizeByCondition, { 99048147e0Sopenharmony_ci actionData: actionData, 100048147e0Sopenharmony_ci context: mmsContext 101048147e0Sopenharmony_ci }, res => { 102048147e0Sopenharmony_ci callback(res); 103048147e0Sopenharmony_ci }); 104048147e0Sopenharmony_ci } else { 105048147e0Sopenharmony_ci this.contactsModel.queryRawContactSizeByCondition(actionData, callback, mmsContext); 106048147e0Sopenharmony_ci } 107048147e0Sopenharmony_ci } 108048147e0Sopenharmony_ci 109048147e0Sopenharmony_ci public async queryContactViewByCondition(actionData, callback, context): Promise<void> { 110048147e0Sopenharmony_ci let mmsContext = context ? context : globalThis.mmsContext; 111048147e0Sopenharmony_ci if (globalThis.DataWorker != null) { 112048147e0Sopenharmony_ci globalThis.DataWorker.sendRequest(common.RUN_IN_WORKER_METHOD.queryContactViewByCondition, { 113048147e0Sopenharmony_ci actionData: actionData, 114048147e0Sopenharmony_ci context: mmsContext 115048147e0Sopenharmony_ci }, res => { 116048147e0Sopenharmony_ci callback(res); 117048147e0Sopenharmony_ci }); 118048147e0Sopenharmony_ci } else { 119048147e0Sopenharmony_ci this.contactsModel.queryContactViewByCondition(actionData, callback, mmsContext); 120048147e0Sopenharmony_ci } 121048147e0Sopenharmony_ci } 122048147e0Sopenharmony_ci 123048147e0Sopenharmony_ci public queryContact(actionData, callback, context): void { 124048147e0Sopenharmony_ci this.queryContactByCondition(actionData, res => { 125048147e0Sopenharmony_ci if (res.code == common.int.FAILURE) { 126048147e0Sopenharmony_ci callback(res); 127048147e0Sopenharmony_ci return; 128048147e0Sopenharmony_ci } 129048147e0Sopenharmony_ci actionData.contactIds = res.abilityResult[0]; 130048147e0Sopenharmony_ci this.queryContactDataByCondition(actionData, res => { 131048147e0Sopenharmony_ci if (res.code == common.int.FAILURE) { 132048147e0Sopenharmony_ci callback(res); 133048147e0Sopenharmony_ci return; 134048147e0Sopenharmony_ci } 135048147e0Sopenharmony_ci let contactList: Array<LooseObject> = this.buildContactList(res.abilityResult); 136048147e0Sopenharmony_ci let result: LooseObject = {}; 137048147e0Sopenharmony_ci result.code = common.int.SUCCESS; 138048147e0Sopenharmony_ci result.response = contactList; 139048147e0Sopenharmony_ci callback(result); 140048147e0Sopenharmony_ci }, context); 141048147e0Sopenharmony_ci }, context); 142048147e0Sopenharmony_ci } 143048147e0Sopenharmony_ci 144048147e0Sopenharmony_ci public dealContactParams(contactObjects): LooseObject { 145048147e0Sopenharmony_ci let contactParams: LooseObject = {}; 146048147e0Sopenharmony_ci if (contactObjects && contactObjects != common.string.EMPTY_STR) { 147048147e0Sopenharmony_ci let params: Array<LooseObject> = []; 148048147e0Sopenharmony_ci try { 149048147e0Sopenharmony_ci params = JSON.parse(contactObjects); 150048147e0Sopenharmony_ci } catch (Error) { 151048147e0Sopenharmony_ci HiLog.i(TAG, `JSON.parse error ${Error}`); 152048147e0Sopenharmony_ci return contactParams; 153048147e0Sopenharmony_ci } 154048147e0Sopenharmony_ci let contactsNumber: string = common.string.EMPTY_STR; 155048147e0Sopenharmony_ci let contactsName: string = common.string.EMPTY_STR; 156048147e0Sopenharmony_ci let contactsNumberFormat: string = common.string.EMPTY_STR; 157048147e0Sopenharmony_ci let length: number = params.length; 158048147e0Sopenharmony_ci for (let item of params) { 159048147e0Sopenharmony_ci contactsNumber = contactsNumber + item.telephone + common.string.COMMA; 160048147e0Sopenharmony_ci contactsNumberFormat = contactsNumberFormat + item.telephone + common.string.COMMA; 161048147e0Sopenharmony_ci if (item.contactsName) { 162048147e0Sopenharmony_ci contactsName += (item.contactsName + common.string.COMMA); 163048147e0Sopenharmony_ci } else if (length > 1) { 164048147e0Sopenharmony_ci contactsName += (item.telephone + common.string.COMMA); 165048147e0Sopenharmony_ci } 166048147e0Sopenharmony_ci } 167048147e0Sopenharmony_ci let telephone: string = contactsNumber.substring(0, contactsNumber.length - 1); 168048147e0Sopenharmony_ci contactsNumber = telephoneUtil.dealTelephoneSort(telephone); 169048147e0Sopenharmony_ci contactParams.strContactsNumber = contactsNumber; 170048147e0Sopenharmony_ci contactParams.strContactsNumberFormat = contactsNumber; 171048147e0Sopenharmony_ci contactParams.strContactsName = contactsName.substring(0, contactsName.length - 1); 172048147e0Sopenharmony_ci contactParams.contactsNum = length; 173048147e0Sopenharmony_ci } 174048147e0Sopenharmony_ci return contactParams; 175048147e0Sopenharmony_ci } 176048147e0Sopenharmony_ci 177048147e0Sopenharmony_ci public judgeContactExist(actionData, callback, context): void { 178048147e0Sopenharmony_ci this.queryContactDataSizeByCondition(actionData, res => { 179048147e0Sopenharmony_ci let isContactExist: boolean = false; 180048147e0Sopenharmony_ci if (res.code == common.int.FAILURE) { 181048147e0Sopenharmony_ci HiLog.e(TAG, 'judgeProfileExit fail!'); 182048147e0Sopenharmony_ci callback(isContactExist); 183048147e0Sopenharmony_ci } else { 184048147e0Sopenharmony_ci if (res.abilityResult > 0) { 185048147e0Sopenharmony_ci isContactExist = true; 186048147e0Sopenharmony_ci } 187048147e0Sopenharmony_ci callback(isContactExist); 188048147e0Sopenharmony_ci } 189048147e0Sopenharmony_ci }, context); 190048147e0Sopenharmony_ci } 191048147e0Sopenharmony_ci 192048147e0Sopenharmony_ci private buildContactList(contacts): Array<LooseObject> { 193048147e0Sopenharmony_ci let contactList: Array<LooseObject> = []; 194048147e0Sopenharmony_ci for (let contact of contacts) { 195048147e0Sopenharmony_ci let item: LooseObject = {}; 196048147e0Sopenharmony_ci item.contactName = contact.displayName; 197048147e0Sopenharmony_ci item.headImage = 'icon/user_avatar_full_fill.svg'; 198048147e0Sopenharmony_ci item.telephone = contact.detailInfo; 199048147e0Sopenharmony_ci item.telephoneFormat = contact.detailInfo; 200048147e0Sopenharmony_ci item.select = false; 201048147e0Sopenharmony_ci contactList.push(item); 202048147e0Sopenharmony_ci } 203048147e0Sopenharmony_ci return contactList; 204048147e0Sopenharmony_ci } 205048147e0Sopenharmony_ci} 206