1c36cf2e9Sopenharmony_ci/* 2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License. 5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at 6c36cf2e9Sopenharmony_ci * 7c36cf2e9Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c36cf2e9Sopenharmony_ci * 9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and 13c36cf2e9Sopenharmony_ci * limitations under the License. 14c36cf2e9Sopenharmony_ci */ 15c36cf2e9Sopenharmony_ci 16c36cf2e9Sopenharmony_ciimport { Log } from '@ohos/common'; 17c36cf2e9Sopenharmony_ciimport { Constants, AppCommonEvent, AppStorageKeyName } from '@ohos/common'; 18c36cf2e9Sopenharmony_ciimport AppStorageHelper from '../Common/Adapter/AppStorageHelper'; 19c36cf2e9Sopenharmony_ciimport { PrinterCapability, PrinterInfo } from '@ohos/common'; 20c36cf2e9Sopenharmony_ciimport emitter from '@ohos.events.emitter'; 21c36cf2e9Sopenharmony_ciimport { StringUtil } from '@ohos/common'; 22c36cf2e9Sopenharmony_ciimport Util from '../Common/Utils/Util'; 23c36cf2e9Sopenharmony_ci 24c36cf2e9Sopenharmony_ciconst TAG = '[DeviceDiscModel]:'; 25c36cf2e9Sopenharmony_ci 26c36cf2e9Sopenharmony_ci/** 27c36cf2e9Sopenharmony_ci * PrinterDiscModel 28c36cf2e9Sopenharmony_ci */ 29c36cf2e9Sopenharmony_ci 30c36cf2e9Sopenharmony_ci/** 31c36cf2e9Sopenharmony_ci * Printer discovery model 32c36cf2e9Sopenharmony_ci */ 33c36cf2e9Sopenharmony_ciexport class PrinterDiscModel { 34c36cf2e9Sopenharmony_ci public mPrinters: Array<PrinterInfo> = new Array<PrinterInfo>(); 35c36cf2e9Sopenharmony_ci 36c36cf2e9Sopenharmony_ci /** 37c36cf2e9Sopenharmony_ci * reset 38c36cf2e9Sopenharmony_ci */ 39c36cf2e9Sopenharmony_ci public reset(): void { 40c36cf2e9Sopenharmony_ci this.mPrinters = []; 41c36cf2e9Sopenharmony_ci AppStorageHelper.setValue<Array<PrinterInfo>>(this.mPrinters, AppStorageKeyName.PRINTER_QUEUE_NAME); 42c36cf2e9Sopenharmony_ci } 43c36cf2e9Sopenharmony_ci 44c36cf2e9Sopenharmony_ci /** 45c36cf2e9Sopenharmony_ci * remove device 46c36cf2e9Sopenharmony_ci * 47c36cf2e9Sopenharmony_ci * @param deviceId device id 48c36cf2e9Sopenharmony_ci */ 49c36cf2e9Sopenharmony_ci public removePrinter(printerId: string): void { 50c36cf2e9Sopenharmony_ci this.mPrinters = this.mPrinters.filter((printer) => printer.printerId !== printerId); 51c36cf2e9Sopenharmony_ci Log.info(TAG, 'remove printer, printerId = ' + StringUtil.splitMac(printerId) + ', printer num = ' + JSON.stringify(this.mPrinters.length)); 52c36cf2e9Sopenharmony_ci AppStorageHelper.setValue<Array<PrinterInfo>>(this.mPrinters, AppStorageKeyName.PRINTER_QUEUE_NAME); 53c36cf2e9Sopenharmony_ci } 54c36cf2e9Sopenharmony_ci 55c36cf2e9Sopenharmony_ci public findPrinter(printerId: string): boolean { 56c36cf2e9Sopenharmony_ci Log.info(TAG, 'find printer'); 57c36cf2e9Sopenharmony_ci let printer = this.mPrinters.find((printer)=> printer.printerId === printerId); 58c36cf2e9Sopenharmony_ci Log.debug(TAG, 'find printer, printerId = ' + StringUtil.splitMac(printerId) + ', printer = ' + JSON.stringify(printer)); 59c36cf2e9Sopenharmony_ci if (printer !== undefined && printer !== null) { 60c36cf2e9Sopenharmony_ci return true; 61c36cf2e9Sopenharmony_ci } else { 62c36cf2e9Sopenharmony_ci return false; 63c36cf2e9Sopenharmony_ci } 64c36cf2e9Sopenharmony_ci } 65c36cf2e9Sopenharmony_ci 66c36cf2e9Sopenharmony_ci /** 67c36cf2e9Sopenharmony_ci * add device 68c36cf2e9Sopenharmony_ci * 69c36cf2e9Sopenharmony_ci * @param device Device 70c36cf2e9Sopenharmony_ci * @return true for added 71c36cf2e9Sopenharmony_ci */ 72c36cf2e9Sopenharmony_ci public addPrinter(printer: PrinterInfo): boolean { 73c36cf2e9Sopenharmony_ci for (let index = 0; index < this.mPrinters.length; index++) { 74c36cf2e9Sopenharmony_ci if (this.mPrinters[index].printerId === printer.printerId) { 75c36cf2e9Sopenharmony_ci Log.info(TAG, 'printer is already added, printer = ' + StringUtil.encodeCommonString(printer.printerName)); 76c36cf2e9Sopenharmony_ci return false; 77c36cf2e9Sopenharmony_ci } 78c36cf2e9Sopenharmony_ci } 79c36cf2e9Sopenharmony_ci if (Util.isMdnsPrinter(<string> printer.printerId)) { //eprint打印机置顶 80c36cf2e9Sopenharmony_ci this.mPrinters.unshift(printer); 81c36cf2e9Sopenharmony_ci } else { 82c36cf2e9Sopenharmony_ci this.mPrinters.push(printer); 83c36cf2e9Sopenharmony_ci } 84c36cf2e9Sopenharmony_ci let printerJSON = JSON.stringify(printer); 85c36cf2e9Sopenharmony_ci let innerEvent = { 86c36cf2e9Sopenharmony_ci eventId: AppCommonEvent.ADD_PRINTER_EVENT, 87c36cf2e9Sopenharmony_ci priority: emitter.EventPriority.HIGH 88c36cf2e9Sopenharmony_ci }; 89c36cf2e9Sopenharmony_ci let eventData = { 90c36cf2e9Sopenharmony_ci data: { 91c36cf2e9Sopenharmony_ci 'printer': printerJSON 92c36cf2e9Sopenharmony_ci } 93c36cf2e9Sopenharmony_ci }; 94c36cf2e9Sopenharmony_ci emitter.emit(innerEvent, eventData); 95c36cf2e9Sopenharmony_ci Log.info(TAG, 'add printer, printer :' + StringUtil.encodeCommonString(printer.printerName) + ', printer num = ' + JSON.stringify(this.mPrinters.length)); 96c36cf2e9Sopenharmony_ci AppStorageHelper.setValue<Array<PrinterInfo>>(this.mPrinters, AppStorageKeyName.PRINTER_QUEUE_NAME); 97c36cf2e9Sopenharmony_ci return true; 98c36cf2e9Sopenharmony_ci } 99c36cf2e9Sopenharmony_ci 100c36cf2e9Sopenharmony_ci /** 101c36cf2e9Sopenharmony_ci * printer state change 102c36cf2e9Sopenharmony_ci * 103c36cf2e9Sopenharmony_ci * @param printerId printer id 104c36cf2e9Sopenharmony_ci * @param state printer state 105c36cf2e9Sopenharmony_ci * @return true for change 106c36cf2e9Sopenharmony_ci */ 107c36cf2e9Sopenharmony_ci public printerStateChange(printerId: string, state: number): boolean { 108c36cf2e9Sopenharmony_ci Log.error(TAG, 'PrinterStateChange printerId: ' + StringUtil.splitMac(printerId) + ' state : ' + JSON.stringify(state)); 109c36cf2e9Sopenharmony_ci for (let index = 0; index < this.mPrinters.length; index++) { 110c36cf2e9Sopenharmony_ci if (this.mPrinters[index].printerId === printerId) { 111c36cf2e9Sopenharmony_ci Log.info(TAG, 'printer: ' + StringUtil.splitMac(printerId) + ' state : ' + JSON.stringify(this.mPrinters[index].printerState) + ' change to :' + JSON.stringify(state)); 112c36cf2e9Sopenharmony_ci this.mPrinters[index].printerState = state; 113c36cf2e9Sopenharmony_ci AppStorageHelper.setValue<Array<PrinterInfo>>(this.mPrinters, AppStorageKeyName.PRINTER_QUEUE_NAME); 114c36cf2e9Sopenharmony_ci 115c36cf2e9Sopenharmony_ci let innerEvent = { 116c36cf2e9Sopenharmony_ci eventId: AppCommonEvent.PRINTER_STATE_CHANGE_EVENT, 117c36cf2e9Sopenharmony_ci priority: emitter.EventPriority.HIGH 118c36cf2e9Sopenharmony_ci }; 119c36cf2e9Sopenharmony_ci emitter.emit(innerEvent); 120c36cf2e9Sopenharmony_ci } 121c36cf2e9Sopenharmony_ci } 122c36cf2e9Sopenharmony_ci return true; 123c36cf2e9Sopenharmony_ci } 124c36cf2e9Sopenharmony_ci 125c36cf2e9Sopenharmony_ci /** 126c36cf2e9Sopenharmony_ci * printer capability update 127c36cf2e9Sopenharmony_ci * 128c36cf2e9Sopenharmony_ci * @param printerId printer id 129c36cf2e9Sopenharmony_ci * @param capability printer capability 130c36cf2e9Sopenharmony_ci * @param options printer capability 131c36cf2e9Sopenharmony_ci * @param description printer descriptions 132c36cf2e9Sopenharmony_ci * @return true for update 133c36cf2e9Sopenharmony_ci */ 134c36cf2e9Sopenharmony_ci public printerUpdateCapability(printerId: string, capability: PrinterCapability, options: string, description: string): boolean { 135c36cf2e9Sopenharmony_ci Log.info(TAG, 'PrinterUpdateCapability printerId: ' + StringUtil.splitMac(printerId) + ' capability : ' + JSON.stringify(capability)); 136c36cf2e9Sopenharmony_ci for (let index = 0; index < this.mPrinters.length; index++) { 137c36cf2e9Sopenharmony_ci if (this.mPrinters[index].printerId === printerId) { 138c36cf2e9Sopenharmony_ci this.mPrinters[index].capability = capability; 139c36cf2e9Sopenharmony_ci this.mPrinters[index].options = options; 140c36cf2e9Sopenharmony_ci this.mPrinters[index].description = description; 141c36cf2e9Sopenharmony_ci AppStorageHelper.setValue<Array<PrinterInfo>>(this.mPrinters, AppStorageKeyName.PRINTER_QUEUE_NAME); 142c36cf2e9Sopenharmony_ci let innerEvent = { 143c36cf2e9Sopenharmony_ci eventId: AppCommonEvent.PRINTER_UPDATE_CAPABILITY_EVENT, 144c36cf2e9Sopenharmony_ci priority: emitter.EventPriority.HIGH 145c36cf2e9Sopenharmony_ci }; 146c36cf2e9Sopenharmony_ci emitter.emit(innerEvent); 147c36cf2e9Sopenharmony_ci } 148c36cf2e9Sopenharmony_ci } 149c36cf2e9Sopenharmony_ci return true; 150c36cf2e9Sopenharmony_ci } 151c36cf2e9Sopenharmony_ci} 152