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 #ifndef RESOURCE_MANAGER_NAPI_SYNC_IMPL_H
17 #define RESOURCE_MANAGER_NAPI_SYNC_IMPL_H
18 
19 #include "resource_manager_napi_base.h"
20 #include "resource_manager_data_context.h"
21 namespace OHOS {
22 namespace Global {
23 namespace Resource {
24 class ResourceManagerNapiSyncImpl : public ResourceManagerNapiBase {
25 public:
26     ResourceManagerNapiSyncImpl();
27 
28     ~ResourceManagerNapiSyncImpl();
29     /**
30      * Get the resource according to the function name.
31      *
32      * @param env The environment that the API is invoked under.
33      * @param info The additional information about the context in which the callback was invoked.
34      * @param functionName The function name
35      * @return The resource if resource exist, else errcode and errmessage.
36      */
37     virtual napi_value GetResource(napi_env env, napi_callback_info info, const std::string &functionName) override;
38 
39 private:
40 
41     static std::unordered_map<std::string, std::function<napi_value(napi_env&, napi_callback_info&)>> syncFuncMatch;
42 
43     static napi_value GetStringSync(napi_env env, napi_callback_info info);
44 
45     static napi_value GetStringByNameSync(napi_env env, napi_callback_info info);
46 
47     static napi_value GetBoolean(napi_env env, napi_callback_info info);
48 
49     static napi_value GetBooleanByName(napi_env env, napi_callback_info info);
50 
51     static napi_value GetNumber(napi_env env, napi_callback_info info);
52 
53     static napi_value GetNumberByName(napi_env env, napi_callback_info info);
54 
55     static napi_value GetDrawableDescriptor(napi_env env, napi_callback_info info);
56 
57     static napi_value GetDrawableDescriptorByName(napi_env env, napi_callback_info info);
58 
59     static napi_value GetColorSync(napi_env env, napi_callback_info info);
60 
61     static napi_value GetColorByNameSync(napi_env env, napi_callback_info info);
62 
63     static napi_value AddResource(napi_env env, napi_callback_info info);
64 
65     static napi_value RemoveResource(napi_env env, napi_callback_info info);
66 
67     static napi_value GetMediaContentBase64Sync(napi_env env, napi_callback_info info);
68 
69     static napi_value GetMediaContentSync(napi_env env, napi_callback_info info);
70 
71     static napi_value GetPluralStringValueSync(napi_env env, napi_callback_info info);
72 
73     static napi_value GetStringArrayValueSync(napi_env env, napi_callback_info info);
74 
75     static napi_value GetRawFileListSync(napi_env env, napi_callback_info info);
76 
77     static napi_value GetRawFileContentSync(napi_env env, napi_callback_info info);
78 
79     static napi_value GetRawFdSync(napi_env env, napi_callback_info info);
80 
81     static napi_value CloseRawFdSync(napi_env env, napi_callback_info info);
82 
83     static napi_value GetPluralStringByNameSync(napi_env env, napi_callback_info info);
84 
85     static napi_value GetMediaBase64ByNameSync(napi_env env, napi_callback_info info);
86 
87     static napi_value GetMediaByNameSync(napi_env env, napi_callback_info info);
88 
89     static napi_value GetStringArrayByNameSync(napi_env env, napi_callback_info info);
90 
91     static napi_value GetConfigurationSync(napi_env env, napi_callback_info info);
92 
93     static napi_value GetDeviceCapabilitySync(napi_env env, napi_callback_info info);
94 
95     static napi_value GetLocales(napi_env env, napi_callback_info info);
96 
97     static napi_value GetSymbol(napi_env env, napi_callback_info info);
98 
99     static napi_value GetSymbolByName(napi_env env, napi_callback_info info);
100 
101     static napi_value IsRawDir(napi_env env, napi_callback_info info);
102 
103     static napi_value GetOverrideResourceManager(napi_env env, napi_callback_info info);
104 
105     static napi_value GetOverrideConfiguration(napi_env env, napi_callback_info info);
106 
107     static napi_value UpdateOverrideConfiguration(napi_env env, napi_callback_info info);
108 
109     static int32_t InitIdResourceAddon(napi_env env, napi_callback_info info,
110         std::unique_ptr<ResMgrDataContext> &dataContext);
111 
112     static int32_t InitNameAddon(napi_env env, napi_callback_info info,
113         std::unique_ptr<ResMgrDataContext> &dataContext);
114 
115     static int32_t InitPathAddon(napi_env env, napi_callback_info info,
116         std::unique_ptr<ResMgrDataContext> &dataContext);
117 
118     static bool InitNapiParameters(napi_env env, napi_callback_info info,
119         std::vector<std::tuple<ResourceManager::NapiValueType, std::string>> &jsParams);
120 
121     static bool InitParamsFromParamArray(napi_env env, napi_value value,
122         std::vector<std::tuple<ResourceManager::NapiValueType, std::string>> &jsParams);
123 
124     static int32_t ProcessStrResource(napi_env env, napi_callback_info info,
125         std::unique_ptr<ResMgrDataContext> &dataContext);
126 
127     static int32_t ProcessStrResourceByName(napi_env env, napi_callback_info info,
128         std::unique_ptr<ResMgrDataContext> &dataContext);
129 
130     static int32_t ProcessNumResource(napi_env env, napi_callback_info info,
131         std::unique_ptr<ResMgrDataContext> &dataContext);
132 
133     static int32_t ProcessNumResourceByName(napi_env env, napi_callback_info info,
134         std::unique_ptr<ResMgrDataContext> &dataContext);
135 
136     static int32_t ProcessBoolResource(napi_env env, napi_callback_info info,
137         std::unique_ptr<ResMgrDataContext> &dataContext);
138 
139     static int32_t ProcessColorResource(napi_env env, napi_callback_info info,
140         std::unique_ptr<ResMgrDataContext> &dataContext);
141 
142     static int32_t ProcessColorResourceByName(napi_env env, napi_callback_info info,
143         std::unique_ptr<ResMgrDataContext> &dataContext);
144 
145     static int32_t ProcesstMediaContentBase64Resource(napi_env env, napi_callback_info info,
146         std::unique_ptr<ResMgrDataContext> &dataContext);
147 
148     static int32_t ProcessMediaContentResource(napi_env env, napi_callback_info info,
149         std::unique_ptr<ResMgrDataContext> &dataContext);
150 
151     static int32_t ProcessPluralStringValueResource(napi_env env, napi_callback_info info,
152         std::unique_ptr<ResMgrDataContext> &dataContext);
153 
154     static int32_t ProcessStringArrayValueResource(napi_env env, napi_callback_info info,
155         std::unique_ptr<ResMgrDataContext> &dataContext);
156 
157     static int32_t ProcessPluralStrResourceByName(napi_env env, napi_callback_info info,
158         std::unique_ptr<ResMgrDataContext> &dataContext);
159 
160     static int32_t ProcessMediaBase64ResourceByName(napi_env env, napi_callback_info info,
161         std::unique_ptr<ResMgrDataContext> &dataContext);
162 
163     static int32_t ProcessMediaResourceByName(napi_env env, napi_callback_info info,
164         std::unique_ptr<ResMgrDataContext> &dataContext);
165 
166     static int32_t ProcessStringArrayResourceByName(napi_env env, napi_callback_info info,
167         std::unique_ptr<ResMgrDataContext> &dataContext);
168 
169     static int32_t ProcessSymbolResource(napi_env env, napi_callback_info info,
170         std::unique_ptr<ResMgrDataContext> &dataContext);
171 
172     static int32_t ProcessSymbolResourceByName(napi_env env, napi_callback_info info,
173         std::unique_ptr<ResMgrDataContext> &dataContext);
174 
175     static RState getAddonAndConfig(napi_env env, napi_callback_info info,
176         std::unique_ptr<ResMgrDataContext> &dataContext);
177 };
178 } // namespace Resource
179 } // namespace Global
180 } // namespace OHOS
181 #endif