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 "distributed.h"
17
18 namespace OHOS {
19 namespace NotificationNapi {
20 const int ENABLED_MAX_PARA = 2;
21 const int ENABLED_MIN_PARA = 1;
22 const int ENABLED_BUNDLE_MAX_PARA = 3;
23 const int ENABLED_BUNDLE_MIN_PARA = 2;
24 const int IS_ENABLED_BUNDLE_MAX_PARA = 2;
25 const int IS_ENABLED_BUNDLE_MIN_PARA = 1;
26 const int ENABLED_SYNC_MAX_PARA = 3;
27 const int ENABLED_SYNC_MIN_PARA = 2;
28
ParseParameters(const napi_env & env,const napi_callback_info & info,EnabledParams & params)29 napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, EnabledParams ¶ms)
30 {
31 ANS_LOGD("enter");
32
33 size_t argc = ENABLED_MAX_PARA;
34 napi_value argv[ENABLED_MAX_PARA] = {nullptr};
35 napi_value thisVar = nullptr;
36 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
37 if (argc < ENABLED_MIN_PARA) {
38 ANS_LOGE("Wrong number of arguments.");
39 return nullptr;
40 }
41 napi_valuetype valuetype = napi_undefined;
42
43 // argv[0]: enable
44 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
45 if (valuetype != napi_boolean) {
46 ANS_LOGE("Wrong argument type. Bool expected.");
47 return nullptr;
48 }
49 napi_get_value_bool(env, argv[PARAM0], ¶ms.enable);
50
51 // argv[1]:callback
52 if (argc >= ENABLED_MAX_PARA) {
53 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
54 if (valuetype != napi_function) {
55 ANS_LOGE("Callback is not function excute promise.");
56 return Common::NapiGetNull(env);
57 }
58 napi_create_reference(env, argv[PARAM1], 1, ¶ms.callback);
59 }
60
61 return Common::NapiGetNull(env);
62 }
63
ParseParameters(const napi_env & env,const napi_callback_info & info,EnabledByBundleParams & params)64 napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, EnabledByBundleParams ¶ms)
65 {
66 ANS_LOGD("enter");
67
68 size_t argc = ENABLED_BUNDLE_MAX_PARA;
69 napi_value argv[ENABLED_BUNDLE_MAX_PARA] = {nullptr};
70 napi_value thisVar = nullptr;
71 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
72 if (argc < ENABLED_BUNDLE_MIN_PARA) {
73 ANS_LOGE("Wrong number of arguments");
74 return nullptr;
75 }
76
77 // argv[0]: bundle
78 napi_valuetype valuetype = napi_undefined;
79 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
80 if (valuetype != napi_object) {
81 ANS_LOGE("Wrong argument type. Object expected");
82 return nullptr;
83 }
84 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
85 if (retValue == nullptr) {
86 ANS_LOGE("GetBundleOption failed");
87 return nullptr;
88 }
89
90 // argv[1]: enable
91 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
92 if (valuetype != napi_boolean) {
93 ANS_LOGE("Wrong argument type. Bool expected.");
94 return nullptr;
95 }
96 napi_get_value_bool(env, argv[PARAM1], ¶ms.enable);
97
98 // argv[2]:callback
99 if (argc >= ENABLED_BUNDLE_MAX_PARA) {
100 NAPI_CALL(env, napi_typeof(env, argv[PARAM2], &valuetype));
101 if (valuetype != napi_function) {
102 ANS_LOGE("Callback is not function excute promise.");
103 return Common::NapiGetNull(env);
104 }
105 napi_create_reference(env, argv[PARAM2], 1, ¶ms.callback);
106 }
107
108 return Common::NapiGetNull(env);
109 }
110
ParseParameters(const napi_env & env,const napi_callback_info & info,IsEnabledByBundleParams & params)111 napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, IsEnabledByBundleParams ¶ms)
112 {
113 ANS_LOGD("enter");
114
115 size_t argc = IS_ENABLED_BUNDLE_MAX_PARA;
116 napi_value argv[IS_ENABLED_BUNDLE_MAX_PARA] = {nullptr};
117 napi_value thisVar = nullptr;
118 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
119 if (argc < IS_ENABLED_BUNDLE_MIN_PARA) {
120 ANS_LOGE("Wrong number of arguments.");
121 return nullptr;
122 }
123
124 // argv[0]: bundle
125 napi_valuetype valuetype = napi_undefined;
126 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
127 if (valuetype != napi_object) {
128 ANS_LOGE("Parameter type error. Object expected.");
129 return nullptr;
130 }
131 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
132 if (retValue == nullptr) {
133 ANS_LOGE("GetBundleOption failed.");
134 return nullptr;
135 }
136
137 // argv[1]:callback
138 if (argc >= IS_ENABLED_BUNDLE_MAX_PARA) {
139 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
140 if (valuetype != napi_function) {
141 ANS_LOGE("Callback is not function excute promise.");
142 return Common::NapiGetNull(env);
143 }
144 napi_create_reference(env, argv[PARAM1], 1, ¶ms.callback);
145 }
146
147 return Common::NapiGetNull(env);
148 }
149
AsyncCompleteCallbackIsDistributedEnabled(napi_env env,napi_status status,void * data)150 void AsyncCompleteCallbackIsDistributedEnabled(napi_env env, napi_status status, void *data)
151 {
152 ANS_LOGD("enter");
153 if (!data) {
154 ANS_LOGE("Invalid async callback data.");
155 return;
156 }
157 ANS_LOGI("IsDistributedEnabled work complete.");
158 AsyncCallbackInfoIsEnabled *asynccallbackinfo = static_cast<AsyncCallbackInfoIsEnabled *>(data);
159 if (asynccallbackinfo) {
160 napi_value result = nullptr;
161 if (asynccallbackinfo->info.errorCode != ERR_OK) {
162 result = Common::NapiGetNull(env);
163 } else {
164 napi_get_boolean(env, asynccallbackinfo->enable, &result);
165 }
166 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
167 if (asynccallbackinfo->info.callback != nullptr) {
168 ANS_LOGD("Delete isDistributedEnabled callback reference.");
169 napi_delete_reference(env, asynccallbackinfo->info.callback);
170 }
171 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
172 delete asynccallbackinfo;
173 asynccallbackinfo = nullptr;
174 }
175 }
176
IsDistributedEnabled(napi_env env,napi_callback_info info)177 napi_value IsDistributedEnabled(napi_env env, napi_callback_info info)
178 {
179 ANS_LOGD("enter");
180
181 napi_ref callback = nullptr;
182 if (Common::ParseParaOnlyCallback(env, info, callback) == nullptr) {
183 return Common::NapiGetUndefined(env);
184 }
185
186 auto asynccallbackinfo = new (std::nothrow) AsyncCallbackInfoIsEnabled {.env = env, .asyncWork = nullptr};
187 if (!asynccallbackinfo) {
188 ANS_LOGD("Asynccallbackinfo is nullptr.");
189 return Common::JSParaError(env, callback);
190 }
191 napi_value promise = nullptr;
192 Common::PaddingCallbackPromiseInfo(env, callback, asynccallbackinfo->info, promise);
193
194 ANS_LOGD("Create isDistributedEnabled string.");
195 napi_value resourceName = nullptr;
196 napi_create_string_latin1(env, "isDistributedEnabled", NAPI_AUTO_LENGTH, &resourceName);
197 // Asynchronous function call
198 napi_create_async_work(
199 env,
200 nullptr,
201 resourceName,
202 [](napi_env env, void *data) {
203 ANS_LOGI("IsDistributedEnabled work excute");
204 AsyncCallbackInfoIsEnabled *asynccallbackinfo = static_cast<AsyncCallbackInfoIsEnabled *>(data);
205
206 if (asynccallbackinfo) {
207 asynccallbackinfo->info.errorCode =
208 NotificationHelper::IsDistributedEnabled(asynccallbackinfo->enable);
209 ANS_LOGI("IsDistributedEnabled enable = %{public}d", asynccallbackinfo->enable);
210 }
211 },
212 AsyncCompleteCallbackIsDistributedEnabled,
213 (void *)asynccallbackinfo,
214 &asynccallbackinfo->asyncWork);
215
216 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
217
218 if (asynccallbackinfo->info.isCallback) {
219 ANS_LOGD("isDistributedEnabled callback is nullptr.");
220 return Common::NapiGetNull(env);
221 } else {
222 return promise;
223 }
224 }
225
EnableDistributed(napi_env env,napi_callback_info info)226 napi_value EnableDistributed(napi_env env, napi_callback_info info)
227 {
228 ANS_LOGD("enter");
229
230 EnabledParams params {};
231 if (ParseParameters(env, info, params) == nullptr) {
232 return Common::NapiGetUndefined(env);
233 }
234
235 AsyncCallbackInfoEnabled *asynccallbackinfo =
236 new (std::nothrow) AsyncCallbackInfoEnabled {.env = env, .asyncWork = nullptr, .params = params};
237 if (!asynccallbackinfo) {
238 ANS_LOGD("AsyncCallbackinfo is nullptr.");
239 return Common::JSParaError(env, params.callback);
240 }
241 napi_value promise = nullptr;
242 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
243
244 ANS_LOGD("Create enableDistributed string.");
245 napi_value resourceName = nullptr;
246 napi_create_string_latin1(env, "enableDistributed", NAPI_AUTO_LENGTH, &resourceName);
247 // Asynchronous function call
248 napi_create_async_work(
249 env,
250 nullptr,
251 resourceName,
252 [](napi_env env, void *data) {
253 ANS_LOGI("EnableDistributed work excute.");
254 AsyncCallbackInfoEnabled *asynccallbackinfo = static_cast<AsyncCallbackInfoEnabled *>(data);
255 if (asynccallbackinfo) {
256 asynccallbackinfo->info.errorCode =
257 NotificationHelper::EnableDistributed(asynccallbackinfo->params.enable);
258 }
259 },
260 [](napi_env env, napi_status status, void *data) {
261 ANS_LOGI("EnableDistributed work complete.");
262 AsyncCallbackInfoEnabled *asynccallbackinfo = static_cast<AsyncCallbackInfoEnabled *>(data);
263 if (asynccallbackinfo) {
264 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
265 if (asynccallbackinfo->info.callback != nullptr) {
266 ANS_LOGD("Delete enableDistributed callback reference.");
267 napi_delete_reference(env, asynccallbackinfo->info.callback);
268 }
269 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
270 delete asynccallbackinfo;
271 asynccallbackinfo = nullptr;
272 }
273 ANS_LOGD("EnableDistributed work complete end.");
274 },
275 (void *)asynccallbackinfo,
276 &asynccallbackinfo->asyncWork);
277
278 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
279
280 if (asynccallbackinfo->info.isCallback) {
281 ANS_LOGD("enableDistributed callback is nullptr.");
282 return Common::NapiGetNull(env);
283 } else {
284 return promise;
285 }
286 }
287
EnableDistributedByBundle(napi_env env,napi_callback_info info)288 napi_value EnableDistributedByBundle(napi_env env, napi_callback_info info)
289 {
290 ANS_LOGD("enter");
291
292 EnabledByBundleParams params {};
293 if (ParseParameters(env, info, params) == nullptr) {
294 return Common::NapiGetUndefined(env);
295 }
296
297 AsyncCallbackInfoEnabledByBundle *asynccallbackinfo =
298 new (std::nothrow) AsyncCallbackInfoEnabledByBundle {.env = env, .asyncWork = nullptr, .params = params};
299 if (!asynccallbackinfo) {
300 ANS_LOGD("AsyncCallbackinfo is nullptr.");
301 return Common::JSParaError(env, params.callback);
302 }
303 napi_value promise = nullptr;
304 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
305
306 ANS_LOGD("Create enableDistributedByBundle string.");
307 napi_value resourceName = nullptr;
308 napi_create_string_latin1(env, "enableDistributedByBundle", NAPI_AUTO_LENGTH, &resourceName);
309 // Async function call
310 napi_create_async_work(
311 env,
312 nullptr,
313 resourceName,
314 [](napi_env env, void *data) {
315 ANS_LOGI("EnableDistributedByBundle work excute.");
316 AsyncCallbackInfoEnabledByBundle *asynccallbackinfo = static_cast<AsyncCallbackInfoEnabledByBundle *>(data);
317 if (asynccallbackinfo) {
318 asynccallbackinfo->info.errorCode = NotificationHelper::EnableDistributedByBundle(
319 asynccallbackinfo->params.option, asynccallbackinfo->params.enable);
320 }
321 },
322 [](napi_env env, napi_status status, void *data) {
323 ANS_LOGI("EnableDistributedByBundle work complete.");
324 AsyncCallbackInfoEnabledByBundle *asynccallbackinfo = static_cast<AsyncCallbackInfoEnabledByBundle *>(data);
325 if (asynccallbackinfo) {
326 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
327 if (asynccallbackinfo->info.callback != nullptr) {
328 ANS_LOGD("Delete enableDistributedByBundle callback reference");
329 napi_delete_reference(env, asynccallbackinfo->info.callback);
330 }
331 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
332 delete asynccallbackinfo;
333 asynccallbackinfo = nullptr;
334 }
335 ANS_LOGD("EnableDistributedByBundle work complete end.");
336 },
337 (void *)asynccallbackinfo,
338 &asynccallbackinfo->asyncWork);
339
340 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
341
342 if (asynccallbackinfo->info.isCallback) {
343 ANS_LOGD("enableDistributedByBundle callback is nullptr.");
344 return Common::NapiGetNull(env);
345 } else {
346 return promise;
347 }
348 }
349
EnableDistributedSelf(napi_env env,napi_callback_info info)350 napi_value EnableDistributedSelf(napi_env env, napi_callback_info info)
351 {
352 ANS_LOGD("enter");
353
354 EnabledParams params {};
355 if (ParseParameters(env, info, params) == nullptr) {
356 return Common::NapiGetUndefined(env);
357 }
358
359 AsyncCallbackInfoEnabled *asynccallbackinfo =
360 new (std::nothrow) AsyncCallbackInfoEnabled {.env = env, .asyncWork = nullptr, .params = params};
361 if (!asynccallbackinfo) {
362 return Common::JSParaError(env, params.callback);
363 }
364 napi_value promise = nullptr;
365 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
366
367 ANS_LOGI("Create enableDistributedSelf string.");
368 napi_value resourceName = nullptr;
369 napi_create_string_latin1(env, "enableDistributedSelf", NAPI_AUTO_LENGTH, &resourceName);
370 // Asynchronous function call
371 napi_create_async_work(
372 env,
373 nullptr,
374 resourceName,
375 [](napi_env env, void *data) {
376 ANS_LOGI("EnableDistributedSelf work excute.");
377 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoEnabled *>(data);
378 if (asynccallbackinfo) {
379 asynccallbackinfo->info.errorCode =
380 NotificationHelper::EnableDistributedSelf(asynccallbackinfo->params.enable);
381 ANS_LOGI("EnableDistributedSelf enable = %{public}d", asynccallbackinfo->params.enable);
382 }
383 },
384 [](napi_env env, napi_status status, void *data) {
385 ANS_LOGI("EnableDistributedSelf work complete.");
386 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoEnabled *>(data);
387 if (asynccallbackinfo) {
388 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
389 if (asynccallbackinfo->info.callback != nullptr) {
390 ANS_LOGD("Delete enableDistributedSelf callback reference");
391 napi_delete_reference(env, asynccallbackinfo->info.callback);
392 }
393 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
394 delete asynccallbackinfo;
395 asynccallbackinfo = nullptr;
396 }
397 ANS_LOGD("EnableDistributedSelf work complete end.");
398 },
399 (void *)asynccallbackinfo,
400 &asynccallbackinfo->asyncWork);
401
402 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
403
404 if (asynccallbackinfo->info.isCallback) {
405 ANS_LOGD("enableDistributedSelf callback is nullptr.");
406 return Common::NapiGetNull(env);
407 } else {
408 return promise;
409 }
410 }
411
AsyncCompleteCallbackIsDistributedEnableByBundle(napi_env env,napi_status status,void * data)412 void AsyncCompleteCallbackIsDistributedEnableByBundle(napi_env env, napi_status status, void *data)
413 {
414 ANS_LOGD("enter");
415 if (!data) {
416 ANS_LOGE("Invalid async callback data");
417 return;
418 }
419 ANS_LOGI("IsDistributedEnableByBundle work complete.");
420 AsyncCallbackInfoIsEnabledByBundle *asynccallbackinfo = static_cast<AsyncCallbackInfoIsEnabledByBundle *>(data);
421 if (asynccallbackinfo) {
422 napi_value result = nullptr;
423 if (asynccallbackinfo->info.errorCode != ERR_OK) {
424 result = Common::NapiGetNull(env);
425 } else {
426 napi_get_boolean(env, asynccallbackinfo->enable, &result);
427 }
428 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
429 if (asynccallbackinfo->info.callback != nullptr) {
430 ANS_LOGD("Delete isDistributedEnableByBundle callback reference");
431 napi_delete_reference(env, asynccallbackinfo->info.callback);
432 }
433 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
434 delete asynccallbackinfo;
435 asynccallbackinfo = nullptr;
436 }
437 }
438
IsDistributedEnableByBundle(napi_env env,napi_callback_info info)439 napi_value IsDistributedEnableByBundle(napi_env env, napi_callback_info info)
440 {
441 ANS_LOGD("enter");
442
443 IsEnabledByBundleParams params {};
444 if (ParseParameters(env, info, params) == nullptr) {
445 return Common::NapiGetUndefined(env);
446 }
447
448 AsyncCallbackInfoIsEnabledByBundle *asynccallbackinfo =
449 new (std::nothrow) AsyncCallbackInfoIsEnabledByBundle {.env = env, .asyncWork = nullptr, .params = params};
450 if (!asynccallbackinfo) {
451 ANS_LOGD("Asynccallbackinfo is nullptr.");
452 return Common::JSParaError(env, params.callback);
453 }
454 napi_value promise = nullptr;
455 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
456
457 ANS_LOGD("Create isDistributedEnableByBundle string.");
458 napi_value resourceName = nullptr;
459 napi_create_string_latin1(env, "isDistributedEnableByBundle", NAPI_AUTO_LENGTH, &resourceName);
460 // Asynchronous function call
461 napi_create_async_work(
462 env,
463 nullptr,
464 resourceName,
465 [](napi_env env, void *data) {
466 ANS_LOGI("IsDistributedEnableByBundle work excute.");
467 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoIsEnabledByBundle *>(data);
468 if (asynccallbackinfo) {
469 asynccallbackinfo->info.errorCode = NotificationHelper::IsDistributedEnableByBundle(
470 asynccallbackinfo->params.option, asynccallbackinfo->enable);
471 }
472 },
473 AsyncCompleteCallbackIsDistributedEnableByBundle,
474 (void *)asynccallbackinfo,
475 &asynccallbackinfo->asyncWork);
476
477 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
478
479 if (asynccallbackinfo->info.isCallback) {
480 ANS_LOGD("isDistributedEnableByBundle callback is nullptr.");
481 return Common::NapiGetNull(env);
482 } else {
483 return promise;
484 }
485 }
486
AsyncCompleteCallbackGetDeviceRemindType(napi_env env,napi_status status,void * data)487 void AsyncCompleteCallbackGetDeviceRemindType(napi_env env, napi_status status, void *data)
488 {
489 ANS_LOGD("enter");
490 if (!data) {
491 ANS_LOGE("Invalidity async callback data");
492 return;
493 }
494 ANS_LOGI("GetDeviceRemindType work complete.");
495 AsyncCallbackInfoGetRemindType *asynccallbackinfo = static_cast<AsyncCallbackInfoGetRemindType *>(data);
496 if (asynccallbackinfo) {
497 napi_value result = nullptr;
498 if (asynccallbackinfo->info.errorCode != ERR_OK) {
499 ANS_LOGD("errorCode is not ERR_OK.");
500 result = Common::NapiGetNull(env);
501 } else {
502 DeviceRemindType outType = DeviceRemindType::IDLE_DONOT_REMIND;
503 if (!Common::DeviceRemindTypeCToJS(asynccallbackinfo->remindType, outType)) {
504 asynccallbackinfo->info.errorCode = ERROR;
505 result = Common::NapiGetNull(env);
506 }
507 napi_create_int32(env, (int32_t)outType, &result);
508 }
509 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
510 if (asynccallbackinfo->info.callback != nullptr) {
511 ANS_LOGD("Delete getDeviceRemindType callback reference.");
512 napi_delete_reference(env, asynccallbackinfo->info.callback);
513 }
514 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
515 delete asynccallbackinfo;
516 asynccallbackinfo = nullptr;
517 }
518 }
519
GetDeviceRemindType(napi_env env,napi_callback_info info)520 napi_value GetDeviceRemindType(napi_env env, napi_callback_info info)
521 {
522 ANS_LOGD("enter");
523
524 napi_ref callback = nullptr;
525 if (Common::ParseParaOnlyCallback(env, info, callback) == nullptr) {
526 return Common::NapiGetUndefined(env);
527 }
528
529 auto asynccallbackinfo = new (std::nothrow) AsyncCallbackInfoGetRemindType {.env = env, .asyncWork = nullptr};
530 if (!asynccallbackinfo) {
531 ANS_LOGD("Create asynccallbackinfo fail.");
532 return Common::JSParaError(env, callback);
533 }
534 napi_value promise = nullptr;
535 Common::PaddingCallbackPromiseInfo(env, callback, asynccallbackinfo->info, promise);
536
537 ANS_LOGD("Create getDeviceRemindType string.");
538 napi_value resourceName = nullptr;
539 napi_create_string_latin1(env, "getDeviceRemindType", NAPI_AUTO_LENGTH, &resourceName);
540 // Asynchronous function call
541 napi_create_async_work(
542 env,
543 nullptr,
544 resourceName,
545 [](napi_env env, void *data) {
546 ANS_LOGI("GetDeviceRemindType work excute.");
547 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetRemindType *>(data);
548 if (asynccallbackinfo) {
549 asynccallbackinfo->info.errorCode =
550 NotificationHelper::GetDeviceRemindType(asynccallbackinfo->remindType);
551 }
552 },
553 AsyncCompleteCallbackGetDeviceRemindType,
554 (void *)asynccallbackinfo,
555 &asynccallbackinfo->asyncWork);
556
557 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
558
559 if (asynccallbackinfo->info.isCallback) {
560 ANS_LOGD("getDeviceRemindType callback is nullptr.");
561 return Common::NapiGetNull(env);
562 } else {
563 return promise;
564 }
565 }
566
ParseParameters(const napi_env & env,const napi_callback_info & info,EnabledWithoutAppParams & params)567 napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, EnabledWithoutAppParams ¶ms)
568 {
569 ANS_LOGD("enter");
570
571 size_t argc = ENABLED_SYNC_MAX_PARA;
572 napi_value argv[ENABLED_SYNC_MAX_PARA] = {nullptr};
573 napi_value thisVar = nullptr;
574 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
575 if (argc < ENABLED_SYNC_MIN_PARA) {
576 ANS_LOGE("Wrong number of arguments.");
577 return nullptr;
578 }
579
580 // argv[0]: userId
581 napi_valuetype valuetype = napi_undefined;
582 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
583 if (valuetype != napi_number) {
584 ANS_LOGE("Argument type error. Number expected.");
585 return nullptr;
586 }
587 NAPI_CALL(env, napi_get_value_int32(env, argv[PARAM0], ¶ms.userId));
588 if (params.userId <= SUBSCRIBE_USER_INIT) {
589 ANS_LOGE("Wrong userId[%{public}d].", params.userId);
590 return nullptr;
591 }
592
593 // argv[1]: enable
594 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
595 if (valuetype != napi_boolean) {
596 ANS_LOGE("Wrong argument type. Bool expected.");
597 return nullptr;
598 }
599 napi_get_value_bool(env, argv[PARAM1], ¶ms.enable);
600
601 // argv[2]:callback
602 if (argc >= ENABLED_SYNC_MAX_PARA) {
603 NAPI_CALL(env, napi_typeof(env, argv[PARAM2], &valuetype));
604 if (valuetype != napi_function) {
605 ANS_LOGE("Callback is not function excute promise.");
606 return Common::NapiGetNull(env);
607 }
608 napi_create_reference(env, argv[PARAM2], 1, ¶ms.callback);
609 }
610
611 return Common::NapiGetNull(env);
612 }
613
SetSyncNotificationEnabledWithoutApp(napi_env env,napi_callback_info info)614 napi_value SetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_info info)
615 {
616 ANS_LOGD("enter");
617
618 EnabledWithoutAppParams params {};
619 if (ParseParameters(env, info, params) == nullptr) {
620 return Common::JSParaError(env, params.callback);
621 }
622
623 AsyncCallbackInfoEnabledWithoutApp *asynccallbackinfo =
624 new (std::nothrow) AsyncCallbackInfoEnabledWithoutApp {.env = env, .asyncWork = nullptr, .params = params};
625 if (!asynccallbackinfo) {
626 ANS_LOGD("Asynccallbackinfo is nullptr.");
627 return Common::JSParaError(env, params.callback);
628 }
629 napi_value promise = nullptr;
630 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
631
632 ANS_LOGD("Create SetSyncNotificationEnabledWithoutApp string.");
633 napi_value resourceName = nullptr;
634 napi_create_string_latin1(env, "SetSyncNotificationEnabledWithoutApp", NAPI_AUTO_LENGTH, &resourceName);
635 // Asynchronous function call
636 napi_create_async_work(
637 env,
638 nullptr,
639 resourceName,
640 [](napi_env env, void *data) {
641 ANS_LOGI("SetSyncNotificationEnabledWithoutApp work excute.");
642 AsyncCallbackInfoEnabledWithoutApp *asynccallbackinfo =
643 static_cast<AsyncCallbackInfoEnabledWithoutApp *>(data);
644 if (asynccallbackinfo) {
645 asynccallbackinfo->info.errorCode = NotificationHelper::SetSyncNotificationEnabledWithoutApp(
646 asynccallbackinfo->params.userId, asynccallbackinfo->params.enable);
647 }
648 },
649 [](napi_env env, napi_status status, void *data) {
650 ANS_LOGI("SetSyncNotificationEnabledWithoutApp work complete.");
651 AsyncCallbackInfoEnabledWithoutApp *asynccallbackinfo =
652 static_cast<AsyncCallbackInfoEnabledWithoutApp *>(data);
653 if (asynccallbackinfo) {
654 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
655 if (asynccallbackinfo->info.callback != nullptr) {
656 ANS_LOGD("Delete setSyncNotificationEnabledWithoutApp callback reference.");
657 napi_delete_reference(env, asynccallbackinfo->info.callback);
658 }
659 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
660 delete asynccallbackinfo;
661 asynccallbackinfo = nullptr;
662 }
663 },
664 (void *)asynccallbackinfo,
665 &asynccallbackinfo->asyncWork);
666
667 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
668
669 if (asynccallbackinfo->info.isCallback) {
670 ANS_LOGD("setSyncNotificationEnabledWithoutApp callback is nullptr.");
671 return Common::NapiGetNull(env);
672 }
673 return promise;
674 }
675
ParseParameters(const napi_env & env,const napi_callback_info & info,GetEnabledWithoutAppParams & params)676 napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, GetEnabledWithoutAppParams ¶ms)
677 {
678 ANS_LOGD("enter");
679
680 size_t argc = ENABLED_SYNC_MIN_PARA;
681 napi_value argv[ENABLED_SYNC_MIN_PARA] = {nullptr};
682 napi_value thisVar = nullptr;
683 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
684 if (argc < ENABLED_SYNC_MIN_PARA - 1) {
685 ANS_LOGE("Wrong number of arguments.");
686 return nullptr;
687 }
688
689 // argv[0]: userId
690 napi_valuetype valuetype = napi_undefined;
691 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
692 if (valuetype != napi_number) {
693 ANS_LOGE("Wrong argument type. Number expected.");
694 return nullptr;
695 }
696 NAPI_CALL(env, napi_get_value_int32(env, argv[PARAM0], ¶ms.userId));
697 if (params.userId <= SUBSCRIBE_USER_INIT) {
698 ANS_LOGE("Wrong userId[%{public}d].", params.userId);
699 return nullptr;
700 }
701
702 // argv[1]:callback
703 if (argc >= ENABLED_SYNC_MIN_PARA) {
704 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
705 if (valuetype != napi_function) {
706 ANS_LOGE("Callback is not function excute promise.");
707 return Common::NapiGetNull(env);
708 }
709 napi_create_reference(env, argv[PARAM1], 1, ¶ms.callback);
710 }
711
712 return Common::NapiGetNull(env);
713 }
714
GetSyncNotificationEnabledWithoutApp(napi_env env,napi_callback_info info)715 napi_value GetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_info info)
716 {
717 ANS_LOGD("enter");
718
719 GetEnabledWithoutAppParams params {};
720 if (ParseParameters(env, info, params) == nullptr) {
721 return Common::JSParaError(env, params.callback);
722 }
723
724 AsyncCallbackInfoGetEnabledWithoutApp *asynccallbackinfo =
725 new (std::nothrow) AsyncCallbackInfoGetEnabledWithoutApp {
726 .env = env, .asyncWork = nullptr, .params = params};
727 if (!asynccallbackinfo) {
728 ANS_LOGD("Asynccallbackinfo is nullptr.");
729 return Common::JSParaError(env, params.callback);
730 }
731 napi_value promise = nullptr;
732 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
733
734 ANS_LOGD("Create GetSyncNotificationEnabledWithoutApp string.");
735 napi_value resourceName = nullptr;
736 napi_create_string_latin1(env, "GetSyncNotificationEnabledWithoutApp", NAPI_AUTO_LENGTH, &resourceName);
737 // Asynchronous function call
738 napi_create_async_work(
739 env,
740 nullptr,
741 resourceName,
742 [](napi_env env, void *data) {
743 ANS_LOGI("GetSyncNotificationEnabledWithoutApp work excute.");
744 AsyncCallbackInfoGetEnabledWithoutApp *asynccallbackinfo =
745 static_cast<AsyncCallbackInfoGetEnabledWithoutApp *>(data);
746 if (asynccallbackinfo) {
747 asynccallbackinfo->info.errorCode = NotificationHelper::GetSyncNotificationEnabledWithoutApp(
748 asynccallbackinfo->params.userId, asynccallbackinfo->enable);
749 }
750 },
751 [](napi_env env, napi_status status, void *data) {
752 ANS_LOGI("GetSyncNotificationEnabledWithoutApp work complete.");
753 AsyncCallbackInfoGetEnabledWithoutApp *asynccallbackinfo =
754 static_cast<AsyncCallbackInfoGetEnabledWithoutApp *>(data);
755 if (asynccallbackinfo) {
756 napi_value result = nullptr;
757 if (asynccallbackinfo->info.errorCode != ERR_OK) {
758 result = Common::NapiGetNull(env);
759 } else {
760 napi_get_boolean(env, asynccallbackinfo->enable, &result);
761 }
762 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
763 if (asynccallbackinfo->info.callback != nullptr) {
764 ANS_LOGD("Delete getSyncNotificationEnabledWithoutApp callback reference.");
765 napi_delete_reference(env, asynccallbackinfo->info.callback);
766 }
767 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
768 delete asynccallbackinfo;
769 asynccallbackinfo = nullptr;
770 }
771 },
772 (void *)asynccallbackinfo,
773 &asynccallbackinfo->asyncWork);
774
775 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
776
777 if (asynccallbackinfo->info.isCallback) {
778 ANS_LOGD("GetSyncNotificationEnabledWithoutApp callback is nullptr.");
779 return Common::NapiGetNull(env);
780 }
781 return promise;
782 }
783 } // namespace NotificationNapi
784 } // namespace OHOS