From e7e3d5898e4750e8ca8d859791dddf27705819b9 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Tue, 9 Oct 2018 21:48:35 -0400 Subject: [PATCH] settings: Add users and current_user settings and remove username --- src/core/settings.h | 4 +++- src/yuzu/configuration/config.cpp | 34 +++++++++++++++++++++++++++++-- src/yuzu_cmd/config.cpp | 22 +++++++++++++++++--- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/core/settings.h b/src/core/settings.h index ca80718e27..0fa726d5d1 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -8,6 +8,7 @@ #include #include #include "common/common_types.h" +#include "core/hle/service/acc/profile_manager.h" namespace Settings { @@ -114,7 +115,8 @@ struct Values { // System bool use_docked_mode; bool enable_nfc; - std::string username; + int current_user; + std::vector> users; int language_index; // Controls diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index d029590ff3..36f0c4f4c8 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -123,7 +123,25 @@ void Config::ReadValues() { qt_config->beginGroup("System"); Settings::values.use_docked_mode = qt_config->value("use_docked_mode", false).toBool(); Settings::values.enable_nfc = qt_config->value("enable_nfc", true).toBool(); - Settings::values.username = qt_config->value("username", "yuzu").toString().toStdString(); + + Settings::values.users.clear(); + const auto size = qt_config->beginReadArray("users"); + for (int i = 0; i < size; ++i) { + qt_config->setArrayIndex(i); + const Service::Account::UUID uuid(qt_config->value("uuid_low").toULongLong(), + qt_config->value("uuid_high").toULongLong()); + Settings::values.users.emplace_back(qt_config->value("username").toString().toStdString(), + uuid); + } + + qt_config->endArray(); + + if (Settings::values.users.empty()) + Settings::values.users.emplace_back("yuzu", Service::Account::UUID{}.Generate()); + + Settings::values.current_user = + std::clamp(qt_config->value("current_user", 0).toInt(), 0, size); + Settings::values.language_index = qt_config->value("language_index", 1).toInt(); qt_config->endGroup(); @@ -260,7 +278,19 @@ void Config::SaveValues() { qt_config->beginGroup("System"); qt_config->setValue("use_docked_mode", Settings::values.use_docked_mode); qt_config->setValue("enable_nfc", Settings::values.enable_nfc); - qt_config->setValue("username", QString::fromStdString(Settings::values.username)); + qt_config->setValue("current_user", Settings::values.current_user); + + qt_config->beginWriteArray("users", Settings::values.users.size()); + for (std::size_t i = 0; i < Settings::values.users.size(); ++i) { + qt_config->setArrayIndex(i); + const auto& user = Settings::values.users[i]; + qt_config->setValue("uuid_low", user.second.uuid[0]); + qt_config->setValue("uuid_high", user.second.uuid[1]); + qt_config->setValue("username", QString::fromStdString(user.first)); + } + + qt_config->endArray(); + qt_config->setValue("language_index", Settings::values.language_index); qt_config->endGroup(); diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 654a15a5cf..613894449e 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp @@ -126,9 +126,25 @@ void Config::ReadValues() { // System Settings::values.use_docked_mode = sdl2_config->GetBoolean("System", "use_docked_mode", false); Settings::values.enable_nfc = sdl2_config->GetBoolean("System", "enable_nfc", true); - Settings::values.username = sdl2_config->Get("System", "username", "yuzu"); - if (Settings::values.username.empty()) { - Settings::values.username = "yuzu"; + const auto size = sdl2_config->GetInteger("System", "users_size", 0); + + Settings::values.users.clear(); + for (std::size_t i = 0; i < size; ++i) { + const auto uuid_low = std::stoull( + sdl2_config->Get("System", fmt::format("users_{}_uuid_low", i), "0"), nullptr, 0); + const auto uuid_high = std::stoull( + sdl2_config->Get("System", fmt::format("users_{}_uuid_high", i), "0"), nullptr, 0); + Settings::values.users.emplace_back( + sdl2_config->Get("System", fmt::format("users_{}_username", i), ""), + Service::Account::UUID{uuid_low, uuid_high}); + } + + if (Settings::values.users.empty()) { + Settings::values.users.emplace_back("yuzu", Service::Account::UUID{1, 0}); + LOG_WARNING( + Config, + "You are using the default UUID of {1, 0}! This might cause issues down the road! " + "Please consider randomizing a UUID and adding it to the sdl2_config.ini file."); } // Miscellaneous