1fb299fa2Sopenharmony_ci/* 2fb299fa2Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3fb299fa2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb299fa2Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb299fa2Sopenharmony_ci * You may obtain a copy of the License at 6fb299fa2Sopenharmony_ci * 7fb299fa2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb299fa2Sopenharmony_ci * 9fb299fa2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb299fa2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb299fa2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb299fa2Sopenharmony_ci * See the License for the specific language governing permissions and 13fb299fa2Sopenharmony_ci * limitations under the License. 14fb299fa2Sopenharmony_ci */ 15fb299fa2Sopenharmony_ci 16fb299fa2Sopenharmony_ci#include "ui_strategy.h" 17fb299fa2Sopenharmony_ci#include <array> 18fb299fa2Sopenharmony_ci 19fb299fa2Sopenharmony_cinamespace Updater { 20fb299fa2Sopenharmony_cistd::ostream &operator<<(std::ostream &os, const UiStrategyCfg &info) 21fb299fa2Sopenharmony_ci{ 22fb299fa2Sopenharmony_ci os << "confirmPageId: " << info.confirmPageId << std::endl; 23fb299fa2Sopenharmony_ci os << "labelLogId: { " << info.labelLogId << " }" << std::endl; 24fb299fa2Sopenharmony_ci os << "labelLogResId: { " << info.labelLogResId << " }" << std::endl; 25fb299fa2Sopenharmony_ci os << "labelUpdId: { " << info.labelUpdId << " }" << std::endl; 26fb299fa2Sopenharmony_ci os << info.progressPage << std::endl; 27fb299fa2Sopenharmony_ci os << info.resPage; 28fb299fa2Sopenharmony_ci return os; 29fb299fa2Sopenharmony_ci} 30fb299fa2Sopenharmony_ci 31fb299fa2Sopenharmony_cistd::ostream &operator<<(std::ostream &os, const ResPage &info) 32fb299fa2Sopenharmony_ci{ 33fb299fa2Sopenharmony_ci os << "resPage: {" << std::endl; 34fb299fa2Sopenharmony_ci os << "\tsucessPageId: " << info.successPageId << std::endl; 35fb299fa2Sopenharmony_ci os << "\tfailPageId: " << info.failPageId << std::endl; 36fb299fa2Sopenharmony_ci os << "}" << std::endl; 37fb299fa2Sopenharmony_ci return os; 38fb299fa2Sopenharmony_ci} 39fb299fa2Sopenharmony_ci 40fb299fa2Sopenharmony_cistd::ostream &operator<<(std::ostream &os, const ProgressPage &info) 41fb299fa2Sopenharmony_ci{ 42fb299fa2Sopenharmony_ci os << "progressPage: {" << std::endl; 43fb299fa2Sopenharmony_ci os << "\tprocessPageId: " << info.progressPageId << std::endl; 44fb299fa2Sopenharmony_ci os << "\tprgrsComId: " << info.progressComId << std::endl; 45fb299fa2Sopenharmony_ci os << "\tprgrsType: " << info.progressType << std::endl; 46fb299fa2Sopenharmony_ci os << "\tlogoComId: " << info.logoComId << std::endl; 47fb299fa2Sopenharmony_ci os << "\tlogoType: " << info.logoType << std::endl; 48fb299fa2Sopenharmony_ci os << "}"; 49fb299fa2Sopenharmony_ci return os; 50fb299fa2Sopenharmony_ci} 51fb299fa2Sopenharmony_ci 52fb299fa2Sopenharmony_cistd::unordered_map<std::string, UiStrategyCfg> UiStrategy::strategies_; 53fb299fa2Sopenharmony_cistd::vector<std::string> UiStrategy::modeStr_ = { 54fb299fa2Sopenharmony_ci {UPDATERMODE_SDCARD}, 55fb299fa2Sopenharmony_ci {UPDATERMODE_FACTORYRST}, 56fb299fa2Sopenharmony_ci {UPDATERMODE_REBOOTFACTORYRST}, 57fb299fa2Sopenharmony_ci {UPDATERMODE_OTA}, 58fb299fa2Sopenharmony_ci {UPDATERMODE_RECOVER}, 59fb299fa2Sopenharmony_ci {UPDATERMODE_NIGHTUPDATE}, 60fb299fa2Sopenharmony_ci}; 61fb299fa2Sopenharmony_ci 62fb299fa2Sopenharmony_civoid UiStrategy::RegisterUiMode(const std::string &mode) 63fb299fa2Sopenharmony_ci{ 64fb299fa2Sopenharmony_ci LOG(DEBUG) << "RegisterUiMode " << mode; 65fb299fa2Sopenharmony_ci modeStr_.emplace_back(mode); 66fb299fa2Sopenharmony_ci} 67fb299fa2Sopenharmony_ci 68fb299fa2Sopenharmony_ciconst std::unordered_map<std::string, UiStrategyCfg> &UiStrategy::GetStrategy() 69fb299fa2Sopenharmony_ci{ 70fb299fa2Sopenharmony_ci return strategies_; 71fb299fa2Sopenharmony_ci} 72fb299fa2Sopenharmony_ci 73fb299fa2Sopenharmony_cibool UiStrategy::LoadStrategy(const JsonNode &node, const std::string &mode) 74fb299fa2Sopenharmony_ci{ 75fb299fa2Sopenharmony_ci auto it = std::find(modeStr_.begin(), modeStr_.end(), mode); 76fb299fa2Sopenharmony_ci if (it == modeStr_.end()) { 77fb299fa2Sopenharmony_ci return false; 78fb299fa2Sopenharmony_ci } 79fb299fa2Sopenharmony_ci const JsonNode &defaultNode = node[Traits<UiStrategyCfg>::STRUCT_KEY][DEFAULT_KEY]; 80fb299fa2Sopenharmony_ci const JsonNode &specificNode = node[Traits<UiStrategyCfg>::STRUCT_KEY][*it]; 81fb299fa2Sopenharmony_ci if (!Visit<SETVAL>(specificNode, defaultNode, strategies_[mode])) { 82fb299fa2Sopenharmony_ci LOG(ERROR) << "parse strategy config error"; 83fb299fa2Sopenharmony_ci return false; 84fb299fa2Sopenharmony_ci } 85fb299fa2Sopenharmony_ci LOG(DEBUG) << "mode " << mode << "\n" << strategies_[mode]; 86fb299fa2Sopenharmony_ci return true; 87fb299fa2Sopenharmony_ci} 88fb299fa2Sopenharmony_ci 89fb299fa2Sopenharmony_cibool UiStrategy::LoadStrategy(const JsonNode &node) 90fb299fa2Sopenharmony_ci{ 91fb299fa2Sopenharmony_ci std::unordered_map<std::string, UiStrategyCfg>().swap(strategies_); 92fb299fa2Sopenharmony_ci for (auto mode : modeStr_) { 93fb299fa2Sopenharmony_ci if (!LoadStrategy(node, mode)) { 94fb299fa2Sopenharmony_ci LOG(ERROR) << "load strategy " << mode << " failed"; 95fb299fa2Sopenharmony_ci std::unordered_map<std::string, UiStrategyCfg>().swap(strategies_); 96fb299fa2Sopenharmony_ci return false; 97fb299fa2Sopenharmony_ci } 98fb299fa2Sopenharmony_ci } 99fb299fa2Sopenharmony_ci return true; 100fb299fa2Sopenharmony_ci} 101fb299fa2Sopenharmony_ci} // namespace Updater