diff --git a/GlosSITarget/Settings.h b/GlosSITarget/Settings.h index a446f8a..56bc0d6 100644 --- a/GlosSITarget/Settings.h +++ b/GlosSITarget/Settings.h @@ -119,59 +119,9 @@ inline void checkWinVer() } #endif -inline void Parse(const std::vector& args) -{ - std::wstring configName; - for (const auto& arg : args) { - if (arg.empty()) { - continue; - } - if (arg == L"-disableuwpoverlay") { - cli.no_uwp_overlay = true; - } else if (arg == L"-disablewatchdog") { - cli.disable_watchdog = true; - } else { - configName += L" " + std::wstring(arg.begin(), arg.end()); - } - - } - if (!configName.empty()) { - if (configName[0] == L' ') { - configName.erase(configName.begin()); - } - if (!configName.ends_with(L".json")) { - configName += L".json"; - } - } - wchar_t* localAppDataFolder; - std::filesystem::path path; - if (SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_CREATE, NULL, &localAppDataFolder) != S_OK) { - path = std::filesystem::temp_directory_path().parent_path().parent_path().parent_path(); - } - else { - path = std::filesystem::path(localAppDataFolder).parent_path(); - } - - path /= "Roaming"; - path /= "GlosSI"; - if (!configName.empty()) { - path /= "Targets"; - path /= configName; - } - else { - spdlog::info("No config file specified, using default"); - path /= "default.json"; - } - - std::ifstream json_file; - json_file.open(path); - if (!json_file.is_open()) { - spdlog::error(L"Couldn't open settings file {}", path.wstring()); - spdlog::debug(L"Using sane defaults..."); - return; - } - settings_path_ = path; +inline void Parse(const nlohmann::basic_json<>& json) +{ auto safeParseValue = [](const auto& object, const auto& key, auto& value) { try { if (object.is_null() || object.empty() || object.at(key).empty() || object.at(key).is_null()) { @@ -198,7 +148,6 @@ inline void Parse(const std::vector& args) } }; - const auto json = nlohmann::json::parse(json_file); int version; safeParseValue(json, "version", version); if (version != 1) { // TODO: versioning stuff @@ -241,17 +190,75 @@ inline void Parse(const std::vector& args) } safeParseValue(json, "extendedLogging", extendedLogging); - - json_file.close(); - - spdlog::debug("Read config file \"{}\"; config: {}", path.string(), json.dump()); + if (launch.launch) { launch.isUWP = checkIsUwp(launch.launchPath); } } -inline void StoreSettings() +inline void Parse(const std::vector& args) +{ + std::wstring configName; + for (const auto& arg : args) { + if (arg.empty()) { + continue; + } + if (arg == L"-disableuwpoverlay") { + cli.no_uwp_overlay = true; + } + else if (arg == L"-disablewatchdog") { + cli.disable_watchdog = true; + } + else { + configName += L" " + std::wstring(arg.begin(), arg.end()); + } + } + if (!configName.empty()) { + if (configName[0] == L' ') { + configName.erase(configName.begin()); + } + if (!configName.ends_with(L".json")) { + configName += L".json"; + } + } + wchar_t* localAppDataFolder; + std::filesystem::path path; + if (SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_CREATE, NULL, &localAppDataFolder) != S_OK) { + path = std::filesystem::temp_directory_path().parent_path().parent_path().parent_path(); + } + else { + path = std::filesystem::path(localAppDataFolder).parent_path(); + } + + path /= "Roaming"; + path /= "GlosSI"; + if (!configName.empty()) { + path /= "Targets"; + path /= configName; + } + else { + spdlog::info("No config file specified, using default"); + path /= "default.json"; + } + + std::ifstream json_file; + json_file.open(path); + if (!json_file.is_open()) { + spdlog::error(L"Couldn't open settings file {}", path.wstring()); + spdlog::debug(L"Using sane defaults..."); + return; + } + settings_path_ = path; + const auto& json = nlohmann::json::parse(json_file); + Parse(json); + + spdlog::debug("Read config file \"{}\"; config: {}", path.string(), json.dump()); + json_file.close(); +} + + +inline nlohmann::json toJson() { nlohmann::json json; json["version"] = 1; @@ -271,6 +278,12 @@ inline void StoreSettings() json["controller"]["emulateDS4"] = controller.emulateDS4; json["extendedLogging"] = extendedLogging; + return json; +} + +inline void StoreSettings() +{ + const auto& json = toJson(); std::ofstream json_file; json_file.open(settings_path_);