1 /*
2 * Copyright (c) 2024 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 <string>
17
18 #include "napi/native_api.h"
19 #include <BasicServicesKit/ohprint.h>
20
21 #define TEST_PRINTER "testPrinter"
22
23 static constexpr size_t ARG_SIZE_ONE = 1;
24 static constexpr int32_t ERROR_COMMON = -1;
25
PrinterDiscoveryCallback(Print_DiscoveryEvent event,const Print_PrinterInfo * printerInfo)26 static void PrinterDiscoveryCallback(Print_DiscoveryEvent event, const Print_PrinterInfo *printerInfo)
27 {
28 }
29
PrinterChangeCallback(Print_PrinterEvent event,const Print_PrinterInfo * printerInfo)30 static void PrinterChangeCallback(Print_PrinterEvent event, const Print_PrinterInfo *printerInfo)
31 {
32 }
33
OnStartLayoutWrite(const char * jobId,uint32_t fd,const Print_PrintAttributes * oldAttrs,const Print_PrintAttributes * newAttrs,Print_WriteResultCallback writeCallback)34 static void OnStartLayoutWrite(const char *jobId,
35 uint32_t fd,
36 const Print_PrintAttributes *oldAttrs,
37 const Print_PrintAttributes *newAttrs,
38 Print_WriteResultCallback writeCallback)
39 {
40 }
41
OnJobStateChanged(const char * jobId,uint32_t state)42 static void OnJobStateChanged(const char* jobId, uint32_t state)
43 {
44 }
45
OHPrintInit(napi_env env,napi_callback_info info)46 static napi_value OHPrintInit(napi_env env, napi_callback_info info)
47 {
48 napi_value result = nullptr;
49 Print_ErrorCode errorCode = OH_Print_Init();
50 errorCode = OH_Print_Release();
51 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
52 return result;
53 }
54
OHPrintListener(napi_env env,napi_callback_info info)55 static napi_value OHPrintListener(napi_env env, napi_callback_info info)
56 {
57 napi_value result = nullptr;
58 Print_ErrorCode errorCode = OH_Print_Init();
59 OH_Print_RegisterPrinterChangeListener(PrinterChangeCallback);
60 OH_Print_UnregisterPrinterChangeListener();
61 errorCode = OH_Print_Release();
62 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
63 return result;
64 }
65
OHPrintDiscovery(napi_env env,napi_callback_info info)66 static napi_value OHPrintDiscovery(napi_env env, napi_callback_info info)
67 {
68 napi_value result = nullptr;
69 Print_ErrorCode errorCode = OH_Print_Init();
70 errorCode = OH_Print_StartPrinterDiscovery(PrinterDiscoveryCallback);
71 OH_Print_StopPrinterDiscovery();
72 errorCode = OH_Print_Release();
73 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
74 return result;
75 }
76
OHPrintConnect(napi_env env,napi_callback_info info)77 static napi_value OHPrintConnect(napi_env env, napi_callback_info info)
78 {
79 napi_value result = nullptr;
80 Print_ErrorCode errorCode = OH_Print_Init();
81 OH_Print_RegisterPrinterChangeListener(PrinterChangeCallback);
82 OH_Print_ConnectPrinter(TEST_PRINTER);
83 OH_Print_UnregisterPrinterChangeListener();
84 errorCode = OH_Print_Release();
85 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
86 return result;
87 }
88
OHPrintJob(napi_env env,napi_callback_info info)89 static napi_value OHPrintJob(napi_env env, napi_callback_info info)
90 {
91 napi_value result = nullptr;
92 Print_ErrorCode errorCode = OH_Print_Init();
93 OH_Print_StartPrintJob(nullptr);
94 errorCode = OH_Print_Release();
95 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
96 return result;
97 }
98
OHPrintList(napi_env env,napi_callback_info info)99 static napi_value OHPrintList(napi_env env, napi_callback_info info)
100 {
101 napi_value result = nullptr;
102 Print_ErrorCode errorCode = OH_Print_Init();
103 Print_StringList list = {0};
104 errorCode = OH_Print_QueryPrinterList(&list);
105 errorCode = OH_Print_LaunchPrinterManager();
106 OH_Print_ReleasePrinterList(&list);
107 errorCode = OH_Print_Release();
108 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
109 return result;
110 }
111
OHPrintInfo(napi_env env,napi_callback_info info)112 static napi_value OHPrintInfo(napi_env env, napi_callback_info info)
113 {
114 napi_value result = nullptr;
115 Print_ErrorCode errorCode = OH_Print_Init();
116 Print_PrinterInfo *printerInfo = nullptr;
117 errorCode = OH_Print_QueryPrinterInfo(TEST_PRINTER, &printerInfo);
118 OH_Print_ReleasePrinterInfo(printerInfo);
119 printerInfo = nullptr;
120 errorCode = OH_Print_Release();
121 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
122 return result;
123 }
124
OHPrintProperty(napi_env env,napi_callback_info info)125 static napi_value OHPrintProperty(napi_env env, napi_callback_info info)
126 {
127 napi_value result = nullptr;
128 Print_ErrorCode errorCode = OH_Print_Init();
129 Print_StringList key = {0};
130 Print_PropertyList value = {0};
131 errorCode = OH_Print_QueryPrinterProperties(TEST_PRINTER, &key, &value);
132 errorCode = OH_Print_UpdatePrinterProperties(TEST_PRINTER, &value);
133 errorCode = OH_Print_RestorePrinterProperties(TEST_PRINTER, &key);
134 OH_Print_ReleasePrinterProperties(&value);
135 errorCode = OH_Print_Release();
136 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
137 return result;
138 }
139
OHPrintStartPrintByNative(napi_env env,napi_callback_info info)140 static napi_value OHPrintStartPrintByNative(napi_env env, napi_callback_info info)
141 {
142 napi_value result = nullptr;
143 size_t argc = ARG_SIZE_ONE;
144 napi_value args[ARG_SIZE_ONE] = { nullptr };
145 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
146 if (argc != ARG_SIZE_ONE) {
147 napi_create_int32(env, ERROR_COMMON, &result);
148 return result;
149 }
150 void* context = nullptr;
151 napi_status status = napi_unwrap(env, args[0], &context);
152 if (status != napi_ok) {
153 napi_create_int32(env, ERROR_COMMON, &result);
154 return result;
155 }
156
157 napi_value statgeMode = nullptr;
158 napi_get_named_property(env, args[0], "stageMode", &statgeMode);
159 bool isStageMode = false;
160 napi_get_value_bool(env, statgeMode, &isStageMode);
161 if (!isStageMode) {
162 napi_create_int32(env, ERROR_COMMON, &result);
163 return result;
164 }
165
166 std::string printJobName = "MyPrintTest";
167 Print_PrintDocCallback cb;
168 cb.startLayoutWriteCb = OnStartLayoutWrite;
169 cb.jobStateChangedCb = OnJobStateChanged;
170 Print_ErrorCode errorCode = OH_Print_StartPrintByNative(printJobName.c_str(), cb, context);
171 napi_create_int32(env, static_cast<int32_t>(errorCode), &result);
172 return result;
173 }