• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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