diff --git a/services/firmware/upgrade/executor/include/firmware_download_executor.h b/services/firmware/upgrade/executor/include/firmware_download_executor.h index b1aaed5483f79d6d941a2c097f2e66a4b27374de..c6cea43b9e34eb206b57c82ce6e7e600fe64ca4e 100644 --- a/services/firmware/upgrade/executor/include/firmware_download_executor.h +++ b/services/firmware/upgrade/executor/include/firmware_download_executor.h @@ -24,6 +24,7 @@ namespace OHOS { namespace UpdateEngine { +const int32_t DOWNLOAD_SLEEP_MILLISECONDS = 200; class FirmwareDownloadExecutor : public FirmwareIExecutor { public: FirmwareDownloadExecutor(const DownloadOptions &downloadOptions, FirmwareProgressCallback progressCallback) @@ -37,7 +38,7 @@ private: void PerformDownload(); void DownloadCallback(std::string serverUrl, std::string packageName, Progress progress); bool VerifyDownloadPkg(const std::string &pkgName, Progress &progress); - + std::string GenerateDownloadTaskId(); private: DownloadOptions downloadOptions_; std::vector components_; diff --git a/services/firmware/upgrade/executor/src/firmware_download_executor.cpp b/services/firmware/upgrade/executor/src/firmware_download_executor.cpp index 9ac08cd3d29708c5c64603314c54a80bfbcd67c3..79d2a0228068c5cdb9134e2b1cf677ace60aff43 100644 --- a/services/firmware/upgrade/executor/src/firmware_download_executor.cpp +++ b/services/firmware/upgrade/executor/src/firmware_download_executor.cpp @@ -56,6 +56,21 @@ void FirmwareDownloadExecutor::DoDownload() GetTask(); if (tasks_.downloadTaskId.empty()) { // 首次触发下载 + std::this_thread::sleep_for(std::chrono::milliseconds(DOWNLOAD_SLEEP_MILLISECONDS)); + GetTask(); + FIRMWARE_LOGI("FirmwareDownloadExecutor StartDownload"); + if (tasks_.downloadTaskId.empty()) { + std::string downloadTaskId = GenerateDownloadTaskId(); + FIRMWARE_LOGI("DoDownload: %{public}s", downloadTaskId.c_str()); + FirmwareTaskOperator().UpdateDownloadTaskIdByTaskId(tasks_.taskId, downloadTaskId); + } else { + FIRMWARE_LOGI("DoDownload Repeat subcommit"); + Progress progress; + progress.status = UpgradeStatus::DOWNLOADING; + progress.endReason = "not perrmit repeat submmit"; + firmwareProgressCallback_.progressCallback(progress); + return; + } PerformDownload(); } else { // 恢复下载 @@ -175,5 +190,21 @@ bool FirmwareDownloadExecutor::VerifyDownloadPkg(const std::string &pkgName, Pro } return true; } + +std::string FirmwareDownloadExecutor::GenerateDownloadTaskId() +{ + std::vector downloadInfos; + std::vector components; + FirmwareComponentOperator().QueryAll(components); + for (auto component : components) { + downloadInfos.push_back(component.descriptPackageId); + } + sort(downloadInfos.begin(), downloadInfos.end()); + std::string srcString; + for (auto downloadInfo : downloadInfos) { + srcString += downloadInfo; + } + return Sha256Utils::CalculateHashCode(srcString); +} } // namespace UpdateEngine } // namespace OHOS