From 2ac3325c5bba988cced955c68d177273cd84059b Mon Sep 17 00:00:00 2001 From: Peter Repukat Date: Sat, 14 Jan 2023 15:21:37 +0100 Subject: [PATCH] Store SteamPath/SteamUserId in Settings and use as fallback --- GlosSIConfig/UIModel.cpp | 42 ++++++++++++++++++++++++++++++++++-- GlosSIConfig/UIModel.h | 4 ++-- GlosSITarget/Settings.h | 5 +++++ GlosSITarget/SteamTarget.cpp | 4 ++-- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/GlosSIConfig/UIModel.cpp b/GlosSIConfig/UIModel.cpp index 4473065..7540523 100644 --- a/GlosSIConfig/UIModel.cpp +++ b/GlosSIConfig/UIModel.cpp @@ -22,6 +22,8 @@ limitations under the License. #include #include #include +#include + #include @@ -63,6 +65,9 @@ UIModel::UIModel() : QObject(nullptr) if (!std::filesystem::exists(path)) std::filesystem::create_directories(path); + auto defaultConf = getDefaultConf(); + saveDefaultConf(defaultConf); + parseShortcutVDF(); readTargetConfigs(); updateCheck(); @@ -395,6 +400,10 @@ QVariantMap UIModel::getDefaultConf() const {"extendedLogging", false}, {"snapshotNotify", false}, {"steamgridApiKey", QJsonValue::Null}, + {"steamPath", + QJsonValue::fromVariant(QString::fromStdWString(getSteamPath(false).wstring()))}, + {"steamUserId", + QJsonValue::fromVariant(QString::fromStdWString(getSteamUserId(false)))}, {"controller", QJsonObject{{"maxControllers", 1}, {"emulateDS4", false}, {"allowDesktopConfig", false}}}, {"devices", QJsonObject{ @@ -732,20 +741,33 @@ QString UIModel::getVersionString() const { return QString(version::VERSION_STR) QString UIModel::getNewVersionName() const { return new_version_name_; } -std::filesystem::path UIModel::getSteamPath() const +std::filesystem::path UIModel::getSteamPath(bool tryConfig) const { + QVariantMap defaultConf; + if (tryConfig) { + defaultConf = getDefaultConf(); + } + try { #ifdef _WIN32 // TODO: check if keys/value exist // steam should always be open and have written reg values... winreg::RegKey key{HKEY_CURRENT_USER, L"SOFTWARE\\Valve\\Steam"}; if (!key.IsValid()) { + if (defaultConf.contains("steamPath") && + QMetaType::canConvert(defaultConf["steamPath"].metaType(), QMetaType(QMetaType::QString))) { + return defaultConf["steamPath"].toString().toStdWString(); + } return ""; } const auto res = key.GetStringValue(L"SteamPath"); return res; } catch (...) { + if (defaultConf.contains("steamPath") && + QMetaType::canConvert(defaultConf["steamPath"].metaType(), QMetaType(QMetaType::QString))) { + return defaultConf["steamPath"].toString().toStdWString(); + } return ""; } #else @@ -753,23 +775,39 @@ std::filesystem::path UIModel::getSteamPath() const #endif } -std::wstring UIModel::getSteamUserId() const +std::wstring UIModel::getSteamUserId(bool tryConfig) const { + QVariantMap defaultConf; + if (tryConfig) { + defaultConf = getDefaultConf(); + } #ifdef _WIN32 try { // TODO: check if keys/value exist // steam should always be open and have written reg values... winreg::RegKey key{HKEY_CURRENT_USER, L"SOFTWARE\\Valve\\Steam\\ActiveProcess"}; if (!key.IsValid()) { + if (defaultConf.contains("steamUserId") && + QMetaType::canConvert(defaultConf["steamUserId"].metaType(), QMetaType(QMetaType::QString))) { + return defaultConf["steamUserId"].toString().toStdWString(); + } return L"0"; } const auto res = std::to_wstring(key.GetDwordValue(L"ActiveUser")); if (res == L"0") { qDebug() << "Steam not open?"; + if (defaultConf.contains("steamUserId") && + QMetaType::canConvert(defaultConf["steamUserId"].metaType(), QMetaType(QMetaType::QString))) { + return defaultConf["steamUserId"].toString().toStdWString(); + } } return res; } catch (...) { + if (defaultConf.contains("steamUserId") && + QMetaType::canConvert(defaultConf["steamUserId"].metaType(), QMetaType(QMetaType::QString))) { + return defaultConf["steamUserId"].toString().toStdWString(); + } return L"0"; } #else diff --git a/GlosSIConfig/UIModel.h b/GlosSIConfig/UIModel.h index 41d5779..4edcb56 100644 --- a/GlosSIConfig/UIModel.h +++ b/GlosSIConfig/UIModel.h @@ -125,8 +125,8 @@ class UIModel : public QObject { QString getVersionString() const; QString getNewVersionName() const; - std::filesystem::path getSteamPath() const; - std::wstring getSteamUserId() const; + std::filesystem::path getSteamPath(bool tryConfig = true) const; + std::wstring getSteamUserId(bool tryConfig = true) const; bool foundSteam() const; void parseShortcutVDF(); diff --git a/GlosSITarget/Settings.h b/GlosSITarget/Settings.h index 7e5563a..ffaf74f 100644 --- a/GlosSITarget/Settings.h +++ b/GlosSITarget/Settings.h @@ -70,6 +70,8 @@ inline struct Common { std::wstring name; std::wstring icon; int version; + std::wstring steamPath; + std::wstring steamUserId; } common; inline std::filesystem::path settings_path_ = ""; @@ -202,6 +204,9 @@ inline void Parse(const nlohmann::basic_json<>& json) safeWStringParse(json, "name", common.name); safeWStringParse(json, "icon", common.icon); safeParseValue(json, "version", common.version); + + safeWStringParse(json, "steamPath", common.steamPath); + safeWStringParse(json, "steamUserId", common.steamUserId); } catch (const nlohmann::json::exception& e) { spdlog::warn("Err parsing config: {}", e.what()); diff --git a/GlosSITarget/SteamTarget.cpp b/GlosSITarget/SteamTarget.cpp index 473232f..d87ddb7 100644 --- a/GlosSITarget/SteamTarget.cpp +++ b/GlosSITarget/SteamTarget.cpp @@ -253,7 +253,7 @@ std::filesystem::path SteamTarget::getSteamPath() const catch (const winreg::RegException& e) { spdlog::error("Couldn't get Steam path from Registry; {}", e.what()); } - return L""; + return Settings::common.steamPath; #else return L""; // TODO #endif @@ -273,7 +273,7 @@ std::wstring SteamTarget::getSteamUserId() const catch (const winreg::RegException& e) { spdlog::error("Couldn't get Steam path from Registry; {}", e.what()); } - return L""; + return Settings::common.steamUserId; #else return L""; // TODO #endif