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 '../../../../../common'
17import { WorkerType } from './WorkFactory'
18import WorkerWrapper from './base/WorkerWrapper'
19import WorkerTask from './base/WorkerTask'
20import { ThreadWorkerGlobalScope } from '@ohos.worker';
21import CallLog from '../model/calllog/CalllogModel';
22import { CallLogRepository } from '../../../../../feature/call';
23import { ContactRepository } from '../../../../../feature/contact';
24import ContactAbilityModel from '../model/ContactAbilityModel';
25
26const TAG = 'DataWorkerTask'
27
28
29export enum DataWorkerConstant {
30  'deleteCallLogsById',
31  'getAllCalls',
32  'findByNumberIn',
33  'deleteContactById',
34  'addContact',
35  'getAllContact',
36  'getAllContactWithPhoneNumbers',
37  'getContactById',
38  'updateContact',
39  'getIdByTelephone',
40  'updateFavorite',
41  'getAllFavorite',
42  'getAllUsually',
43  'getDisplayNamesFindUsually',
44  'moveSortFavorite',
45  'getSearchContact',
46  'getCallHistorySearch',
47  'getQueryT9PhoneNumbers'
48}
49
50export class DataWorkerTask extends WorkerTask {
51  private static sInstance: DataWorkerTask = undefined;
52
53  private constructor(workerPort: ThreadWorkerGlobalScope) {
54    super(workerPort)
55  }
56
57  static getInstance(workerPort: ThreadWorkerGlobalScope) {
58    HiLog.i(TAG, 'getInstance in.')
59    if (DataWorkerTask.sInstance == undefined || DataWorkerTask.sInstance.workerPort == undefined) {
60      DataWorkerTask.sInstance = new DataWorkerTask(workerPort);
61    }
62    return DataWorkerTask.sInstance;
63  }
64
65  runInWorker(request: string, callBack: (v?: any) => void, param?: any) {
66    HiLog.i(TAG, `runInWorker ${request}`)
67    switch (request) {
68      case DataWorkerConstant[DataWorkerConstant.getAllCalls]:
69        CallLog.getAllCalls(JSON.parse(param.favoriteForm), param.actionData, param.mergeRule, (data) => {
70          HiLog.i(TAG, `getAllCalls result: ${JSON.stringify(data).length}`)
71          callBack(data);
72        }, param.context);
73        break;
74      case DataWorkerConstant[DataWorkerConstant.findByNumberIn]:
75        CallLogRepository.getInstance().init(param.context);
76        CallLogRepository.getInstance().findByNumberIn(param.numbers, (resultList) => {
77          callBack(resultList);
78        });
79        break
80      case DataWorkerConstant[DataWorkerConstant.deleteContactById]:
81        ContactRepository.getInstance().init(param.context);
82        ContactRepository.getInstance().deleteById(param.contactId, (result) => {
83          HiLog.i(TAG, `deleteContactById result ${result}`)
84          callBack(result);
85        });
86        break;
87      case DataWorkerConstant[DataWorkerConstant.deleteCallLogsById]:
88        CallLogRepository.getInstance().init(param.context);
89        CallLogRepository.getInstance().deleteByIdIn(param.ids, (result) => {
90          callBack(result);
91        })
92        break;
93      case DataWorkerConstant[DataWorkerConstant.addContact]:
94        const contactInfoAfter = JSON.parse(param.contactInfoAfter)
95        ContactAbilityModel.addContact(contactInfoAfter, (arg) => {
96          callBack(arg);
97        }, param.context)
98        break
99      case DataWorkerConstant[DataWorkerConstant.getAllContact]:
100        ContactAbilityModel.getAllContact(param.actionData, (result) => {
101          callBack(result);
102        }, param.context)
103        break
104      case DataWorkerConstant[DataWorkerConstant.getAllContactWithPhoneNumbers]:
105        ContactAbilityModel.getAllContactWithPhoneNumbers((resultList) => {
106          callBack(resultList);
107        }, JSON.parse(param.favoriteForm), param.context)
108        break
109      case DataWorkerConstant[DataWorkerConstant.getContactById]:
110        ContactAbilityModel.getContactById(param.contactId, result => {
111          callBack(result);
112        }, param.context)
113        break
114      case DataWorkerConstant[DataWorkerConstant.getIdByTelephone]:
115        ContactAbilityModel.getIdByTelephone(param.phoneNumber, (contactId) => {
116          callBack(contactId);
117        }, param.context)
118        break
119      case DataWorkerConstant[DataWorkerConstant.updateContact]:
120        ContactAbilityModel.updateContact(null, JSON.parse(param.contactInfoAfter), (arg) => {
121          callBack(arg);
122        }, param.context)
123        break
124      case DataWorkerConstant[DataWorkerConstant.updateFavorite]:
125        ContactAbilityModel.updateFavorite(null, JSON.parse(param.favoriteForm), (arg) => {
126          callBack(arg);
127        }, param.context)
128        break
129      case DataWorkerConstant[DataWorkerConstant.getAllFavorite]:
130        ContactAbilityModel.getAllFavorite(param.actionData, (result) => {
131          callBack(result);
132        }, param.context)
133        break
134      case DataWorkerConstant[DataWorkerConstant.getAllUsually]:
135        ContactAbilityModel.getAllUsually(param.actionData, (result) => {
136          callBack(result);
137        }, param.context)
138        break
139      case DataWorkerConstant[DataWorkerConstant.getDisplayNamesFindUsually]:
140        ContactAbilityModel.getDisplayNamesFindUsually(param.displayName, param.usuallyPhone, (result) => {
141          callBack(result);
142        }, param.context)
143        break
144      case DataWorkerConstant[DataWorkerConstant.moveSortFavorite]:
145        ContactAbilityModel.moveSortFavorite(null, JSON.parse(param.favoriteForm), (result) => {
146          callBack(result);
147        }, param.context)
148        break
149      case DataWorkerConstant[DataWorkerConstant.getSearchContact]:
150        ContactAbilityModel.getSearchContact(param.actionData, (result) => {
151          callBack(result);
152        }, param.context)
153        break
154      case DataWorkerConstant[DataWorkerConstant.getCallHistorySearch]:
155        CallLog.getCallHistorySearch(param.actionData, param.mergeRule, (data) => {
156          callBack(data);
157        }, param.context);
158        break
159      case DataWorkerConstant[DataWorkerConstant.getQueryT9PhoneNumbers]:
160        ContactAbilityModel.getQueryT9PhoneNumbers((resultList) => {
161          callBack(resultList);
162        }, JSON.parse(param.favoriteForm), param.context)
163        break
164      default:
165        HiLog.w(TAG, `${request} not allow!!!`)
166        break;
167    }
168  }
169}