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_media_asset_status_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 "cloud_media_asset_types.h"
30
31 using namespace std;
32 namespace OHOS::Media {
33 static const string CLOUD_MEDIA_ASSET_STATUS_NAPI = "CloudMediaAssetStatus";
34 thread_local napi_ref CloudMediaAssetStatusNapi::constructor_ = nullptr;
35
Init(napi_env env,napi_value exports)36 napi_value CloudMediaAssetStatusNapi::Init(napi_env env, napi_value exports)
37 {
38 NapiClassInfo info = {
39 .name = CLOUD_MEDIA_ASSET_STATUS_NAPI,
40 .ref = &constructor_,
41 .constructor = Constructor,
42 .props = {
43 DECLARE_NAPI_GETTER("taskStatus", JSGetTaskStatus),
44 DECLARE_NAPI_GETTER("errorCode", JSGetErrorCode),
45 DECLARE_NAPI_GETTER("taskInfo", JSGetTaskInfo),
46 }
47 };
48 MediaLibraryNapiUtils::NapiDefineClass(env, exports, info);
49 return exports;
50 }
51
Constructor(napi_env env,napi_callback_info info)52 napi_value CloudMediaAssetStatusNapi::Constructor(napi_env env, napi_callback_info info)
53 {
54 napi_value newTarget = nullptr;
55 CHECK_ARGS(env, napi_get_new_target(env, info, &newTarget), JS_INNER_FAIL);
56 CHECK_COND_RET(newTarget != nullptr, nullptr, "Invalid call to constructor");
57
58 size_t argc = ARGS_ZERO;
59 napi_value thisVar = nullptr;
60 CHECK_ARGS(env, napi_get_cb_info(env, info, &argc, nullptr, &thisVar, nullptr), JS_INNER_FAIL);
61 CHECK_COND_WITH_MESSAGE(env, argc == ARGS_ZERO, "Number of args is invalid");
62
63 unique_ptr<CloudMediaAssetStatusNapi> obj = make_unique<CloudMediaAssetStatusNapi>();
64 CHECK_ARGS(env,
65 napi_wrap(env, thisVar, reinterpret_cast<void*>(obj.get()), CloudMediaAssetStatusNapi::Destructor,
66 nullptr, nullptr), JS_INNER_FAIL);
67 obj.release();
68 return thisVar;
69 }
70
Destructor(napi_env env,void * nativeObject,void * finalizeHint)71 void CloudMediaAssetStatusNapi::Destructor(napi_env env, void* nativeObject, void* finalizeHint)
72 {
73 auto* cloudMediaAssetStatusNapi = reinterpret_cast<CloudMediaAssetStatusNapi*>(nativeObject);
74 if (cloudMediaAssetStatusNapi == nullptr) {
75 NAPI_ERR_LOG("cloudMediaAssetStatusNapi is nullptr");
76 return;
77 }
78
79 delete cloudMediaAssetStatusNapi;
80 cloudMediaAssetStatusNapi = nullptr;
81 }
82
GetCloudMediaAssetTaskStatus() const83 CloudMediaAssetTaskStatus CloudMediaAssetStatusNapi::GetCloudMediaAssetTaskStatus() const
84 {
85 return this->cloudMediaAssetTaskStatus_;
86 }
87
SetCloudMediaAssetTaskStatus(CloudMediaAssetTaskStatus cloudMediaAssetTaskStatus)88 void CloudMediaAssetStatusNapi::SetCloudMediaAssetTaskStatus(CloudMediaAssetTaskStatus cloudMediaAssetTaskStatus)
89 {
90 this->cloudMediaAssetTaskStatus_ = cloudMediaAssetTaskStatus;
91 }
92
GetCloudMediaTaskPauseCause() const93 CloudMediaTaskPauseCause CloudMediaAssetStatusNapi::GetCloudMediaTaskPauseCause() const
94 {
95 return this->cloudMediaTaskPauseCause_;
96 }
97
SetCloudMediaTaskPauseCause(CloudMediaTaskPauseCause cloudMediaTaskPauseCause)98 void CloudMediaAssetStatusNapi::SetCloudMediaTaskPauseCause(CloudMediaTaskPauseCause cloudMediaTaskPauseCause)
99 {
100 this->cloudMediaTaskPauseCause_ = cloudMediaTaskPauseCause;
101 }
102
GetTaskInfo() const103 std::string CloudMediaAssetStatusNapi::GetTaskInfo() const
104 {
105 return this->taskInfo_;
106 }
107
SetTaskInfo(const std::string & taskInfo)108 void CloudMediaAssetStatusNapi::SetTaskInfo(const std::string &taskInfo)
109 {
110 this->taskInfo_ = taskInfo;
111 }
112
NewCloudMediaAssetStatusNapi(napi_env env,CloudMediaAssetAsyncContext * context)113 napi_value CloudMediaAssetStatusNapi::NewCloudMediaAssetStatusNapi(napi_env env,
114 CloudMediaAssetAsyncContext* context)
115 {
116 napi_value constructor = nullptr;
117 napi_value instance = nullptr;
118 napi_status status = napi_get_reference_value(env, constructor_, &constructor);
119 CHECK_COND_RET(status == napi_ok, nullptr, "Failed to get reference of constructor, napi status: %{public}d",
120 static_cast<int>(status));
121 status = napi_new_instance(env, constructor, 0, nullptr, &instance);
122 CHECK_COND_RET(status == napi_ok, nullptr,
123 "Failed to get new instance of cloud media asset manager task state, napi status: %{public}d",
124 static_cast<int>(status));
125 CHECK_COND_RET(instance != nullptr, nullptr, "Instance is nullptr");
126
127 CloudMediaAssetStatusNapi* cloudMediaAssetStatusNapi = nullptr;
128 status = napi_unwrap(env, instance, reinterpret_cast<void**>(&cloudMediaAssetStatusNapi));
129 CHECK_COND_RET(status == napi_ok, nullptr, "Failed to unwarp instance of CloudMediaAssetStatusNapi");
130 CHECK_COND_RET(cloudMediaAssetStatusNapi != nullptr, nullptr, "cloudMediaAssetStatusNapi is nullptr");
131 cloudMediaAssetStatusNapi->SetCloudMediaAssetTaskStatus(context->cloudMediaAssetTaskStatus_);
132 cloudMediaAssetStatusNapi->SetCloudMediaTaskPauseCause(context->cloudMediaTaskPauseCause_);
133 cloudMediaAssetStatusNapi->SetTaskInfo(context->taskInfo_);
134 return instance;
135 }
136
JSGetTaskStatus(napi_env env,napi_callback_info info)137 napi_value CloudMediaAssetStatusNapi::JSGetTaskStatus(napi_env env, napi_callback_info info)
138 {
139 napi_status status;
140 napi_value thisVar = nullptr;
141 napi_value result = nullptr;
142 CloudMediaAssetStatusNapi* obj = nullptr;
143
144 napi_get_undefined(env, &result);
145 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
146 if (status != napi_ok || thisVar == nullptr) {
147 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
148 return result;
149 }
150
151 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
152 if (status != napi_ok || obj == nullptr) {
153 NAPI_ERR_LOG("Failed to get taskStatus");
154 return nullptr;
155 }
156 CloudMediaAssetTaskStatus cloudMediaAssetTaskStatus = obj->GetCloudMediaAssetTaskStatus();
157 napi_create_int32(env, static_cast<int32_t>(cloudMediaAssetTaskStatus), &result);
158 return result;
159 }
160
JSGetErrorCode(napi_env env,napi_callback_info info)161 napi_value CloudMediaAssetStatusNapi::JSGetErrorCode(napi_env env, napi_callback_info info)
162 {
163 napi_status status;
164 napi_value thisVar = nullptr;
165 napi_value result = nullptr;
166 CloudMediaAssetStatusNapi* obj = nullptr;
167
168 napi_get_undefined(env, &result);
169 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
170 if (status != napi_ok || thisVar == nullptr) {
171 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
172 return result;
173 }
174
175 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
176 if (status != napi_ok || obj == nullptr) {
177 NAPI_ERR_LOG("Failed to get errorCode");
178 return nullptr;
179 }
180 CloudMediaTaskPauseCause cloudMediaTaskPauseCause = obj->GetCloudMediaTaskPauseCause();
181 napi_create_int32(env, static_cast<int32_t>(cloudMediaTaskPauseCause), &result);
182 return result;
183 }
184
JSGetTaskInfo(napi_env env,napi_callback_info info)185 napi_value CloudMediaAssetStatusNapi::JSGetTaskInfo(napi_env env, napi_callback_info info)
186 {
187 napi_status status;
188 napi_value thisVar = nullptr;
189 napi_value result = nullptr;
190 CloudMediaAssetStatusNapi* obj = nullptr;
191
192 napi_get_undefined(env, &result);
193 GET_JS_OBJ_WITH_ZERO_ARGS(env, info, status, thisVar);
194 if (status != napi_ok || thisVar == nullptr) {
195 NAPI_ERR_LOG("Invalid arguments! status: %{public}d", status);
196 return result;
197 }
198
199 status = napi_unwrap(env, thisVar, reinterpret_cast<void**>(&obj));
200 if (status != napi_ok || obj == nullptr) {
201 NAPI_ERR_LOG("Failed to get taskInfo");
202 return nullptr;
203 }
204 std::string taskInfo = obj->GetTaskInfo();
205 napi_create_string_utf8(env, taskInfo.c_str(), NAPI_AUTO_LENGTH, &result);
206 return result;
207 }
208 }