1 /*
2 * Copyright (c) 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 "event_filter_napi.h"
17 #include "calendar_log.h"
18 #include "napi_util.h"
19 #include "napi_queue.h"
20
21 namespace OHOS::CalendarApi {
22
EventFilterNapi()23 EventFilterNapi::EventFilterNapi()
24 {
25 }
26
Constructor(napi_env env)27 napi_value EventFilterNapi::Constructor(napi_env env)
28 {
29 napi_property_descriptor descriptor[] = {
30 DECLARE_NAPI_STATIC_FUNCTION("filterById", EventFilterNapi::FilterById),
31 DECLARE_NAPI_STATIC_FUNCTION("filterByTime", EventFilterNapi::FilterByTime),
32 DECLARE_NAPI_STATIC_FUNCTION("filterByTitle", EventFilterNapi::FilterByTitle),
33 };
34 size_t count = sizeof(descriptor) / sizeof(descriptor[0]);
35 return NapiUtil::DefineClass(env, "EventFilter", descriptor, count, EventFilterNapi::New);
36 }
37
New(napi_env env,napi_callback_info info)38 napi_value EventFilterNapi::New(napi_env env, napi_callback_info info)
39 {
40 LOG_DEBUG("EventFilterNapi new");
41 auto ctxt = std::make_shared<ContextBase>();
42 auto input = [env, ctxt](size_t argc, napi_value* argv) {
43 CHECK_ARGS_RETURN_VOID(ctxt, argc >= 1, "invalid arguments!");
44 };
45 ctxt->GetCbInfoSync(env, info, input);
46 NAPI_ASSERT(env, ctxt->status == napi_ok, "invalid arguments!");
47
48 auto instance = new (std::nothrow) EventFilterNapi();
49 NAPI_ASSERT(env, instance !=nullptr, "no memory for EventFilterNapi");
50
51 auto finalize = [](napi_env env, void* data, void* hint) {
52 LOG_DEBUG("EventFilterNapi finalize.");
53 auto* instance = reinterpret_cast<EventFilterNapi*>(data);
54 CHECK_RETURN_VOID(instance != nullptr, "finalize null!");
55 delete instance;
56 };
57 if (napi_wrap(env, ctxt->self, instance, finalize, nullptr, nullptr) != napi_ok) {
58 delete instance;
59 GET_AND_THROW_LAST_ERROR(env);
60 return nullptr;
61 }
62 return ctxt->self;
63 }
64
ToJson(napi_env env,napi_value inner,EventFilterNapi * & out)65 napi_status EventFilterNapi::ToJson(napi_env env, napi_value inner, EventFilterNapi*& out)
66 {
67 LOG_DEBUG("EventFilterNapi::ToJson");
68 return NapiUtil::Unwrap(env, inner, reinterpret_cast<void**>(&out), EventFilterNapi::Constructor(env));
69 }
70
SetNative(std::shared_ptr<Native::EventFilter> & eventFilter)71 void EventFilterNapi::SetNative(std::shared_ptr<Native::EventFilter>& eventFilter)
72 {
73 eventFilter_ = eventFilter;
74 }
75
GetNative()76 std::shared_ptr<Native::EventFilter>& EventFilterNapi::GetNative()
77 {
78 return eventFilter_;
79 }
80
FilterById(napi_env env,napi_callback_info info)81 napi_value EventFilterNapi::FilterById(napi_env env, napi_callback_info info)
82 {
83 LOG_INFO("FilterById");
84 napi_value result = nullptr;
85 napi_value thisVar = nullptr;
86 size_t argc = 1;
87 napi_value argv[1] = { 0 };
88 napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
89 NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
90 std::vector<int> ids;
91 auto status = NapiUtil::GetValueArray(env, argv[0], ids);
92 CHECK_RETURN(status == napi_ok, "GetValueArray failed", nullptr);
93 EventFilterNapi *filter;
94 status = napi_new_instance(env, EventFilterNapi::Constructor(env), argc, argv, &result);
95 CHECK_RETURN(status == napi_ok, "napi_new_instance failed", result);
96 CHECK_RETURN(result != nullptr, "napi_new_instance failed", result);
97 status = napi_unwrap(env, result, reinterpret_cast<void**>(&filter));
98 CHECK_RETURN(status == napi_ok, "napi_unwrap failed", nullptr);
99 CHECK_RETURN(filter != nullptr, "filter is null!", result);
100 auto nativeFilter = Native::FilterById(ids);
101 CHECK_RETURN(nativeFilter != nullptr, "Native::FilterById failed!", result);
102 filter->SetNative(nativeFilter);
103 return result;
104 }
105
106
FilterByTime(napi_env env,napi_callback_info info)107 napi_value EventFilterNapi::FilterByTime(napi_env env, napi_callback_info info)
108 {
109 LOG_INFO("FilterByTime");
110 const int paramNumber = 2;
111 napi_value result = nullptr;
112 napi_value thisVar = nullptr;
113 size_t argc = paramNumber;
114 napi_value argv[paramNumber] = { 0 };
115 napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
116 NAPI_ASSERT(env, argc == paramNumber, "requires 2 parameter");
117 int64_t start = 0;
118 int64_t end = 0;
119 napi_status status = NapiUtil::GetValue(env, argv[0], start);
120 NAPI_ASSERT(env, status == napi_ok, "GetValue start failed");
121 status = NapiUtil::GetValue(env, argv[1], end);
122 NAPI_ASSERT(env, status == napi_ok, "GetValue end failed");
123 EventFilterNapi *filter;
124 status = napi_new_instance(env, EventFilterNapi::Constructor(env), argc, argv, &result);
125 CHECK_RETURN(status == napi_ok, "napi_new_instance failed", result);
126 CHECK_RETURN(result != nullptr, "napi_new_instance failed", result);
127 status = napi_unwrap(env, result, reinterpret_cast<void**>(&filter));
128 CHECK_RETURN(status == napi_ok, "napi_unwrap failed", nullptr);
129 CHECK_RETURN(filter != nullptr, "filter is null!", result);
130 auto nativeFilter = Native::FilterByTime(start, end);
131 CHECK_RETURN(nativeFilter != nullptr, "Native::FilterById failed!", result);
132 filter->SetNative(nativeFilter);
133 return result;
134 }
135
FilterByTitle(napi_env env,napi_callback_info info)136 napi_value EventFilterNapi::FilterByTitle(napi_env env, napi_callback_info info)
137 {
138 LOG_INFO("FilterByTitle");
139 napi_value result = nullptr;
140 napi_value thisVar = nullptr;
141 size_t argc = 1;
142 napi_value argv[1] = { 0 };
143 napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
144 NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
145 string title;
146 napi_status status = NapiUtil::GetValue(env, argv[0], title);
147 NAPI_ASSERT(env, status == napi_ok, "GetValue failed");
148 EventFilterNapi *filter;
149 status = napi_new_instance(env, EventFilterNapi::Constructor(env), argc, argv, &result);
150 CHECK_RETURN(status == napi_ok, "napi_new_instance failed", result);
151 CHECK_RETURN(result != nullptr, "napi_new_instance failed", result);
152 status = napi_unwrap(env, result, reinterpret_cast<void**>(&filter));
153 CHECK_RETURN(status == napi_ok, "napi_unwrap failed", nullptr);
154 CHECK_RETURN(filter != nullptr, "filter is null!", result);
155 auto nativeFilter = Native::FilterByTitle(title);
156 CHECK_RETURN(nativeFilter != nullptr, "Native::FilterById failed!", result);
157 filter->SetNative(nativeFilter);
158 return result;
159 }
160
Init(napi_env env,napi_value exports)161 napi_value EventFilterNapi::Init(napi_env env, napi_value exports)
162 {
163 napi_set_named_property(env, exports, "EventFilter", EventFilterNapi::Constructor(env));
164 return exports;
165 }
166
167 }