1 /*
2 * Copyright (C) 2024 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 "cloud_enhancement_task_state_napi.h"
17
18 #include <fcntl.h>
19 #include <unistd.h>
20
21 #include "directory_ex.h"
22 #include "file_uri.h"
23 #include "media_file_utils.h"
24 #include "media_library_napi.h"
25 #include "medialibrary_client_errno.h"
26 #include "medialibrary_errno.h"
27 #include "medialibrary_napi_utils.h"
28 #include "userfile_client.h"
29 #include "userfile_manager_types.h"
30
31 using namespace std;
32
33 namespace OHOS {
34 namespace Media {
35
36 static const string CLOUD_ENHANCEMENT_TASK_STATE_CLASS = "CloudEnhancementTaskState";
37 thread_local napi_ref CloudEnhancementTaskStateNapi::constructor_ = nullptr;
38
Init(napi_env env,napi_value exports)39 napi_value CloudEnhancementTaskStateNapi::Init(napi_env env, napi_value exports)
40 {
41 NapiClassInfo info = {
42 .name = CLOUD_ENHANCEMENT_TASK_STATE_CLASS,
43 .ref = &constructor_,
44 .constructor = Constructor,
45 .props = {
46 DECLARE_NAPI_GETTER("taskStage", JSGetTaskStage),
47 DECLARE_NAPI_GETTER("transferredFileSize", JSGetTransferredFileSize),
48 DECLARE_NAPI_GETTER("totalFileSize", JSGetTotalFileSize),
49 DECLARE_NAPI_GETTER("expectedDuration", JSGetExpectedDuration),
50 DECLARE_NAPI_GETTER("statusCode", JSGetStatusCode),
51 }
52 };
53 MediaLibraryNapiUtils::NapiDefineClass(env, exports, info);
54 return exports;
55 }
56
Constructor(napi_env env,napi_callback_info info)57 napi_value CloudEnhancementTaskStateNapi::Constructor(napi_env env, napi_callback_info info)
58 {
59 napi_value newTarget = nullptr;
60 CHECK_ARGS(env, napi_get_new_target(env, info, &newTarget), JS_INNER_FAIL);
61 CHECK_COND_RET(newTarget != nullptr, nullptr, "Invalid call to constructor");
62
63 size_t argc = ARGS_ZERO;
64 napi_value thisVar = nullptr;
65 CHECK_ARGS(env, napi_get_cb_info(env, info, &argc, nullptr, &thisVar, nullptr), JS_INNER_FAIL);
66 CHECK_COND_WITH_MESSAGE(env, argc == ARGS_ZERO, "Number of args is invalid");
67
68 unique_ptr<CloudEnhancementTaskStateNapi> obj = make_unique<CloudEnhancementTaskStateNapi>();
69 CHECK_ARGS(env,
70 napi_wrap(env, thisVar, reinterpret_cast<void*>(obj.get()), CloudEnhancementTaskStateNapi::Destructor,
71 nullptr, nullptr), JS_INNER_FAIL);
72 obj.release();
73 return thisVar;
74 }
75
Destructor(napi_env env,void * nativeObject,void * finalizeHint)76 void CloudEnhancementTaskStateNapi::Destructor(napi_env env, void* nativeObject, void* finalizeHint)
77 {
78 auto* cloudEnhancementTaskStateNapi = reinterpret_cast<CloudEnhancementTaskStateNapi*>(nativeObject);
79 if (cloudEnhancementTaskStateNapi == nullptr) {
80 return;
81 }
82
83 delete cloudEnhancementTaskStateNapi;
84 cloudEnhancementTaskStateNapi = nullptr;
85 }
86
GetCloudEnhancementTaskStage() const87 CloudEnhancementTaskStage CloudEnhancementTaskStateNapi::GetCloudEnhancementTaskStage() const
88 {
89 return this->cloudEnhancementTaskStage_;
90 }
91
SetCloudEnhancementTaskStage(CloudEnhancementTaskStage cloudEnhancementTaskStage)92 void CloudEnhancementTaskStateNapi::SetCloudEnhancementTaskStage(CloudEnhancementTaskStage cloudEnhancementTaskStage)
93 {
94 this->cloudEnhancementTaskStage_ = cloudEnhancementTaskStage;
95 }
96
GetTransferredFileSize() const97 int32_t CloudEnhancementTaskStateNapi::GetTransferredFileSize() const
98 {
99 return this->transferredFileSize_;
100 }
101
SetTransferredFileSize(int32_t transferredFileSize)102 void CloudEnhancementTaskStateNapi::SetTransferredFileSize(int32_t transferredFileSize)
103 {
104 this->transferredFileSize_ = transferredFileSize;
105 }
106
GetTotalFileSize() const107 int32_t CloudEnhancementTaskStateNapi::GetTotalFileSize() const
108 {
109 return this->totalFileSize_;
110 }
111
SetTotalFileSize(int32_t totalFileSize)112 void CloudEnhancementTaskStateNapi::SetTotalFileSize(int32_t totalFileSize)
113 {
114 this->totalFileSize_ = totalFileSize;
115 }
116
GetExpectedDuration() const117 int32_t CloudEnhancementTaskStateNapi::GetExpectedDuration() const
118 {
119 return this->expectedDuration_;
120 }
121
SetExpectedDuration(int32_t expectedDuration)122 void CloudEnhancementTaskStateNapi::SetExpectedDuration(int32_t expectedDuration)
123 {
124 this->expectedDuration_ = expectedDuration;
125 }
126
GetStatusCode() const127 int32_t CloudEnhancementTaskStateNapi::GetStatusCode() const
128 {
129 return this->statusCode_;
130 }
131
SetStatusCode(int32_t statusCode)132 void CloudEnhancementTaskStateNapi::SetStatusCode(int32_t statusCode)
133 {
134 this->statusCode_ = statusCode;
135 }
136
NewCloudEnhancementTaskStateNapi(napi_env env,CloudEnhancementAsyncContext * context)137 napi_value CloudEnhancementTaskStateNapi::NewCloudEnhancementTaskStateNapi(napi_env env,
138 CloudEnhancementAsyncContext* context)
139 {
140 napi_value constructor = nullptr;
141 napi_value instance = nullptr;
142 napi_status status = napi_get_reference_value(env, constructor_, &constructor);
143 CHECK_COND_RET(status == napi_ok, nullptr, "Failed to get reference of constructor, napi status: %{public}d",
144 static_cast<int>(status));
145 status = napi_new_instance(env, constructor, 0, nullptr, &instance);
146 CHECK_COND_RET(status == napi_ok, nullptr,
147 "Failed to get new instance of cloud enhancement task state, napi status: %{public}d",
148 static_cast<int>(status));
149 CHECK_COND_RET(instance != nullptr, nullptr, "Instance is nullptr");
150
151 CloudEnhancementTaskStateNapi* cloudEnhancementTaskStateNapi = nullptr;
152 status = napi_unwrap(env, instance, reinterpret_cast<void**>(&cloudEnhancementTaskStateNapi));
153 CHECK_COND_RET(status == napi_ok, nullptr, "Failed to unwarp instance of CloudEnhancementTaskStateNapi");
154 CHECK_COND_RET(cloudEnhancementTaskStateNapi != nullptr, nullptr, "cloudEnhancementTaskStateNapi is nullptr");
155 cloudEnhancementTaskStateNapi->SetCloudEnhancementTaskStage(context->cloudEnhancementTaskStage_);
156 cloudEnhancementTaskStateNapi->SetTransferredFileSize(context->transferredFileSize_);
157 cloudEnhancementTaskStateNapi->SetTotalFileSize(context->totalFileSize_);
158 cloudEnhancementTaskStateNapi->SetExpectedDuration(context->expectedDuration_);
159 cloudEnhancementTaskStateNapi->SetStatusCode(context->statusCode_);
160 return instance;
161 }
162
JSGetTaskStage(napi_env env,napi_callback_info info)163 napi_value CloudEnhancementTaskStateNapi::JSGetTaskStage(napi_env env, napi_callback_info info)
164 {
165 napi_status status;
166 napi_value thisVar = nullptr;
167 napi_value result = nullptr;
168 CloudEnhancementTaskStateNapi* obj = nullptr;
169
170 napi_get_undefined(env, &result);
171 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
172 if (status != napi_ok || thisVar == nullptr) {
173 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
174 return result;
175 }
176
177 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
178 if (status == napi_ok && obj != nullptr) {
179 CloudEnhancementTaskStage cloudEnhancementTaskStage = obj->GetCloudEnhancementTaskStage();
180 napi_create_int32(env, static_cast<int32_t>(cloudEnhancementTaskStage), &result);
181 } else {
182 NAPI_ERR_LOG("Failed to get taskStage");
183 }
184 return result;
185 }
186
JSGetTransferredFileSize(napi_env env,napi_callback_info info)187 napi_value CloudEnhancementTaskStateNapi::JSGetTransferredFileSize(napi_env env, napi_callback_info info)
188 {
189 napi_status status;
190 napi_value thisVar = nullptr;
191 napi_value result = nullptr;
192 CloudEnhancementTaskStateNapi* obj = nullptr;
193
194 napi_get_undefined(env, &result);
195 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
196 if (status != napi_ok || thisVar == nullptr) {
197 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
198 return result;
199 }
200
201 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
202 if (status == napi_ok && obj != nullptr) {
203 int32_t transferredFileSize = obj->GetTransferredFileSize();
204 if (transferredFileSize != UNDEFINED) {
205 napi_create_int32(env, transferredFileSize, &result);
206 }
207 } else {
208 NAPI_ERR_LOG("Failed to get transferredFileSize");
209 }
210 return result;
211 }
212
JSGetTotalFileSize(napi_env env,napi_callback_info info)213 napi_value CloudEnhancementTaskStateNapi::JSGetTotalFileSize(napi_env env, napi_callback_info info)
214 {
215 napi_status status;
216 napi_value thisVar = nullptr;
217 napi_value result = nullptr;
218 CloudEnhancementTaskStateNapi* obj = nullptr;
219
220 napi_get_undefined(env, &result);
221 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
222 if (status != napi_ok || thisVar == nullptr) {
223 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
224 return result;
225 }
226
227 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
228 if (status == napi_ok && obj != nullptr) {
229 int32_t totalFileSize = obj->GetTotalFileSize();
230 if (totalFileSize != UNDEFINED) {
231 napi_create_int32(env, totalFileSize, &result);
232 }
233 } else {
234 NAPI_ERR_LOG("Failed to get totalFileSize");
235 }
236 return result;
237 }
238
JSGetExpectedDuration(napi_env env,napi_callback_info info)239 napi_value CloudEnhancementTaskStateNapi::JSGetExpectedDuration(napi_env env, napi_callback_info info)
240 {
241 napi_status status;
242 napi_value thisVar = nullptr;
243 napi_value result = nullptr;
244 CloudEnhancementTaskStateNapi* obj = nullptr;
245
246 napi_get_undefined(env, &result);
247 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
248 if (status != napi_ok || thisVar == nullptr) {
249 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
250 return result;
251 }
252
253 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
254 if (status == napi_ok && obj != nullptr) {
255 int32_t expectedDuration = obj->GetExpectedDuration();
256 if (expectedDuration != UNDEFINED) {
257 napi_create_int32(env, expectedDuration, &result);
258 }
259 } else {
260 NAPI_ERR_LOG("Failed to get expectedDuration");
261 }
262 return result;
263 }
264
JSGetStatusCode(napi_env env,napi_callback_info info)265 napi_value CloudEnhancementTaskStateNapi::JSGetStatusCode(napi_env env, napi_callback_info info)
266 {
267 napi_status status;
268 napi_value thisVar = nullptr;
269 napi_value result = nullptr;
270 CloudEnhancementTaskStateNapi* obj = nullptr;
271
272 napi_get_undefined(env, &result);
273 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
274 if (status != napi_ok || thisVar == nullptr) {
275 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
276 return result;
277 }
278
279 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
280 if (status == napi_ok && obj != nullptr) {
281 int32_t statusCode = obj->GetStatusCode();
282 if (statusCode != UNDEFINED) {
283 napi_create_int32(env, statusCode, &result);
284 }
285 } else {
286 NAPI_ERR_LOG("Failed to get statusCode");
287 }
288 return result;
289 }
290
291 } // namespace Media
292 } // namespace OHOS