From 461750f91d7d45a3f9b911bf4019a1feb7414936 Mon Sep 17 00:00:00 2001 From: Yakumo Saki Date: Tue, 24 Jan 2023 01:20:16 +0900 Subject: [PATCH] fix #124 auto upgrade --- include/config/config.h | 2 ++ src/config/config.cpp | 6 ++++-- src/config/config_file.cpp | 8 ++++++-- src/main.cpp | 5 ++++- src/main_normal.cpp | 2 +- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/config/config.h b/include/config/config.h index 9583208..ae964c0 100644 --- a/include/config/config.h +++ b/include/config/config.h @@ -7,6 +7,8 @@ #include "config_values.h" #include "ConfigClass.h" +extern const String CFG_VERSION_INVALID; + enum struct CFG_VALIDATE_RESULT { // 存在していて、バージョンも一致している VALID, diff --git a/src/config/config.cpp b/src/config/config.cpp index 8592823..5032f0e 100644 --- a/src/config/config.cpp +++ b/src/config/config.cpp @@ -12,6 +12,8 @@ #include "config_names.h" const unsigned int CONF_JSON_SIZE = 4000; +extern const String CFG_VERSION_INVALID = "INVALID"; + DynamicJsonDocument _create_config_json(bool save, const std::vector &keyArray) { @@ -119,12 +121,12 @@ String read_config_setting_id(File f) { DeserializationError error = deserializeJson(doc, f); if (error) { - return "INVALID"; + return CFG_VERSION_INVALID; } JsonVariant value = doc[ConfigNames::SETTING_ID]; if (value.isNull()) { - return "INVALID"; // JSON not contains SETTING_ID + return CFG_VERSION_INVALID; // JSON not contains SETTING_ID } return value.as(); diff --git a/src/config/config_file.cpp b/src/config/config_file.cpp index 75735f9..90b159f 100644 --- a/src/config/config_file.cpp +++ b/src/config/config_file.cpp @@ -71,7 +71,10 @@ CFG_VALIDATE_RESULT has_valid_config_file() { settingId = read_config_setting_id(f); f.close(); - if (String(SETTING_ID).equals(settingId)) { + if (settingId.equals(CFG_VERSION_INVALID)) { + cfglog("SETTING_ID not found. INVALID config."); + return CFG_VALIDATE_RESULT::ERROR; + } else if (String(SETTING_ID).equals(settingId)) { cfglog("SETTING_ID verified. " + settingId); return CFG_VALIDATE_RESULT::VALID; } else { @@ -80,7 +83,7 @@ CFG_VALIDATE_RESULT has_valid_config_file() { } } - cfglog("Unknown state. Assuming config not found"); + cfglog("Unknown state. Assuming config not found. " + settingId); return CFG_VALIDATE_RESULT::ERROR; } @@ -102,6 +105,7 @@ bool has_configured_file() { return true; } +/** ファイルシステムのマウント */ void config_setup() { if (!LittleFS.begin()) { diff --git a/src/main.cpp b/src/main.cpp index fd77b68..ba9bcb5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,7 +41,10 @@ void setup() if (validateResult == CFG_VALIDATE_RESULT::VALID) { mainlog(F("Config file is valid.")); } else if (validateResult == CFG_VALIDATE_RESULT::NEED_UPGRADE) { - mainlog(F("Config file needs upgrade.")); + sectionlog(F("Config file needs upgrade. upgrading...")); + read_config(); + save_config(); // upgrade means json + default, so only saving is needed. + sectionlog(F("Config file upgrade done!")); } else { mainlog(F("Config file validation error. dropping to setup mode.")); isNormal = false; diff --git a/src/main_normal.cpp b/src/main_normal.cpp index aaa7dfa..8c62400 100644 --- a/src/main_normal.cpp +++ b/src/main_normal.cpp @@ -143,7 +143,7 @@ void setup_normal() { sectionlog(F("Start watchdog")); setup_watchdog(); - // setupモードに入りやすくするための処理 + // setupモードに入りやすくするための処理(deprecated) if (config->get(ConfigNames::DISPLAY_RECONFIG) == ConfigValues::DISPLAY_RECONFIG_ON) { sectionlog(F("Reset to reconfig start.")); remove_configure_flag_file();