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