From 24c243bcf69ac5b907a924f02d8e89f407891e9d Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sat, 30 Jul 2022 11:19:56 +0200 Subject: [PATCH] sys: Reset settings if it cannot be parsed anymore --- lib/libimhex/include/hex/api/content_registry.hpp | 1 + lib/libimhex/source/api/content_registry.cpp | 12 ++++++++++-- main/source/init/tasks.cpp | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/libimhex/include/hex/api/content_registry.hpp b/lib/libimhex/include/hex/api/content_registry.hpp index c1a15e014..fbb6440f4 100644 --- a/lib/libimhex/include/hex/api/content_registry.hpp +++ b/lib/libimhex/include/hex/api/content_registry.hpp @@ -68,6 +68,7 @@ namespace hex { void load(); void store(); + void clear(); void add(const std::string &unlocalizedCategory, const std::string &unlocalizedName, i64 defaultValue, const Callback &callback, bool requiresRestart = false); void add(const std::string &unlocalizedCategory, const std::string &unlocalizedName, const std::string &defaultValue, const Callback &callback, bool requiresRestart = false); diff --git a/lib/libimhex/source/api/content_registry.cpp b/lib/libimhex/source/api/content_registry.cpp index 238725728..588cc9e75 100644 --- a/lib/libimhex/source/api/content_registry.cpp +++ b/lib/libimhex/source/api/content_registry.cpp @@ -14,10 +14,12 @@ namespace hex { namespace ContentRegistry::Settings { + constexpr auto SettingsFile = "settings.json"; + void load() { bool loaded = false; for (const auto &dir : fs::getDefaultPaths(fs::ImHexPath::Config)) { - std::ifstream settingsFile(dir / "settings.json"); + std::ifstream settingsFile(dir / SettingsFile); if (settingsFile.good()) { settingsFile >> getSettingsData(); @@ -32,7 +34,7 @@ namespace hex { void store() { for (const auto &dir : fs::getDefaultPaths(fs::ImHexPath::Config)) { - std::ofstream settingsFile(dir / "settings.json", std::ios::trunc); + std::ofstream settingsFile(dir / SettingsFile, std::ios::trunc); if (settingsFile.good()) { settingsFile << getSettingsData(); @@ -41,6 +43,12 @@ namespace hex { } } + void clear() { + for (const auto &dir : fs::getDefaultPaths(fs::ImHexPath::Config)) { + hex::fs::remove(dir / SettingsFile); + } + } + static auto getCategoryEntry(const std::string &unlocalizedCategory) { auto &entries = getEntries(); const size_t curSlot = entries.size(); diff --git a/main/source/init/tasks.cpp b/main/source/init/tasks.cpp index db4aab70b..5a11a2aeb 100644 --- a/main/source/init/tasks.cpp +++ b/main/source/init/tasks.cpp @@ -282,6 +282,10 @@ namespace hex::init { ContentRegistry::Settings::load(); } catch (std::exception &e) { log::error("Failed to load configuration! {}", e.what()); + + ContentRegistry::Settings::clear(); + ContentRegistry::Settings::store(); + return false; }