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 "resource_manager_napi_async_impl.h"
17
18 #include <unordered_map>
19 #if !defined(__IDE_PREVIEW__)
20 #include "hisysevent_adapter.h"
21 #include "hitrace_meter.h"
22 #endif
23 #include "resource_manager_napi_utils.h"
24 namespace OHOS {
25 namespace Global {
26 namespace Resource {
27 using namespace std::placeholders;
28 constexpr int PARAMS_NUM_TWO = 2;
29 constexpr int PARAMS_NUM_THREE = 3;
ResourceManagerNapiAsyncImpl()30 ResourceManagerNapiAsyncImpl::ResourceManagerNapiAsyncImpl()
31 {}
32
~ResourceManagerNapiAsyncImpl()33 ResourceManagerNapiAsyncImpl::~ResourceManagerNapiAsyncImpl()
34 {}
35
36 std::unordered_map<std::string, std::function<napi_value(napi_env&, napi_callback_info&)>>
37 ResourceManagerNapiAsyncImpl::asyncFuncMatch {
38 /*===========================since 6 but deprecated since 9======================================*/
__anon840267040102(napi_env& env, napi_callback_info& info) 39 {"GetString", [](napi_env& env, napi_callback_info& info) -> napi_value {
40 return ResourceManagerNapiAsyncImpl::GetString(env, info);}},
__anon840267040202(napi_env& env, napi_callback_info& info) 41 {"GetStringArray", [](napi_env& env, napi_callback_info& info) -> napi_value {
42 return ResourceManagerNapiAsyncImpl::GetStringArray(env, info);}},
__anon840267040302(napi_env& env, napi_callback_info& info) 43 {"GetMedia", [](napi_env& env, napi_callback_info& info) -> napi_value {
44 return ResourceManagerNapiAsyncImpl::GetMedia(env, info);}},
__anon840267040402(napi_env& env, napi_callback_info& info) 45 {"GetMediaBase64", [](napi_env& env, napi_callback_info& info) -> napi_value {
46 return ResourceManagerNapiAsyncImpl::GetMediaBase64(env, info);}},
__anon840267040502(napi_env& env, napi_callback_info& info) 47 {"GetPluralString", [](napi_env& env, napi_callback_info& info) -> napi_value {
48 return ResourceManagerNapiAsyncImpl::GetPluralString(env, info);}},
__anon840267040602(napi_env& env, napi_callback_info& info) 49 {"GetRawFile", [](napi_env& env, napi_callback_info& info) -> napi_value {
50 return ResourceManagerNapiAsyncImpl::GetRawFile(env, info);}},
__anon840267040702(napi_env& env, napi_callback_info& info) 51 {"GetRawFileDescriptor", [](napi_env& env, napi_callback_info& info) -> napi_value {
52 return ResourceManagerNapiAsyncImpl::GetRawFileDescriptor(env, info);}},
__anon840267040802(napi_env& env, napi_callback_info& info) 53 {"CloseRawFileDescriptor", [](napi_env& env, napi_callback_info& info) -> napi_value {
54 return ResourceManagerNapiAsyncImpl::CloseRawFileDescriptor(env, info);}},
55 /*===========================since 6 but deprecated since 9========================================*/
56
__anon840267040902(napi_env& env, napi_callback_info& info) 57 {"GetStringValue", [](napi_env& env, napi_callback_info& info) -> napi_value {
58 return ResourceManagerNapiAsyncImpl::GetStringValue(env, info);}},
__anon840267040a02(napi_env& env, napi_callback_info& info) 59 {"GetStringArrayValue", [](napi_env& env, napi_callback_info& info) -> napi_value {
60 return ResourceManagerNapiAsyncImpl::GetStringArrayValue(env, info);}},
__anon840267040b02(napi_env& env, napi_callback_info& info) 61 {"GetMediaContent", [](napi_env& env, napi_callback_info& info) -> napi_value {
62 return ResourceManagerNapiAsyncImpl::GetMediaContent(env, info);}},
__anon840267040c02(napi_env& env, napi_callback_info& info) 63 {"GetMediaContentBase64", [](napi_env& env, napi_callback_info& info) -> napi_value {
64 return ResourceManagerNapiAsyncImpl::GetMediaContentBase64(env, info);}},
__anon840267040d02(napi_env& env, napi_callback_info& info) 65 {"GetPluralStringValue", [](napi_env& env, napi_callback_info& info) -> napi_value {
66 return ResourceManagerNapiAsyncImpl::GetPluralStringValue(env, info);}},
__anon840267040e02(napi_env& env, napi_callback_info& info) 67 {"GetRawFileContent", [](napi_env& env, napi_callback_info& info) -> napi_value {
68 return ResourceManagerNapiAsyncImpl::GetRawFileContent(env, info);}},
__anon840267040f02(napi_env& env, napi_callback_info& info) 69 {"GetRawFd", [](napi_env& env, napi_callback_info& info) -> napi_value {
70 return ResourceManagerNapiAsyncImpl::GetRawFd(env, info);}},
__anon840267041002(napi_env& env, napi_callback_info& info) 71 {"CloseRawFd", [](napi_env& env, napi_callback_info& info) -> napi_value {
72 return ResourceManagerNapiAsyncImpl::CloseRawFd(env, info);}},
__anon840267041102(napi_env& env, napi_callback_info& info) 73 {"GetConfiguration", [](napi_env& env, napi_callback_info& info) -> napi_value {
74 return ResourceManagerNapiAsyncImpl::GetConfiguration(env, info);}},
__anon840267041202(napi_env& env, napi_callback_info& info) 75 {"GetDeviceCapability", [](napi_env& env, napi_callback_info& info) -> napi_value {
76 return ResourceManagerNapiAsyncImpl::GetDeviceCapability(env, info);}},
__anon840267041302(napi_env& env, napi_callback_info& info) 77 {"GetStringByName", [](napi_env& env, napi_callback_info& info) -> napi_value {
78 return ResourceManagerNapiAsyncImpl::GetStringByName(env, info);}},
__anon840267041402(napi_env& env, napi_callback_info& info) 79 {"GetStringArrayByName", [](napi_env& env, napi_callback_info& info) -> napi_value {
80 return ResourceManagerNapiAsyncImpl::GetStringArrayByName(env, info);}},
__anon840267041502(napi_env& env, napi_callback_info& info) 81 {"GetMediaByName", [](napi_env& env, napi_callback_info& info) -> napi_value {
82 return ResourceManagerNapiAsyncImpl::GetMediaByName(env, info);}},
__anon840267041602(napi_env& env, napi_callback_info& info) 83 {"GetMediaBase64ByName", [](napi_env& env, napi_callback_info& info) -> napi_value {
84 return ResourceManagerNapiAsyncImpl::GetMediaBase64ByName(env, info);}},
__anon840267041702(napi_env& env, napi_callback_info& info) 85 {"GetPluralStringByName", [](napi_env& env, napi_callback_info& info) -> napi_value {
86 return ResourceManagerNapiAsyncImpl::GetPluralStringByName(env, info);}},
__anon840267041802(napi_env& env, napi_callback_info& info) 87 {"GetRawFileList", [](napi_env& env, napi_callback_info& info) -> napi_value {
88 return ResourceManagerNapiAsyncImpl::GetRawFileList(env, info);}},
__anon840267041902(napi_env& env, napi_callback_info& info) 89 {"GetColor", [](napi_env& env, napi_callback_info& info) -> napi_value {
90 return ResourceManagerNapiAsyncImpl::GetColor(env, info);}},
__anon840267041a02(napi_env& env, napi_callback_info& info) 91 {"GetColorByName", [](napi_env& env, napi_callback_info& info) -> napi_value {
92 return ResourceManagerNapiAsyncImpl::GetColorByName(env, info);}},
93 };
94
GetResource(napi_env env,napi_callback_info info,const std::string & functionName)95 napi_value ResourceManagerNapiAsyncImpl::GetResource(napi_env env, napi_callback_info info,
96 const std::string &functionName)
97 {
98 auto functionIndex = asyncFuncMatch.find(functionName);
99 if (functionIndex == asyncFuncMatch.end()) {
100 RESMGR_HILOGI(RESMGR_JS_TAG, "Invalid functionName, %{public}s", functionName.c_str());
101 return nullptr;
102 }
103 return functionIndex->second(env, info);
104 }
105
GetCallbackErrorCode(napi_env env,const int32_t errCode,const std::string & errMsg)106 napi_value GetCallbackErrorCode(napi_env env, const int32_t errCode, const std::string &errMsg)
107 {
108 napi_value error = nullptr;
109 napi_value eCode = nullptr;
110 napi_value eMsg = nullptr;
111 napi_create_int32(env, errCode, &eCode);
112 napi_create_string_utf8(env, errMsg.c_str(), NAPI_AUTO_LENGTH, &eMsg);
113 napi_create_object(env, &error);
114 napi_set_named_property(env, error, "code", eCode);
115 napi_set_named_property(env, error, "message", eMsg);
116 return error;
117 }
118
Complete(napi_env env,napi_status status,void * data)119 void ResourceManagerNapiAsyncImpl::Complete(napi_env env, napi_status status, void* data)
120 {
121 ResMgrDataContext* dataContext = static_cast<ResMgrDataContext*>(data);
122
123 napi_value finalResult = nullptr;
124 if (dataContext->createValueFunc_ != nullptr) {
125 finalResult = dataContext->createValueFunc_(env, *dataContext);
126 }
127
128 napi_value result[] = { nullptr, nullptr };
129 if (dataContext->success_) {
130 napi_get_undefined(env, &result[0]);
131 result[1] = finalResult;
132 } else {
133 result[0] = GetCallbackErrorCode(env, dataContext->errCode_, dataContext->errMsg_.c_str());
134 napi_get_undefined(env, &result[1]);
135 }
136 if (dataContext->deferred_) {
137 if (dataContext->success_) {
138 if (napi_resolve_deferred(env, dataContext->deferred_, result[1]) != napi_ok) {
139 RESMGR_HILOGE(RESMGR_JS_TAG, "napi_resolve_deferred failed");
140 }
141 } else {
142 result[0] = GetCallbackErrorCode(env, dataContext->errCode_, dataContext->errMsg_.c_str());
143 if (napi_reject_deferred(env, dataContext->deferred_, result[0]) != napi_ok) {
144 RESMGR_HILOGE(RESMGR_JS_TAG, "napi_reject_deferred failed");
145 }
146 }
147 } else {
148 do {
149 napi_value callback = nullptr;
150 napi_status status = napi_get_reference_value(env, dataContext->callbackRef_, &callback);
151 if (status != napi_ok) {
152 RESMGR_HILOGE(RESMGR_JS_TAG, "napi_get_reference_value failed status=%{public}d", status);
153 break;
154 }
155 napi_value userRet = nullptr;
156 status = napi_call_function(env, nullptr, callback, sizeof(result) / sizeof(napi_value), result, &userRet);
157 if (status != napi_ok) {
158 RESMGR_HILOGE(RESMGR_JS_TAG, "napi_call_function failed status=%{public}d", status);
159 break;
160 }
161 status = napi_delete_reference(env, dataContext->callbackRef_);
162 if (status != napi_ok) {
163 RESMGR_HILOGE(RESMGR_JS_TAG, "napi_call_function failed status=%{public}d", status);
164 break;
165 }
166 } while (false);
167 }
168 napi_delete_async_work(env, dataContext->work_);
169 delete dataContext;
170 };
171
GetResult(napi_env env,std::unique_ptr<ResMgrDataContext> & dataContext,const std::string & name,napi_async_execute_callback & execute)172 napi_value ResourceManagerNapiAsyncImpl::GetResult(napi_env env, std::unique_ptr<ResMgrDataContext> &dataContext,
173 const std::string &name, napi_async_execute_callback &execute)
174 {
175 napi_value result = nullptr;
176 if (dataContext->callbackRef_ == nullptr) {
177 napi_create_promise(env, &dataContext->deferred_, &result);
178 } else {
179 napi_get_undefined(env, &result);
180 }
181 napi_value resource = nullptr;
182 napi_create_string_utf8(env, name.c_str(), NAPI_AUTO_LENGTH, &resource);
183 if (napi_create_async_work(env, nullptr, resource, execute, ResourceManagerNapiAsyncImpl::Complete,
184 static_cast<void*>(dataContext.get()), &dataContext->work_) != napi_ok) {
185 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to create async work for %{public}s", name.c_str());
186 return result;
187 }
188 if (napi_queue_async_work_with_qos(env, dataContext->work_, napi_qos_user_initiated) != napi_ok) {
189 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to queue async work for %{public}s", name.c_str());
190 return result;
191 }
192 dataContext.release();
193 return result;
194 }
195
ProcessNameParamV9(napi_env env,napi_callback_info info,const std::string & name,napi_async_execute_callback execute)196 napi_value ResourceManagerNapiAsyncImpl::ProcessNameParamV9(napi_env env, napi_callback_info info,
197 const std::string &name, napi_async_execute_callback execute)
198 {
199 GET_PARAMS(env, info, PARAMS_NUM_THREE);
200 std::unique_ptr<ResMgrDataContext> dataContext = std::make_unique<ResMgrDataContext>();
201 dataContext->addon_ = ResMgrDataContext::GetResourceManagerAddon(env, info);
202 if (dataContext->addon_ == nullptr) {
203 return nullptr;
204 }
205 for (size_t i = 0; i < argc; i++) {
206 napi_valuetype valueType;
207 napi_typeof(env, argv[i], &valueType);
208 if (i == 0 && valueType == napi_string) {
209 dataContext->resName_ = ResourceManagerNapiUtils::GetResNameOrPath(env, argc, argv);
210 } else if (i == 1 && valueType == napi_function) {
211 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
212 break;
213 } else if (i == 1 && ResourceManagerNapiUtils::GetDataType(env, argv[i], dataContext->density_) != SUCCESS) {
214 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
215 return nullptr;
216 } else if (i == 2 && valueType == napi_function) { // the third callback param
217 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
218 break;
219 } else {
220 // self resourcemanager with promise
221 }
222 }
223
224 napi_value result = GetResult(env, dataContext, name, execute);
225 return result;
226 }
227
ProcessIdParamV9(napi_env env,napi_callback_info info,const std::string & name,napi_async_execute_callback execute)228 napi_value ResourceManagerNapiAsyncImpl::ProcessIdParamV9(napi_env env, napi_callback_info info,
229 const std::string &name, napi_async_execute_callback execute)
230 {
231 GET_PARAMS(env, info, PARAMS_NUM_THREE);
232
233 std::unique_ptr<ResMgrDataContext> dataContext = std::make_unique<ResMgrDataContext>();
234 dataContext->addon_ = ResMgrDataContext::GetResourceManagerAddon(env, info);
235 if (dataContext->addon_ == nullptr) {
236 return nullptr;
237 }
238 for (size_t i = 0; i < argc; i++) {
239 napi_valuetype valueType;
240 napi_typeof(env, argv[i], &valueType);
241 if (i == 0 && valueType == napi_number) {
242 dataContext->resId_ = ResourceManagerNapiUtils::GetResId(env, argc, argv);
243 } else if (i == 1 && valueType == napi_function) {
244 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
245 break;
246 } else if (i == 1 && ResourceManagerNapiUtils::GetDataType(env, argv[i], dataContext->density_) != SUCCESS) {
247 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
248 return nullptr;
249 } else if (i == 2 && valueType == napi_function) { // the third callback param
250 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
251 break;
252 } else {
253 // self resourcemanager with promise
254 }
255 }
256
257 napi_value result = GetResult(env, dataContext, name, execute);
258 return result;
259 }
260
ProcessResourceParamV9(napi_env env,napi_callback_info info,const std::string & name,napi_async_execute_callback execute)261 napi_value ResourceManagerNapiAsyncImpl::ProcessResourceParamV9(napi_env env, napi_callback_info info,
262 const std::string &name, napi_async_execute_callback execute)
263 {
264 GET_PARAMS(env, info, PARAMS_NUM_THREE);
265
266 std::unique_ptr<ResMgrDataContext> dataContext = std::make_unique<ResMgrDataContext>();
267 dataContext->addon_ = ResMgrDataContext::GetResourceManagerAddon(env, info);
268 if (dataContext->addon_ == nullptr) {
269 return nullptr;
270 }
271 for (size_t i = 0; i < argc; i++) {
272 napi_valuetype valueType;
273 napi_typeof(env, argv[i], &valueType);
274 if (i == 0 && valueType == napi_object) {
275 auto resourcePtr = std::make_shared<ResourceManager::Resource>();
276 int32_t retCode = ResourceManagerNapiUtils::GetResourceObject(env, resourcePtr, argv[0]);
277 if (retCode != SUCCESS) {
278 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to get native Resource object");
279 ResourceManagerNapiUtils::NapiThrow(env, retCode);
280 return nullptr;
281 }
282 dataContext->resource_ = resourcePtr;
283 } else if (i == 1 && valueType == napi_function) {
284 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
285 break;
286 } else if (i == 1 && ResourceManagerNapiUtils::GetDataType(env, argv[i], dataContext->density_) != SUCCESS) {
287 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
288 return nullptr;
289 } else if (i == 2 && valueType == napi_function) { // the third callback param
290 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
291 break;
292 } else {
293 // self resourcemanager with promise
294 }
295 }
296
297 napi_value result = GetResult(env, dataContext, name, execute);
298 return result;
299 }
300
ProcessOnlyIdParam(napi_env env,napi_callback_info info,const std::string & name,napi_async_execute_callback execute)301 napi_value ResourceManagerNapiAsyncImpl::ProcessOnlyIdParam(napi_env env, napi_callback_info info,
302 const std::string &name, napi_async_execute_callback execute)
303 {
304 GET_PARAMS(env, info, PARAMS_NUM_TWO);
305
306 std::unique_ptr<ResMgrDataContext> dataContext = std::make_unique<ResMgrDataContext>();
307 dataContext->addon_ = ResMgrDataContext::GetResourceManagerAddon(env, info);
308 if (dataContext->addon_ == nullptr) {
309 return nullptr;
310 }
311 for (size_t i = 0; i < argc; i++) {
312 napi_valuetype valueType;
313 napi_typeof(env, argv[i], &valueType);
314 if (i == 0 && valueType == napi_number) {
315 dataContext->resId_ = ResourceManagerNapiUtils::GetResId(env, argc, argv);
316 } else if (i == 1 && valueType == napi_function) {
317 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
318 break;
319 } else if (i == 0 && valueType == napi_string) {
320 dataContext->path_ = ResourceManagerNapiUtils::GetResNameOrPath(env, argc, argv);
321 } else if (i == 0 && valueType == napi_object) {
322 std::shared_ptr<ResourceManager::Resource> resourcePtr = std::make_shared<ResourceManager::Resource>();
323 int32_t retCode = ResourceManagerNapiUtils::GetResourceObject(env, resourcePtr, argv[0]);
324 if (retCode != SUCCESS) {
325 ResourceManagerNapiUtils::NapiThrow(env, retCode);
326 return nullptr;
327 }
328 dataContext->resource_ = resourcePtr;
329 } else {
330 // self resourcemanager with promise
331 }
332 }
333 napi_value result = GetResult(env, dataContext, name, execute);
334 return result;
335 }
336
ProcessIdNameParam(napi_env env,napi_callback_info info,const std::string & name,napi_async_execute_callback execute)337 napi_value ResourceManagerNapiAsyncImpl::ProcessIdNameParam(napi_env env, napi_callback_info info,
338 const std::string& name, napi_async_execute_callback execute)
339 {
340 GET_PARAMS(env, info, PARAMS_NUM_THREE);
341
342 std::unique_ptr<ResMgrDataContext> dataContext = std::make_unique<ResMgrDataContext>();
343 dataContext->addon_ = ResMgrDataContext::GetResourceManagerAddon(env, info);
344 for (size_t i = 0; i < argc; i++) {
345 napi_valuetype valueType;
346 napi_typeof(env, argv[i], &valueType);
347 if (i == 0 && valueType == napi_number) {
348 dataContext->resId_ = ResourceManagerNapiUtils::GetResId(env, argc, argv);
349 } else if (i == 0 && valueType == napi_string) {
350 dataContext->resName_ = ResourceManagerNapiUtils::GetResNameOrPath(env, argc, argv);
351 } else if (i == 0 && valueType == napi_object) {
352 std::shared_ptr<ResourceManager::Resource> resourcePtr = std::make_shared<ResourceManager::Resource>();
353 int32_t retCode = ResourceManagerNapiUtils::GetResourceObject(env, resourcePtr, argv[0]);
354 if (retCode != SUCCESS) {
355 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to get native Resource object");
356 return nullptr;
357 }
358 dataContext->resource_ = resourcePtr;
359 } else if (i == 1 && valueType != napi_number) { // the second quantity param
360 RESMGR_HILOGE(RESMGR_JS_TAG, "Parameter type is not napi_number");
361 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
362 return nullptr;
363 } else if (i == 1 && valueType == napi_number) {
364 // dataContext->param_ is the quantity to select plural string
365 napi_get_value_int32(env, argv[i], &dataContext->param_);
366 // param is the value to replace placeholder in the plural string
367 double param;
368 if (napi_get_value_double(env, argv[i], ¶m) != napi_ok) {
369 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to get parameter value in ProcessIdNameParam");
370 return nullptr;
371 }
372 dataContext->jsParams_.push_back(std::make_tuple(ResourceManager::NapiValueType::NAPI_NUMBER,
373 std::to_string(param)));
374 } else if (i == 2 && valueType == napi_function) { // the third callback param
375 napi_create_reference(env, argv[i], 1, &dataContext->callbackRef_);
376 break;
377 } else {
378 // self resourcemanager with promise
379 }
380 }
381 napi_value result = GetResult(env, dataContext, name, execute);
382 return result;
383 }
384
ProcessNoParam(napi_env env,napi_callback_info info,const std::string & name,napi_async_execute_callback execute)385 napi_value ResourceManagerNapiAsyncImpl::ProcessNoParam(napi_env env, napi_callback_info info,
386 const std::string &name, napi_async_execute_callback execute)
387 {
388 GET_PARAMS(env, info, 1);
389
390 std::unique_ptr<ResMgrDataContext> dataContext = std::make_unique<ResMgrDataContext>();
391 std::shared_ptr<ResourceManagerAddon> *addonPtr = nullptr;
392 napi_status status = napi_unwrap(env, thisVar, reinterpret_cast<void **>(&addonPtr));
393 if (status != napi_ok) {
394 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to unwrap ProcessNoParam");
395 return nullptr;
396 }
397 dataContext->addon_ = *addonPtr;
398 napi_valuetype valueType;
399 napi_typeof(env, argv[0], &valueType);
400 if (valueType == napi_function) {
401 napi_create_reference(env, argv[0], 1, &dataContext->callbackRef_);
402 }
403
404 napi_value result = GetResult(env, dataContext, name, execute);
405 return result;
406 }
407
__anon840267041b02(napi_env env, void* data) 408 auto getStringFunc = [](napi_env env, void* data) {
409 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
410 std::shared_ptr<ResourceManager> resMgr = nullptr;
411 uint32_t resId = 0;
412
413 bool ret = ResourceManagerNapiUtils::GetHapResourceManager(dataContext, resMgr, resId);
414 if (!ret) {
415 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to GetHapResourceManager in getStringFunc");
416 dataContext->SetErrorMsg("Failed to get string, invalid bundleName or moduleName",
417 false, ERROR_CODE_INVALID_INPUT_PARAMETER);
418 return;
419 }
420 RState state = resMgr->GetStringById(resId, dataContext->value_);
421 if (state != RState::SUCCESS) {
422 dataContext->SetErrorMsg("GetStringById failed state", true, state);
423 #if !defined(__IDE_PREVIEW__)
424 ReportGetResourceByIdFail(resId, dataContext->value_, "failed in getStringFunc");
425 #endif
426 return;
427 }
428 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsString;
429 };
430
GetStringValue(napi_env env,napi_callback_info info)431 napi_value ResourceManagerNapiAsyncImpl::GetStringValue(napi_env env, napi_callback_info info)
432 {
433 if (ResourceManagerNapiUtils::IsNapiNumber(env, info)) {
434 return ProcessIdParamV9(env, info, "getStringValue", getStringFunc);
435 } else if (ResourceManagerNapiUtils::IsNapiObject(env, info)) {
436 return ProcessResourceParamV9(env, info, "getStringValue", getStringFunc);
437 } else {
438 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
439 return nullptr;
440 }
441 }
442
GetString(napi_env env,napi_callback_info info)443 napi_value ResourceManagerNapiAsyncImpl::GetString(napi_env env, napi_callback_info info)
444 {
445 return ProcessOnlyIdParam(env, info, "getString", getStringFunc);
446 }
447
__anon840267041c02(napi_env env, void* data) 448 auto getStringByNameFunc = [](napi_env env, void* data) {
449 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
450 RState state = dataContext->addon_->GetResMgr()->GetStringByName(dataContext->resName_.c_str(),
451 dataContext->value_);
452 if (state != RState::SUCCESS) {
453 dataContext->SetErrorMsg("GetStringByName failed state", false, state);
454 #if !defined(__IDE_PREVIEW__)
455 ReportGetResourceByNameFail(dataContext->resName_, dataContext->value_,
456 "failed in getStringByNameFunc");
457 #endif
458 return;
459 }
460 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsString;
461 };
462
GetStringByName(napi_env env,napi_callback_info info)463 napi_value ResourceManagerNapiAsyncImpl::GetStringByName(napi_env env, napi_callback_info info)
464 {
465 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
466 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
467 return nullptr;
468 }
469 return ProcessNameParamV9(env, info, "getStringByName", getStringByNameFunc);
470 }
471
__anon840267041d02(napi_env env, void* data) 472 auto getStringArrayFunc = [](napi_env env, void* data) {
473 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
474 RState state;
475 uint32_t resId = 0;
476 std::shared_ptr<ResourceManager> resMgr = nullptr;
477 if (dataContext->resId_ != 0 || dataContext->resource_ != nullptr) {
478 bool ret = ResourceManagerNapiUtils::GetHapResourceManager(dataContext, resMgr, resId);
479 if (!ret) {
480 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to GetHapResourceManager in getStringArrayFunc");
481 dataContext->SetErrorMsg("Failed to get string array, invalid bundleName or moduleName",
482 false, ERROR_CODE_INVALID_INPUT_PARAMETER);
483 return;
484 }
485 state = resMgr->GetStringArrayById(resId, dataContext->arrayValue_);
486 if (state != RState::SUCCESS) {
487 dataContext->SetErrorMsg("GetStringArrayById failed state", true, state);
488 return;
489 }
490 } else {
491 state = dataContext->addon_->GetResMgr()->GetStringArrayByName(dataContext->resName_.c_str(),
492 dataContext->arrayValue_);
493 if (state != RState::SUCCESS) {
494 dataContext->SetErrorMsg("GetStringArrayByName failed state", false, state);
495 return;
496 }
497 }
498 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsArray;
499 };
500
GetStringArray(napi_env env,napi_callback_info info)501 napi_value ResourceManagerNapiAsyncImpl::GetStringArray(napi_env env, napi_callback_info info)
502 {
503 return ProcessOnlyIdParam(env, info, "getStringArray", getStringArrayFunc);
504 }
505
GetStringArrayValue(napi_env env,napi_callback_info info)506 napi_value ResourceManagerNapiAsyncImpl::GetStringArrayValue(napi_env env, napi_callback_info info)
507 {
508 if (ResourceManagerNapiUtils::IsNapiNumber(env, info)) {
509 return ProcessIdParamV9(env, info, "getStringArrayValue", getStringArrayFunc);
510 } else if (ResourceManagerNapiUtils::IsNapiObject(env, info)) {
511 return ProcessResourceParamV9(env, info, "getStringArrayValue", getStringArrayFunc);
512 } else {
513 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
514 return nullptr;
515 }
516 }
517
GetStringArrayByName(napi_env env,napi_callback_info info)518 napi_value ResourceManagerNapiAsyncImpl::GetStringArrayByName(napi_env env, napi_callback_info info)
519 {
520 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
521 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
522 return nullptr;
523 }
524 return ProcessNameParamV9(env, info, "GetStringArrayByName", getStringArrayFunc);
525 }
526
__anon840267041e02(napi_env env, void *data) 527 auto getMediaFunc = [](napi_env env, void *data) {
528 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
529 std::string path;
530 uint32_t resId = 0;
531 std::shared_ptr<ResourceManager> resMgr = nullptr;
532 bool ret = ResourceManagerNapiUtils::GetHapResourceManager(dataContext, resMgr, resId);
533 if (!ret) {
534 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to GetHapResourceManager in getMediaFunc");
535 dataContext->SetErrorMsg("Failed to get media data, invalid bundleName or moduleName",
536 false, ERROR_CODE_INVALID_INPUT_PARAMETER);
537 return;
538 }
539 RState state = resMgr->GetMediaDataById(resId, dataContext->len_, dataContext->mediaData,
540 dataContext->density_);
541 if (state != SUCCESS) {
542 dataContext->SetErrorMsg("Failed to get media data in getMediaFunc", true, state);
543 return;
544 }
545 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsUint8Array;
546 };
547
GetMediaContent(napi_env env,napi_callback_info info)548 napi_value ResourceManagerNapiAsyncImpl::GetMediaContent(napi_env env, napi_callback_info info)
549 {
550 if (ResourceManagerNapiUtils::IsNapiNumber(env, info)) {
551 return ProcessIdParamV9(env, info, "getMediaContent", getMediaFunc);
552 } else if (ResourceManagerNapiUtils::IsNapiObject(env, info)) {
553 return ProcessResourceParamV9(env, info, "getMediaContent", getMediaFunc);
554 } else {
555 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
556 return nullptr;
557 }
558 }
559
GetMedia(napi_env env,napi_callback_info info)560 napi_value ResourceManagerNapiAsyncImpl::GetMedia(napi_env env, napi_callback_info info)
561 {
562 #if !defined(__IDE_PREVIEW__)
563 StartTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR, "ResourceManagerAddon::GetMedia");
564 #endif
565 napi_value media = ProcessOnlyIdParam(env, info, "getMedia", getMediaFunc);
566 #if !defined(__IDE_PREVIEW__)
567 FinishTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR);
568 #endif
569 return media;
570 }
571
__anon840267041f02(napi_env env, void *data) 572 auto getMediaBase64Func = [](napi_env env, void *data) {
573 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
574 std::string path;
575 RState state;
576 if (dataContext->resId_ != 0 || dataContext->resource_ != nullptr) {
577 uint32_t resId = 0;
578 std::shared_ptr<ResourceManager> resMgr = nullptr;
579 bool ret = ResourceManagerNapiUtils::GetHapResourceManager(dataContext, resMgr, resId);
580 if (!ret) {
581 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to GetHapResourceManager in getMediaBase64Func");
582 dataContext->SetErrorMsg("Failed to get media data, invalid bundleName or moduleName",
583 false, ERROR_CODE_INVALID_INPUT_PARAMETER);
584 return;
585 }
586 state = resMgr->GetMediaBase64DataById(resId, dataContext->value_, dataContext->density_);
587 if (state != RState::SUCCESS) {
588 dataContext->SetErrorMsg("Failed to get media data in getMediaBase64Func", true, state);
589 return;
590 }
591 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsString;
592 } else {
593 state = dataContext->addon_->GetResMgr()->GetMediaBase64DataByName(dataContext->resName_.c_str(),
594 dataContext->value_, dataContext->density_);
595 if (state != RState::SUCCESS) {
596 dataContext->SetErrorMsg("Failed to get media data in getMediaBase64Func", false, state);
597 return;
598 }
599 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsString;
600 }
601 };
602
GetMediaContentBase64(napi_env env,napi_callback_info info)603 napi_value ResourceManagerNapiAsyncImpl::GetMediaContentBase64(napi_env env, napi_callback_info info)
604 {
605 if (ResourceManagerNapiUtils::IsNapiNumber(env, info)) {
606 return ProcessIdParamV9(env, info, "getMediaContentBase64", getMediaBase64Func);
607 } else if (ResourceManagerNapiUtils::IsNapiObject(env, info)) {
608 return ProcessResourceParamV9(env, info, "getMediaContentBase64", getMediaBase64Func);
609 } else {
610 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
611 return nullptr;
612 }
613 }
614
GetMediaBase64(napi_env env,napi_callback_info info)615 napi_value ResourceManagerNapiAsyncImpl::GetMediaBase64(napi_env env, napi_callback_info info)
616 {
617 #if !defined(__IDE_PREVIEW__)
618 StartTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR, "ResourceManagerAddon::GetMediaBase64");
619 #endif
620 napi_value mediaBase64 = ProcessOnlyIdParam(env, info, "GetMediaBase64", getMediaBase64Func);
621 #if !defined(__IDE_PREVIEW__)
622 FinishTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR);
623 #endif
624 return mediaBase64;
625 }
626
GetMediaBase64ByName(napi_env env,napi_callback_info info)627 napi_value ResourceManagerNapiAsyncImpl::GetMediaBase64ByName(napi_env env, napi_callback_info info)
628 {
629 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
630 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
631 return nullptr;
632 }
633 #if !defined(__IDE_PREVIEW__)
634 StartTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR, "ResourceManagerAddon::GetMediaBase64ByName");
635 #endif
636 napi_value mediaBase64 = ProcessNameParamV9(env, info, "GetMediaBase64ByName", getMediaBase64Func);
637 #if !defined(__IDE_PREVIEW__)
638 FinishTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR);
639 #endif
640 return mediaBase64;
641 }
642
__anon840267042002(napi_env env, void *data) 643 auto getPluralCapFunc = [](napi_env env, void *data) {
644 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
645 RState state;
646 if (dataContext->resId_ != 0 || dataContext->resource_ != nullptr) {
647 uint32_t resId = 0;
648 std::shared_ptr<ResourceManager> resMgr = nullptr;
649 bool ret = ResourceManagerNapiUtils::GetHapResourceManager(dataContext, resMgr, resId);
650 if (!ret) {
651 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to GetHapResourceManager in getPluralCapFunc");
652 dataContext->SetErrorMsg("Failed to get plural string, invalid bundleName or moduleName",
653 false, ERROR_CODE_INVALID_INPUT_PARAMETER);
654 return;
655 }
656 state = resMgr->GetFormatPluralStringById(dataContext->value_, resId, dataContext->param_,
657 dataContext->jsParams_);
658 if (state != RState::SUCCESS) {
659 dataContext->SetErrorMsg("GetPluralString failed", true, state);
660 return;
661 }
662 } else {
663 state = dataContext->addon_->GetResMgr()->GetFormatPluralStringByName(dataContext->value_,
664 dataContext->resName_.c_str(), dataContext->param_, dataContext->jsParams_);
665 if (state != RState::SUCCESS) {
666 dataContext->SetErrorMsg("GetPluralString failed", false, state);
667 return;
668 }
669 }
670 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsString;
671 };
672
GetPluralStringValue(napi_env env,napi_callback_info info)673 napi_value ResourceManagerNapiAsyncImpl::GetPluralStringValue(napi_env env, napi_callback_info info)
674 {
675 if (ResourceManagerNapiUtils::IsNapiString(env, info)) {
676 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
677 return nullptr;
678 }
679 return ProcessIdNameParam(env, info, "getPluralStringValue", getPluralCapFunc);
680 }
681
GetPluralStringByName(napi_env env,napi_callback_info info)682 napi_value ResourceManagerNapiAsyncImpl::GetPluralStringByName(napi_env env, napi_callback_info info)
683 {
684 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
685 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
686 return nullptr;
687 }
688 return ProcessIdNameParam(env, info, "GetPluralStringByName", getPluralCapFunc);
689 }
690
GetPluralString(napi_env env,napi_callback_info info)691 napi_value ResourceManagerNapiAsyncImpl::GetPluralString(napi_env env, napi_callback_info info)
692 {
693 return ProcessIdNameParam(env, info, "GetPluralString", getPluralCapFunc);
694 }
695
__anon840267042102(napi_env env, void* data) 696 auto g_getRawFileFunc = [](napi_env env, void* data) {
697 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
698 RState state = dataContext->addon_->GetResMgr()->GetRawFileFromHap(dataContext->path_,
699 dataContext->len_, dataContext->mediaData);
700 if (state != RState::SUCCESS) {
701 dataContext->SetErrorMsg("GetRawFileContent failed", false, state);
702 return;
703 }
704 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsUint8Array;
705 };
706
GetRawFileContent(napi_env env,napi_callback_info info)707 napi_value ResourceManagerNapiAsyncImpl::GetRawFileContent(napi_env env, napi_callback_info info)
708 {
709 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
710 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
711 return nullptr;
712 }
713 return ProcessOnlyIdParam(env, info, "getRawFileContent", g_getRawFileFunc);
714 }
715
GetRawFile(napi_env env,napi_callback_info info)716 napi_value ResourceManagerNapiAsyncImpl::GetRawFile(napi_env env, napi_callback_info info)
717 {
718 return ProcessOnlyIdParam(env, info, "getRawFile", g_getRawFileFunc);
719 }
720
__anon840267042202(napi_env env, void* data) 721 auto g_getRawFileDescriptorFunc = [](napi_env env, void* data) {
722 ResMgrDataContext *context = static_cast<ResMgrDataContext*>(data);
723 RState state = context->addon_->GetResMgr()->GetRawFileDescriptorFromHap(context->path_, context->descriptor_);
724 if (state != RState::SUCCESS) {
725 context->SetErrorMsg("Failed to get descriptor", false, state);
726 return;
727 }
728 context->createValueFunc_ = ResourceManagerNapiUtils::CreateJsRawFd;
729 };
730
GetRawFd(napi_env env,napi_callback_info info)731 napi_value ResourceManagerNapiAsyncImpl::GetRawFd(napi_env env, napi_callback_info info)
732 {
733 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
734 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
735 return nullptr;
736 }
737 return ProcessOnlyIdParam(env, info, "getRawFd", g_getRawFileDescriptorFunc);
738 }
739
GetRawFileDescriptor(napi_env env,napi_callback_info info)740 napi_value ResourceManagerNapiAsyncImpl::GetRawFileDescriptor(napi_env env, napi_callback_info info)
741 {
742 return ProcessOnlyIdParam(env, info, "getRawFileDescriptor", g_getRawFileDescriptorFunc);
743 }
744
__anon840267042302(napi_env env, void* data) 745 auto closeRawFileDescriptorFunc = [](napi_env env, void* data) {
746 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
747 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CloseJsRawFd;
748 };
749
CloseRawFd(napi_env env,napi_callback_info info)750 napi_value ResourceManagerNapiAsyncImpl::CloseRawFd(napi_env env, napi_callback_info info)
751 {
752 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
753 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
754 return nullptr;
755 }
756 return ProcessOnlyIdParam(env, info, "closeRawFd", closeRawFileDescriptorFunc);
757 }
758
CloseRawFileDescriptor(napi_env env,napi_callback_info info)759 napi_value ResourceManagerNapiAsyncImpl::CloseRawFileDescriptor(napi_env env, napi_callback_info info)
760 {
761 return ProcessOnlyIdParam(env, info, "closeRawFileDescriptor", closeRawFileDescriptorFunc);
762 }
763
__anon840267042402(napi_env env, void *data) 764 auto getMediaByNameFunc = [](napi_env env, void *data) {
765 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
766 RState state = dataContext->addon_->GetResMgr()->GetMediaDataByName(dataContext->resName_.c_str(),
767 dataContext->len_, dataContext->mediaData, dataContext->density_);
768 if (state != RState::SUCCESS) {
769 dataContext->SetErrorMsg("Failed to get media data in getMediaByNameFunc", false, state);
770 return;
771 }
772 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsUint8Array;
773 return;
774 };
775
GetMediaByName(napi_env env,napi_callback_info info)776 napi_value ResourceManagerNapiAsyncImpl::GetMediaByName(napi_env env, napi_callback_info info)
777 {
778 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
779 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
780 return nullptr;
781 }
782 #if !defined(__IDE_PREVIEW__)
783 StartTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR, "ResourceManagerAddon::GetMediaByName");
784 #endif
785 napi_value media = ProcessNameParamV9(env, info, "getMediaByName", getMediaByNameFunc);
786 #if !defined(__IDE_PREVIEW__)
787 FinishTraceEx(HITRACE_LEVEL_INFO, HITRACE_TAG_GLOBAL_RESMGR);
788 #endif
789 return media;
790 }
791
__anon840267042502(napi_env env, void *data) 792 auto getConfigFunc = [](napi_env env, void *data) {
793 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
794 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsConfig;
795 };
796
GetConfiguration(napi_env env,napi_callback_info info)797 napi_value ResourceManagerNapiAsyncImpl::GetConfiguration(napi_env env, napi_callback_info info)
798 {
799 return ProcessNoParam(env, info, "GetConfiguration", getConfigFunc);
800 }
801
__anon840267042602(napi_env env, void *data) 802 auto getDeviceCapFunc = [](napi_env env, void *data) {
803 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
804 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsDeviceCap;
805 };
806
GetDeviceCapability(napi_env env,napi_callback_info info)807 napi_value ResourceManagerNapiAsyncImpl::GetDeviceCapability(napi_env env, napi_callback_info info)
808 {
809 return ProcessNoParam(env, info, "GetDeviceCapability", getDeviceCapFunc);
810 }
811
__anon840267042702(napi_env env, void* data) 812 auto getRawFileListFunc = [](napi_env env, void* data) {
813 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
814 RState state = dataContext->addon_->GetResMgr()->GetRawFileList(dataContext->path_, dataContext->arrayValue_);
815 if (state != SUCCESS) {
816 dataContext->SetErrorMsg("GetRawFileList failed state", false, state);
817 return;
818 }
819 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsArray;
820 };
821
GetRawFileList(napi_env env,napi_callback_info info)822 napi_value ResourceManagerNapiAsyncImpl::GetRawFileList(napi_env env, napi_callback_info info)
823 {
824 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
825 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
826 return nullptr;
827 }
828 return ProcessOnlyIdParam(env, info, "getRawFileList", getRawFileListFunc);
829 }
830
__anon840267042802(napi_env env, void* data) 831 auto getColorFunc = [](napi_env env, void* data) {
832 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
833 std::shared_ptr<ResourceManager> resMgr = nullptr;
834 uint32_t resId = 0;
835
836 if (!ResourceManagerNapiUtils::GetHapResourceManager(dataContext, resMgr, resId)) {
837 RESMGR_HILOGE(RESMGR_JS_TAG, "Failed to GetHapResourceManager in getColorFunc");
838 dataContext->SetErrorMsg("Failed to get color, invalid bundleName or moduleName",
839 false, ERROR_CODE_INVALID_INPUT_PARAMETER);
840 return;
841 }
842 RState state = resMgr->GetColorById(resId, dataContext->colorValue_);
843 if (state != RState::SUCCESS) {
844 dataContext->SetErrorMsg("GetColorById failed state", true, state);
845 return;
846 }
847 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsColor;
848 };
849
GetColor(napi_env env,napi_callback_info info)850 napi_value ResourceManagerNapiAsyncImpl::GetColor(napi_env env, napi_callback_info info)
851 {
852 if (ResourceManagerNapiUtils::IsNapiNumber(env, info)) {
853 return ProcessIdParamV9(env, info, "getColor", getColorFunc);
854 } else if (ResourceManagerNapiUtils::IsNapiObject(env, info)) {
855 return ProcessResourceParamV9(env, info, "getColor", getColorFunc);
856 } else {
857 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
858 return nullptr;
859 }
860 }
861
__anon840267042902(napi_env env, void* data) 862 auto getColorByNameFunc = [](napi_env env, void* data) {
863 ResMgrDataContext *dataContext = static_cast<ResMgrDataContext*>(data);
864 RState state = dataContext->addon_->GetResMgr()->GetColorByName(dataContext->resName_.c_str(),
865 dataContext->colorValue_);
866 if (state != RState::SUCCESS) {
867 dataContext->SetErrorMsg("getColorByNameFunc failed state", false, state);
868 return;
869 }
870 dataContext->createValueFunc_ = ResourceManagerNapiUtils::CreateJsColor;
871 };
872
GetColorByName(napi_env env,napi_callback_info info)873 napi_value ResourceManagerNapiAsyncImpl::GetColorByName(napi_env env, napi_callback_info info)
874 {
875 if (!ResourceManagerNapiUtils::IsNapiString(env, info)) {
876 ResourceManagerNapiUtils::NapiThrow(env, ERROR_CODE_INVALID_INPUT_PARAMETER);
877 return nullptr;
878 }
879 return ProcessNameParamV9(env, info, "getColorByName", getColorByNameFunc);
880 }
881 } // namespace Resource
882 } // namespace Global
883 } // namespace OHOS
884