Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-11-29 13:37:08 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2023-11-29 13:37:08 +1100
commit2ffd83c283cfa922b625c2dfb26991d4ed5c6f2f (patch)
tree87b33c4bcfab9c9d5c298b81ed51870acde7c4a5
parent24c2820ce1ad4347717253cb5c239d70604d0974 (diff)
Restore missing configuration keys from default
-rw-r--r--source/game/StarRoot.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/source/game/StarRoot.cpp b/source/game/StarRoot.cpp
index 5adbd0c..23abfd9 100644
--- a/source/game/StarRoot.cpp
+++ b/source/game/StarRoot.cpp
@@ -391,13 +391,19 @@ ConfigurationPtr Root::configuration() {
currentConfig = m_settings.defaultConfiguration;
} else {
try {
- Json config = Json::parseJson(File::readFileString(*m_runtimeConfigFile));
- if (!config.isType(Json::Type::Object))
+ Json jConfig = Json::parseJson(File::readFileString(*m_runtimeConfigFile));
+ if (!jConfig.isType(Json::Type::Object))
throw ConfigurationException("User config is not of JSON type Object");
- if (config.get("configurationVersion", {}) != m_settings.defaultConfiguration.get("configurationVersion", {}))
+ if (jConfig.get("configurationVersion", {}) != m_settings.defaultConfiguration.get("configurationVersion", {}))
throw ConfigurationException("User config version does not match default config version");
+ auto config = jConfig.toObject();
+ for (auto& entry : *m_settings.defaultConfiguration.objectPtr()) {
+ if (!config.contains(entry.first))
+ config.insert(entry.first, entry.second);
+ }
+
currentConfig = config;
} catch (std::exception const& e) {
Logger::warn("Root: Failed to load user configuration file {}, resetting user config: {}", *m_runtimeConfigFile, outputException(e, false));