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 = "DataWorkerWrapper" 27 28export default class DataWorkerWrapper extends WorkerWrapper { 29 private static sInstance: DataWorkerWrapper = undefined; 30 31 private constructor() { 32 super() 33 } 34 35 static getInstance() { 36 HiLog.i(TAG, "getInstance in.") 37 if (DataWorkerWrapper.sInstance == undefined || DataWorkerWrapper.sInstance.mWorker == undefined) { 38 HiLog.i(TAG, "make DataWorkerWrapper.") 39 DataWorkerWrapper.sInstance = new DataWorkerWrapper(); 40 } 41 return DataWorkerWrapper.sInstance; 42 } 43 44 getWorkerType(): WorkerType { 45 return WorkerType.DataWorker; 46 } 47} 48 49export enum DataWorkerConstant { 50 "deleteCallLogsById", 51 "getAllCalls", 52 "findByNumberIn", 53 "deleteContactById", 54 "addContact", 55 "getAllContact", 56 "getAllContactWithPhoneNumbers", 57 "getContactById", 58 "updateContact", 59 "getIdByTelephone", 60} 61 62export class DataWorkerTask extends WorkerTask { 63 private static sInstance: DataWorkerTask = undefined; 64 65 private constructor(workerPort: ThreadWorkerGlobalScope) { 66 super(workerPort) 67 } 68 69 static getInstance(workerPort: ThreadWorkerGlobalScope) { 70 HiLog.i(TAG, "getInstance in.") 71 if (DataWorkerTask.sInstance == undefined || DataWorkerTask.sInstance.workerPort == undefined) { 72 DataWorkerTask.sInstance = new DataWorkerTask(workerPort); 73 } 74 return DataWorkerTask.sInstance; 75 } 76 77 runInWorker(request: string, callBack: (v?: any) => void, param?: any) { 78 HiLog.i(TAG, `runInWorker ${request}`) 79 switch (request) { 80 case DataWorkerConstant[DataWorkerConstant.getAllCalls]: 81 CallLog.getAllCalls(param.actionData, param.mergeRule, (data) => { 82 HiLog.i(TAG, `getAllCalls result: ${JSON.stringify(data).length}`) 83 callBack(data); 84 }, param.context); 85 break; 86 case DataWorkerConstant[DataWorkerConstant.findByNumberIn]: 87 CallLogRepository.getInstance().init(param.context); 88 CallLogRepository.getInstance().findByNumberIn(param.numbers, (resultList) => { 89 callBack(resultList); 90 }); 91 break 92 case DataWorkerConstant[DataWorkerConstant.deleteContactById]: 93 ContactRepository.getInstance().init(param.context); 94 ContactRepository.getInstance().deleteById(param.contactId, (result) => { 95 HiLog.i(TAG, `deleteContactById result ${result}`) 96 callBack(result); 97 }); 98 break; 99 case DataWorkerConstant[DataWorkerConstant.deleteCallLogsById]: 100 CallLogRepository.getInstance().init(param.context); 101 CallLogRepository.getInstance().deleteByIdIn(param.ids, (result) => { 102 callBack(result); 103 }) 104 break; 105 case DataWorkerConstant[DataWorkerConstant.addContact]: 106 const contactInfoAfter = JSON.parse(param.contactInfoAfter) 107 ContactAbilityModel.addContact(contactInfoAfter, (arg) => { 108 callBack(arg); 109 }, param.context) 110 break 111 case DataWorkerConstant[DataWorkerConstant.getAllContact]: 112 ContactAbilityModel.getAllContact(param.actionData, (result) => { 113 callBack(result); 114 }, param.context) 115 break 116 case DataWorkerConstant[DataWorkerConstant.getAllContactWithPhoneNumbers]: 117 ContactAbilityModel.getAllContactWithPhoneNumbers((resultList) => { 118 callBack(resultList); 119 }, param.context) 120 break 121 case DataWorkerConstant[DataWorkerConstant.getContactById]: 122 ContactAbilityModel.getContactById(param.contactId, result => { 123 callBack(result); 124 }, param.context) 125 break 126 case DataWorkerConstant[DataWorkerConstant.getIdByTelephone]: 127 ContactAbilityModel.getIdByTelephone(param.phoneNumber, (contactId) => { 128 callBack(contactId); 129 }, param.context) 130 break 131 case DataWorkerConstant[DataWorkerConstant.updateContact]: 132 ContactAbilityModel.updateContact(null, JSON.parse(param.contactInfoAfter), (arg) => { 133 callBack(arg); 134 }, param.context) 135 break 136 default: 137 HiLog.w(TAG, `${request} not allow!!!`) 138 break; 139 } 140 } 141}