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