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