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