1 /*
2 * Copyright (c) 2022-2023 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_common_want.h"
17 #include "pasteboard_common.h"
18 #include "pasteboard_hilog.h"
19 #include "pasteboard_js_err.h"
20 #include "pasteboard_napi.h"
21 #include "pixel_map_napi.h"
22 #include "systempasteboard_napi.h"
23 #include "uri.h"
24 using namespace OHOS::MiscServices;
25 using namespace OHOS::Media;
26
27 namespace OHOS {
28 namespace MiscServicesNapi {
29 constexpr size_t MAX_ARGS = 6;
CreateHtmlRecord(napi_env env,napi_value in)30 napi_value PasteboardNapi::CreateHtmlRecord(napi_env env, napi_value in)
31 {
32 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateHtmlRecord is called!");
33 std::string value;
34 bool ret = GetValue(env, in, value);
35 if (!ret) {
36 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to GetValue!");
37 return nullptr;
38 }
39 napi_value instance = nullptr;
40 PasteDataRecordNapi::NewHtmlTextRecordInstance(env, value, instance);
41 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
42 return instance;
43 }
44
CreatePlainTextRecord(napi_env env,napi_value in)45 napi_value PasteboardNapi::CreatePlainTextRecord(napi_env env, napi_value in)
46 {
47 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePlainTextRecord is called!");
48 std::string value;
49 bool ret = GetValue(env, in, value);
50 if (!ret) {
51 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to GetValue!");
52 return nullptr;
53 }
54 napi_value instance = nullptr;
55 PasteDataRecordNapi::NewPlainTextRecordInstance(env, value, instance);
56 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
57 return instance;
58 }
59
CreateUriRecord(napi_env env,napi_value in)60 napi_value PasteboardNapi::CreateUriRecord(napi_env env, napi_value in)
61 {
62 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateUriRecord is called!");
63 std::string value;
64 bool ret = GetValue(env, in, value);
65 if (!ret) {
66 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to GetValue!");
67 return nullptr;
68 }
69 napi_value instance = nullptr;
70 PasteDataRecordNapi::NewUriRecordInstance(env, value, instance);
71 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
72 return instance;
73 }
74
CreatePixelMapRecord(napi_env env,napi_value in)75 napi_value PasteboardNapi::CreatePixelMapRecord(napi_env env, napi_value in)
76 {
77 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePixelMapRecord is called!");
78 std::shared_ptr<PixelMap> pixelMap = PixelMapNapi::GetPixelMap(env, in);
79 if (pixelMap == nullptr) {
80 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to get pixelMap!");
81 return nullptr;
82 }
83 napi_value instance = nullptr;
84 PasteDataRecordNapi::NewPixelMapRecordInstance(env, pixelMap, instance);
85 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
86 return instance;
87 }
88
CreateWantRecord(napi_env env,napi_value in)89 napi_value PasteboardNapi::CreateWantRecord(napi_env env, napi_value in)
90 {
91 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateWantRecord is called!");
92 AAFwk::Want want;
93 bool ret = OHOS::AppExecFwk::UnwrapWant(env, in, want);
94 if (!ret) {
95 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to unwrap want!");
96 return nullptr;
97 }
98 napi_value instance = nullptr;
99 PasteDataRecordNapi::NewWantRecordInstance(env, std::make_shared<AAFwk::Want>(want), instance);
100 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
101 return instance;
102 }
103
104 // common function of CreateHtmlData, CreatePlainTextData, CreateUriData
CreateDataCommon(napi_env env,napi_value in,std::string & str,napi_value & instance)105 PasteDataNapi *PasteboardNapi::CreateDataCommon(napi_env env, napi_value in, std::string &str, napi_value &instance)
106 {
107 bool ret = GetValue(env, in, str);
108 if (!ret) {
109 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "GetValue failed");
110 return nullptr;
111 }
112 NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
113 PasteDataNapi *obj = nullptr;
114 napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
115 if ((status != napi_ok) || (obj == nullptr)) {
116 return nullptr;
117 }
118 return obj;
119 }
120
CreateHtmlData(napi_env env,napi_value in)121 napi_value PasteboardNapi::CreateHtmlData(napi_env env, napi_value in)
122 {
123 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateHtmlData is called!");
124 std::string str;
125 napi_value instance = nullptr;
126 PasteDataNapi *obj = CreateDataCommon(env, in, str, instance);
127 if (obj == nullptr) {
128 return nullptr;
129 }
130 obj->value_ = PasteboardClient::GetInstance()->CreateHtmlData(str);
131 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
132 return instance;
133 }
134
CreatePlainTextData(napi_env env,napi_value in)135 napi_value PasteboardNapi::CreatePlainTextData(napi_env env, napi_value in)
136 {
137 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePlainTextData is called!");
138 std::string str;
139 napi_value instance = nullptr;
140 PasteDataNapi *obj = CreateDataCommon(env, in, str, instance);
141 if (obj == nullptr) {
142 return nullptr;
143 }
144 obj->value_ = PasteboardClient::GetInstance()->CreatePlainTextData(str);
145 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
146 return instance;
147 }
148
CreateUriData(napi_env env,napi_value in)149 napi_value PasteboardNapi::CreateUriData(napi_env env, napi_value in)
150 {
151 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateUriData is called!");
152 std::string str;
153 napi_value instance = nullptr;
154 PasteDataNapi *obj = CreateDataCommon(env, in, str, instance);
155 if (obj == nullptr) {
156 return nullptr;
157 }
158 obj->value_ = PasteboardClient::GetInstance()->CreateUriData(OHOS::Uri(str));
159 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
160 return instance;
161 }
162
CreatePixelMapData(napi_env env,napi_value in)163 napi_value PasteboardNapi::CreatePixelMapData(napi_env env, napi_value in)
164 {
165 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreatePixelMapData is called!");
166 std::shared_ptr<PixelMap> pixelMap = PixelMapNapi::GetPixelMap(env, in);
167 if (pixelMap == nullptr) {
168 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to get pixelMap!");
169 return nullptr;
170 }
171 napi_value instance = nullptr;
172 NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
173 PasteDataNapi *obj = nullptr;
174 napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
175 if ((status != napi_ok) || (obj == nullptr)) {
176 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "unwrap Failed!");
177 return nullptr;
178 }
179 obj->value_ = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMap);
180 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
181 return instance;
182 }
183
CreateWantData(napi_env env,napi_value in)184 napi_value PasteboardNapi::CreateWantData(napi_env env, napi_value in)
185 {
186 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "CreateWantData is called!");
187 AAFwk::Want want;
188 bool ret = OHOS::AppExecFwk::UnwrapWant(env, in, want);
189 if (!ret) {
190 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "Failed to unwrap want!");
191 return nullptr;
192 }
193 napi_value instance = nullptr;
194 NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
195 PasteDataNapi *obj = nullptr;
196 napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
197 if ((status != napi_ok) || (obj == nullptr)) {
198 return nullptr;
199 }
200 obj->value_ = PasteboardClient::GetInstance()->CreateWantData(std::make_shared<AAFwk::Want>(want));
201 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "end.");
202 return instance;
203 }
204
JScreateHtmlTextRecord(napi_env env,napi_callback_info info)205 napi_value PasteboardNapi::JScreateHtmlTextRecord(napi_env env, napi_callback_info info)
206 {
207 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateHtmlTextRecord is called!");
208 size_t argc = MAX_ARGS;
209 napi_value argv[MAX_ARGS] = { 0 };
210 napi_value thisVar = nullptr;
211
212 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
213 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
214
215 return CreateHtmlRecord(env, argv[0]);
216 }
217
JScreateWantRecord(napi_env env,napi_callback_info info)218 napi_value PasteboardNapi::JScreateWantRecord(napi_env env, napi_callback_info info)
219 {
220 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateWantRecord is called!");
221 size_t argc = MAX_ARGS;
222 napi_value argv[MAX_ARGS] = { 0 };
223 napi_value thisVar = nullptr;
224
225 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
226 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
227 napi_valuetype valueType = napi_undefined;
228 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
229 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
230
231 return CreateWantRecord(env, argv[0]);
232 }
233
JScreateShareOption(napi_env env,napi_callback_info info)234 napi_value PasteboardNapi::JScreateShareOption(napi_env env, napi_callback_info info)
235 {
236 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateShareOption is called!");
237
238 napi_value jsShareOption = nullptr;
239 napi_create_object(env, &jsShareOption);
240
241 napi_value jsInApp = CreateNapiNumber(env, static_cast<int32_t>(ShareOption::InApp));
242 NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "InApp", jsInApp));
243 NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "INAPP", jsInApp));
244
245 napi_value jsLocalDevice = CreateNapiNumber(env, static_cast<int32_t>(ShareOption::LocalDevice));
246 NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "LocalDevice", jsLocalDevice));
247 NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "LOCALDEVICE", jsLocalDevice));
248
249 napi_value jsCrossDevice = CreateNapiNumber(env, static_cast<int32_t>(ShareOption::CrossDevice));
250 NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "CrossDevice", jsCrossDevice));
251 NAPI_CALL(env, napi_set_named_property(env, jsShareOption, "CROSSDEVICE", jsCrossDevice));
252
253 return jsShareOption;
254 }
255
JScreatePattern(napi_env env,napi_callback_info info)256 napi_value PasteboardNapi::JScreatePattern(napi_env env, napi_callback_info info)
257 {
258 napi_value jsPattern = nullptr;
259 napi_create_object(env, &jsPattern);
260
261 napi_value jsURL = CreateNapiNumber(env, static_cast<uint32_t>(Pattern::URL));
262 NAPI_CALL(env, napi_set_named_property(env, jsPattern, "URL", jsURL));
263
264 napi_value jsNumber = CreateNapiNumber(env, static_cast<uint32_t>(Pattern::Number));
265 NAPI_CALL(env, napi_set_named_property(env, jsPattern, "NUMBER", jsNumber));
266
267 napi_value jsEmailAddress = CreateNapiNumber(env, static_cast<uint32_t>(Pattern::EmailAddress));
268 NAPI_CALL(env, napi_set_named_property(env, jsPattern, "EMAIL_ADDRESS", jsEmailAddress));
269
270 return jsPattern;
271 }
272
JScreatePlainTextRecord(napi_env env,napi_callback_info info)273 napi_value PasteboardNapi::JScreatePlainTextRecord(napi_env env, napi_callback_info info)
274 {
275 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePlainTextRecord is called!");
276 size_t argc = MAX_ARGS;
277 napi_value argv[MAX_ARGS] = { 0 };
278 napi_value thisVar = nullptr;
279
280 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
281 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
282
283 return CreatePlainTextRecord(env, argv[0]);
284 }
285
JScreatePixelMapRecord(napi_env env,napi_callback_info info)286 napi_value PasteboardNapi::JScreatePixelMapRecord(napi_env env, napi_callback_info info)
287 {
288 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePixelMapRecord is called!");
289 size_t argc = MAX_ARGS;
290 napi_value argv[MAX_ARGS] = { 0 };
291 napi_value thisVar = nullptr;
292
293 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
294 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
295
296 napi_valuetype valueType = napi_undefined;
297 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
298 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
299
300 return CreatePixelMapRecord(env, argv[0]);
301 }
302
JScreateUriRecord(napi_env env,napi_callback_info info)303 napi_value PasteboardNapi::JScreateUriRecord(napi_env env, napi_callback_info info)
304 {
305 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateUriRecord is called!");
306 size_t argc = MAX_ARGS;
307 napi_value argv[MAX_ARGS] = { 0 };
308 napi_value thisVar = nullptr;
309
310 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
311 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
312
313 return CreateUriRecord(env, argv[0]);
314 }
315
JSCreateRecord(napi_env env,napi_callback_info info)316 napi_value PasteboardNapi::JSCreateRecord(napi_env env, napi_callback_info info)
317 {
318 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateRecord is called!");
319 size_t argc = MAX_ARGS;
320 napi_value argv[MAX_ARGS] = { 0 };
321 napi_value thisVar = nullptr;
322 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
323 std::string mimeType;
324 if (!CheckArgs(env, argv, argc, mimeType)) {
325 return nullptr;
326 }
327 auto it = createRecordMap_.find(mimeType);
328 if (it != createRecordMap_.end()) {
329 return (it->second)(env, argv[1]);
330 }
331
332 void *data = nullptr;
333 size_t dataLen = 0;
334 NAPI_CALL(env, napi_get_arraybuffer_info(env, argv[1], &data, &dataLen));
335 std::vector<uint8_t> arrayBuf(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen);
336 napi_value instance = nullptr;
337 PasteDataRecordNapi::NewKvRecordInstance(env, mimeType, arrayBuf, instance);
338 return instance;
339 }
340
JScreateHtmlData(napi_env env,napi_callback_info info)341 napi_value PasteboardNapi::JScreateHtmlData(napi_env env, napi_callback_info info)
342 {
343 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateHtmlData is called!");
344 size_t argc = MAX_ARGS;
345 napi_value argv[MAX_ARGS] = { 0 };
346 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
347 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
348
349 return CreateHtmlData(env, argv[0]);
350 }
351
JScreateWantData(napi_env env,napi_callback_info info)352 napi_value PasteboardNapi::JScreateWantData(napi_env env, napi_callback_info info)
353 {
354 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateWantData is called!");
355 size_t argc = MAX_ARGS;
356 napi_value argv[MAX_ARGS] = { 0 };
357 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
358 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
359 napi_valuetype valueType = napi_undefined;
360 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
361 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
362
363 return CreateWantData(env, argv[0]);
364 }
365
JScreatePlainTextData(napi_env env,napi_callback_info info)366 napi_value PasteboardNapi::JScreatePlainTextData(napi_env env, napi_callback_info info)
367 {
368 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePlainTextData is called!");
369 size_t argc = MAX_ARGS;
370 napi_value argv[MAX_ARGS] = { 0 };
371 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
372 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
373
374 return CreatePlainTextData(env, argv[0]);
375 }
376
JScreatePixelMapData(napi_env env,napi_callback_info info)377 napi_value PasteboardNapi::JScreatePixelMapData(napi_env env, napi_callback_info info)
378 {
379 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePixelMapData is called!");
380 size_t argc = MAX_ARGS;
381 napi_value argv[MAX_ARGS] = { 0 };
382 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
383 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
384 napi_valuetype valueType = napi_undefined;
385 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
386 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
387
388 return CreatePixelMapData(env, argv[0]);
389 }
390
JScreateUriData(napi_env env,napi_callback_info info)391 napi_value PasteboardNapi::JScreateUriData(napi_env env, napi_callback_info info)
392 {
393 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateUriData is called!");
394 size_t argc = MAX_ARGS;
395 napi_value argv[MAX_ARGS] = { 0 };
396 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
397 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
398
399 return CreateUriData(env, argv[0]);
400 }
401
JSCreateKvData(napi_env env,const std::string & mimeType,const std::vector<uint8_t> & arrayBuffer)402 napi_value PasteboardNapi::JSCreateKvData(
403 napi_env env, const std::string &mimeType, const std::vector<uint8_t> &arrayBuffer)
404 {
405 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateKvData is called!");
406
407 napi_value instance = nullptr;
408 NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
409 PasteDataNapi *obj = nullptr;
410 napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
411 if ((status != napi_ok) || (obj == nullptr)) {
412 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "unwrap failed!");
413 return nullptr;
414 }
415
416 obj->value_ = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
417 return instance;
418 }
419
JSCreateData(napi_env env,napi_callback_info info)420 napi_value PasteboardNapi::JSCreateData(napi_env env, napi_callback_info info)
421 {
422 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateData is called!");
423 size_t argc = MAX_ARGS;
424 napi_value argv[MAX_ARGS] = { 0 };
425 napi_value thisVar = nullptr;
426 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
427 std::string mimeType;
428 if (!CheckArgs(env, argv, argc, mimeType)) {
429 return nullptr;
430 }
431 auto it = createDataMap_.find(mimeType);
432 if (it != createDataMap_.end()) {
433 return (it->second)(env, argv[1]);
434 }
435
436 void *data = nullptr;
437 size_t dataLen = 0;
438 NAPI_CALL(env, napi_get_arraybuffer_info(env, argv[1], &data, &dataLen));
439 std::vector<uint8_t> arrayBuf(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen);
440 return JSCreateKvData(env, mimeType, arrayBuf);
441 }
442
JSgetSystemPasteboard(napi_env env,napi_callback_info info)443 napi_value PasteboardNapi::JSgetSystemPasteboard(napi_env env, napi_callback_info info)
444 {
445 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSgetSystemPasteboard is called!");
446 size_t argc = MAX_ARGS;
447 napi_value argv[MAX_ARGS] = { 0 };
448 napi_value thisVar = nullptr;
449
450 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
451 napi_value instance = nullptr;
452 napi_status status = SystemPasteboardNapi::NewInstance(env, instance); // 0 arguments
453 if (status != napi_ok) {
454 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSgetSystemPasteboard create instance failed");
455 return NapiGetNull(env);
456 }
457
458 return instance;
459 }
460
PasteBoardInit(napi_env env,napi_value exports)461 napi_value PasteboardNapi::PasteBoardInit(napi_env env, napi_value exports)
462 {
463 napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("createHtmlData", JScreateHtmlData),
464 DECLARE_NAPI_FUNCTION("createWantData", JScreateWantData),
465 DECLARE_NAPI_FUNCTION("createPlainTextData", JScreatePlainTextData),
466 DECLARE_NAPI_FUNCTION("createPixelMapData", JScreatePixelMapData),
467 DECLARE_NAPI_FUNCTION("createUriData", JScreateUriData),
468 DECLARE_NAPI_FUNCTION("createData", JSCreateData),
469 DECLARE_NAPI_FUNCTION("createHtmlTextRecord", JScreateHtmlTextRecord),
470 DECLARE_NAPI_FUNCTION("createWantRecord", JScreateWantRecord),
471 DECLARE_NAPI_FUNCTION("createPlainTextRecord", JScreatePlainTextRecord),
472 DECLARE_NAPI_FUNCTION("createPixelMapRecord", JScreatePixelMapRecord),
473 DECLARE_NAPI_FUNCTION("createUriRecord", JScreateUriRecord),
474 DECLARE_NAPI_FUNCTION("createRecord", JSCreateRecord),
475 DECLARE_NAPI_FUNCTION("getSystemPasteboard", JSgetSystemPasteboard),
476 DECLARE_NAPI_GETTER("ShareOption", JScreateShareOption),
477 DECLARE_NAPI_GETTER("Pattern", JScreatePattern),
478 DECLARE_NAPI_PROPERTY("MAX_RECORD_NUM", CreateNapiNumber(env, PasteData::MAX_RECORD_NUM)),
479 DECLARE_NAPI_PROPERTY("MIMETYPE_PIXELMAP", CreateNapiString(env, MIMETYPE_PIXELMAP)),
480 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_HTML", CreateNapiString(env, MIMETYPE_TEXT_HTML)),
481 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_WANT", CreateNapiString(env, MIMETYPE_TEXT_WANT)),
482 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_PLAIN", CreateNapiString(env, MIMETYPE_TEXT_PLAIN)),
483 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_URI", CreateNapiString(env, MIMETYPE_TEXT_URI)) };
484
485 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
486
487 return exports;
488 }
489
490 std::unordered_map<std::string, PasteboardNapi::FUNC> PasteboardNapi::createRecordMap_ = {
491 { "text/html", &PasteboardNapi::CreateHtmlRecord }, { "text/plain", &PasteboardNapi::CreatePlainTextRecord },
492 { "text/uri", &PasteboardNapi::CreateUriRecord }, { "pixelMap", &PasteboardNapi::CreatePixelMapRecord },
493 { "text/want", &PasteboardNapi::CreateWantRecord }
494 };
495
496 std::unordered_map<std::string, PasteboardNapi::FUNC> PasteboardNapi::createDataMap_ = {
497 { "text/html", &PasteboardNapi::CreateHtmlData }, { "text/plain", &PasteboardNapi::CreatePlainTextData },
498 { "text/uri", &PasteboardNapi::CreateUriData }, { "pixelMap", &PasteboardNapi::CreatePixelMapData },
499 { "text/want", &PasteboardNapi::CreateWantData }
500 };
501 } // namespace MiscServicesNapi
502 } // namespace OHOS