diff --git a/services/updater_main.cpp b/services/updater_main.cpp index d6215055cb23b4031ef54420ca7e9cf9349a5202..43739ed07dc7c666a67b760ed4dab5a74e29badf 100644 --- a/services/updater_main.cpp +++ b/services/updater_main.cpp @@ -42,6 +42,7 @@ #include "pkg_utils.h" #include "ptable_parse/ptable_process.h" #include "sdcard_update/sdcard_update.h" +#include "scope_guard.h" #include "securec.h" #include "updater/updater_const.h" #include "updater/hwfault_retry.h" @@ -677,13 +678,41 @@ static UpdaterStatus SetUpdateParam(UpdaterParams &upParams, bool isUpdateCurrSl return UPDATE_SUCCESS; } +static UpdaterStatus VerifyUpParams(UpdaterParams &upParams) +{ + if (SetUpdateParam(upParams, false) != UPDATE_SUCCESS) { + LOG(ERROR) << "SetUpdateParam failed"; + return UPDATE_ERROR; + } + // verify package first + if (VerifyCommonFiles(upParams) != UPDATE_SUCCESS) { + return UPDATE_CORRUPT; // verify package failed must return UPDATE_CORRUPT, ux need it !!! + } + // Only handle UPATE_ERROR and UPDATE_SUCCESS here.Let package verify handle others. + if (upParams.updatePackage.size() > 0) { + if (IsSpaceCapacitySufficient(upParams) == UPDATE_ERROR) { + UPDATER_LAST_WORD(UPDATE_UNKNOWN, "space nott enough"); + return UPDATE_UNKNOWN; + } + } + if (upParams.retryCount == 0 && !IsBatteryCapacitySufficient()) { + UPDATER_UI_INSTANCE.ShowUpdInfo(TR(LOG_LOWPOWER)); + UPDATER_UI_INSTANCE.Sleep(UI_SHOW_DURATION); + UPDATER_LAST_WORD(UPDATE_ERROR, "Battery is not sufficient for install package."); + LOG(ERROR) << "Battery is not sufficient for install package."; + return UPDATE_SKIP; + } + return UPDATE_SUCCESS; +} + static UpdaterStatus PreUpdatePackages(UpdaterParams &upParams) { UPDATER_INIT_RECORD; LOG(INFO) << "start to update packages, start index:" << upParams.pkgLocation; - UpdaterStatus status = UPDATE_UNKNOWN; - + ON_SCOPE_EXIT(syncresult) { + NotifyPreCheck(status, upParams); + }; if (upParams.updateBin.size() > 0) { upParams.installTime.resize(upParams.updateBin.size(), std::chrono::duration(0)); if (CheckMountData() != 0) { @@ -700,29 +729,23 @@ static UpdaterStatus PreUpdatePackages(UpdaterParams &upParams) (void)DeleteFile(resultPath); LOG(INFO) << "delete last upgrade file"; } - if (SetUpdateParam(upParams, false) != UPDATE_SUCCESS) { - LOG(ERROR) << "SetUpdateParam failed"; - return UPDATE_ERROR; - } - // verify package first - if (VerifyCommonFiles(upParams) != UPDATE_SUCCESS) { - return UPDATE_CORRUPT; // verify package failed must return UPDATE_CORRUPT, ux need it !!! + status = VerifyUpParams(upParams); + if (status != UPDATE_SUCCESS) { + LOG(ERROR) << "verify updater params fail"; + return status; } - - // Only handle UPATE_ERROR and UPDATE_SUCCESS here.Let package verify handle others. - if (upParams.updatePackage.size() > 0) { - if (IsSpaceCapacitySufficient(upParams) == UPDATE_ERROR) { - UPDATER_LAST_WORD(status, "space nott enough"); - return status; - } + NotifyPreCheck(status, upParams); + if (status != UPDATE_SUCCESS) { + CANCEL_SCOPE_EXIT_GUARD(syncresult); + return UPDATE_CORRUPT; } - if (upParams.retryCount == 0 && !IsBatteryCapacitySufficient()) { - UPDATER_UI_INSTANCE.ShowUpdInfo(TR(LOG_LOWPOWER)); - UPDATER_UI_INSTANCE.Sleep(UI_SHOW_DURATION); - UPDATER_LAST_WORD(UPDATE_ERROR, "Battery is not sufficient for install package."); - LOG(ERROR) << "Battery is not sufficient for install package."; - return UPDATE_SKIP; +#ifdef UPDATER_USE_PTABLE + if (!PtablePreProcess::GetInstance().DoPtableProcess(upParams)) { + LOG(ERROR) << "DoPtableProcess failed"; + return UPDATE_ERROR; } +#endif + CANCEL_SCOPE_EXIT_GUARD(syncresult); return UPDATE_SUCCESS; } @@ -864,12 +887,6 @@ UpdaterStatus DoUpdatePackages(UpdaterParams &upParams) UpdaterStatus status = UPDATE_UNKNOWN; std::vector pkgStartPosition {}; double updateStartPosition = 0.0; -#ifdef UPDATER_USE_PTABLE - if (!PtablePreProcess::GetInstance().DoPtableProcess(upParams)) { - LOG(ERROR) << "DoPtableProcess failed"; - return UPDATE_ERROR; - } -#endif status = CalcProgress(upParams, pkgStartPosition, updateStartPosition); if (status != UPDATE_SUCCESS) { UPDATER_LAST_WORD(status, "CalcProgress failed"); @@ -989,6 +1006,10 @@ static void PostUpdatePackages(UpdaterParams &upParams, UpdaterStatus &status) static UpdaterStatus PreSdcardUpdatePackages(UpdaterParams &upParams) { + UpdaterStatus status = UPDATE_UNKNOWN; + ON_SCOPE_EXIT(syncresult) { + NotifyPreCheck(status, upParams); + }; upParams.installTime.resize(upParams.updatePackage.size(), std::chrono::duration(0)); // verify packages first if (upParams.retryCount == 0 && !IsBatteryCapacitySufficient()) { @@ -1001,10 +1022,18 @@ static UpdaterStatus PreSdcardUpdatePackages(UpdaterParams &upParams) LOG(ERROR) << "SetUpdateParam failed"; return UPDATE_ERROR; } - UpdaterStatus status = VerifyPackages(upParams); + status = VerifyPackages(upParams); + NotifyPreCheck(status, upParams); + CANCEL_SCOPE_EXIT_GUARD(syncresult); if (status != UPDATE_SUCCESS) { return UPDATE_CORRUPT; // verify package failed must return UPDATE_CORRUPT, ux need it !!! } +#ifdef UPDATER_USE_PTABLE + if (!PtablePreProcess::GetInstance().DoPtableProcess(upParams)) { + LOG(ERROR) << "DoPtableProcess failed"; + return UPDATE_ERROR; + } +#endif return UPDATE_SUCCESS; } @@ -1044,7 +1073,6 @@ UpdaterStatus UpdaterFromSdcard(UpdaterParams &upParams) return UPDATE_ERROR; } status = PreSdcardUpdatePackages(upParams); - NotifyPreCheck(status, upParams); if (status == UPDATE_SUCCESS) { upParams.initialProgress += VERIFY_PERCENT; upParams.currentPercentage -= VERIFY_PERCENT; @@ -1074,7 +1102,6 @@ UpdaterStatus InstallUpdaterPackages(UpdaterParams &upParams) { UpdaterInit::GetInstance().InvokeEvent(UPDATER_PRE_UPDATE_PACKAGE_EVENT); UpdaterStatus status = PreUpdatePackages(upParams); - NotifyPreCheck(status, upParams); if (status == UPDATE_SUCCESS) { status = DoUpdatePackages(upParams); }