From 46dcc0b38657f375b5c01fc4dfa45291e0dd0a6d Mon Sep 17 00:00:00 2001 From: fvanroie Date: Sun, 12 Apr 2020 21:51:37 +0200 Subject: [PATCH] Fix json issues when subkey does not exist --- src/hasp_config.cpp | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/hasp_config.cpp b/src/hasp_config.cpp index 97fb0047..680bf130 100644 --- a/src/hasp_config.cpp +++ b/src/hasp_config.cpp @@ -163,22 +163,27 @@ void configWriteConfig() configFile = String(FPSTR(HASP_CONFIG_FILE)); /* Read Config File */ - DynamicJsonDocument settings(8 * 256); + DynamicJsonDocument doc(8 * 256); Log.notice(F("CONF: Config LOADING first %s"), configFile.c_str()); - configGetConfig(settings, false); + configGetConfig(doc, false); Log.trace(F("CONF: Config LOADED first %s"), configFile.c_str()); bool writefile = false; bool changed = false; + JsonObject settings; + + settings = doc.as(); #if HASP_USE_WIFI - changed = wifiGetConfig(settings[F("wifi")].as()); + if(!settings[F("wifi")].is()) settings[F("wifi")].to(); + changed = wifiGetConfig(settings[F("wifi")]); if(changed) { Log.verbose(F("WIFI: Settings changed")); writefile = true; } #if HASP_USE_MQTT - changed = mqttGetConfig(settings[F("mqtt")].as()); + if(!settings[F("mqtt")].is()) settings[F("mqtt")].to(); + changed = mqttGetConfig(settings[F("mqtt")]); if(changed) { Log.verbose(F("MQTT: Settings changed")); configOutput(settings[F("mqtt")]); @@ -186,7 +191,8 @@ void configWriteConfig() } #endif #if HASP_USE_TELNET - changed = telnetGetConfig(settings[F("telnet")].as()); + if(!settings[F("telnet")].is()) settings[F("telnet")].to(); + changed = telnetGetConfig(settings[F("telnet")]); if(changed) { Log.verbose(F("TELNET: Settings changed")); configOutput(settings[F("telnet")]); @@ -194,14 +200,16 @@ void configWriteConfig() } #endif #if HASP_USE_MDNS - changed = mdnsGetConfig(settings[F("mdns")].as()); + if(!settings[F("mdns")].is()) settings[F("mdns")].to(); + changed = mdnsGetConfig(settings[F("mdns")]); if(changed) { Log.verbose(F("MDNS: Settings changed")); writefile = true; } #endif #if HASP_USE_HTTP - changed = httpGetConfig(settings[F("http")].as()); + if(!settings[F("http")].is()) settings[F("http")].to(); + changed = httpGetConfig(settings[F("http")].as()); if(changed) { Log.verbose(F("HTTP: Settings changed")); configOutput(settings[F("http")]); @@ -210,31 +218,34 @@ void configWriteConfig() #endif #endif - changed = debugGetConfig(settings[F("debug")].as()); + if(!settings[F("debug")].is()) settings[F("debug")].to(); + changed = debugGetConfig(settings[F("debug")].as()); if(changed) { Log.verbose(F("DEBUG: Settings changed")); writefile = true; } - changed = guiGetConfig(settings[F("gui")].as()); + if(!settings[F("gui")].is()) settings[F("gui")].to(); + changed = guiGetConfig(settings[F("gui")].as()); if(changed) { Log.verbose(F("GUI: Settings changed")); writefile = true; } - changed = haspGetConfig(settings[F("hasp")].as()); + if(!settings[F("hasp")].is()) settings[F("hasp")].to(); + changed = haspGetConfig(settings[F("hasp")].as()); if(changed) { Log.verbose(F("HASP: Settings changed")); writefile = true; } - // changed |= otaGetConfig(settings[F("ota")].to()); + // changed |= otaGetConfig(settings[F("ota")].as()); if(writefile) { File file = SPIFFS.open(configFile, "w"); if(file) { Log.notice(F("CONF: Writing %s"), configFile.c_str()); - size_t size = serializeJson(settings, file); + size_t size = serializeJson(doc, file); file.close(); if(size > 0) { Log.verbose(F("CONF: [SUCCESS] Saved %s"), configFile.c_str());