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 "update_client.h"
17
18 #include <thread>
19
20 #include "client_helper.h"
21 #include "napi_common_utils.h"
22 #include "update_helper.h"
23 #include "update_service_kits.h"
24 #include "update_session.h"
25 #include "updater_sa_ipc_interface_code.h"
26
27 using namespace std;
28
29 namespace OHOS::UpdateEngine {
NapiOn(napi_env env,napi_callback_info info)30 napi_value UpdateClient::Napi::NapiOn(napi_env env, napi_callback_info info)
31 {
32 ENGINE_LOGI("UpdateClient::Napi::NapiOn");
33 UpdateClient *updater = UnwrapJsObject<UpdateClient>(env, info);
34 PARAM_CHECK_NAPI_CALL(env, updater != nullptr, return nullptr, "Error get UpdateClient");
35 return updater->On(env, info);
36 }
37
NapiOff(napi_env env,napi_callback_info info)38 napi_value UpdateClient::Napi::NapiOff(napi_env env, napi_callback_info info)
39 {
40 ENGINE_LOGI("UpdateClient::Napi::NapiOff");
41 UpdateClient *updater = UnwrapJsObject<UpdateClient>(env, info);
42 PARAM_CHECK_NAPI_CALL(env, updater != nullptr, return nullptr, "Error get UpdateClient");
43 return updater->Off(env, info);
44 }
45
UpdateClient(napi_env env,napi_value thisVar)46 UpdateClient::UpdateClient(napi_env env, napi_value thisVar)
47 {
48 ENGINE_LOGI("UpdateClient::UpdateClient");
49 napi_ref thisReference = nullptr;
50 constexpr int32_t refCount = 1; // 新引用的初始引用计数
51 napi_create_reference(env, thisVar, refCount, &thisReference);
52 sessionsMgr_ = std::make_shared<SessionManager>(env, thisReference);
53 }
54
~UpdateClient()55 UpdateClient::~UpdateClient()
56 {
57 ENGINE_LOGI("UpdateClient::~UpdateClient");
58 }
59
GetOnlineUpdater(napi_env env,napi_callback_info info)60 napi_value UpdateClient::GetOnlineUpdater(napi_env env, napi_callback_info info)
61 {
62 napi_value result;
63 napi_create_int32(env, 0, &result);
64 size_t argc = MAX_ARGC;
65 napi_value args[MAX_ARGC] = { 0 };
66 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
67 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
68 std::vector<std::pair<std::string, std::string>> paramInfos;
69 paramInfos.push_back({ "upgradeInfo", "UpgradeInfo" });
70 PARAM_CHECK_NAPI_CALL(env, argc >= 1, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
71 return nullptr, "Invalid param");
72 PARAM_CHECK_NAPI_CALL(env, !isInit_, return result, "Has been init");
73
74 ClientStatus ret = ClientHelper::GetUpgradeInfoFromArg(env, args[0], upgradeInfo_);
75 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
76 return nullptr, "Failed to get upgradeInfo param");
77 isInit_ = true;
78 return result;
79 }
80
RegisterCallback()81 void UpdateClient::RegisterCallback()
82 {
83 ENGINE_LOGI("RegisterCallback");
84 UpdateCallbackInfo callback{ [=](const EventInfo &eventInfo) { NotifyEventInfo(eventInfo); } };
85 constexpr int32_t sleepDuration = 10; // 回调注册失败后再次尝试之前的等待时间,单位:毫秒
86 constexpr int32_t maxRetryTimes = 5; // 回调注册失败最大尝试次数
87 int32_t retryTimes = 0;
88 do {
89 int32_t ret = UpdateServiceKits::GetInstance().RegisterUpdateCallback(upgradeInfo_, callback);
90 if (ret == INT_CALL_SUCCESS) {
91 break;
92 }
93
94 if (retryTimes++ < maxRetryTimes) {
95 ENGINE_LOGI("InitCallback fail, will retry after %{public}d milliseconds", sleepDuration);
96 std::this_thread::sleep_for(std::chrono::milliseconds(sleepDuration));
97 } else {
98 ENGINE_LOGE("InitCallback fail after retry %{public}d times", retryTimes);
99 }
100 } while (retryTimes < maxRetryTimes);
101 }
102
103
UnRegisterCallback()104 void UpdateClient::UnRegisterCallback()
105 {
106 UpdateServiceKits::GetInstance().UnregisterUpdateCallback(upgradeInfo_);
107 }
108
CheckNewVersion(napi_env env,napi_callback_info info)109 napi_value UpdateClient::CheckNewVersion(napi_env env, napi_callback_info info)
110 {
111 SessionParams sessionParams(SessionType::SESSION_CHECK_VERSION, CALLBACK_POSITION_ONE, true);
112 napi_value ret = StartSession(env, info, sessionParams, [=](void *context) -> int {
113 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
114 return UpdateServiceKits::GetInstance().CheckNewVersion(upgradeInfo_, *businessError, checkResult_);
115 });
116 PARAM_CHECK(ret != nullptr, return nullptr, "Failed to start worker.");
117 return ret;
118 }
119
CancelUpgrade(napi_env env,napi_callback_info info)120 napi_value UpdateClient::CancelUpgrade(napi_env env, napi_callback_info info)
121 {
122 size_t argc = MAX_ARGC;
123 napi_value args[MAX_ARGC] = { 0 };
124 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
125 PARAM_CHECK_NAPI_CALL(env, status == napi_ok && argc == 0, return nullptr, "Error get cb info");
126 ENGINE_LOGI("CancelUpgrade");
127 SessionParams sessionParams(SessionType::SESSION_CANCEL_UPGRADE, CALLBACK_POSITION_ONE, true);
128 std::shared_ptr<BaseSession> sess = nullptr;
129 sess = std::make_shared<UpdateAsyncessionNoCallback>(this, sessionParams, argc);
130 PARAM_CHECK_NAPI_CALL(env, sess != nullptr, return nullptr, "Failed to create update session");
131 sessionsMgr_->AddSession(sess);
132 napi_value retValue = sess->StartWork(
133 env, args,
134 [=](void *context) -> int {
135 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
136 return UpdateServiceKits::GetInstance().Cancel(upgradeInfo_, CAST_INT(UpdaterSaInterfaceCode::DOWNLOAD),
137 *businessError);
138 },
139 nullptr);
140 PARAM_CHECK(retValue != nullptr, sessionsMgr_->RemoveSession(sess->GetSessionId());
141 return nullptr, "Failed to start worker.");
142 return retValue;
143 }
144
145 template <typename T>
ParseUpgOptions(napi_env env,napi_callback_info info,VersionDigestInfo & versionDigestInfo,T & options)146 ClientStatus UpdateClient::ParseUpgOptions(napi_env env, napi_callback_info info, VersionDigestInfo &versionDigestInfo,
147 T &options)
148 {
149 size_t argc = MAX_ARGC;
150 napi_value args[MAX_ARGC] = { 0 };
151 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
152 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return ClientStatus::CLIENT_INVALID_PARAM, "Error get cb info");
153
154 ClientStatus ret = ClientHelper::GetVersionDigestInfoFromArg(env, args[0], versionDigestInfo);
155 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, return ClientStatus::CLIENT_INVALID_PARAM,
156 "Failed to get versionDigestInfo param");
157
158 ret = ClientHelper::GetOptionsFromArg(env, args[1], options);
159 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, return ClientStatus::CLIENT_INVALID_PARAM,
160 "Failed to get Options param");
161 return ClientStatus::CLIENT_SUCCESS;
162 }
163
ParseUpgOptions(napi_env env,napi_callback_info info,T & options)164 template <typename T> ClientStatus UpdateClient::ParseUpgOptions(napi_env env, napi_callback_info info, T &options)
165 {
166 size_t argc = MAX_ARGC;
167 napi_value args[MAX_ARGC] = { 0 };
168 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
169 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return ClientStatus::CLIENT_INVALID_PARAM, "Error get cb info");
170
171 ClientStatus ret = ClientHelper::GetOptionsFromArg(env, args[0], options);
172 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, return ClientStatus::CLIENT_INVALID_PARAM,
173 "Failed to get Options param");
174 return ClientStatus::CLIENT_SUCCESS;
175 }
176
Download(napi_env env,napi_callback_info info)177 napi_value UpdateClient::Download(napi_env env, napi_callback_info info)
178 {
179 size_t argc = MAX_ARGC;
180 napi_value args[MAX_ARGC] = { 0 };
181 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
182 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
183 ENGINE_LOGI("Download");
184
185 ClientStatus ret = ParseUpgOptions(env, info, versionDigestInfo_, downloadOptions_);
186 std::vector<std::pair<std::string, std::string>> paramInfos;
187 paramInfos.push_back({ "versionDigestInfo", "VersionDigestInfo" });
188 paramInfos.push_back({ "downloadOptions", "DownloadOptions" });
189 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
190 return nullptr, "Failed to get Download param");
191
192 SessionParams sessionParams(SessionType::SESSION_DOWNLOAD, CALLBACK_POSITION_THREE, true);
193 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
194 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
195 return UpdateServiceKits::GetInstance().Download(upgradeInfo_, versionDigestInfo_, downloadOptions_,
196 *businessError);
197 });
198 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
199 return retValue;
200 }
201
PauseDownload(napi_env env,napi_callback_info info)202 napi_value UpdateClient::PauseDownload(napi_env env, napi_callback_info info)
203 {
204 size_t argc = MAX_ARGC;
205 napi_value args[MAX_ARGC] = { 0 };
206 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
207 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
208
209 ClientStatus ret = ParseUpgOptions(env, info, versionDigestInfo_, pauseDownloadOptions_);
210 std::vector<std::pair<std::string, std::string>> paramInfos;
211 paramInfos.push_back({ "versionDigestInfo", "VersionDigestInfo" });
212 paramInfos.push_back({ "pauseDownloadOptions", "PauseDownloadOptions" });
213 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
214 return nullptr, "Failed to get pauseDownloadOptions param");
215
216 SessionParams sessionParams(SessionType::SESSION_PAUSE_DOWNLOAD, CALLBACK_POSITION_THREE, true);
217 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
218 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
219 return UpdateServiceKits::GetInstance().PauseDownload(upgradeInfo_, versionDigestInfo_, pauseDownloadOptions_,
220 *businessError);
221 });
222 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
223 return retValue;
224 }
225
ResumeDownload(napi_env env,napi_callback_info info)226 napi_value UpdateClient::ResumeDownload(napi_env env, napi_callback_info info)
227 {
228 size_t argc = MAX_ARGC;
229 napi_value args[MAX_ARGC] = { 0 };
230 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
231 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
232
233 ClientStatus ret = ParseUpgOptions(env, info, versionDigestInfo_, resumeDownloadOptions_);
234 std::vector<std::pair<std::string, std::string>> paramInfos;
235 paramInfos.push_back({ "versionDigestInfo", "VersionDigestInfo" });
236 paramInfos.push_back({ "resumeDownloadOptions", "ResumeDownloadOptions" });
237 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
238 return nullptr, "Failed to get resumeDownloadOptions param");
239
240 SessionParams sessionParams(SessionType::SESSION_RESUME_DOWNLOAD, CALLBACK_POSITION_THREE, true);
241 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
242 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
243 return UpdateServiceKits::GetInstance().ResumeDownload(upgradeInfo_, versionDigestInfo_, resumeDownloadOptions_,
244 *businessError);
245 });
246 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
247 return retValue;
248 }
249
Upgrade(napi_env env,napi_callback_info info)250 napi_value UpdateClient::Upgrade(napi_env env, napi_callback_info info)
251 {
252 size_t argc = MAX_ARGC;
253 napi_value args[MAX_ARGC] = { 0 };
254 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
255 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
256
257 ClientStatus ret = ParseUpgOptions(env, info, versionDigestInfo_, upgradeOptions_);
258 std::vector<std::pair<std::string, std::string>> paramInfos;
259 paramInfos.push_back({ "versionDigestInfo", "VersionDigestInfo" });
260 paramInfos.push_back({ "upgradeOptions", "UpgradeOptions" });
261 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
262 return nullptr, "Failed to get upgradeOptions param");
263
264 SessionParams sessionParams(SessionType::SESSION_UPGRADE, CALLBACK_POSITION_THREE, true);
265 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
266 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
267 return UpdateServiceKits::GetInstance().Upgrade(upgradeInfo_, versionDigestInfo_, upgradeOptions_,
268 *businessError);
269 });
270 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
271 return retValue;
272 }
273
ClearError(napi_env env,napi_callback_info info)274 napi_value UpdateClient::ClearError(napi_env env, napi_callback_info info)
275 {
276 size_t argc = MAX_ARGC;
277 napi_value args[MAX_ARGC] = { 0 };
278 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
279 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
280
281 ClientStatus ret = ParseUpgOptions(env, info, versionDigestInfo_, clearOptions_);
282 std::vector<std::pair<std::string, std::string>> paramInfos;
283 paramInfos.push_back({ "versionDigestInfo", "VersionDigestInfo" });
284 paramInfos.push_back({ "clearOptions", "ClearOptions" });
285 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
286 return nullptr, "Failed to get clearOptions param");
287
288 SessionParams sessionParams(SessionType::SESSION_CLEAR_ERROR, CALLBACK_POSITION_THREE, true);
289 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
290 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
291 return UpdateServiceKits::GetInstance().ClearError(upgradeInfo_, versionDigestInfo_, clearOptions_,
292 *businessError);
293 });
294 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
295 return retValue;
296 }
297
TerminateUpgrade(napi_env env,napi_callback_info info)298 napi_value UpdateClient::TerminateUpgrade(napi_env env, napi_callback_info info)
299 {
300 size_t argc = MAX_ARGC;
301 napi_value args[MAX_ARGC] = { 0 };
302 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
303 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
304
305 SessionParams sessionParams(SessionType::SESSION_TERMINATE_UPGRADE, CALLBACK_POSITION_ONE, true);
306 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
307 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
308 return UpdateServiceKits::GetInstance().TerminateUpgrade(upgradeInfo_, *businessError);
309 });
310 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
311 return retValue;
312 }
313
SetUpgradePolicy(napi_env env,napi_callback_info info)314 napi_value UpdateClient::SetUpgradePolicy(napi_env env, napi_callback_info info)
315 {
316 size_t argc = MAX_ARGC;
317 napi_value args[MAX_ARGC] = { 0 };
318 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
319 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
320
321 ClientStatus ret = ClientHelper::GetUpgradePolicyFromArg(env, args[0], upgradePolicy_);
322 std::vector<std::pair<std::string, std::string>> paramInfos;
323 paramInfos.push_back({ "upgradePolicy", "UpgradePolicy" });
324 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
325 return nullptr, "Failed to get upgradePolicy param");
326
327 SessionParams sessionParams(SessionType::SESSION_SET_POLICY, CALLBACK_POSITION_TWO, true);
328 napi_value retValue = StartSession(env, info, sessionParams, [&](void *context) -> int {
329 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
330 return UpdateServiceKits::GetInstance().SetUpgradePolicy(upgradeInfo_, upgradePolicy_, *businessError);
331 });
332 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to SetUpgradePolicy.");
333 return retValue;
334 }
335
GetUpgradePolicy(napi_env env,napi_callback_info info)336 napi_value UpdateClient::GetUpgradePolicy(napi_env env, napi_callback_info info)
337 {
338 SessionParams sessionParams(SessionType::SESSION_GET_POLICY, CALLBACK_POSITION_ONE, true);
339 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
340 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
341 return UpdateServiceKits::GetInstance().GetUpgradePolicy(upgradeInfo_, upgradePolicy_, *businessError);
342 });
343 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to UpgradeVersion.");
344 return retValue;
345 }
346
GetNewVersionInfo(napi_env env,napi_callback_info info)347 napi_value UpdateClient::GetNewVersionInfo(napi_env env, napi_callback_info info)
348 {
349 SessionParams sessionParams(SessionType::SESSION_GET_NEW_VERSION, CALLBACK_POSITION_ONE, true);
350 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
351 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
352 return UpdateServiceKits::GetInstance().GetNewVersionInfo(upgradeInfo_, newVersionInfo_, *businessError);
353 });
354 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to GetNewVersionInfo.");
355 return retValue;
356 }
357
GetNewVersionDescription(napi_env env,napi_callback_info info)358 napi_value UpdateClient::GetNewVersionDescription(napi_env env, napi_callback_info info)
359 {
360 size_t argc = MAX_ARGC;
361 napi_value args[MAX_ARGC] = { 0 };
362 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
363 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
364 ENGINE_LOGI("GetNewVersionDescription");
365
366 ClientStatus ret = ParseUpgOptions(env, info, versionDigestInfo_, descriptionOptions_);
367 std::vector<std::pair<std::string, std::string>> paramInfos;
368 paramInfos.push_back({ "versionDigestInfo", "VersionDigestInfo" });
369 paramInfos.push_back({ "descriptionOptions", "DescriptionOptions" });
370 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
371 return nullptr, "Failed to get descriptionOptions param");
372
373 SessionParams sessionParams(SessionType::SESSION_GET_NEW_VERSION_DESCRIPTION, CALLBACK_POSITION_THREE, true);
374 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
375 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
376 return UpdateServiceKits::GetInstance().GetNewVersionDescription(upgradeInfo_, versionDigestInfo_,
377 descriptionOptions_, newVersionDescriptionInfo_, *businessError);
378 });
379 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
380 return retValue;
381 }
382
GetCurrentVersionInfo(napi_env env,napi_callback_info info)383 napi_value UpdateClient::GetCurrentVersionInfo(napi_env env, napi_callback_info info)
384 {
385 SessionParams sessionParams(SessionType::SESSION_GET_CUR_VERSION, CALLBACK_POSITION_ONE, true);
386 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
387 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
388 return UpdateServiceKits::GetInstance().GetCurrentVersionInfo(upgradeInfo_, currentVersionInfo_,
389 *businessError);
390 });
391 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to GetCurrentVersionInfo.");
392 return retValue;
393 }
394
GetCurrentVersionDescription(napi_env env,napi_callback_info info)395 napi_value UpdateClient::GetCurrentVersionDescription(napi_env env, napi_callback_info info)
396 {
397 size_t argc = MAX_ARGC;
398 napi_value args[MAX_ARGC] = { 0 };
399 napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
400 PARAM_CHECK_NAPI_CALL(env, status == napi_ok, return nullptr, "Error get cb info");
401 ENGINE_LOGI("GetCurrentVersionDescription");
402
403 ClientStatus ret = ParseUpgOptions(env, info, descriptionOptions_);
404 std::vector<std::pair<std::string, std::string>> paramInfos;
405 paramInfos.push_back({ "descriptionOptions", "DescriptionOptions" });
406 PARAM_CHECK(ret == ClientStatus::CLIENT_SUCCESS, NapiCommonUtils::NapiThrowParamError(env, paramInfos);
407 return nullptr, "Failed to get descriptionOptions param");
408
409 SessionParams sessionParams(SessionType::SESSION_GET_CUR_VERSION_DESCRIPTION, CALLBACK_POSITION_TWO, true);
410 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
411 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
412 return UpdateServiceKits::GetInstance().GetCurrentVersionDescription(upgradeInfo_, descriptionOptions_,
413 currentVersionDescriptionInfo_, *businessError);
414 });
415 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to start worker.");
416 return retValue;
417 }
418
GetTaskInfo(napi_env env,napi_callback_info info)419 napi_value UpdateClient::GetTaskInfo(napi_env env, napi_callback_info info)
420 {
421 SessionParams sessionParams(SessionType::SESSION_GET_TASK_INFO, CALLBACK_POSITION_ONE, true);
422 napi_value retValue = StartSession(env, info, sessionParams, [=](void *context) -> int {
423 BusinessError *businessError = reinterpret_cast<BusinessError *>(context);
424 return UpdateServiceKits::GetInstance().GetTaskInfo(upgradeInfo_, taskInfo_, *businessError);
425 });
426 PARAM_CHECK(retValue != nullptr, return nullptr, "Failed to GetTaskInfo.");
427 return retValue;
428 }
429
GetUpdateResult(uint32_t type,UpdateResult & result)430 void UpdateClient::GetUpdateResult(uint32_t type, UpdateResult &result)
431 {
432 ENGINE_LOGI("GetUpdateResult type %{public}d", type);
433 result.type = type;
434 switch (type) {
435 case SessionType::SESSION_CHECK_VERSION:
436 result.result.checkResult = &checkResult_;
437 result.buildJSObject = ClientHelper::BuildCheckResult;
438 break;
439 case SessionType::SESSION_GET_NEW_VERSION:
440 result.result.newVersionInfo = &newVersionInfo_;
441 result.buildJSObject = ClientHelper::BuildNewVersionInfo;
442 break;
443 case SessionType::SESSION_GET_NEW_VERSION_DESCRIPTION:
444 result.result.versionDescriptionInfo = &newVersionDescriptionInfo_;
445 result.buildJSObject = ClientHelper::BuildVersionDescriptionInfo;
446 break;
447 case SessionType::SESSION_GET_TASK_INFO:
448 result.result.taskInfo = &taskInfo_;
449 result.buildJSObject = ClientHelper::BuildTaskInfo;
450 break;
451 case SessionType::SESSION_GET_CUR_VERSION:
452 result.result.currentVersionInfo = ¤tVersionInfo_;
453 result.buildJSObject = ClientHelper::BuildCurrentVersionInfo;
454 break;
455 case SessionType::SESSION_GET_CUR_VERSION_DESCRIPTION:
456 result.result.versionDescriptionInfo = ¤tVersionDescriptionInfo_;
457 result.buildJSObject = ClientHelper::BuildVersionDescriptionInfo;
458 break;
459 case SessionType::SESSION_GET_POLICY:
460 result.result.upgradePolicy = &upgradePolicy_;
461 result.buildJSObject = ClientHelper::BuildUpgradePolicy;
462 break;
463 default:
464 result.buildJSObject = ClientHelper::BuildUndefinedStatus;
465 break;
466 }
467 }
468 } // namespace OHOS::UpdateEngine