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 
16 #include "napi_inner_print.h"
17 #include "napi_print_ext.h"
18 #include "napi_print_task.h"
19 #ifdef PDFIUM_ENABLE
20 #include "napi_print_pdf_render.h"
21 #endif // PDFIUM_ENABLE
22 #include "print_constant.h"
23 #include "print_log.h"
24 
25 using namespace OHOS::Print;
26 
27 static constexpr const char *FUNCTION_PRINT = "print";
28 static constexpr const char *FUNCTION_QUERY_EXT = "queryAllPrinterExtensionInfos";
29 static constexpr const char *FUNCTION_START_DISCOVERY = "startDiscoverPrinter";
30 static constexpr const char *FUNCTION_STOP_DISCOVERY = "stopDiscoverPrinter";
31 static constexpr const char *FUNCTION_CONNECT_PRINT = "connectPrinter";
32 static constexpr const char *FUNCTION_DISCONNECT_PRINT = "disconnectPrinter";
33 static constexpr const char *FUNCTION_START_PRINT = "startPrintJob";
34 static constexpr const char *FUNCTION_CANCEL_PRINT = "cancelPrintJob";
35 static constexpr const char *FUNCTION_REQUEST_PREVIEW = "requestPrintPreview";
36 static constexpr const char *FUNCTION_QUERY_CAPABILITY = "queryPrinterCapability";
37 static constexpr const char *FUNCTION_QUERY_ALL_PRINTJOB = "queryAllPrintJobs";
38 static constexpr const char *FUNCTION_QUERY_PRINTJOB_LIST = "queryPrintJobList";
39 static constexpr const char *FUNCTION_QUERY_PRINTJOB_BYID = "queryPrintJobById";
40 static constexpr const char *FUNCTION_REGISTER_EVENT = "on";
41 static constexpr const char *FUNCTION_UNREGISTER_EVENT = "off";
42 static constexpr const char *FUNCTION_ADD_PRINTER = "addPrinters";
43 static constexpr const char *FUNCTION_REMOVE_PRINTER = "removePrinters";
44 static constexpr const char *FUNCTION_UPDATE_PRINTER = "updatePrinters";
45 static constexpr const char *FUNCTION_UPDATE_PRINTER_STATE = "updatePrinterState";
46 static constexpr const char *FUNCTION_UPDATE_JOB_STATE = "updatePrintJobState";
47 static constexpr const char *FUNCTION_UPDATE_EXTENSION_INFO = "updateExtensionInfo";
48 static constexpr const char *FUNCTION_NATIVE_ADD_PRINTER_TO_CUPS = "addPrinterToCups";
49 static constexpr const char *FUNCTION_QUERY_CAPABILITY_BY_URI = "queryPrinterCapabilityByUri";
50 static constexpr const char *FUNCTION_START_GET_PRINT_FILE = "startGettingPrintFile";
51 static constexpr const char *FUNCTION_NOTIFY_PRINT_SERVICE = "notifyPrintService";
52 static constexpr const char *FUNCTION_QUERY_ADDED_PRINTER = "getAddedPrinters";
53 static constexpr const char *FUNCTION_QUERY_PRINTER_INFO_BY_PRINTER_ID = "getPrinterInfoById";
54 static constexpr const char *FUNCTION_NOTIFY_PRINT_SERVICE_EVENT = "notifyPrintServiceEvent";
55 static constexpr const char *FUNCTION_GET_PRINTER_PREFERENCE = "getPrinterPreference";
56 static constexpr const char *FUNCTION_SET_PRINTER_PREFERENCE = "setPrinterPreference";
57 static constexpr const char *FUNCTION_SET_DEFAULT_PRINTER = "setDefaultPrinter";
58 static constexpr const char *FUNCTION_DELETE_PRINTER_FROM_CUPS = "deletePrinterFromCups";
59 static constexpr const char *FUNCTION_DISCOVER_USB_PRINTERS = "discoverUsbPrinters";
60 static constexpr const char *FUNCTION_ADD_PRINTER_TO_DISCOVERY = "addPrinterToDiscovery";
61 static constexpr const char *FUNCTION_UPDATE_PRINTER_IN_DISCOVERY = "updatePrinterInDiscovery";
62 static constexpr const char *FUNCTION_REMOVE_PRINTER_FROM_DISCOVERY = "removePrinterFromDiscovery";
63 static constexpr const char *FUNCTION_GET_ADDED_PRINTER_INFO_BY_ID = "getAddedPrinterInfoById";
64 static constexpr const char *FUNCTION_GET_PRINTER_INFORMATION_BY_ID = "getPrinterInformationById";
65 
66 #define PRINT_NAPI_METHOD(name, func)           \
67     {                                           \
68         name, 0, func, 0, 0, 0, napi_default, 0 \
69     }
70 
71 #define PRINT_NAPI_PROPERTY(name, val)                                          \
72     {                                                                           \
73         (name), nullptr, nullptr, nullptr, nullptr, val, napi_static, nullptr   \
74     }
75 
SetEnumProperty(napi_env env, napi_value object, const std::string &name, uint32_t value)76 static void SetEnumProperty(napi_env env, napi_value object, const std::string &name, uint32_t value)
77 {
78     napi_value tempValue = nullptr;
79     if (napi_create_int32(env, value, &tempValue) != napi_ok) {
80         return;
81     }
82     napi_set_named_property(env, object, name.c_str(), tempValue);
83 }
84 
NapiCreateDirectionModeEnum(napi_env env)85 static napi_value NapiCreateDirectionModeEnum(napi_env env)
86 {
87     napi_value object = nullptr;
88     napi_create_object(env, &object);
89     SetEnumProperty(env, object, "DIRECTION_MODE_AUTO", static_cast<int32_t>(DIRECTION_MODE_AUTO));
90     SetEnumProperty(env, object, "DIRECTION_MODE_PORTRAIT", static_cast<int32_t>(DIRECTION_MODE_PORTRAIT));
91     SetEnumProperty(env, object, "DIRECTION_MODE_LANDSCAPE", static_cast<int32_t>(DIRECTION_MODE_LANDSCAPE));
92     return object;
93 }
94 
NapiCreateColorModeEnum(napi_env env)95 static napi_value NapiCreateColorModeEnum(napi_env env)
96 {
97     napi_value object = nullptr;
98     napi_create_object(env, &object);
99     SetEnumProperty(env, object, "COLOR_MODE_MONOCHROME", static_cast<int32_t>(PRINT_COLOR_MODE_MONOCHROME));
100     SetEnumProperty(env, object, "COLOR_MODE_COLOR", static_cast<int32_t>(PRINT_COLOR_MODE_COLOR));
101     return object;
102 }
103 
NapiCreateDuplexModeEnum(napi_env env)104 static napi_value NapiCreateDuplexModeEnum(napi_env env)
105 {
106     napi_value object = nullptr;
107     napi_create_object(env, &object);
108     SetEnumProperty(env, object, "DUPLEX_MODE_NONE", static_cast<int32_t>(DUPLEX_MODE_NONE));
109     SetEnumProperty(env, object, "DUPLEX_MODE_LONG_EDGE", static_cast<int32_t>(DUPLEX_MODE_LONG_EDGE));
110     SetEnumProperty(env, object, "DUPLEX_MODE_SHORT_EDGE", static_cast<int32_t>(DUPLEX_MODE_SHORT_EDGE));
111     return object;
112 }
113 
NapiCreateQualityEnum(napi_env env)114 static napi_value NapiCreateQualityEnum(napi_env env)
115 {
116     napi_value object = nullptr;
117     napi_create_object(env, &object);
118     SetEnumProperty(env, object, "QUALITY_DRAFT", static_cast<int32_t>(PRINT_QUALITY_DRAFT));
119     SetEnumProperty(env, object, "QUALITY_NORMAL", static_cast<int32_t>(PRINT_QUALITY_NORMAL));
120     SetEnumProperty(env, object, "QUALITY_HIGH", static_cast<int32_t>(PRINT_QUALITY_HIGH));
121     return object;
122 }
123 
NapiCreatePageTypeEnum(napi_env env)124 static napi_value NapiCreatePageTypeEnum(napi_env env)
125 {
126     napi_value object = nullptr;
127     napi_create_object(env, &object);
128     SetEnumProperty(env, object, "PAGE_ISO_A3", static_cast<int32_t>(PAGE_ISO_A3));
129     SetEnumProperty(env, object, "PAGE_ISO_A4", static_cast<int32_t>(PAGE_ISO_A4));
130     SetEnumProperty(env, object, "PAGE_ISO_A5", static_cast<int32_t>(PAGE_ISO_A5));
131     SetEnumProperty(env, object, "PAGE_JIS_B5", static_cast<int32_t>(PAGE_JIS_B5));
132     SetEnumProperty(env, object, "PAGE_ISO_C5", static_cast<int32_t>(PAGE_ISO_C5));
133     SetEnumProperty(env, object, "PAGE_ISO_DL", static_cast<int32_t>(PAGE_ISO_DL));
134     SetEnumProperty(env, object, "PAGE_LETTER", static_cast<int32_t>(PAGE_LETTER));
135     SetEnumProperty(env, object, "PAGE_LEGAL", static_cast<int32_t>(PAGE_LEGAL));
136     SetEnumProperty(env, object, "PAGE_PHOTO_4X6", static_cast<int32_t>(PAGE_PHOTO_4X6));
137     SetEnumProperty(env, object, "PAGE_PHOTO_5X7", static_cast<int32_t>(PAGE_PHOTO_5X7));
138     SetEnumProperty(env, object, "PAGE_INT_DL_ENVELOPE", static_cast<int32_t>(PAGE_INT_DL_ENVELOPE));
139     SetEnumProperty(env, object, "PAGE_B_TABLOID", static_cast<int32_t>(PAGE_B_TABLOID));
140     return object;
141 }
142 
NapiCreateDocumentAdapterStateEnum(napi_env env)143 static napi_value NapiCreateDocumentAdapterStateEnum(napi_env env)
144 {
145     napi_value object = nullptr;
146     napi_create_object(env, &object);
147     SetEnumProperty(env, object, "PREVIEW_DESTROY", static_cast<int32_t>(PREVIEW_ABILITY_DESTROY));
148     SetEnumProperty(env, object, "PRINT_TASK_SUCCEED", static_cast<int32_t>(PRINT_TASK_SUCCEED));
149     SetEnumProperty(env, object, "PRINT_TASK_FAIL", static_cast<int32_t>(PRINT_TASK_FAIL));
150     SetEnumProperty(env, object, "PRINT_TASK_CANCEL", static_cast<int32_t>(PRINT_TASK_CANCEL));
151     SetEnumProperty(env, object, "PRINT_TASK_BLOCK", static_cast<int32_t>(PRINT_TASK_BLOCK));
152     return object;
153 }
154 
NapiCreateFileCreationStateEnum(napi_env env)155 static napi_value NapiCreateFileCreationStateEnum(napi_env env)
156 {
157     napi_value object = nullptr;
158     napi_create_object(env, &object);
159     SetEnumProperty(env, object, "PRINT_FILE_CREATED", static_cast<int32_t>(PRINT_FILE_CREATED_SUCCESS));
160     SetEnumProperty(env, object, "PRINT_FILE_CREATION_FAILED", static_cast<int32_t>(PRINT_FILE_CREATED_FAIL));
161     SetEnumProperty(env, object, "PRINT_FILE_CREATED_UNRENDERED",
162         static_cast<int32_t>(PRINT_FILE_CREATED_SUCCESS_UNRENDERED));
163     return object;
164 }
165 
NapiCreatePrinterStateEnum(napi_env env)166 static napi_value NapiCreatePrinterStateEnum(napi_env env)
167 {
168     napi_value object = nullptr;
169     napi_create_object(env, &object);
170     SetEnumProperty(env, object, "PRINTER_ADDED", static_cast<int32_t>(PRINTER_ADDED));
171     SetEnumProperty(env, object, "PRINTER_REMOVED", static_cast<int32_t>(PRINTER_REMOVED));
172     SetEnumProperty(env, object, "PRINTER_CAPABILITY_UPDATED", static_cast<int32_t>(PRINTER_UPDATE_CAP));
173     SetEnumProperty(env, object, "PRINTER_CONNECTED", static_cast<int32_t>(PRINTER_CONNECTED));
174     SetEnumProperty(env, object, "PRINTER_DISCONNECTED", static_cast<int32_t>(PRINTER_DISCONNECTED));
175     SetEnumProperty(env, object, "PRINTER_RUNNING", static_cast<int32_t>(PRINTER_RUNNING));
176     return object;
177 }
178 
NapiCreatePrintJobStateEnum(napi_env env)179 static napi_value NapiCreatePrintJobStateEnum(napi_env env)
180 {
181     napi_value object = nullptr;
182     napi_create_object(env, &object);
183     SetEnumProperty(env, object, "PRINT_JOB_PREPARE", static_cast<int32_t>(PRINT_JOB_PREPARED));
184     SetEnumProperty(env, object, "PRINT_JOB_QUEUED", static_cast<int32_t>(PRINT_JOB_QUEUED));
185     SetEnumProperty(env, object, "PRINT_JOB_RUNNING", static_cast<int32_t>(PRINT_JOB_RUNNING));
186     SetEnumProperty(env, object, "PRINT_JOB_BLOCKED", static_cast<int32_t>(PRINT_JOB_BLOCKED));
187     SetEnumProperty(env, object, "PRINT_JOB_COMPLETED", static_cast<int32_t>(PRINT_JOB_COMPLETED));
188     return object;
189 }
190 
NapiCreatePrintJobSubStateEnum(napi_env env)191 static napi_value NapiCreatePrintJobSubStateEnum(napi_env env)
192 {
193     napi_value object = nullptr;
194     napi_create_object(env, &object);
195     SetEnumProperty(env, object, "PRINT_JOB_COMPLETED_SUCCESS", static_cast<int32_t>(PRINT_JOB_COMPLETED_SUCCESS));
196     SetEnumProperty(env, object, "PRINT_JOB_COMPLETED_FAILED", static_cast<int32_t>(PRINT_JOB_COMPLETED_FAILED));
197     SetEnumProperty(env, object, "PRINT_JOB_COMPLETED_CANCELLED", static_cast<int32_t>(PRINT_JOB_COMPLETED_CANCELLED));
198     SetEnumProperty(env, object, "PRINT_JOB_COMPLETED_FILE_CORRUPTED",
199         static_cast<int32_t>(PRINT_JOB_COMPLETED_FILE_CORRUPT));
200     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_OFFLINE", static_cast<int32_t>(PRINT_JOB_BLOCKED_OFFLINE));
201     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_BUSY", static_cast<int32_t>(PRINT_JOB_BLOCKED_BUSY));
202     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_CANCELLED", static_cast<int32_t>(PRINT_JOB_BLOCKED_CANCELLED));
203     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_OUT_OF_PAPER", static_cast<int32_t>(PRINT_JOB_BLOCKED_OUT_OF_PAPER));
204     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_OUT_OF_INK", static_cast<int32_t>(PRINT_JOB_BLOCKED_OUT_OF_INK));
205     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_OUT_OF_TONER", static_cast<int32_t>(PRINT_JOB_BLOCKED_OUT_OF_TONER));
206     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_JAMMED", static_cast<int32_t>(PRINT_JOB_BLOCKED_JAMMED));
207     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_DOOR_OPEN", static_cast<int32_t>(PRINT_JOB_BLOCKED_DOOR_OPEN));
208     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_SERVICE_REQUEST",
209         static_cast<int32_t>(PRINT_JOB_BLOCKED_SERVICE_REQUEST));
210     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_LOW_ON_INK", static_cast<int32_t>(PRINT_JOB_BLOCKED_LOW_ON_INK));
211     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_LOW_ON_TONER", static_cast<int32_t>(PRINT_JOB_BLOCKED_LOW_ON_TONER));
212     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_REALLY_LOW_ON_INK",
213         static_cast<int32_t>(PRINT_JOB_BLOCKED_REALLY_LOW_ON_INK));
214     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_BAD_CERTIFICATE",
215         static_cast<int32_t>(PRINT_JOB_BLOCKED_BAD_CERTIFICATE));
216     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_ACCOUNT_ERROR",
217         static_cast<int32_t>(PRINT_JOB_BLOCKED_ACCOUNT_ERROR));
218     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_PRINT_PERMISSION_ERROR",
219         static_cast<int32_t>(PRINT_JOB_BLOCKED_PRINT_PERMISSION_ERROR));
220     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_PRINT_COLOR_PERMISSION_ERROR",
221         static_cast<int32_t>(PRINT_JOB_BLOCKED_PRINT_COLOR_PERMISSION_ERROR));
222     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_NETWORK_ERROR",
223         static_cast<int32_t>(PRINT_JOB_BLOCKED_NETWORK_ERROR));
224     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_SERVER_CONNECTION_ERROR",
225         static_cast<int32_t>(PRINT_JOB_BLOCKED_SERVER_CONNECTION_ERROR));
226     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_LARGE_FILE_ERROR",
227         static_cast<int32_t>(PRINT_JOB_BLOCKED_LARGE_FILE_ERROR));
228     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_FILE_PARSING_ERROR",
229         static_cast<int32_t>(PRINT_JOB_BLOCKED_FILE_PARSING_ERROR));
230     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_SLOW_FILE_CONVERSION",
231         static_cast<int32_t>(PRINT_JOB_BLOCKED_SLOW_FILE_CONVERSION));
232     SetEnumProperty(env, object, "PRINT_JOB_RUNNING_UPLOADING_FILES",
233         static_cast<int32_t>(PRINT_JOB_RUNNING_UPLOADING_FILES));
234     SetEnumProperty(env, object, "PRINT_JOB_RUNNING_CONVERTING_FILES",
235         static_cast<int32_t>(PRINT_JOB_RUNNING_CONVERTING_FILES));
236     SetEnumProperty(env, object, "PRINT_JOB_BLOCK_UNKNOWN", static_cast<int32_t>(PRINT_JOB_BLOCKED_UNKNOWN));
237     return object;
238 }
239 
NapiCreatePrintErrorCodeEnum(napi_env env)240 static napi_value NapiCreatePrintErrorCodeEnum(napi_env env)
241 {
242     napi_value object = nullptr;
243     napi_create_object(env, &object);
244     SetEnumProperty(env, object, "E_PRINT_NONE", static_cast<int32_t>(E_PRINT_NONE));
245     SetEnumProperty(env, object, "E_PRINT_NO_PERMISSION", static_cast<int32_t>(E_PRINT_NO_PERMISSION));
246     SetEnumProperty(env, object, "E_PRINT_INVALID_PARAMETER", static_cast<int32_t>(E_PRINT_INVALID_PARAMETER));
247     SetEnumProperty(env, object, "E_PRINT_GENERIC_FAILURE", static_cast<int32_t>(E_PRINT_GENERIC_FAILURE));
248     SetEnumProperty(env, object, "E_PRINT_RPC_FAILURE", static_cast<int32_t>(E_PRINT_RPC_FAILURE));
249     SetEnumProperty(env, object, "E_PRINT_SERVER_FAILURE", static_cast<int32_t>(E_PRINT_SERVER_FAILURE));
250     SetEnumProperty(env, object, "E_PRINT_INVALID_EXTENSION", static_cast<int32_t>(E_PRINT_INVALID_EXTENSION));
251     SetEnumProperty(env, object, "E_PRINT_INVALID_PRINTER", static_cast<int32_t>(E_PRINT_INVALID_PRINTER));
252     SetEnumProperty(env, object, "E_PRINT_INVALID_PRINT_JOB", static_cast<int32_t>(E_PRINT_INVALID_PRINTJOB));
253     SetEnumProperty(env, object, "E_PRINT_FILE_IO", static_cast<int32_t>(E_PRINT_FILE_IO));
254     return object;
255 }
256 
NapiCreatePrintStatusEnum(napi_env env)257 static napi_value NapiCreatePrintStatusEnum(napi_env env)
258 {
259     napi_value object = nullptr;
260     napi_create_object(env, &object);
261     SetEnumProperty(env, object, "PRINTER_STATUS_IDLE", static_cast<int32_t>(PRINTER_STATUS_IDLE));
262     SetEnumProperty(env, object, "PRINTER_STATUS_BUSY", static_cast<int32_t>(PRINTER_STATUS_BUSY));
263     SetEnumProperty(env, object, "PRINTER_STATUS_UNAVAILABLE", static_cast<int32_t>(PRINTER_STATUS_UNAVAILABLE));
264     return object;
265 }
266 
NapiCreatePrintEventEnum(napi_env env)267 static napi_value NapiCreatePrintEventEnum(napi_env env)
268 {
269     napi_value object = nullptr;
270     napi_create_object(env, &object);
271     SetEnumProperty(env, object, "PRINTER_EVENT_ADDED", static_cast<int32_t>(PRINTER_EVENT_ADDED));
272     SetEnumProperty(env, object, "PRINTER_EVENT_DELETED", static_cast<int32_t>(PRINTER_EVENT_DELETED));
273     SetEnumProperty(env, object, "PRINTER_EVENT_STATE_CHANGED", static_cast<int32_t>(PRINTER_EVENT_STATE_CHANGED));
274     SetEnumProperty(env, object, "PRINTER_EVENT_INFO_CHANGED", static_cast<int32_t>(PRINTER_EVENT_INFO_CHANGED));
275     return object;
276 }
277 
NapiCreateApplicationEventEnum(napi_env env)278 static napi_value NapiCreateApplicationEventEnum(napi_env env)
279 {
280     napi_value object = nullptr;
281     napi_create_object(env, &object);
282     SetEnumProperty(env, object, "APPLICATION_CREATED", static_cast<int32_t>(APPLICATION_CREATED));
283     SetEnumProperty(
284         env, object, "APPLICATION_CLOSED_FOR_STARTED", static_cast<int32_t>(APPLICATION_CLOSED_FOR_STARTED));
285     SetEnumProperty(
286         env, object, "APPLICATION_CLOSED_FOR_CANCELED", static_cast<int32_t>(APPLICATION_CLOSED_FOR_CANCELED));
287     return object;
288 }
289 
NapiCreateDefaultPrinterTypeEnum(napi_env env)290 static napi_value NapiCreateDefaultPrinterTypeEnum(napi_env env)
291 {
292     napi_value object = nullptr;
293     napi_create_object(env, &object);
294     SetEnumProperty(
295         env, object, "DEFAULT_PRINTER_TYPE_SETTED_BY_USER", static_cast<int32_t>(DEFAULT_PRINTER_TYPE_SETTED_BY_USER));
296     SetEnumProperty(env,
297         object,
298         "DEFAULT_PRINTER_TYPE_LAST_USED_PRINTER",
299         static_cast<int32_t>(DEFAULT_PRINTER_TYPE_LAST_USED_PRINTER));
300     return object;
301 }
302 
Init(napi_env env, napi_value exports)303 static napi_value Init(napi_env env, napi_value exports)
304 {
305     napi_property_descriptor desc[] = {
306         PRINT_NAPI_PROPERTY("PrintDirectionMode", NapiCreateDirectionModeEnum(env)),
307         PRINT_NAPI_PROPERTY("PrintColorMode", NapiCreateColorModeEnum(env)),
308         PRINT_NAPI_PROPERTY("PrintDuplexMode", NapiCreateDuplexModeEnum(env)),
309         PRINT_NAPI_PROPERTY("PrintQuality", NapiCreateQualityEnum(env)),
310         PRINT_NAPI_PROPERTY("PrintPageType", NapiCreatePageTypeEnum(env)),
311         PRINT_NAPI_PROPERTY("PrintDocumentAdapterState", NapiCreateDocumentAdapterStateEnum(env)),
312         PRINT_NAPI_PROPERTY("PrintFileCreationState", NapiCreateFileCreationStateEnum(env)),
313         PRINT_NAPI_PROPERTY("PrinterState", NapiCreatePrinterStateEnum(env)),
314         PRINT_NAPI_PROPERTY("PrintJobState", NapiCreatePrintJobStateEnum(env)),
315         PRINT_NAPI_PROPERTY("PrintJobSubState", NapiCreatePrintJobSubStateEnum(env)),
316         PRINT_NAPI_PROPERTY("PrintErrorCode", NapiCreatePrintErrorCodeEnum(env)),
317         PRINT_NAPI_PROPERTY("PrinterStatus", NapiCreatePrintStatusEnum(env)),
318         PRINT_NAPI_PROPERTY("PrinterEvent", NapiCreatePrintEventEnum(env)),
319         PRINT_NAPI_PROPERTY("ApplicationEvent", NapiCreateApplicationEventEnum(env)),
320         PRINT_NAPI_PROPERTY("DefaultPrinterType", NapiCreateDefaultPrinterTypeEnum(env)),
321 
322         PRINT_NAPI_METHOD(FUNCTION_PRINT, NapiPrintTask::Print),
323         PRINT_NAPI_METHOD(FUNCTION_QUERY_EXT, NapiInnerPrint::QueryExtensionInfo),
324         PRINT_NAPI_METHOD(FUNCTION_START_DISCOVERY, NapiInnerPrint::StartDiscovery),
325         PRINT_NAPI_METHOD(FUNCTION_STOP_DISCOVERY, NapiInnerPrint::StopDiscovery),
326         PRINT_NAPI_METHOD(FUNCTION_CONNECT_PRINT, NapiInnerPrint::ConnectPrinter),
327         PRINT_NAPI_METHOD(FUNCTION_DISCONNECT_PRINT, NapiInnerPrint::DisconnectPrinter),
328         PRINT_NAPI_METHOD(FUNCTION_START_PRINT, NapiInnerPrint::StartPrintJob),
329         PRINT_NAPI_METHOD(FUNCTION_CANCEL_PRINT, NapiInnerPrint::CancelPrintJob),
330         PRINT_NAPI_METHOD(FUNCTION_REQUEST_PREVIEW, NapiInnerPrint::RequestPreview),
331         PRINT_NAPI_METHOD(FUNCTION_QUERY_CAPABILITY, NapiInnerPrint::QueryCapability),
332         PRINT_NAPI_METHOD(FUNCTION_QUERY_ALL_PRINTJOB, NapiInnerPrint::QueryAllPrintJob),
333         PRINT_NAPI_METHOD(FUNCTION_QUERY_PRINTJOB_LIST, NapiInnerPrint::QueryAllPrintJob),
334         PRINT_NAPI_METHOD(FUNCTION_QUERY_PRINTJOB_BYID, NapiInnerPrint::QueryPrintJobById),
335         PRINT_NAPI_METHOD(FUNCTION_REGISTER_EVENT, NapiInnerPrint::On),
336         PRINT_NAPI_METHOD(FUNCTION_UNREGISTER_EVENT, NapiInnerPrint::Off),
337         PRINT_NAPI_METHOD(FUNCTION_ADD_PRINTER, NapiPrintExt::AddPrinters),
338         PRINT_NAPI_METHOD(FUNCTION_REMOVE_PRINTER, NapiPrintExt::RemovePrinters),
339         PRINT_NAPI_METHOD(FUNCTION_UPDATE_PRINTER, NapiPrintExt::UpdatePrinters),
340         PRINT_NAPI_METHOD(FUNCTION_UPDATE_PRINTER_STATE, NapiPrintExt::UpdatePrinterState),
341         PRINT_NAPI_METHOD(FUNCTION_UPDATE_JOB_STATE, NapiPrintExt::UpdatePrintJobStateOnlyForSystemApp),
342         PRINT_NAPI_METHOD(FUNCTION_UPDATE_EXTENSION_INFO, NapiPrintExt::UpdateExtensionInfo),
343         PRINT_NAPI_METHOD(FUNCTION_NATIVE_ADD_PRINTER_TO_CUPS, NapiPrintExt::AddPrinterToCups),
344         PRINT_NAPI_METHOD(FUNCTION_QUERY_CAPABILITY_BY_URI, NapiPrintExt::QueryPrinterCapabilityByUri),
345         PRINT_NAPI_METHOD(FUNCTION_START_GET_PRINT_FILE, NapiInnerPrint::StartGetPrintFile),
346         PRINT_NAPI_METHOD(FUNCTION_NOTIFY_PRINT_SERVICE, NapiInnerPrint::NotifyPrintService),
347         PRINT_NAPI_METHOD(FUNCTION_QUERY_ADDED_PRINTER, NapiInnerPrint::QueryAddedPrinter),
348         PRINT_NAPI_METHOD(FUNCTION_QUERY_PRINTER_INFO_BY_PRINTER_ID, NapiInnerPrint::QueryPrinterInfoByPrinterId),
349         PRINT_NAPI_METHOD(FUNCTION_NOTIFY_PRINT_SERVICE_EVENT, NapiInnerPrint::NotifyPrintServiceEvent),
350         PRINT_NAPI_METHOD(FUNCTION_GET_PRINTER_PREFERENCE, NapiInnerPrint::GetPrinterPreference),
351         PRINT_NAPI_METHOD(FUNCTION_SET_PRINTER_PREFERENCE, NapiInnerPrint::SetPrinterPreference),
352         PRINT_NAPI_METHOD(FUNCTION_SET_DEFAULT_PRINTER, NapiInnerPrint::SetDefaultPrinter),
353         PRINT_NAPI_METHOD(FUNCTION_DELETE_PRINTER_FROM_CUPS, NapiPrintExt::DeletePrinterFromCups),
354         PRINT_NAPI_METHOD(FUNCTION_DISCOVER_USB_PRINTERS, NapiPrintExt::DiscoverUsbPrinters),
355         PRINT_NAPI_METHOD(FUNCTION_ADD_PRINTER_TO_DISCOVERY, NapiPrintExt::AddPrinterToDiscovery),
356         PRINT_NAPI_METHOD(FUNCTION_UPDATE_PRINTER_IN_DISCOVERY, NapiPrintExt::UpdatePrinterInDiscovery),
357         PRINT_NAPI_METHOD(FUNCTION_REMOVE_PRINTER_FROM_DISCOVERY, NapiPrintExt::RemovePrinterFromDiscovery),
358         PRINT_NAPI_METHOD(FUNCTION_GET_ADDED_PRINTER_INFO_BY_ID, NapiInnerPrint::GetAddedPrinterInfoById),
359         PRINT_NAPI_METHOD(FUNCTION_GET_PRINTER_INFORMATION_BY_ID, NapiInnerPrint::GetAddedPrinterInfoById),
360     };
361 
362     napi_status status = napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc);
363     PRINT_HILOGD("init print module %{public}d", status);
364     return exports;
365 }
366 
RegisterModule()367 static __attribute__((constructor)) void RegisterModule()
368 {
369     static napi_module module = { .nm_version = 1,
370         .nm_flags = 0,
371         .nm_filename = nullptr,
372         .nm_register_func = Init,
373         .nm_modname = "print",
374         .nm_priv = ((void *)0),
375         .reserved = { 0 } };
376     napi_module_register(&module);
377     PRINT_HILOGD("module register print");
378 }
379