diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-11-29 13:37:08 +1100 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-11-29 13:37:08 +1100 |
commit | 2ffd83c283cfa922b625c2dfb26991d4ed5c6f2f (patch) | |
tree | 87b33c4bcfab9c9d5c298b81ed51870acde7c4a5 | |
parent | 24c2820ce1ad4347717253cb5c239d70604d0974 (diff) |
Restore missing configuration keys from default
-rw-r--r-- | source/game/StarRoot.cpp | 12 |
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)); |