diff --git a/services/firmware/upgrade/flow/src/firmware_manager.cpp b/services/firmware/upgrade/flow/src/firmware_manager.cpp index fcc2a98cd7caf78d420a26254c32915142eff1bb..2d03e1d3a7315871d372a5b43df13dd8685e9f87 100644 --- a/services/firmware/upgrade/flow/src/firmware_manager.cpp +++ b/services/firmware/upgrade/flow/src/firmware_manager.cpp @@ -354,9 +354,11 @@ void FirmwareManager::HandleBootUpdateOnStatusProcess(const FirmwareTask &task) FirmwareComponentOperator().QueryAll(components); switch (resultProcess.GetUpdaterResult(components, resultMap)) { case UpdateResultCode::SUCCESS: + FIRMWARE_LOGI("GetUpdaterResult SUCCESS"); HandleBootUpdateSuccess(task, resultMap); break; case UpdateResultCode::FAILURE: + FIRMWARE_LOGI("GetUpdaterResult FAILURE"); HandleBootUpdateFail(task, resultMap); break; default: diff --git a/services/firmware/upgrade/status/include/firmware_result_process.h b/services/firmware/upgrade/status/include/firmware_result_process.h index a5b240af5de861d0e812090bd6a67edf59aa6cdc..fa9942715b23cd6a65c351499d963d8325a4051c 100644 --- a/services/firmware/upgrade/status/include/firmware_result_process.h +++ b/services/firmware/upgrade/status/include/firmware_result_process.h @@ -71,6 +71,7 @@ private: const std::vector &components); UpdateResultCode HandleFileResults(std::map &resultMap, const std::vector &components); + void ParseResult(const std::vector &results, std::string &value, size_t index); }; } // namespace UpdateEngine } // namespace OHOS diff --git a/services/firmware/upgrade/status/src/firmware_result_process.cpp b/services/firmware/upgrade/status/src/firmware_result_process.cpp index 837079d7cebc1b89023fd771eb3978707db657df..89afcb0fb4fe160194b933661cbb25c7c00687b6 100644 --- a/services/firmware/upgrade/status/src/firmware_result_process.cpp +++ b/services/firmware/upgrade/status/src/firmware_result_process.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -37,6 +38,18 @@ static const std::string UPDATER_RESULT_FILE = "/data/updater/updater_result"; constexpr int32_t SYMBOL_LENGTH = 1; constexpr uint32_t UPDATE_SUCCESSED = 1; constexpr uint32_t UPDATE_FAILED = 2; +constexpr size_t PKG_PATH_INDEX = 0; +constexpr size_t RESULT_INDEX = 1; +constexpr size_t REASON_INDEX = 2; + +void FirmwareResultProcess::ParseResult(const std::vector &results, std::string &value, size_t index) +{ + if (index >= results.size()) { + return; + } + value = results[index]; + StringUtils::Trim(value); +} UpdateResultCode FirmwareResultProcess::GetUpdaterResult(const std::vector &components, std::map &resultMap) @@ -93,31 +106,32 @@ UpdateResult FirmwareResultProcess::CompareVersion(const FirmwareComponent &comp void FirmwareResultProcess::ParseUpdaterResultRecord(const std::string &resultLine, std::map &resultMap) { + FIRMWARE_LOGE("ParseUpdaterResultRecord"); if (resultLine.empty()) { FIRMWARE_LOGE("resultLine is null"); return; } - UpdateResult updaterReason; - std::string::size_type verticalPlace = resultLine.find_first_of("|"); - std::string resultAndReason; - if (verticalPlace == std::string::npos) { - updaterReason.spath = resultLine; - } else { - updaterReason.spath = resultLine.substr(0, verticalPlace); - resultAndReason = resultLine.substr(verticalPlace + SYMBOL_LENGTH); + UpdateResult updateResult; + std::vector results; + std::stringstream stringStream(resultLine); + std::string token; + while (std::getline(stringStream, token, '|')) { + results.push_back(token); } - std::string::size_type colonPlace = resultAndReason.find_first_of(":"); - if (colonPlace == std::string::npos) { - updaterReason.result = resultAndReason; - } else { - updaterReason.result = resultAndReason.substr(0, colonPlace); - updaterReason.reason = resultAndReason.substr(colonPlace + SYMBOL_LENGTH); + ParseResult(results, updateResult.spath, PKG_PATH_INDEX); + ParseResult(results, updateResult.result, RESULT_INDEX); + ParseResult(results, updateResult.reason, REASON_INDEX); + + auto colonPlace = updateResult.result.find_first_of(":"); + if (colonPlace != std::string::npos) { + updateResult.result = updateResult.result.substr(0, colonPlace); + updateResult.reason = results[RESULT_INDEX].substr(colonPlace + SYMBOL_LENGTH); } - StringUtils::Trim(updaterReason.spath); - StringUtils::Trim(updaterReason.result); - StringUtils::Trim(updaterReason.reason); - resultMap.emplace(std::make_pair(updaterReason.spath, updaterReason)); + StringUtils::Trim(updateResult.spath); + StringUtils::Trim(updateResult.result); + StringUtils::Trim(updateResult.reason); + resultMap.emplace(std::make_pair(updateResult.spath, updateResult)); } void FirmwareResultProcess::HandleFileError(std::map &resultMap, @@ -150,6 +164,7 @@ UpdateResultCode FirmwareResultProcess::HandleFileResults(std::mapsecond.result; + FIRMWARE_LOGE("HandleFileResults %{public}s", updateResultStatus.c_str()); } hotaUpdateResult |= updateResultStatus == UPDATER_RESULT_SUCCESS ? UPDATE_SUCCESSED : UPDATE_FAILED; }