From d20df93f31eb3b672baa99fc8a3f673c6449884d Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Tue, 3 Mar 2026 14:30:51 +0100 Subject: [PATCH] Finish users.json migration --- src/core/emulator_settings.cpp | 7 +------ src/core/emulator_settings.h | 11 ----------- src/core/libraries/np/np_manager.cpp | 1 + src/core/libraries/system/userservice.cpp | 1 + src/core/user_manager.cpp | 5 +++++ src/core/user_manager.h | 4 ++-- src/core/user_settings.cpp | 19 ++++++++++++------- src/core/user_settings.h | 6 +++++- src/main.cpp | 6 +++--- 9 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/core/emulator_settings.cpp b/src/core/emulator_settings.cpp index 68deab2c4..d0bf43f08 100644 --- a/src/core/emulator_settings.cpp +++ b/src/core/emulator_settings.cpp @@ -249,7 +249,6 @@ bool EmulatorSettingsImpl::Save(const std::string& serial) { j["Audio"] = m_audio; j["GPU"] = m_gpu; j["Vulkan"] = m_vulkan; - j["Users"] = m_userManager.GetUsers(); std::ofstream out(path); if (!out) { LOG_ERROR(EmuSettings, "Failed to open config for writing: {}", path.string()); @@ -293,8 +292,6 @@ bool EmulatorSettingsImpl::Load(const std::string& serial) { mergeGroup(m_gpu, "GPU"); mergeGroup(m_vulkan, "Vulkan"); - if (gj.contains("Users")) - m_userManager.GetUsers() = gj.at("Users").get(); LOG_DEBUG(EmuSettings, "Global config loaded successfully"); } else { if (std::filesystem::exists(Common::FS::GetUserPath(Common::FS::PathType::UserDir) / @@ -324,8 +321,6 @@ bool EmulatorSettingsImpl::Load(const std::string& serial) { } LOG_DEBUG(EmuSettings, "Global config not found - using defaults"); SetDefaultValues(); - if (m_userManager.GetUsers().user.empty()) - m_userManager.GetUsers().user = m_userManager.CreateDefaultUser(); Save(); } if (GetConfigVersion() != Common::g_scm_rev) { @@ -334,7 +329,7 @@ bool EmulatorSettingsImpl::Load(const std::string& serial) { return true; } else { // ── Per-game override file ───────────────────────────────── - // Never reloads global settings. Only applies + // Never reloads global settings. Only applies // game_specific_value overrides on top of the already-loaded // base configuration. const auto gamePath = diff --git a/src/core/emulator_settings.h b/src/core/emulator_settings.h index be09d0f47..c6ac7f773 100644 --- a/src/core/emulator_settings.h +++ b/src/core/emulator_settings.h @@ -389,11 +389,6 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(VulkanSettings, gpu_id, renderdoc_enabled, vk vkvalidation_gpu_enabled, vkcrash_diagnostic_enabled, vkhost_markers, vkguest_markers, pipeline_cache_enabled, pipeline_cache_archived) -// ------------------------------- -// User settings -// ------------------------------- -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(User, user_id, user_color, user_name, controller_port) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Users, default_user_id, user) // ------------------------------- // Main manager @@ -444,11 +439,6 @@ public: std::filesystem::path GetFontsDir(); void SetFontsDir(const std::filesystem::path& dir); - // user helpers - UserManager& GetUserManager() { - return m_userManager; - } - private: GeneralSettings m_general{}; DebugSettings m_debug{}; @@ -456,7 +446,6 @@ private: AudioSettings m_audio{}; GPUSettings m_gpu{}; VulkanSettings m_vulkan{}; - UserManager m_userManager; ConfigMode m_configMode{ConfigMode::Default}; static std::shared_ptr s_instance; diff --git a/src/core/libraries/np/np_manager.cpp b/src/core/libraries/np/np_manager.cpp index 596a89645..6d64ffc11 100644 --- a/src/core/libraries/np/np_manager.cpp +++ b/src/core/libraries/np/np_manager.cpp @@ -12,6 +12,7 @@ #include "core/libraries/np/np_error.h" #include "core/libraries/np/np_manager.h" #include "core/tls.h" +#include namespace Libraries::Np::NpManager { diff --git a/src/core/libraries/system/userservice.cpp b/src/core/libraries/system/userservice.cpp index dd151d31c..ad623222c 100644 --- a/src/core/libraries/system/userservice.cpp +++ b/src/core/libraries/system/userservice.cpp @@ -12,6 +12,7 @@ #include "core/libraries/system/userservice_error.h" #include "core/tls.h" #include "input/controller.h" +#include namespace Libraries::UserService { diff --git a/src/core/user_manager.cpp b/src/core/user_manager.cpp index 797f4eef7..8dfa2d8e5 100644 --- a/src/core/user_manager.cpp +++ b/src/core/user_manager.cpp @@ -6,6 +6,7 @@ #include #include "emulator_settings.h" #include "user_manager.h" +#include "user_settings.h" bool UserManager::AddUser(const User& user) { for (const auto& u : m_users.user) { @@ -129,4 +130,8 @@ std::vector UserManager::GetValidUsers() const { } return result; +} + +bool UserManager::Save() const { + return UserSettings.Save(); } \ No newline at end of file diff --git a/src/core/user_manager.h b/src/core/user_manager.h index be9f3cbab..d8fa71303 100644 --- a/src/core/user_manager.h +++ b/src/core/user_manager.h @@ -7,8 +7,6 @@ #include #include "common/types.h" -#define UserManagement EmulatorSettings.GetUserManager() - struct User { s32 user_id; u32 user_color; @@ -43,6 +41,8 @@ public: return m_users; } + bool Save() const; + private: Users m_users; }; \ No newline at end of file diff --git a/src/core/user_settings.cpp b/src/core/user_settings.cpp index c191137e3..749a786ce 100644 --- a/src/core/user_settings.cpp +++ b/src/core/user_settings.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -23,11 +23,18 @@ UserSettingsImpl::~UserSettingsImpl() { Save(); } +std::shared_ptr UserSettingsImpl::GetInstance() { + std::lock_guard lock(s_mutex); + if (!s_instance) + s_instance = std::make_shared(); + return s_instance; +} + bool UserSettingsImpl::Save() const { const auto path = Common::FS::GetUserPath(Common::FS::PathType::UserDir) / "users.json"; try { json j; - j["Users"] = m_userManager.GetUsers(); + j = m_userManager.GetUsers(); std::ofstream out(path); if (!out) { @@ -63,11 +70,9 @@ bool UserSettingsImpl::Load() { json j; in >> j; - if (j.contains("Users")) { - m_userManager.GetUsers() = j.at("Users").get(); - LOG_DEBUG(EmuSettings, "User settings loaded successfully"); - return true; - } + m_userManager.GetUsers() = j.get(); + LOG_DEBUG(EmuSettings, "User settings loaded successfully"); + return true; return false; } catch (const std::exception& e) { diff --git a/src/core/user_settings.h b/src/core/user_settings.h index a0472c5aa..9eaf758d3 100644 --- a/src/core/user_settings.h +++ b/src/core/user_settings.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -17,6 +17,8 @@ #define UserSettings (*UserSettingsImpl::GetInstance()) +#define UserManagement UserSettings.GetUserManager() + // ------------------------------- // User settings // ------------------------------- @@ -34,6 +36,8 @@ public: bool Save() const; bool Load(); + static std::shared_ptr GetInstance(); + private: UserManager m_userManager; diff --git a/src/main.cpp b/src/main.cpp index 21697d85f..b446584da 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,6 +24,7 @@ #endif #include #include +#include "core/user_settings.h" int main(int argc, char* argv[]) { #ifdef _WIN32 @@ -35,9 +36,8 @@ int main(int argc, char* argv[]) { std::shared_ptr m_emu_state = std::make_shared(); EmulatorState::SetInstance(m_emu_state); // Load configurations - std::shared_ptr emu_settings = std::make_shared(); - EmulatorSettingsImpl::SetInstance(emu_settings); - emu_settings->Load(); + EmulatorSettings.Load(); + UserSettings.Load(); // TODO add back trophy key migration without the need of entire previous config framework