Separate FS write from serializeConfig

Break the actual JSON assembly apart from the file writing code.  This
permits calling it in other contexts, allowing us to pull the live
config data even if the filesystem is out of date.
This commit is contained in:
Will Miles 2025-03-23 15:15:52 -04:00
parent a0d1a8cbc4
commit e21a09cec9
4 changed files with 18 additions and 13 deletions

View File

@ -671,7 +671,7 @@ void deserializeConfigFromFS() {
// call readFromConfig() with an empty object so that usermods can initialize to defaults prior to saving // call readFromConfig() with an empty object so that usermods can initialize to defaults prior to saving
JsonObject empty = JsonObject(); JsonObject empty = JsonObject();
UsermodManager::readFromConfig(empty); UsermodManager::readFromConfig(empty);
serializeConfig(); serializeConfigToFS();
// init Ethernet (in case default type is set at compile time) // init Ethernet (in case default type is set at compile time)
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET) #if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
initEthernet(); initEthernet();
@ -685,10 +685,10 @@ void deserializeConfigFromFS() {
bool needsSave = deserializeConfig(root, true); bool needsSave = deserializeConfig(root, true);
releaseJSONBufferLock(); releaseJSONBufferLock();
if (needsSave) serializeConfig(); // usermods required new parameters if (needsSave) serializeConfigToFS(); // usermods required new parameters
} }
void serializeConfig() { void serializeConfigToFS() {
serializeConfigSec(); serializeConfigSec();
DEBUG_PRINTLN(F("Writing settings to /cfg.json...")); DEBUG_PRINTLN(F("Writing settings to /cfg.json..."));
@ -697,6 +697,17 @@ void serializeConfig() {
JsonObject root = pDoc->to<JsonObject>(); JsonObject root = pDoc->to<JsonObject>();
serializeConfig(root);
File f = WLED_FS.open(FPSTR(s_cfg_json), "w");
if (f) serializeJson(root, f);
f.close();
releaseJSONBufferLock();
doSerializeConfig = false;
}
void serializeConfig(JsonObject root) {
JsonArray rev = root.createNestedArray("rev"); JsonArray rev = root.createNestedArray("rev");
rev.add(1); //major settings revision rev.add(1); //major settings revision
rev.add(0); //minor settings revision rev.add(0); //minor settings revision
@ -1111,13 +1122,6 @@ void serializeConfig() {
JsonObject usermods_settings = root.createNestedObject("um"); JsonObject usermods_settings = root.createNestedObject("um");
UsermodManager::addToConfig(usermods_settings); UsermodManager::addToConfig(usermods_settings);
File f = WLED_FS.open(FPSTR(s_cfg_json), "w");
if (f) serializeJson(root, f);
f.close();
releaseJSONBufferLock();
doSerializeConfig = false;
} }

View File

@ -27,7 +27,8 @@ void IRAM_ATTR touchButtonISR();
bool deserializeConfig(JsonObject doc, bool fromFS = false); bool deserializeConfig(JsonObject doc, bool fromFS = false);
void deserializeConfigFromFS(); void deserializeConfigFromFS();
bool deserializeConfigSec(); bool deserializeConfigSec();
void serializeConfig(); void serializeConfig(JsonObject doc);
void serializeConfigToFS();
void serializeConfigSec(); void serializeConfigSec();
template<typename DestType> template<typename DestType>

View File

@ -272,5 +272,5 @@ void parseWiFiCommand(char* rpcData) {
improvActive = 2; improvActive = 2;
forceReconnect = true; forceReconnect = true;
serializeConfig(); serializeConfigToFS();
} }

View File

@ -200,7 +200,7 @@ void WLED::loop()
loadLedmap = -1; loadLedmap = -1;
} }
yield(); yield();
if (doSerializeConfig) serializeConfig(); if (doSerializeConfig) serializeConfigToFS();
yield(); yield();
handleWs(); handleWs();