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 #ifndef UPDATE_CLIENT_H 17 #define UPDATE_CLIENT_H 18 19 #include "check_result.h" 20 #include "current_version_info.h" 21 #include "iupdater.h" 22 #include "new_version_info.h" 23 #include "progress.h" 24 #include "task_info.h" 25 #include "version_description_info.h" 26 27 namespace OHOS::UpdateEngine { 28 class UpdateClient : public IUpdater { 29 public: 30 class Napi { 31 public: 32 static constexpr const char *FUNCTION_ON = "on"; 33 static constexpr const char *FUNCTION_OFF = "off"; 34 35 static napi_value NapiOn(napi_env env, napi_callback_info info); 36 static napi_value NapiOff(napi_env env, napi_callback_info info); 37 }; 38 39 UpdateClient(napi_env env, napi_value thisVar); 40 ~UpdateClient() override; 41 42 // Obtain the online updater engine and return it through the sync API. 43 napi_value GetOnlineUpdater(napi_env env, napi_callback_info info); 44 45 // Asynchronous API 46 napi_value CheckNewVersion(napi_env env, napi_callback_info info); 47 napi_value SetUpgradePolicy(napi_env env, napi_callback_info info); 48 napi_value GetUpgradePolicy(napi_env env, napi_callback_info info); 49 napi_value GetNewVersionInfo(napi_env env, napi_callback_info info); 50 napi_value GetNewVersionDescription(napi_env env, napi_callback_info info); 51 napi_value GetCurrentVersionInfo(napi_env env, napi_callback_info info); 52 napi_value GetCurrentVersionDescription(napi_env env, napi_callback_info info); 53 napi_value GetTaskInfo(napi_env env, napi_callback_info info); 54 55 // Event mode, which is used to send the result to the JS. 56 napi_value CancelUpgrade(napi_env env, napi_callback_info info); 57 napi_value Download(napi_env env, napi_callback_info info); 58 napi_value ResumeDownload(napi_env env, napi_callback_info info); 59 napi_value PauseDownload(napi_env env, napi_callback_info info); 60 napi_value Upgrade(napi_env env, napi_callback_info info); 61 napi_value ClearError(napi_env env, napi_callback_info info); 62 napi_value TerminateUpgrade(napi_env env, napi_callback_info info); 63 64 void GetUpdateResult(uint32_t type, UpdateResult &result) override; 65 66 // Notify the session. 67 void NotifyDownloadProgress(const BusinessError &businessError, const Progress &progress); 68 void NotifyUpgradeProgresss(const BusinessError &businessError, const Progress &progress); 69 70 #ifdef UPDATER_UT GetUpdateSession(uint32_t sessId)71 UpdateSession *GetUpdateSession(uint32_t sessId) 72 { 73 std::lock_guard<std::mutex> guard(sessionMutex_); 74 auto iter = sessions_.find(sessId); 75 if (iter != sessions_.end()) { 76 return iter->second.get(); 77 } 78 return nullptr; 79 } 80 #endif 81 82 protected: 83 void RegisterCallback() override; 84 void UnRegisterCallback() override; 85 86 private: 87 template <typename T> 88 ClientStatus ParseUpgOptions(napi_env env, napi_callback_info info, VersionDigestInfo &versionDigestInfo, 89 T &options); 90 template <typename T> 91 ClientStatus ParseUpgOptions(napi_env env, napi_callback_info info, T &options); 92 93 private: 94 std::mutex sessionMutex_; 95 bool isInit_ = false; 96 std::string upgradeFile_; 97 std::string certsFile_; 98 UpgradeInfo upgradeInfo_ {}; 99 UpgradePolicy upgradePolicy_ {}; 100 Progress progress_ {}; 101 Progress verifyProgress_ {}; 102 CheckResult checkResult_ {}; 103 NewVersionInfo newVersionInfo_ {}; 104 VersionDescriptionInfo newVersionDescriptionInfo_ {}; 105 CurrentVersionInfo currentVersionInfo_ {}; 106 VersionDescriptionInfo currentVersionDescriptionInfo_ {}; 107 TaskInfo taskInfo_ {}; 108 VersionDigestInfo versionDigestInfo_ {}; 109 DescriptionOptions descriptionOptions_ {}; 110 UpgradeOptions upgradeOptions_; 111 ClearOptions clearOptions_ {}; 112 DownloadOptions downloadOptions_ {}; 113 ResumeDownloadOptions resumeDownloadOptions_ {}; 114 PauseDownloadOptions pauseDownloadOptions_ {}; 115 }; 116 117 #ifdef UPDATER_UT 118 napi_value UpdateClientInit(napi_env env, napi_value exports); 119 #endif 120 } // namespace OHOS::UpdateEngine 121 #endif // UPDATE_CLIENT_H