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
JScreatePlainTextRecord(napi_env env,napi_callback_info info)256 napi_value PasteboardNapi::JScreatePlainTextRecord(napi_env env, napi_callback_info info)
257 {
258 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePlainTextRecord is called!");
259 size_t argc = MAX_ARGS;
260 napi_value argv[MAX_ARGS] = { 0 };
261 napi_value thisVar = nullptr;
262
263 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
264 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
265
266 return CreatePlainTextRecord(env, argv[0]);
267 }
268
JScreatePixelMapRecord(napi_env env,napi_callback_info info)269 napi_value PasteboardNapi::JScreatePixelMapRecord(napi_env env, napi_callback_info info)
270 {
271 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePixelMapRecord is called!");
272 size_t argc = MAX_ARGS;
273 napi_value argv[MAX_ARGS] = { 0 };
274 napi_value thisVar = nullptr;
275
276 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
277 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
278
279 napi_valuetype valueType = napi_undefined;
280 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
281 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
282
283 return CreatePixelMapRecord(env, argv[0]);
284 }
285
JScreateUriRecord(napi_env env,napi_callback_info info)286 napi_value PasteboardNapi::JScreateUriRecord(napi_env env, napi_callback_info info)
287 {
288 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateUriRecord 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 return CreateUriRecord(env, argv[0]);
297 }
298
JSCreateRecord(napi_env env,napi_callback_info info)299 napi_value PasteboardNapi::JSCreateRecord(napi_env env, napi_callback_info info)
300 {
301 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateRecord is called!");
302 size_t argc = MAX_ARGS;
303 napi_value argv[MAX_ARGS] = { 0 };
304 napi_value thisVar = nullptr;
305 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
306 std::string mimeType;
307 if (!CheckArgs(env, argv, argc, mimeType)) {
308 return nullptr;
309 }
310 auto it = createRecordMap_.find(mimeType);
311 if (it != createRecordMap_.end()) {
312 return (it->second)(env, argv[1]);
313 }
314
315 void *data = nullptr;
316 size_t dataLen = 0;
317 NAPI_CALL(env, napi_get_arraybuffer_info(env, argv[1], &data, &dataLen));
318 std::vector<uint8_t> arrayBuf(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen);
319 napi_value instance = nullptr;
320 PasteDataRecordNapi::NewKvRecordInstance(env, mimeType, arrayBuf, instance);
321 return instance;
322 }
323
JScreateHtmlData(napi_env env,napi_callback_info info)324 napi_value PasteboardNapi::JScreateHtmlData(napi_env env, napi_callback_info info)
325 {
326 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateHtmlData is called!");
327 size_t argc = MAX_ARGS;
328 napi_value argv[MAX_ARGS] = { 0 };
329 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
330 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
331
332 return CreateHtmlData(env, argv[0]);
333 }
334
JScreateWantData(napi_env env,napi_callback_info info)335 napi_value PasteboardNapi::JScreateWantData(napi_env env, napi_callback_info info)
336 {
337 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateWantData is called!");
338 size_t argc = MAX_ARGS;
339 napi_value argv[MAX_ARGS] = { 0 };
340 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
341 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
342 napi_valuetype valueType = napi_undefined;
343 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
344 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
345
346 return CreateWantData(env, argv[0]);
347 }
348
JScreatePlainTextData(napi_env env,napi_callback_info info)349 napi_value PasteboardNapi::JScreatePlainTextData(napi_env env, napi_callback_info info)
350 {
351 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePlainTextData is called!");
352 size_t argc = MAX_ARGS;
353 napi_value argv[MAX_ARGS] = { 0 };
354 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
355 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
356
357 return CreatePlainTextData(env, argv[0]);
358 }
359
JScreatePixelMapData(napi_env env,napi_callback_info info)360 napi_value PasteboardNapi::JScreatePixelMapData(napi_env env, napi_callback_info info)
361 {
362 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreatePixelMapData is called!");
363 size_t argc = MAX_ARGS;
364 napi_value argv[MAX_ARGS] = { 0 };
365 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
366 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
367 napi_valuetype valueType = napi_undefined;
368 NAPI_CALL(env, napi_typeof(env, argv[0], &valueType));
369 NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected.");
370
371 return CreatePixelMapData(env, argv[0]);
372 }
373
JScreateUriData(napi_env env,napi_callback_info info)374 napi_value PasteboardNapi::JScreateUriData(napi_env env, napi_callback_info info)
375 {
376 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JScreateUriData is called!");
377 size_t argc = MAX_ARGS;
378 napi_value argv[MAX_ARGS] = { 0 };
379 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
380 NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
381
382 return CreateUriData(env, argv[0]);
383 }
384
JSCreateKvData(napi_env env,const std::string & mimeType,const std::vector<uint8_t> & arrayBuffer)385 napi_value PasteboardNapi::JSCreateKvData(
386 napi_env env, const std::string &mimeType, const std::vector<uint8_t> &arrayBuffer)
387 {
388 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateKvData is called!");
389
390 napi_value instance = nullptr;
391 NAPI_CALL(env, PasteDataNapi::NewInstance(env, instance));
392 PasteDataNapi *obj = nullptr;
393 napi_status status = napi_unwrap(env, instance, reinterpret_cast<void **>(&obj));
394 if ((status != napi_ok) || (obj == nullptr)) {
395 PASTEBOARD_HILOGE(PASTEBOARD_MODULE_JS_NAPI, "unwrap failed!");
396 return nullptr;
397 }
398
399 obj->value_ = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
400 return instance;
401 }
402
JSCreateData(napi_env env,napi_callback_info info)403 napi_value PasteboardNapi::JSCreateData(napi_env env, napi_callback_info info)
404 {
405 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSCreateData is called!");
406 size_t argc = MAX_ARGS;
407 napi_value argv[MAX_ARGS] = { 0 };
408 napi_value thisVar = nullptr;
409 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
410 std::string mimeType;
411 if (!CheckArgs(env, argv, argc, mimeType)) {
412 return nullptr;
413 }
414 auto it = createDataMap_.find(mimeType);
415 if (it != createDataMap_.end()) {
416 return (it->second)(env, argv[1]);
417 }
418
419 void *data = nullptr;
420 size_t dataLen = 0;
421 NAPI_CALL(env, napi_get_arraybuffer_info(env, argv[1], &data, &dataLen));
422 std::vector<uint8_t> arrayBuf(reinterpret_cast<uint8_t *>(data), reinterpret_cast<uint8_t *>(data) + dataLen);
423 return JSCreateKvData(env, mimeType, arrayBuf);
424 }
425
JSgetSystemPasteboard(napi_env env,napi_callback_info info)426 napi_value PasteboardNapi::JSgetSystemPasteboard(napi_env env, napi_callback_info info)
427 {
428 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSgetSystemPasteboard is called!");
429 size_t argc = MAX_ARGS;
430 napi_value argv[MAX_ARGS] = { 0 };
431 napi_value thisVar = nullptr;
432
433 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
434 napi_value instance = nullptr;
435 napi_status status = SystemPasteboardNapi::NewInstance(env, instance); // 0 arguments
436 if (status != napi_ok) {
437 PASTEBOARD_HILOGD(PASTEBOARD_MODULE_JS_NAPI, "JSgetSystemPasteboard create instance failed");
438 return NapiGetNull(env);
439 }
440
441 return instance;
442 }
443
PasteBoardInit(napi_env env,napi_value exports)444 napi_value PasteboardNapi::PasteBoardInit(napi_env env, napi_value exports)
445 {
446 napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("createHtmlData", JScreateHtmlData),
447 DECLARE_NAPI_FUNCTION("createWantData", JScreateWantData),
448 DECLARE_NAPI_FUNCTION("createPlainTextData", JScreatePlainTextData),
449 DECLARE_NAPI_FUNCTION("createPixelMapData", JScreatePixelMapData),
450 DECLARE_NAPI_FUNCTION("createUriData", JScreateUriData),
451 DECLARE_NAPI_FUNCTION("createData", JSCreateData),
452 DECLARE_NAPI_FUNCTION("createHtmlTextRecord", JScreateHtmlTextRecord),
453 DECLARE_NAPI_FUNCTION("createWantRecord", JScreateWantRecord),
454 DECLARE_NAPI_FUNCTION("createPlainTextRecord", JScreatePlainTextRecord),
455 DECLARE_NAPI_FUNCTION("createPixelMapRecord", JScreatePixelMapRecord),
456 DECLARE_NAPI_FUNCTION("createUriRecord", JScreateUriRecord),
457 DECLARE_NAPI_FUNCTION("createRecord", JSCreateRecord),
458 DECLARE_NAPI_FUNCTION("getSystemPasteboard", JSgetSystemPasteboard),
459 DECLARE_NAPI_GETTER("ShareOption", JScreateShareOption),
460 DECLARE_NAPI_PROPERTY("MAX_RECORD_NUM", CreateNapiNumber(env, PasteData::MAX_RECORD_NUM)),
461 DECLARE_NAPI_PROPERTY("MIMETYPE_PIXELMAP", CreateNapiString(env, MIMETYPE_PIXELMAP)),
462 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_HTML", CreateNapiString(env, MIMETYPE_TEXT_HTML)),
463 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_WANT", CreateNapiString(env, MIMETYPE_TEXT_WANT)),
464 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_PLAIN", CreateNapiString(env, MIMETYPE_TEXT_PLAIN)),
465 DECLARE_NAPI_PROPERTY("MIMETYPE_TEXT_URI", CreateNapiString(env, MIMETYPE_TEXT_URI)) };
466
467 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
468
469 return exports;
470 }
471
472 std::unordered_map<std::string, PasteboardNapi::FUNC> PasteboardNapi::createRecordMap_ = {
473 { "text/html", &PasteboardNapi::CreateHtmlRecord }, { "text/plain", &PasteboardNapi::CreatePlainTextRecord },
474 { "text/uri", &PasteboardNapi::CreateUriRecord }, { "pixelMap", &PasteboardNapi::CreatePixelMapRecord },
475 { "text/want", &PasteboardNapi::CreateWantRecord }
476 };
477
478 std::unordered_map<std::string, PasteboardNapi::FUNC> PasteboardNapi::createDataMap_ = {
479 { "text/html", &PasteboardNapi::CreateHtmlData }, { "text/plain", &PasteboardNapi::CreatePlainTextData },
480 { "text/uri", &PasteboardNapi::CreateUriData }, { "pixelMap", &PasteboardNapi::CreatePixelMapData },
481 { "text/want", &PasteboardNapi::CreateWantData }
482 };
483 } // namespace MiscServicesNapi
484 } // namespace OHOS