1 /*
2 * Copyright (c) 2021-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 "slot.h"
17 #include "common.h"
18 #include "napi_common_util.h"
19
20 namespace OHOS {
21 namespace NotificationNapi {
22 const int32_t ADD_SLOT_MAX_PARA = 2;
23 const int32_t ADD_SLOTS_MAX_PARA = 2;
24 const int32_t SET_SLOT_AS_BUNDLE_MAX_PARA = 3;
25 const int32_t GET_SLOT_MAX_PARA = 2;
26 const int32_t GET_SLOT_NUM_AS_BUNDLE_MAX_PARA = 2;
27 const int32_t GET_SLOTS_AS_BUNDLE_MAX_PARA = 2;
28 const int32_t REMOVE_SLOT_MAX_PARA = 2;
29 const int32_t GET_ENABLE_SLOT_MAX_PARA = 3;
30 const int32_t SET_ENABLE_SLOT_MIN_PARA = 3;
31 const int32_t SET_ENABLE_SLOT_MAX_PARA = 5;
32
33 struct ParametersInfoAddSlot {
34 NotificationSlot slot;
35 NotificationConstant::SlotType inType = NotificationConstant::SlotType::OTHER;
36 bool isAddSlotByType = false;
37 napi_ref callback = nullptr;
38 };
39
40 struct AsyncCallbackInfoAddSlot {
41 napi_env env = nullptr;
42 napi_async_work asyncWork = nullptr;
43 NotificationSlot slot;
44 NotificationConstant::SlotType inType = NotificationConstant::SlotType::OTHER;
45 bool isAddSlotByType = false;
46 CallbackPromiseInfo info;
47 };
48
49 struct ParametersInfoAddSlots {
50 std::vector<NotificationSlot> slots;
51 napi_ref callback = nullptr;
52 };
53
54 struct AsyncCallbackInfoAddSlots {
55 napi_env env = nullptr;
56 napi_async_work asyncWork = nullptr;
57 std::vector<NotificationSlot> slots;
58 CallbackPromiseInfo info;
59 };
60
61 struct ParametersInfoSetSlotByBundle {
62 NotificationBundleOption option;
63 std::vector<sptr<NotificationSlot>> slots;
64 napi_ref callback = nullptr;
65 };
66
67 struct AsyncCallbackInfoSetSlotByBundle {
68 napi_env env = nullptr;
69 napi_async_work asyncWork = nullptr;
70 ParametersInfoSetSlotByBundle params;
71 CallbackPromiseInfo info;
72 };
73
74 struct ParametersInfoGetSlot {
75 NotificationConstant::SlotType outType = NotificationConstant::SlotType::OTHER;
76 napi_ref callback = nullptr;
77 };
78
79 struct AsyncCallbackInfoGetSlot {
80 napi_env env = nullptr;
81 napi_async_work asyncWork = nullptr;
82 NotificationConstant::SlotType outType = NotificationConstant::SlotType::OTHER;
83 CallbackPromiseInfo info;
84 sptr<NotificationSlot> slot = nullptr;
85 };
86
87 struct ParametersInfoGetSlotNumByBundle {
88 NotificationBundleOption option;
89 napi_ref callback = nullptr;
90 };
91
92 struct AsyncCallbackInfoGetSlotNumByBundle {
93 napi_env env = nullptr;
94 napi_async_work asyncWork = nullptr;
95 ParametersInfoGetSlotNumByBundle params;
96 CallbackPromiseInfo info;
97 uint64_t num = 0;
98 };
99
100 struct AsyncCallbackInfoGetSlots {
101 napi_env env = nullptr;
102 napi_async_work asyncWork = nullptr;
103 CallbackPromiseInfo info;
104 std::vector<sptr<NotificationSlot>> slots;
105 };
106
107 struct ParametersInfoGetSlotsByBundle {
108 NotificationBundleOption option;
109 napi_ref callback = nullptr;
110 };
111
112 struct AsyncCallbackInfoGetSlotsByBundle {
113 napi_env env = nullptr;
114 napi_async_work asyncWork = nullptr;
115 ParametersInfoGetSlotsByBundle params;
116 CallbackPromiseInfo info;
117 std::vector<sptr<NotificationSlot>> slots;
118 };
119
120 struct ParametersInfoRemoveSlot {
121 NotificationConstant::SlotType outType = NotificationConstant::SlotType::OTHER;
122 napi_ref callback = nullptr;
123 };
124
125 struct AsyncCallbackInfoRemoveSlot {
126 napi_env env = nullptr;
127 napi_async_work asyncWork = nullptr;
128 NotificationConstant::SlotType outType = NotificationConstant::SlotType::OTHER;
129 CallbackPromiseInfo info;
130 };
131
132 struct AsyncCallbackInfoRemoveAllSlots {
133 napi_env env = nullptr;
134 napi_async_work asyncWork = nullptr;
135 CallbackPromiseInfo info;
136 };
137
138 struct ParametersInfoEnableSlot {
139 NotificationBundleOption option;
140 NotificationConstant::SlotType outType = NotificationConstant::SlotType::OTHER;
141 bool enable = false;
142 bool isForceControl = false;
143 napi_ref callback = nullptr;
144 };
145
146 struct AsyncCallbackInfoInfoEnableSlot {
147 napi_env env = nullptr;
148 napi_async_work asyncWork = nullptr;
149 ParametersInfoEnableSlot params;
150 CallbackPromiseInfo info;
151 };
152
153 struct ParametersInfoIsEnableSlot {
154 NotificationBundleOption option;
155 NotificationConstant::SlotType outType = NotificationConstant::SlotType::OTHER;
156 napi_ref callback = nullptr;
157 };
158
159 struct AsyncCallbackInfoInfoIsEnableSlot {
160 napi_env env = nullptr;
161 napi_async_work asyncWork = nullptr;
162 ParametersInfoIsEnableSlot params;
163 bool isEnable = false;
164 CallbackPromiseInfo info;
165 };
166
167 struct ParametersInfoSetSlotFlagsByBundle {
168 NotificationBundleOption option;
169 uint32_t slotFlags;
170 napi_ref callback = nullptr;
171 };
172
173 struct ParametersInfoGetSlotFlagsByBundle {
174 NotificationBundleOption option;
175 napi_ref callback = nullptr;
176 };
177
178 struct AsyncCallbackInfoSetSlotFlagsByBundle {
179 napi_env env = nullptr;
180 napi_async_work asyncWork = nullptr;
181 ParametersInfoSetSlotFlagsByBundle params;
182 CallbackPromiseInfo info;
183 };
184
185 struct AsyncCallbackInfoGetSlotFlagsByBundle {
186 napi_env env = nullptr;
187 napi_async_work asyncWork = nullptr;
188 ParametersInfoGetSlotFlagsByBundle params;
189 CallbackPromiseInfo info;
190 uint32_t slotFlags = 0;
191 };
192
ParseParametersByAddSlot(const napi_env & env,const napi_callback_info & info,ParametersInfoAddSlot & paras)193 napi_value ParseParametersByAddSlot(const napi_env &env, const napi_callback_info &info, ParametersInfoAddSlot ¶s)
194 {
195 ANS_LOGI("ParseParametersByAddSlot enter");
196 size_t argc = ADD_SLOT_MAX_PARA;
197 napi_value argv[ADD_SLOT_MAX_PARA] = {nullptr};
198 napi_value thisVar = nullptr;
199 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
200 if (argc < 1) {
201 ANS_LOGE("Wrong number of arguments");
202 return nullptr;
203 }
204
205 napi_valuetype valuetype = napi_undefined;
206 // argv[0]: NotificationSlot
207 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
208 if (valuetype != napi_object && valuetype != napi_number) {
209 ANS_LOGE("Wrong argument type. Object or number expected.");
210 return nullptr;
211 }
212 if (valuetype == napi_number) {
213 paras.isAddSlotByType = true;
214 int32_t slotType = 0;
215 napi_get_value_int32(env, argv[PARAM0], &slotType);
216 if (!Common::SlotTypeJSToC(SlotType(slotType), paras.inType)) {
217 return nullptr;
218 }
219 } else {
220 paras.isAddSlotByType = false;
221 if (!Common::GetNotificationSlot(env, argv[PARAM0], paras.slot)) {
222 return nullptr;
223 }
224 }
225
226 // argv[1]:callback
227 if (argc >= ADD_SLOT_MAX_PARA) {
228 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
229 if (valuetype != napi_function) {
230 ANS_LOGE("Callback is not function excute promise.");
231 return Common::NapiGetNull(env);
232 }
233 napi_create_reference(env, argv[PARAM1], 1, ¶s.callback);
234 }
235
236 ANS_LOGI("ParseParametersByAddSlot OUT");
237 return Common::NapiGetNull(env);
238 }
239
ParseParametersByAddSlots(const napi_env & env,const napi_callback_info & info,ParametersInfoAddSlots & paras)240 napi_value ParseParametersByAddSlots(const napi_env &env, const napi_callback_info &info, ParametersInfoAddSlots ¶s)
241 {
242 ANS_LOGI("ParseParametersByAddSlots enter");
243 size_t argc = ADD_SLOTS_MAX_PARA;
244 napi_value argv[ADD_SLOTS_MAX_PARA] = {nullptr};
245 napi_value thisVar = nullptr;
246 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
247 if (argc < 1) {
248 ANS_LOGE("Wrong number of arguments");
249 return nullptr;
250 }
251
252 napi_valuetype valuetype = napi_undefined;
253 // argv[0]: Array<NotificationSlot>
254 bool isArray = false;
255 napi_is_array(env, argv[PARAM0], &isArray);
256 if (!isArray) {
257 ANS_LOGE("Wrong argument type. Array expected.");
258 return nullptr;
259 }
260 uint32_t length = 0;
261 napi_get_array_length(env, argv[PARAM0], &length);
262 if (length == 0) {
263 ANS_LOGE("The array is empty.");
264 return nullptr;
265 }
266 for (size_t i = 0; i < length; i++) {
267 napi_value nSlot = nullptr;
268 napi_get_element(env, argv[PARAM0], i, &nSlot);
269 NAPI_CALL(env, napi_typeof(env, nSlot, &valuetype));
270 if (valuetype != napi_object) {
271 ANS_LOGE("Wrong argument type. Object expected.");
272 return nullptr;
273 }
274 NotificationSlot slot;
275 if (!Common::GetNotificationSlot(env, nSlot, slot)) {
276 return nullptr;
277 }
278 paras.slots.emplace_back(slot);
279 }
280
281 // argv[1]:callback
282 if (argc >= ADD_SLOTS_MAX_PARA) {
283 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
284 if (valuetype != napi_function) {
285 ANS_LOGE("Callback is not function excute promise.");
286 return Common::NapiGetNull(env);
287 }
288 napi_create_reference(env, argv[PARAM1], 1, ¶s.callback);
289 }
290 ANS_LOGI("ParseParametersByAddSlots out");
291 return Common::NapiGetNull(env);
292 }
293
ParseParametersSetSlotByBundle(const napi_env & env,const napi_callback_info & info,ParametersInfoSetSlotByBundle & params)294 napi_value ParseParametersSetSlotByBundle(
295 const napi_env &env, const napi_callback_info &info, ParametersInfoSetSlotByBundle ¶ms)
296 {
297 ANS_LOGI("ParseParametersSetSlotByBundle enter");
298
299 size_t argc = SET_SLOT_AS_BUNDLE_MAX_PARA;
300 napi_value argv[SET_SLOT_AS_BUNDLE_MAX_PARA] = {nullptr};
301 napi_value thisVar = nullptr;
302 napi_valuetype valuetype = napi_undefined;
303 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
304 if (argc < SET_SLOT_AS_BUNDLE_MAX_PARA - 1) {
305 ANS_LOGE("Wrong number of arguments.");
306 return nullptr;
307 }
308
309 // argv[0]: bundle
310 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
311 if (valuetype != napi_object) {
312 ANS_LOGE("Argument type error. Object expected.");
313 return nullptr;
314 }
315 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
316 if (retValue == nullptr) {
317 ANS_LOGE("GetBundleOption failed.");
318 return nullptr;
319 }
320
321 // argv[1]: slot
322 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
323 if (valuetype != napi_object) {
324 ANS_LOGE("Wrong argument type. Object expected.");
325 return nullptr;
326 }
327 NotificationSlot slot;
328 if (!Common::GetNotificationSlot(env, argv[PARAM1], slot)) {
329 return nullptr;
330 }
331 std::vector<NotificationSlot> slots;
332 slots.emplace_back(slot);
333
334 for (auto vec : slots) {
335 sptr<NotificationSlot> slotPtr = new (std::nothrow) NotificationSlot(vec);
336 if (slotPtr == nullptr) {
337 ANS_LOGE("Failed to create NotificationSlot ptr");
338 return nullptr;
339 }
340 params.slots.emplace_back(slotPtr);
341 }
342
343 // argv[2]:callback
344 if (argc >= SET_SLOT_AS_BUNDLE_MAX_PARA) {
345 NAPI_CALL(env, napi_typeof(env, argv[PARAM2], &valuetype));
346 if (valuetype != napi_function) {
347 ANS_LOGE("Callback is not function excute promise.");
348 return Common::NapiGetNull(env);
349 }
350 napi_create_reference(env, argv[PARAM2], 1, ¶ms.callback);
351 }
352
353 return Common::NapiGetNull(env);
354 }
355
ParseParametersByGetSlot(const napi_env & env,const napi_callback_info & info,ParametersInfoGetSlot & paras)356 napi_value ParseParametersByGetSlot(const napi_env &env, const napi_callback_info &info, ParametersInfoGetSlot ¶s)
357 {
358 ANS_LOGD("enter");
359 size_t argc = GET_SLOT_MAX_PARA;
360 napi_value argv[GET_SLOT_MAX_PARA] = {nullptr};
361 napi_value thisVar = nullptr;
362 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
363 if (argc < 1) {
364 ANS_LOGE("Error number of arguments");
365 return nullptr;
366 }
367
368 napi_valuetype valuetype = napi_undefined;
369 // argv[0]: SlotType
370 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
371 if (valuetype != napi_number) {
372 ANS_LOGE("Error argument type. Number expected.");
373 return nullptr;
374 }
375 int32_t slotType = 0;
376 napi_get_value_int32(env, argv[PARAM0], &slotType);
377 if (!Common::SlotTypeJSToC(SlotType(slotType), paras.outType)) {
378 return nullptr;
379 }
380
381 // argv[1]:callback
382 if (argc >= GET_SLOT_MAX_PARA) {
383 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
384 if (valuetype != napi_function) {
385 ANS_LOGE("Callback is not function excute promise.");
386 return Common::NapiGetNull(env);
387 }
388 napi_create_reference(env, argv[PARAM1], 1, ¶s.callback);
389 }
390 return Common::NapiGetNull(env);
391 }
392
ParseParametersGetSlotNumByBundle(const napi_env & env,const napi_callback_info & info,ParametersInfoGetSlotNumByBundle & params)393 napi_value ParseParametersGetSlotNumByBundle(
394 const napi_env &env, const napi_callback_info &info, ParametersInfoGetSlotNumByBundle ¶ms)
395 {
396 ANS_LOGD("enter");
397
398 size_t argc = GET_SLOT_NUM_AS_BUNDLE_MAX_PARA;
399 napi_value argv[GET_SLOT_NUM_AS_BUNDLE_MAX_PARA] = {nullptr};
400 napi_value thisVar = nullptr;
401 napi_valuetype valuetype = napi_undefined;
402 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
403 if (argc < GET_SLOT_NUM_AS_BUNDLE_MAX_PARA - 1) {
404 ANS_LOGE("Error number of arguments");
405 return nullptr;
406 }
407
408 // argv[0]: bundle
409 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
410 if (valuetype != napi_object) {
411 ANS_LOGE("Argument type is error. Object anticipate.");
412 return nullptr;
413 }
414 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
415 if (retValue == nullptr) {
416 ANS_LOGE("GetBundleOption failed.");
417 return nullptr;
418 }
419
420 // argv[1]:callback
421 if (argc >= GET_SLOT_NUM_AS_BUNDLE_MAX_PARA) {
422 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
423 if (valuetype != napi_function) {
424 ANS_LOGE("Callback is not function excute promise.");
425 return Common::NapiGetNull(env);
426 }
427 napi_create_reference(env, argv[PARAM1], 1, ¶ms.callback);
428 }
429
430 return Common::NapiGetNull(env);
431 }
432
433
ParseParametersSetSlotFlagsByBundle(const napi_env & env,const napi_callback_info & info,ParametersInfoSetSlotFlagsByBundle & params)434 napi_value ParseParametersSetSlotFlagsByBundle(
435 const napi_env &env, const napi_callback_info &info, ParametersInfoSetSlotFlagsByBundle ¶ms)
436 {
437 ANS_LOGI("ParseParametersSetSlotByBundle enter");
438
439 size_t argc = SET_SLOT_AS_BUNDLE_MAX_PARA;
440 napi_value argv[SET_SLOT_AS_BUNDLE_MAX_PARA] = {nullptr};
441 napi_value thisVar = nullptr;
442 napi_valuetype valuetype = napi_undefined;
443 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
444 if (argc < SET_SLOT_AS_BUNDLE_MAX_PARA - 1) {
445 ANS_LOGE("Wrong number of arguments.");
446 return nullptr;
447 }
448
449 // argv[0]: bundle
450 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
451 if (valuetype != napi_object) {
452 ANS_LOGE("Argument type error. Object expected.");
453 return nullptr;
454 }
455 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
456 if (retValue == nullptr) {
457 ANS_LOGE("GetBundleOption failed.");
458 return nullptr;
459 }
460
461 // argv[1]:slotFlags
462 ANS_LOGI("ParseParametersSetSlotByBundle enter1");
463 int32_t slotFlags = 0;
464 napi_get_value_int32(env, argv[PARAM1], &slotFlags);
465 params.slotFlags = slotFlags;
466 ANS_LOGI("enter2");
467
468 // argv[2]:callback
469 if (argc >= SET_SLOT_AS_BUNDLE_MAX_PARA) {
470 NAPI_CALL(env, napi_typeof(env, argv[PARAM2], &valuetype));
471 if (valuetype != napi_function) {
472 ANS_LOGE("Callback is not function excute promise.");
473 return Common::NapiGetNull(env);
474 }
475 ANS_LOGI("ParseParametersSetSlotByBundle enter3");
476 napi_create_reference(env, argv[PARAM2], 1, ¶ms.callback);
477 }
478
479 ANS_LOGI("ParseParametersSetSlotByBundle out!");
480 return Common::NapiGetNull(env);
481 }
482
ParseParametersGetSlotFlagsByBundle(const napi_env & env,const napi_callback_info & info,ParametersInfoGetSlotFlagsByBundle & params)483 napi_value ParseParametersGetSlotFlagsByBundle(
484 const napi_env &env, const napi_callback_info &info, ParametersInfoGetSlotFlagsByBundle ¶ms)
485 {
486 ANS_LOGD("enter");
487
488 size_t argc = GET_SLOTS_AS_BUNDLE_MAX_PARA;
489 napi_value argv[GET_SLOTS_AS_BUNDLE_MAX_PARA] = {nullptr};
490 napi_value thisVar = nullptr;
491 napi_valuetype valuetype = napi_undefined;
492 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
493 if (argc < GET_SLOTS_AS_BUNDLE_MAX_PARA - 1) {
494 ANS_LOGE("Wrong number of arguments");
495 return nullptr;
496 }
497
498 // argv[0]: bundle
499 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
500 if (valuetype != napi_object) {
501 ANS_LOGE("Wrong argument type. Object expected.");
502 return nullptr;
503 }
504 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
505 if (retValue == nullptr) {
506 ANS_LOGE("GetBundleOption failed.");
507 return nullptr;
508 }
509
510 // argv[1]:callback
511 if (argc >= GET_SLOTS_AS_BUNDLE_MAX_PARA) {
512 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
513 if (valuetype != napi_function) {
514 ANS_LOGE("Callback is not function excute promise.");
515 return Common::NapiGetNull(env);
516 }
517 napi_create_reference(env, argv[PARAM1], 1, ¶ms.callback);
518 }
519
520 return Common::NapiGetNull(env);
521 }
522
ParseParametersGetSlotsByBundle(const napi_env & env,const napi_callback_info & info,ParametersInfoGetSlotsByBundle & params)523 napi_value ParseParametersGetSlotsByBundle(
524 const napi_env &env, const napi_callback_info &info, ParametersInfoGetSlotsByBundle ¶ms)
525 {
526 ANS_LOGD("enter");
527
528 size_t argc = GET_SLOTS_AS_BUNDLE_MAX_PARA;
529 napi_value argv[GET_SLOTS_AS_BUNDLE_MAX_PARA] = {nullptr};
530 napi_value thisVar = nullptr;
531 napi_valuetype valuetype = napi_undefined;
532 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
533 if (argc < GET_SLOTS_AS_BUNDLE_MAX_PARA - 1) {
534 ANS_LOGE("Wrong number of arguments");
535 return nullptr;
536 }
537
538 // argv[0]: bundle
539 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
540 if (valuetype != napi_object) {
541 ANS_LOGE("Wrong argument type. Object expected.");
542 return nullptr;
543 }
544 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
545 if (retValue == nullptr) {
546 ANS_LOGE("GetBundleOption failed.");
547 return nullptr;
548 }
549
550 // argv[1]:callback
551 if (argc >= GET_SLOTS_AS_BUNDLE_MAX_PARA) {
552 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
553 if (valuetype != napi_function) {
554 ANS_LOGE("Callback is not function excute promise.");
555 return Common::NapiGetNull(env);
556 }
557 napi_create_reference(env, argv[PARAM1], 1, ¶ms.callback);
558 }
559
560 return Common::NapiGetNull(env);
561 }
562
ParseParametersByRemoveSlot(const napi_env & env,const napi_callback_info & info,ParametersInfoRemoveSlot & paras)563 napi_value ParseParametersByRemoveSlot(
564 const napi_env &env, const napi_callback_info &info, ParametersInfoRemoveSlot ¶s)
565 {
566 ANS_LOGD("enter");
567 size_t argc = REMOVE_SLOT_MAX_PARA;
568 napi_value argv[REMOVE_SLOT_MAX_PARA] = {nullptr};
569 napi_value thisVar = nullptr;
570 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
571 if (argc < 1) {
572 ANS_LOGE("Wrong number of arguments");
573 return nullptr;
574 }
575
576 napi_valuetype valuetype = napi_undefined;
577 // argv[0]: SlotType
578 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
579 if (valuetype != napi_number) {
580 ANS_LOGE("Wrong argument type. Number expected.");
581 return nullptr;
582 }
583 int32_t slotType = 0;
584 napi_get_value_int32(env, argv[PARAM0], &slotType);
585 if (!Common::SlotTypeJSToC(SlotType(slotType), paras.outType)) {
586 return nullptr;
587 }
588
589 // argv[1]:callback
590 if (argc >= REMOVE_SLOT_MAX_PARA) {
591 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
592 if (valuetype != napi_function) {
593 ANS_LOGE("Callback is not function excute promise.");
594 return Common::NapiGetNull(env);
595 }
596 napi_create_reference(env, argv[PARAM1], 1, ¶s.callback);
597 }
598 return Common::NapiGetNull(env);
599 }
600
AddSlot(napi_env env,napi_callback_info info)601 napi_value AddSlot(napi_env env, napi_callback_info info)
602 {
603 ANS_LOGD("enter");
604
605 ParametersInfoAddSlot paras;
606 if (ParseParametersByAddSlot(env, info, paras) == nullptr) {
607 return Common::NapiGetUndefined(env);
608 }
609
610 AsyncCallbackInfoAddSlot *asynccallbackinfo = new (std::nothrow) AsyncCallbackInfoAddSlot {
611 .env = env,
612 .asyncWork = nullptr,
613 .slot = paras.slot,
614 .inType = paras.inType,
615 .isAddSlotByType = paras.isAddSlotByType
616 };
617 if (!asynccallbackinfo) {
618 return Common::JSParaError(env, paras.callback);
619 }
620 napi_value promise = nullptr;
621 Common::PaddingCallbackPromiseInfo(env, paras.callback, asynccallbackinfo->info, promise);
622
623 ANS_LOGD("Create addSlot string.");
624 napi_value resourceName = nullptr;
625 napi_create_string_latin1(env, "addSlot", NAPI_AUTO_LENGTH, &resourceName);
626 // Asynchronous function call
627 napi_create_async_work(env,
628 nullptr,
629 resourceName,
630 [](napi_env env, void *data) {
631 ANS_LOGI("AddSlot work excute.");
632 auto asynccallbackinfo = static_cast<AsyncCallbackInfoAddSlot *>(data);
633 if (asynccallbackinfo) {
634 ANS_LOGD("asynccallbackinfo is not nullptr.");
635 if (asynccallbackinfo->isAddSlotByType) {
636 asynccallbackinfo->info.errorCode = NotificationHelper::AddSlotByType(asynccallbackinfo->inType);
637 } else {
638 asynccallbackinfo->info.errorCode =
639 NotificationHelper::AddNotificationSlot(asynccallbackinfo->slot);
640 }
641 }
642 },
643 [](napi_env env, napi_status status, void *data) {
644 ANS_LOGI("AddSlot work complete.");
645 auto asynccallbackinfo = static_cast<AsyncCallbackInfoAddSlot *>(data);
646 if (asynccallbackinfo) {
647 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
648 if (asynccallbackinfo->info.callback != nullptr) {
649 ANS_LOGD("Delete addSlot callback reference.");
650 napi_delete_reference(env, asynccallbackinfo->info.callback);
651 }
652 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
653 delete asynccallbackinfo;
654 asynccallbackinfo = nullptr;
655 }
656 ANS_LOGD("AddSlot work complete end.");
657 },
658 (void *)asynccallbackinfo,
659 &asynccallbackinfo->asyncWork);
660
661 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
662
663 if (asynccallbackinfo->info.isCallback) {
664 ANS_LOGD("addSlot callback is nullptr.");
665 return Common::NapiGetNull(env);
666 } else {
667 return promise;
668 }
669 }
670
AddSlots(napi_env env,napi_callback_info info)671 napi_value AddSlots(napi_env env, napi_callback_info info)
672 {
673 ANS_LOGD("enter");
674
675 ParametersInfoAddSlots paras;
676 if (ParseParametersByAddSlots(env, info, paras) == nullptr) {
677 return Common::NapiGetUndefined(env);
678 }
679
680 AsyncCallbackInfoAddSlots *asynccallbackinfo =
681 new (std::nothrow) AsyncCallbackInfoAddSlots {.env = env, .asyncWork = nullptr, .slots = paras.slots};
682 if (!asynccallbackinfo) {
683 return Common::JSParaError(env, paras.callback);
684 }
685 napi_value promise = nullptr;
686 Common::PaddingCallbackPromiseInfo(env, paras.callback, asynccallbackinfo->info, promise);
687
688 ANS_LOGD("AddSlots work excute.");
689 napi_value resourceName = nullptr;
690 napi_create_string_latin1(env, "addSlots", NAPI_AUTO_LENGTH, &resourceName);
691 // Asynchronous function call
692 napi_create_async_work(env,
693 nullptr,
694 resourceName,
695 [](napi_env env, void *data) {
696 ANS_LOGI("AddSlots work excute.");
697 auto asynccallbackinfo = static_cast<AsyncCallbackInfoAddSlots *>(data);
698 if (asynccallbackinfo) {
699 asynccallbackinfo->info.errorCode = NotificationHelper::AddNotificationSlots(asynccallbackinfo->slots);
700 }
701 },
702 [](napi_env env, napi_status status, void *data) {
703 ANS_LOGI("AddSlots work complete.");
704 auto asynccallbackinfo = static_cast<AsyncCallbackInfoAddSlots *>(data);
705 if (asynccallbackinfo) {
706 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
707 if (asynccallbackinfo->info.callback != nullptr) {
708 ANS_LOGD("Delete addSlots callback reference.");
709 napi_delete_reference(env, asynccallbackinfo->info.callback);
710 }
711 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
712 delete asynccallbackinfo;
713 asynccallbackinfo = nullptr;
714 }
715 ANS_LOGD("AddSlots work complete end.");
716 },
717 (void *)asynccallbackinfo,
718 &asynccallbackinfo->asyncWork);
719
720 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
721
722 if (asynccallbackinfo->info.isCallback) {
723 ANS_LOGD("addSlots callback is nullptr.");
724 return Common::NapiGetNull(env);
725 } else {
726 return promise;
727 }
728 }
729
SetSlotByBundle(napi_env env,napi_callback_info info)730 napi_value SetSlotByBundle(napi_env env, napi_callback_info info)
731 {
732 ANS_LOGD("enter");
733
734 ParametersInfoSetSlotByBundle params {};
735 if (ParseParametersSetSlotByBundle(env, info, params) == nullptr) {
736 return Common::NapiGetUndefined(env);
737 }
738
739 AsyncCallbackInfoSetSlotByBundle *asynccallbackinfo =
740 new (std::nothrow) AsyncCallbackInfoSetSlotByBundle {.env = env, .asyncWork = nullptr, .params = params};
741 if (!asynccallbackinfo) {
742 ANS_LOGD("Asynccallbackinfo is nullptr.");
743 return Common::JSParaError(env, params.callback);
744 }
745 napi_value promise = nullptr;
746 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
747
748 ANS_LOGD("Create setSlotByBundle string.");
749 napi_value resourceName = nullptr;
750 napi_create_string_latin1(env, "setSlotByBundle", NAPI_AUTO_LENGTH, &resourceName);
751 // Asynchronous function call
752 napi_create_async_work(env,
753 nullptr,
754 resourceName,
755 [](napi_env env, void *data) {
756 ANS_LOGI("SetSlotByBundle napi_create_async_work start");
757 auto asynccallbackinfo = static_cast<AsyncCallbackInfoSetSlotByBundle *>(data);
758 if (asynccallbackinfo) {
759 asynccallbackinfo->info.errorCode = NotificationHelper::UpdateNotificationSlots(
760 asynccallbackinfo->params.option, asynccallbackinfo->params.slots);
761 }
762 },
763 [](napi_env env, napi_status status, void *data) {
764 ANS_LOGI("SetSlotByBundle napi_create_async_work end");
765 auto asynccallbackinfo = static_cast<AsyncCallbackInfoSetSlotByBundle *>(data);
766 if (asynccallbackinfo) {
767 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
768 if (asynccallbackinfo->info.callback != nullptr) {
769 ANS_LOGD("Delete setSlotByBundle callback reference.");
770 napi_delete_reference(env, asynccallbackinfo->info.callback);
771 }
772 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
773 delete asynccallbackinfo;
774 asynccallbackinfo = nullptr;
775 }
776 ANS_LOGD("SetSlotByBundle work complete end.");
777 },
778 (void *)asynccallbackinfo,
779 &asynccallbackinfo->asyncWork);
780
781 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
782
783 if (asynccallbackinfo->info.isCallback) {
784 ANS_LOGD("setSlotByBundle callback is nullptr.");
785 return Common::NapiGetNull(env);
786 } else {
787 return promise;
788 }
789 }
790
791
AsyncCompleteCallbackGetSlot(napi_env env,napi_status status,void * data)792 void AsyncCompleteCallbackGetSlot(napi_env env, napi_status status, void *data)
793 {
794 ANS_LOGI("GetSlot work complete.");
795
796 if (!data) {
797 ANS_LOGE("Invalid async callback data");
798 return;
799 }
800
801 auto asynccallbackinfo = static_cast<AsyncCallbackInfoGetSlot *>(data);
802 if (asynccallbackinfo) {
803 ANS_LOGD("Asynccallbackinfo is not nullptr.");
804 napi_value result = Common::NapiGetNull(env);
805 if (asynccallbackinfo->info.errorCode == ERR_OK) {
806 if (asynccallbackinfo->slot != nullptr) {
807 ANS_LOGD("slot is not nullptr.");
808 napi_create_object(env, &result);
809 if (!Common::SetNotificationSlot(env, *asynccallbackinfo->slot, result)) {
810 asynccallbackinfo->info.errorCode = ERROR;
811 result = Common::NapiGetNull(env);
812 }
813 }
814 }
815 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
816 if (asynccallbackinfo->info.callback != nullptr) {
817 ANS_LOGD("Delete getSlot callback reference.");
818 napi_delete_reference(env, asynccallbackinfo->info.callback);
819 }
820 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
821 delete asynccallbackinfo;
822 asynccallbackinfo = nullptr;
823 }
824 }
825
GetSlot(napi_env env,napi_callback_info info)826 napi_value GetSlot(napi_env env, napi_callback_info info)
827 {
828 ANS_LOGD("enter");
829
830 ParametersInfoGetSlot paras;
831 if (ParseParametersByGetSlot(env, info, paras) == nullptr) {
832 return Common::NapiGetUndefined(env);
833 }
834
835 AsyncCallbackInfoGetSlot *asynccallbackinfo =
836 new (std::nothrow) AsyncCallbackInfoGetSlot {.env = env, .asyncWork = nullptr, .outType = paras.outType};
837 if (!asynccallbackinfo) {
838 ANS_LOGD("Asynccallbackinfo is nullptr.");
839 return Common::JSParaError(env, paras.callback);
840 }
841 napi_value promise = nullptr;
842 Common::PaddingCallbackPromiseInfo(env, paras.callback, asynccallbackinfo->info, promise);
843
844 ANS_LOGD("Create getSlot string.");
845 napi_value resourceName = nullptr;
846 napi_create_string_latin1(env, "getSlot", NAPI_AUTO_LENGTH, &resourceName);
847 // Asynchronous function call
848 napi_create_async_work(env,
849 nullptr,
850 resourceName,
851 [](napi_env env, void *data) {
852 ANS_LOGI("GetSlot napi_create_async_work start");
853 auto asynccallbackinfo = static_cast<AsyncCallbackInfoGetSlot *>(data);
854 if (asynccallbackinfo) {
855 asynccallbackinfo->info.errorCode =
856 NotificationHelper::GetNotificationSlot(asynccallbackinfo->outType, asynccallbackinfo->slot);
857 }
858 },
859 AsyncCompleteCallbackGetSlot,
860 (void *)asynccallbackinfo,
861 &asynccallbackinfo->asyncWork);
862
863 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
864
865 if (asynccallbackinfo->info.isCallback) {
866 ANS_LOGD("GetSlot callback is nullptr.");
867 return Common::NapiGetNull(env);
868 } else {
869 return promise;
870 }
871 }
872
GetSlotNumByBundle(napi_env env,napi_callback_info info)873 napi_value GetSlotNumByBundle(napi_env env, napi_callback_info info)
874 {
875 ANS_LOGD("enter");
876
877 ParametersInfoGetSlotNumByBundle params {};
878 if (ParseParametersGetSlotNumByBundle(env, info, params) == nullptr) {
879 return Common::NapiGetUndefined(env);
880 }
881
882 AsyncCallbackInfoGetSlotNumByBundle *asynccallbackinfo =
883 new (std::nothrow) AsyncCallbackInfoGetSlotNumByBundle {.env = env, .asyncWork = nullptr, .params = params};
884 if (!asynccallbackinfo) {
885 ANS_LOGD("Asynccallbackinfo is nullptr.");
886 return Common::JSParaError(env, params.callback);
887 }
888 napi_value promise = nullptr;
889 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
890
891 ANS_LOGD("create getSlotNumByBundle string.");
892 napi_value resourceName = nullptr;
893 napi_create_string_latin1(env, "getSlotNumByBundle", NAPI_AUTO_LENGTH, &resourceName);
894 // Asynchronous function call
895 napi_create_async_work(env,
896 nullptr,
897 resourceName,
898 [](napi_env env, void *data) {
899 ANS_LOGI("GetSlotNumByBundle napi_create_async_work start");
900 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetSlotNumByBundle *>(data);
901 if (asynccallbackinfo) {
902 asynccallbackinfo->info.errorCode = NotificationHelper::GetNotificationSlotNumAsBundle(
903 asynccallbackinfo->params.option, asynccallbackinfo->num);
904 }
905 },
906 [](napi_env env, napi_status status, void *data) {
907 ANS_LOGI("GetSlotNumByBundle napi_create_async_work end");
908 auto asynccallbackinfo = static_cast<AsyncCallbackInfoGetSlotNumByBundle *>(data);
909 if (asynccallbackinfo) {
910 napi_value result = nullptr;
911 napi_create_uint32(env, asynccallbackinfo->num, &result);
912 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
913 if (asynccallbackinfo->info.callback != nullptr) {
914 ANS_LOGD("Delete getSlotNumByBundle callback reference.");
915 napi_delete_reference(env, asynccallbackinfo->info.callback);
916 }
917 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
918 delete asynccallbackinfo;
919 asynccallbackinfo = nullptr;
920 }
921 ANS_LOGD("GetSlotNumByBundle work complete end.");
922 },
923 (void *)asynccallbackinfo,
924 &asynccallbackinfo->asyncWork);
925
926 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
927
928 if (asynccallbackinfo->info.isCallback) {
929 ANS_LOGD("getSlotNumByBundle callback is nullptr.");
930 return Common::NapiGetNull(env);
931 } else {
932 return promise;
933 }
934 }
935
AsyncCompleteCallbackGetSlots(napi_env env,napi_status status,void * data)936 void AsyncCompleteCallbackGetSlots(napi_env env, napi_status status, void *data)
937 {
938 ANS_LOGD("enter");
939 if (!data) {
940 ANS_LOGE("Invalid async callback data.");
941 return;
942 }
943 napi_value result = nullptr;
944 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetSlots *>(data);
945 if (asynccallbackinfo) {
946 ANS_LOGD("Asynccallbackinfo is not nullptr.");
947 if (asynccallbackinfo->info.errorCode != ERR_OK) {
948 result = Common::NapiGetNull(env);
949 } else {
950 napi_value arr = nullptr;
951 napi_create_array(env, &arr);
952 size_t count = 0;
953 for (auto vec : asynccallbackinfo->slots) {
954 if (!vec) {
955 ANS_LOGW("Invalidity NotificationSlot object ptr.");
956 continue;
957 }
958 napi_value nSlot = nullptr;
959 napi_create_object(env, &nSlot);
960 if (!Common::SetNotificationSlot(env, *vec, nSlot)) {
961 ANS_LOGD("SetNotificationSlot is null.");
962 continue;
963 }
964 napi_set_element(env, arr, count, nSlot);
965 count++;
966 }
967 ANS_LOGI("getSlots count : %{public}zu", count);
968 result = arr;
969 if ((count == 0) && (asynccallbackinfo->slots.size() > 0)) {
970 asynccallbackinfo->info.errorCode = ERROR;
971 result = Common::NapiGetNull(env);
972 }
973 }
974 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
975 if (asynccallbackinfo->info.callback != nullptr) {
976 ANS_LOGD("Delete getSlots callback reference.");
977 napi_delete_reference(env, asynccallbackinfo->info.callback);
978 }
979 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
980 delete asynccallbackinfo;
981 asynccallbackinfo = nullptr;
982 }
983 }
984
GetSlots(napi_env env,napi_callback_info info)985 napi_value GetSlots(napi_env env, napi_callback_info info)
986 {
987 ANS_LOGD("enter");
988
989 napi_ref callback = nullptr;
990 if (Common::ParseParaOnlyCallback(env, info, callback) == nullptr) {
991 return Common::NapiGetUndefined(env);
992 }
993
994 auto asynccallbackinfo = new (std::nothrow) AsyncCallbackInfoGetSlots {.env = env, .asyncWork = nullptr};
995 if (!asynccallbackinfo) {
996 ANS_LOGD("Create asynccallbackinfo failed.");
997 return Common::JSParaError(env, callback);
998 }
999 napi_value promise = nullptr;
1000 Common::PaddingCallbackPromiseInfo(env, callback, asynccallbackinfo->info, promise);
1001
1002 ANS_LOGD("Create getSlots string.");
1003 napi_value resourceName = nullptr;
1004 napi_create_string_latin1(env, "getSlots", NAPI_AUTO_LENGTH, &resourceName);
1005 // Asynchronous function call
1006 napi_create_async_work(env,
1007 nullptr,
1008 resourceName,
1009 [](napi_env env, void *data) {
1010 ANS_LOGI("GetSlots napi_create_async_work start");
1011 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetSlots *>(data);
1012 if (asynccallbackinfo) {
1013 asynccallbackinfo->info.errorCode = NotificationHelper::GetNotificationSlots(asynccallbackinfo->slots);
1014 }
1015 },
1016 AsyncCompleteCallbackGetSlots,
1017 (void *)asynccallbackinfo,
1018 &asynccallbackinfo->asyncWork);
1019
1020 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1021
1022 if (asynccallbackinfo->info.isCallback) {
1023 ANS_LOGD("getSlots callback is nullptr.");
1024 return Common::NapiGetNull(env);
1025 } else {
1026 return promise;
1027 }
1028 }
1029
AsyncCompleteCallbackGetSlotsByBundle(napi_env env,napi_status status,void * data)1030 void AsyncCompleteCallbackGetSlotsByBundle(napi_env env, napi_status status, void *data)
1031 {
1032 ANS_LOGD("enter");
1033 if (!data) {
1034 ANS_LOGE("Invalidated async callback data.");
1035 return;
1036 }
1037 napi_value result = nullptr;
1038 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetSlotsByBundle *>(data);
1039 if (asynccallbackinfo) {
1040 ANS_LOGE("asynccallbackinfo is not nullptr.");
1041 if (asynccallbackinfo->info.errorCode != ERR_OK) {
1042 result = Common::NapiGetNull(env);
1043 } else {
1044 napi_value arr = nullptr;
1045 napi_create_array(env, &arr);
1046 size_t count = 0;
1047 for (auto vec : asynccallbackinfo->slots) {
1048 if (!vec) {
1049 ANS_LOGW("Invalidity NotificationSlot object ptr");
1050 continue;
1051 }
1052 napi_value nSlot = nullptr;
1053 napi_create_object(env, &nSlot);
1054 if (!Common::SetNotificationSlot(env, *vec, nSlot)) {
1055 ANS_LOGD("Set notification slot is nullptr.");
1056 continue;
1057 }
1058 napi_set_element(env, arr, count, nSlot);
1059 count++;
1060 }
1061 ANS_LOGI("GetSlotsByBundle count = %{public}zu", count);
1062 result = arr;
1063 if ((count == 0) && (asynccallbackinfo->slots.size() > 0)) {
1064 asynccallbackinfo->info.errorCode = ERROR;
1065 result = Common::NapiGetNull(env);
1066 }
1067 }
1068 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
1069 if (asynccallbackinfo->info.callback != nullptr) {
1070 ANS_LOGD("Delete getSlotsByBundle callback reference.");
1071 napi_delete_reference(env, asynccallbackinfo->info.callback);
1072 }
1073 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1074 delete asynccallbackinfo;
1075 asynccallbackinfo = nullptr;
1076 }
1077 }
1078
GetSlotsByBundle(napi_env env,napi_callback_info info)1079 napi_value GetSlotsByBundle(napi_env env, napi_callback_info info)
1080 {
1081 ANS_LOGD("enter");
1082
1083 ParametersInfoGetSlotsByBundle params {};
1084 if (ParseParametersGetSlotsByBundle(env, info, params) == nullptr) {
1085 return Common::NapiGetUndefined(env);
1086 }
1087
1088 AsyncCallbackInfoGetSlotsByBundle *asynccallbackinfo =
1089 new (std::nothrow) AsyncCallbackInfoGetSlotsByBundle {.env = env, .asyncWork = nullptr, .params = params};
1090 if (!asynccallbackinfo) {
1091 ANS_LOGD("Create asynccallbackinfo failed.");
1092 return Common::JSParaError(env, params.callback);
1093 }
1094 napi_value promise = nullptr;
1095 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
1096
1097 ANS_LOGD("Create getSlotsByBundle string.");
1098 napi_value resourceName = nullptr;
1099 napi_create_string_latin1(env, "getSlotsByBundle", NAPI_AUTO_LENGTH, &resourceName);
1100 // Asynchronous function call
1101 napi_create_async_work(env,
1102 nullptr,
1103 resourceName,
1104 [](napi_env env, void *data) {
1105 ANS_LOGI("GetSlotsByBundle napi_create_async_work start");
1106 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetSlotsByBundle *>(data);
1107 if (asynccallbackinfo) {
1108 asynccallbackinfo->info.errorCode = NotificationHelper::GetNotificationSlotsForBundle(
1109 asynccallbackinfo->params.option, asynccallbackinfo->slots);
1110 }
1111 },
1112 AsyncCompleteCallbackGetSlotsByBundle,
1113 (void *)asynccallbackinfo,
1114 &asynccallbackinfo->asyncWork);
1115
1116 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1117
1118 if (asynccallbackinfo->info.isCallback) {
1119 ANS_LOGD("getSlotsByBundle callback is nullptr.");
1120 return Common::NapiGetNull(env);
1121 } else {
1122 return promise;
1123 }
1124 }
1125
RemoveSlot(napi_env env,napi_callback_info info)1126 napi_value RemoveSlot(napi_env env, napi_callback_info info)
1127 {
1128 ANS_LOGD("enter");
1129
1130 ParametersInfoRemoveSlot paras;
1131 if (ParseParametersByRemoveSlot(env, info, paras) == nullptr) {
1132 return Common::NapiGetUndefined(env);
1133 }
1134
1135 AsyncCallbackInfoRemoveSlot *asynccallbackinfo =
1136 new (std::nothrow) AsyncCallbackInfoRemoveSlot {.env = env, .asyncWork = nullptr, .outType = paras.outType};
1137 if (!asynccallbackinfo) {
1138 return Common::JSParaError(env, paras.callback);
1139 }
1140 napi_value promise = nullptr;
1141 Common::PaddingCallbackPromiseInfo(env, paras.callback, asynccallbackinfo->info, promise);
1142
1143 ANS_LOGD("Create removeSlot string.");
1144 napi_value resourceName = nullptr;
1145 napi_create_string_latin1(env, "removeSlot", NAPI_AUTO_LENGTH, &resourceName);
1146 // Asynchronous function call
1147 napi_create_async_work(env,
1148 nullptr,
1149 resourceName,
1150 [](napi_env env, void *data) {
1151 ANS_LOGI("removeSlot napi_create_async_work start");
1152 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoRemoveSlot *>(data);
1153 if (asynccallbackinfo) {
1154 asynccallbackinfo->info.errorCode =
1155 NotificationHelper::RemoveNotificationSlot(asynccallbackinfo->outType);
1156 }
1157 },
1158 [](napi_env env, napi_status status, void *data) {
1159 ANS_LOGI("removeSlot napi_create_async_work end");
1160 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoRemoveSlot *>(data);
1161 if (asynccallbackinfo) {
1162 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
1163 if (asynccallbackinfo->info.callback != nullptr) {
1164 ANS_LOGD("Delete removeSlot callback reference.");
1165 napi_delete_reference(env, asynccallbackinfo->info.callback);
1166 }
1167 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1168 delete asynccallbackinfo;
1169 asynccallbackinfo = nullptr;
1170 }
1171 ANS_LOGD("removeSlot work complete end.");
1172 },
1173 (void *)asynccallbackinfo,
1174 &asynccallbackinfo->asyncWork);
1175
1176 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1177
1178 if (asynccallbackinfo->info.isCallback) {
1179 ANS_LOGD("removeSlot callback is nullptr.");
1180 return Common::NapiGetNull(env);
1181 } else {
1182 return promise;
1183 }
1184 }
1185
RemoveAllSlots(napi_env env,napi_callback_info info)1186 napi_value RemoveAllSlots(napi_env env, napi_callback_info info)
1187 {
1188 ANS_LOGD("enter");
1189
1190 napi_ref callback = nullptr;
1191 if (Common::ParseParaOnlyCallback(env, info, callback) == nullptr) {
1192 return Common::NapiGetUndefined(env);
1193 }
1194
1195 auto *asynccallbackinfo = new (std::nothrow) AsyncCallbackInfoRemoveAllSlots {.env = env, .asyncWork = nullptr};
1196 if (!asynccallbackinfo) {
1197 ANS_LOGD("Create asynccallbackinfo failed.");
1198 return Common::JSParaError(env, callback);
1199 }
1200 napi_value promise = nullptr;
1201 Common::PaddingCallbackPromiseInfo(env, callback, asynccallbackinfo->info, promise);
1202
1203 ANS_LOGD("Create removeAll string.");
1204 napi_value resourceName = nullptr;
1205 napi_create_string_latin1(env, "removeAll", NAPI_AUTO_LENGTH, &resourceName);
1206 // Asynchronous function call
1207 napi_create_async_work(env,
1208 nullptr,
1209 resourceName,
1210 [](napi_env env, void *data) {
1211 ANS_LOGI("RemoveAllSlots napi_create_async_work start");
1212 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoRemoveAllSlots *>(data);
1213 if (asynccallbackinfo) {
1214 asynccallbackinfo->info.errorCode = NotificationHelper::RemoveAllSlots();
1215 }
1216 },
1217 [](napi_env env, napi_status status, void *data) {
1218 ANS_LOGI("RemoveAllSlots napi_create_async_work end");
1219 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoRemoveAllSlots *>(data);
1220 if (asynccallbackinfo) {
1221 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
1222 if (asynccallbackinfo->info.callback != nullptr) {
1223 ANS_LOGD("RemoveAllSlots napi_delete_reference start");
1224 napi_delete_reference(env, asynccallbackinfo->info.callback);
1225 }
1226 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1227 delete asynccallbackinfo;
1228 asynccallbackinfo = nullptr;
1229 }
1230 ANS_LOGD("RemoveAllSlots work complete end.");
1231 },
1232 (void *)asynccallbackinfo,
1233 &asynccallbackinfo->asyncWork);
1234
1235 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1236
1237 if (asynccallbackinfo->info.isCallback) {
1238 ANS_LOGD("RemoveAllSlots callback is nullptr.");
1239 return Common::NapiGetNull(env);
1240 } else {
1241 return promise;
1242 }
1243 }
1244
ParseEnableSlotCallBackParam(const napi_env & env,size_t argc,napi_value * argv,ParametersInfoEnableSlot & params)1245 static napi_value ParseEnableSlotCallBackParam(
1246 const napi_env &env, size_t argc, napi_value *argv, ParametersInfoEnableSlot ¶ms)
1247 {
1248 // argv[4]: callback
1249 if (argc < SET_ENABLE_SLOT_MAX_PARA) {
1250 return Common::NapiGetNull(env);
1251 }
1252 napi_valuetype valuetype = napi_undefined;
1253 NAPI_CALL(env, napi_typeof(env, argv[PARAM4], &valuetype));
1254 if (valuetype != napi_function) {
1255 ANS_LOGW("Callback is not function excute promise.");
1256 return Common::NapiGetNull(env);
1257 }
1258 napi_create_reference(env, argv[PARAM4], 1, ¶ms.callback);
1259 return Common::NapiGetNull(env);
1260 }
1261
ParseParametersEnableSlot(const napi_env & env,const napi_callback_info & info,ParametersInfoEnableSlot & params)1262 napi_value ParseParametersEnableSlot(
1263 const napi_env &env, const napi_callback_info &info, ParametersInfoEnableSlot ¶ms)
1264 {
1265 ANS_LOGD("enter");
1266
1267 size_t argc = SET_ENABLE_SLOT_MAX_PARA;
1268 napi_value argv[SET_ENABLE_SLOT_MAX_PARA] = {nullptr};
1269
1270 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL));
1271 if (argc < SET_ENABLE_SLOT_MIN_PARA) {
1272 ANS_LOGW("Wrong number of arguments.");
1273 return nullptr;
1274 }
1275
1276 // argv[0]: bundle
1277 if (!OHOS::AppExecFwk::IsTypeForNapiValue(env, argv[PARAM0], napi_object)) {
1278 ANS_LOGE("Parameter type is error. Object expected.");
1279 return nullptr;
1280 }
1281 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
1282 if (retValue == nullptr) {
1283 ANS_LOGE("GetBundleOption failed.");
1284 return nullptr;
1285 }
1286
1287 // argv[1]: SlotType
1288 if (!OHOS::AppExecFwk::IsTypeForNapiValue(env, argv[PARAM1], napi_number)) {
1289 ANS_LOGE("Parameter type error. Number expected.");
1290 return nullptr;
1291 }
1292 int slotType = 0;
1293 napi_get_value_int32(env, argv[PARAM1], &slotType);
1294 if (!Common::SlotTypeJSToC(SlotType(slotType), params.outType)) {
1295 return nullptr;
1296 }
1297
1298 // argv[2]: enable
1299 if (!OHOS::AppExecFwk::IsTypeForNapiValue(env, argv[PARAM2], napi_boolean)) {
1300 ANS_LOGE("Wrong argument type. Bool expected.");
1301 return nullptr;
1302 }
1303 napi_get_value_bool(env, argv[PARAM2], ¶ms.enable);
1304
1305 if (argc < SET_ENABLE_SLOT_MAX_PARA - 1) {
1306 return Common::NapiGetNull(env);
1307 }
1308
1309 // argv[3]: maybe isForceControl or callback
1310 napi_valuetype valuetype = napi_undefined;
1311 NAPI_CALL(env, napi_typeof(env, argv[PARAM3], &valuetype));
1312 if (valuetype == napi_boolean) {
1313 napi_get_value_bool(env, argv[PARAM3], ¶ms.isForceControl);
1314 } else if (valuetype == napi_function) {
1315 napi_create_reference(env, argv[PARAM3], 1, ¶ms.callback);
1316 return Common::NapiGetNull(env);
1317 } else {
1318 ANS_LOGI("Callback is not function excute promise.");
1319 return Common::NapiGetNull(env);
1320 }
1321
1322 return ParseEnableSlotCallBackParam(env, argc, argv, params);
1323 }
1324
EnableNotificationSlot(napi_env env,napi_callback_info info)1325 napi_value EnableNotificationSlot(napi_env env, napi_callback_info info)
1326 {
1327 ANS_LOGD("enter");
1328
1329 ParametersInfoEnableSlot params {};
1330 if (ParseParametersEnableSlot(env, info, params) == nullptr) {
1331 return Common::NapiGetUndefined(env);
1332 }
1333
1334 AsyncCallbackInfoInfoEnableSlot *asynccallbackinfo =
1335 new (std::nothrow) AsyncCallbackInfoInfoEnableSlot {.env = env, .asyncWork = nullptr, .params = params};
1336 if (!asynccallbackinfo) {
1337 return Common::JSParaError(env, params.callback);
1338 }
1339 napi_value promise = nullptr;
1340 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
1341
1342 ANS_LOGD("Create EnableNotificationSlot string.");
1343 napi_value resourceName = nullptr;
1344 napi_create_string_latin1(env, "EnableNotificationSlot", NAPI_AUTO_LENGTH, &resourceName);
1345 // Asynchronous function call
1346 napi_create_async_work(env,
1347 nullptr,
1348 resourceName,
1349 [](napi_env env, void *data) {
1350 ANS_LOGI("EnableNotificationSlot napi_create_async_work start");
1351 auto asynccallbackinfo = static_cast<AsyncCallbackInfoInfoEnableSlot *>(data);
1352 if (asynccallbackinfo) {
1353 asynccallbackinfo->info.errorCode = NotificationHelper::SetEnabledForBundleSlot(
1354 asynccallbackinfo->params.option,
1355 asynccallbackinfo->params.outType,
1356 asynccallbackinfo->params.enable,
1357 asynccallbackinfo->params.isForceControl);
1358 }
1359 },
1360 [](napi_env env, napi_status status, void *data) {
1361 ANS_LOGI("EnableNotificationSlot napi_create_async_work end");
1362 auto asynccallbackinfo = static_cast<AsyncCallbackInfoInfoEnableSlot *>(data);
1363 if (asynccallbackinfo) {
1364 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
1365 if (asynccallbackinfo->info.callback != nullptr) {
1366 ANS_LOGD("Delete enableNotificationSlot callback reference.");
1367 napi_delete_reference(env, asynccallbackinfo->info.callback);
1368 }
1369 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1370 delete asynccallbackinfo;
1371 asynccallbackinfo = nullptr;
1372 }
1373 ANS_LOGD("EnableNotificationSlot work complete end.");
1374 },
1375 (void *)asynccallbackinfo,
1376 &asynccallbackinfo->asyncWork);
1377
1378 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1379
1380 if (asynccallbackinfo->info.isCallback) {
1381 ANS_LOGD("enableNotificationSlot callback is nullptr.");
1382 return Common::NapiGetNull(env);
1383 } else {
1384 return promise;
1385 }
1386 }
1387
ParseParametersIsEnableSlot(const napi_env & env,const napi_callback_info & info,ParametersInfoIsEnableSlot & params)1388 napi_value ParseParametersIsEnableSlot(
1389 const napi_env &env, const napi_callback_info &info, ParametersInfoIsEnableSlot ¶ms)
1390 {
1391 ANS_LOGD("enter");
1392
1393 size_t argc = GET_ENABLE_SLOT_MAX_PARA;
1394 napi_value argv[GET_ENABLE_SLOT_MAX_PARA] = {nullptr};
1395 napi_value thisVar = nullptr;
1396 napi_valuetype valuetype = napi_undefined;
1397 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
1398 if (argc < GET_ENABLE_SLOT_MAX_PARA - 1) {
1399 ANS_LOGW("Wrong number of arguments.");
1400 return nullptr;
1401 }
1402
1403 // argv[0]: bundle
1404 NAPI_CALL(env, napi_typeof(env, argv[PARAM0], &valuetype));
1405 if (valuetype != napi_object) {
1406 ANS_LOGW("Wrong argument type. Object expected.");
1407 return nullptr;
1408 }
1409 auto retValue = Common::GetBundleOption(env, argv[PARAM0], params.option);
1410 if (retValue == nullptr) {
1411 ANS_LOGE("GetBundleOption failed.");
1412 return nullptr;
1413 }
1414
1415 // argv[1]: SlotType
1416 NAPI_CALL(env, napi_typeof(env, argv[PARAM1], &valuetype));
1417 if (valuetype != napi_number) {
1418 ANS_LOGW("Wrong argument type. Number expected.");
1419 return nullptr;
1420 }
1421 int slotType = 0;
1422 napi_get_value_int32(env, argv[PARAM1], &slotType);
1423 if (!Common::SlotTypeJSToC(SlotType(slotType), params.outType)) {
1424 return nullptr;
1425 }
1426
1427 // argv[2]:callback
1428 if (argc >= GET_ENABLE_SLOT_MAX_PARA) {
1429 NAPI_CALL(env, napi_typeof(env, argv[PARAM2], &valuetype));
1430 if (valuetype != napi_function) {
1431 ANS_LOGW("Callback is not function excute promise.");
1432 return Common::NapiGetNull(env);
1433 }
1434 napi_create_reference(env, argv[PARAM2], 1, ¶ms.callback);
1435 }
1436
1437 return Common::NapiGetNull(env);
1438 }
1439
IsEnableNotificationSlot(napi_env env,napi_callback_info info)1440 napi_value IsEnableNotificationSlot(napi_env env, napi_callback_info info)
1441 {
1442 ANS_LOGD("enter");
1443
1444 ParametersInfoIsEnableSlot params {};
1445 if (ParseParametersIsEnableSlot(env, info, params) == nullptr) {
1446 return Common::NapiGetUndefined(env);
1447 }
1448
1449 AsyncCallbackInfoInfoIsEnableSlot *asynccallbackinfo =
1450 new (std::nothrow) AsyncCallbackInfoInfoIsEnableSlot {.env = env, .asyncWork = nullptr, .params = params};
1451 if (!asynccallbackinfo) {
1452 return Common::JSParaError(env, params.callback);
1453 }
1454 napi_value promise = nullptr;
1455 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
1456
1457 ANS_LOGD("Create IsEnableNotificationSlot string.");
1458 napi_value resourceName = nullptr;
1459 napi_create_string_latin1(env, "IsEnableNotificationSlot", NAPI_AUTO_LENGTH, &resourceName);
1460 // Asynchronous function call
1461 napi_create_async_work(env,
1462 nullptr,
1463 resourceName,
1464 [](napi_env env, void *data) {
1465 ANS_LOGI("IsEnableNotificationSlot napi_create_async_work start");
1466 auto asynccallbackinfo = static_cast<AsyncCallbackInfoInfoIsEnableSlot *>(data);
1467 if (asynccallbackinfo) {
1468 asynccallbackinfo->info.errorCode = NotificationHelper::GetEnabledForBundleSlot(
1469 asynccallbackinfo->params.option, asynccallbackinfo->params.outType, asynccallbackinfo->isEnable);
1470 }
1471 },
1472 [](napi_env env, napi_status status, void *data) {
1473 ANS_LOGI("IsEnableNotificationSlot napi_create_async_work end");
1474 auto asynccallbackinfo = static_cast<AsyncCallbackInfoInfoIsEnableSlot *>(data);
1475 if (asynccallbackinfo) {
1476 napi_value result = nullptr;
1477 napi_get_boolean(env, asynccallbackinfo->isEnable, &result);
1478 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
1479 if (asynccallbackinfo->info.callback != nullptr) {
1480 napi_delete_reference(env, asynccallbackinfo->info.callback);
1481 }
1482 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1483 delete asynccallbackinfo;
1484 asynccallbackinfo = nullptr;
1485 }
1486 },
1487 (void *)asynccallbackinfo,
1488 &asynccallbackinfo->asyncWork);
1489
1490 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1491
1492 if (asynccallbackinfo->info.isCallback) {
1493 ANS_LOGD("isEnableNotificationSlot callback is nullptr.");
1494 return Common::NapiGetNull(env);
1495 } else {
1496 return promise;
1497 }
1498 }
1499
GetSlotFlagsByBundle(napi_env env,napi_callback_info info)1500 napi_value GetSlotFlagsByBundle(napi_env env, napi_callback_info info)
1501 {
1502 ANS_LOGD("enter");
1503
1504 ParametersInfoGetSlotFlagsByBundle params {};
1505 if (ParseParametersGetSlotFlagsByBundle(env, info, params) == nullptr) {
1506 return Common::NapiGetUndefined(env);
1507 }
1508
1509 AsyncCallbackInfoGetSlotFlagsByBundle *asynccallbackinfo =
1510 new (std::nothrow) AsyncCallbackInfoGetSlotFlagsByBundle {.env = env, .asyncWork = nullptr, .params = params};
1511 if (!asynccallbackinfo) {
1512 ANS_LOGD("Asynccallbackinfo is nullptr.");
1513 return Common::JSParaError(env, params.callback);
1514 }
1515 napi_value promise = nullptr;
1516 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
1517
1518 ANS_LOGD("create getSlotFlagsByBundle string.");
1519 napi_value resourceName = nullptr;
1520 napi_create_string_latin1(env, "getSlotFlagsByBundle", NAPI_AUTO_LENGTH, &resourceName);
1521
1522 // Asynchronous function call
1523 napi_create_async_work(env,
1524 nullptr,
1525 resourceName,
1526 [](napi_env env, void *data) {
1527 ANS_LOGI("GetSlotFlagsByBundle napi_create_async_work start");
1528 auto asynccallbackinfo = reinterpret_cast<AsyncCallbackInfoGetSlotFlagsByBundle *>(data);
1529 if (asynccallbackinfo) {
1530 asynccallbackinfo->info.errorCode = NotificationHelper::GetNotificationSlotFlagsAsBundle(
1531 asynccallbackinfo->params.option, asynccallbackinfo->slotFlags);
1532 }
1533 },
1534 [](napi_env env, napi_status status, void *data) {
1535 ANS_LOGI("GetSlotFlagsByBundle napi_create_async_work end");
1536 auto asynccallbackinfo = static_cast<AsyncCallbackInfoGetSlotFlagsByBundle *>(data);
1537 if (asynccallbackinfo) {
1538 napi_value result = nullptr;
1539 napi_create_uint32(env, asynccallbackinfo->slotFlags, &result);
1540 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, result);
1541 if (asynccallbackinfo->info.callback != nullptr) {
1542 ANS_LOGD("Delete getSlotFlagsByBundle callback reference.");
1543 napi_delete_reference(env, asynccallbackinfo->info.callback);
1544 }
1545 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1546 delete asynccallbackinfo;
1547 asynccallbackinfo = nullptr;
1548 }
1549 ANS_LOGD("GetSlotFlagsByBundle work complete end.");
1550 },
1551 (void *)asynccallbackinfo,
1552 &asynccallbackinfo->asyncWork);
1553
1554 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1555
1556 if (asynccallbackinfo->info.isCallback) {
1557 ANS_LOGD("getSlotFlagsByBundle callback is nullptr.");
1558 return Common::NapiGetNull(env);
1559 } else {
1560 return promise;
1561 }
1562 }
1563
SetSlotFlagsByBundle(napi_env env,napi_callback_info info)1564 napi_value SetSlotFlagsByBundle(napi_env env, napi_callback_info info)
1565 {
1566 ANS_LOGI("SetSlotFlagsByBundle enter");
1567
1568 ParametersInfoSetSlotFlagsByBundle params {};
1569 if (ParseParametersSetSlotFlagsByBundle(env, info, params) == nullptr) {
1570 ANS_LOGI("Call ParseParametersSetSlotFlagsByBundle return nullptr");
1571 return Common::NapiGetUndefined(env);
1572 }
1573
1574 AsyncCallbackInfoSetSlotFlagsByBundle *asynccallbackinfo =
1575 new (std::nothrow) AsyncCallbackInfoSetSlotFlagsByBundle {.env = env, .asyncWork = nullptr, .params = params};
1576 if (!asynccallbackinfo) {
1577 ANS_LOGD("Asynccallbackinfo is nullptr.");
1578 return Common::JSParaError(env, params.callback);
1579 }
1580 napi_value promise = nullptr;
1581 Common::PaddingCallbackPromiseInfo(env, params.callback, asynccallbackinfo->info, promise);
1582
1583 ANS_LOGD("Create setSlotFlagsByBundle string.");
1584 napi_value resourceName = nullptr;
1585 napi_create_string_latin1(env, "setSlotFlagsByBundle", NAPI_AUTO_LENGTH, &resourceName);
1586
1587 // Asynchronous function call
1588 napi_create_async_work(env,
1589 nullptr,
1590 resourceName,
1591 [](napi_env env, void *data) {
1592 ANS_LOGI("SetSlotFlagsByBundle napi_create_async_work start");
1593 auto asynccallbackinfo = static_cast<AsyncCallbackInfoSetSlotFlagsByBundle *>(data);
1594 if (asynccallbackinfo) {
1595 asynccallbackinfo->info.errorCode = NotificationHelper::SetNotificationSlotFlagsAsBundle(
1596 asynccallbackinfo->params.option, asynccallbackinfo->params.slotFlags);
1597 }
1598 },
1599 [](napi_env env, napi_status status, void *data) {
1600 ANS_LOGI("SetSlotFlagsByBundle napi_create_async_work end");
1601 auto asynccallbackinfo = static_cast<AsyncCallbackInfoSetSlotFlagsByBundle *>(data);
1602 if (asynccallbackinfo) {
1603 Common::ReturnCallbackPromise(env, asynccallbackinfo->info, Common::NapiGetNull(env));
1604 if (asynccallbackinfo->info.callback != nullptr) {
1605 ANS_LOGD("Delete setSlotFlagsByBundle callback reference.");
1606 napi_delete_reference(env, asynccallbackinfo->info.callback);
1607 }
1608 napi_delete_async_work(env, asynccallbackinfo->asyncWork);
1609 delete asynccallbackinfo;
1610 asynccallbackinfo = nullptr;
1611 }
1612 ANS_LOGD("SetSlotFlagsByBundle work complete end.");
1613 },
1614 (void *)asynccallbackinfo,
1615 &asynccallbackinfo->asyncWork);
1616
1617 napi_queue_async_work_with_qos(env, asynccallbackinfo->asyncWork, napi_qos_user_initiated);
1618
1619 if (asynccallbackinfo->info.isCallback) {
1620 ANS_LOGD("setSlotFlagsByBundle callback is nullptr.");
1621 return Common::NapiGetNull(env);
1622 } else {
1623 return promise;
1624 }
1625 ANS_LOGI("SetSlotFlagsByBundle out");
1626 }
1627
1628 } // namespace NotificationNapi
1629 } // namespace OHOS
1630