From 161efff6c94e41d0b5a8492837dea41ea0c30d6d Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:00:12 -0500 Subject: [PATCH 1/8] AchievementManager: Remove long qualifier We can remove the long qualifying on some ResponseType instances to lessen the amount of reading. --- Source/Core/Core/AchievementManager.cpp | 29 +++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 01e60edb82..d43e5922f3 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -64,9 +64,10 @@ AchievementManager::ResponseType AchievementManager::Login(const std::string& pa { ERROR_LOG_FMT(ACHIEVEMENTS, "Attempted login (sync) to RetroAchievements server without " "Achievement Manager initialized."); - return AchievementManager::ResponseType::MANAGER_NOT_INITIALIZED; + return ResponseType::MANAGER_NOT_INITIALIZED; } - AchievementManager::ResponseType r_type = VerifyCredentials(password); + + const ResponseType r_type = VerifyCredentials(password); FetchBadges(); if (m_update_callback) m_update_callback(); @@ -79,7 +80,7 @@ void AchievementManager::LoginAsync(const std::string& password, const ResponseC { ERROR_LOG_FMT(ACHIEVEMENTS, "Attempted login (async) to RetroAchievements server without " "Achievement Manager initialized."); - callback(AchievementManager::ResponseType::MANAGER_NOT_INITIALIZED); + callback(ResponseType::MANAGER_NOT_INITIALIZED); return; } m_queue.EmplaceItem([this, password, callback] { @@ -99,14 +100,14 @@ void AchievementManager::HashGame(const std::string& file_path, const ResponseCa { if (!Config::Get(Config::RA_ENABLED) || !IsLoggedIn()) { - callback(AchievementManager::ResponseType::NOT_ENABLED); + callback(ResponseType::NOT_ENABLED); return; } if (!m_is_runtime_initialized) { ERROR_LOG_FMT(ACHIEVEMENTS, "Attempted to load game achievements without Achievement Manager initialized."); - callback(AchievementManager::ResponseType::MANAGER_NOT_INITIALIZED); + callback(ResponseType::MANAGER_NOT_INITIALIZED); return; } if (m_disabled) @@ -133,7 +134,7 @@ void AchievementManager::HashGame(const std::string& file_path, const ResponseCa { ERROR_LOG_FMT(ACHIEVEMENTS, "Unable to generate achievement hash from game file {}.", file_path); - callback(AchievementManager::ResponseType::MALFORMED_OBJECT); + callback(ResponseType::MALFORMED_OBJECT); } } { @@ -141,7 +142,7 @@ void AchievementManager::HashGame(const std::string& file_path, const ResponseCa if (m_disabled) { INFO_LOG_FMT(ACHIEVEMENTS, "Achievements disabled while hash was resolving."); - callback(AchievementManager::ResponseType::EXPIRED_CONTEXT); + callback(ResponseType::EXPIRED_CONTEXT); return; } m_game_hash = std::move(new_hash); @@ -154,14 +155,14 @@ void AchievementManager::HashGame(const DiscIO::Volume* volume, const ResponseCa { if (!Config::Get(Config::RA_ENABLED) || !IsLoggedIn()) { - callback(AchievementManager::ResponseType::NOT_ENABLED); + callback(ResponseType::NOT_ENABLED); return; } if (!m_is_runtime_initialized) { ERROR_LOG_FMT(ACHIEVEMENTS, "Attempted to load game achievements without Achievement Manager initialized."); - callback(AchievementManager::ResponseType::MANAGER_NOT_INITIALIZED); + callback(ResponseType::MANAGER_NOT_INITIALIZED); return; } if (volume == nullptr) @@ -193,7 +194,7 @@ void AchievementManager::HashGame(const DiscIO::Volume* volume, const ResponseCa { INFO_LOG_FMT(ACHIEVEMENTS, "Disabling Achievement Manager due to hash spam."); SetDisabled(true); - callback(AchievementManager::ResponseType::EXPIRED_CONTEXT); + callback(ResponseType::EXPIRED_CONTEXT); return; } m_system = &Core::System::GetInstance(); @@ -212,7 +213,7 @@ void AchievementManager::HashGame(const DiscIO::Volume* volume, const ResponseCa if (!rc_hash_generate_from_file(new_hash.data(), RC_CONSOLE_GAMECUBE, "")) { ERROR_LOG_FMT(ACHIEVEMENTS, "Unable to generate achievement hash from volume."); - callback(AchievementManager::ResponseType::MALFORMED_OBJECT); + callback(ResponseType::MALFORMED_OBJECT); return; } } @@ -221,7 +222,7 @@ void AchievementManager::HashGame(const DiscIO::Volume* volume, const ResponseCa if (m_disabled) { INFO_LOG_FMT(ACHIEVEMENTS, "Achievements disabled while hash was resolving."); - callback(AchievementManager::ResponseType::EXPIRED_CONTEXT); + callback(ResponseType::EXPIRED_CONTEXT); return; } m_game_hash = std::move(new_hash); @@ -235,7 +236,7 @@ void AchievementManager::LoadGameSync(const ResponseCallback& callback) { if (!Config::Get(Config::RA_ENABLED) || !IsLoggedIn()) { - callback(AchievementManager::ResponseType::NOT_ENABLED); + callback(ResponseType::NOT_ENABLED); return; } u32 new_game_id = 0; @@ -332,7 +333,7 @@ void AchievementManager::LoadUnlockData(const ResponseCallback& callback) { if (!Config::Get(Config::RA_ENABLED) || !IsLoggedIn()) { - callback(AchievementManager::ResponseType::NOT_ENABLED); + callback(ResponseType::NOT_ENABLED); return; } m_queue.EmplaceItem([this, callback] { From 394418b41540ddb1b2d089066a092a5169739416 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:01:43 -0500 Subject: [PATCH 2/8] AchievementManager: Remove unnecessary .get() Same behavior, less code. --- Source/Core/Core/AchievementManager.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index d43e5922f3..10a11e693f 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -178,16 +178,13 @@ void AchievementManager::HashGame(const DiscIO::Volume* volume, const ResponseCa return; } // Need to SetDisabled outside a lock because it uses m_lock internally. - bool disable = false; + bool disable = true; { std::lock_guard lg{m_lock}; - if (m_loading_volume.get() != nullptr) - { - disable = true; - } - else + if (!m_loading_volume) { m_loading_volume = DiscIO::CreateVolume(volume->GetBlobReader().CopyReader()); + disable = false; } } if (disable) From 2b83cc739a211240212efd52e1746eb3b01fe307 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:07:19 -0500 Subject: [PATCH 3/8] AchievementManager: Convert .compare() into equality operators These perform a default comparison, which is the same as using the equality operators. --- Source/Core/Core/AchievementManager.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 10a11e693f..56d2a2a311 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -459,20 +459,20 @@ void AchievementManager::FetchBadges() return; } - int badgematch = 0; + bool badgematch = false; { std::lock_guard lg{m_lock}; - badgematch = m_game_badge.name.compare(m_game_data.image_name); + badgematch = m_game_badge.name == m_game_data.image_name; } - if (badgematch != 0) + if (!badgematch) { m_image_queue.EmplaceItem([this] { std::string name_to_fetch; { std::lock_guard lg{m_lock}; - if (m_game_badge.name.compare(m_game_data.image_name) == 0) + if (m_game_badge.name == m_game_data.image_name) return; - name_to_fetch.assign(m_game_data.image_name); + name_to_fetch = m_game_data.image_name; } rc_api_fetch_image_request_t icon_request = {.image_name = name_to_fetch.c_str(), .image_type = RC_IMAGE_TYPE_GAME}; @@ -481,7 +481,7 @@ void AchievementManager::FetchBadges() { INFO_LOG_FMT(ACHIEVEMENTS, "Successfully downloaded game badge id {}.", name_to_fetch); std::lock_guard lg{m_lock}; - if (name_to_fetch.compare(m_game_data.image_name) != 0) + if (name_to_fetch != m_game_data.image_name) { INFO_LOG_FMT(ACHIEVEMENTS, "Requested outdated badge id {} for game id {}.", name_to_fetch, m_game_data.image_name); @@ -537,7 +537,7 @@ void AchievementManager::FetchBadges() index); return; } - name_to_fetch.assign(achievement.badge_name); + name_to_fetch = achievement.badge_name; current_name = unlock_itr->second.unlocked_badge.name; } if (current_name == name_to_fetch) @@ -565,7 +565,7 @@ void AchievementManager::FetchBadges() "Fetched unlocked badge for achievement id {} not in unlock map.", index); return; } - if (name_to_fetch.compare(achievement.badge_name) != 0) + if (name_to_fetch != achievement.badge_name) { INFO_LOG_FMT( ACHIEVEMENTS, @@ -608,7 +608,7 @@ void AchievementManager::FetchBadges() "Attempted to fetch locked badge for achievement id {} not in unlock map.", index); return; } - name_to_fetch.assign(achievement.badge_name); + name_to_fetch = achievement.badge_name; current_name = unlock_itr->second.locked_badge.name; } if (current_name == name_to_fetch) @@ -636,7 +636,7 @@ void AchievementManager::FetchBadges() "Fetched locked badge for achievement id {} not in unlock map.", index); return; } - if (name_to_fetch.compare(achievement.badge_name) != 0) + if (name_to_fetch != achievement.badge_name) { INFO_LOG_FMT(ACHIEVEMENTS, "Requested outdated locked achievement badge id {} for achievement id {}.", From 76c381e6f7cddc10cbed48c1c9b9e8d9194cee9c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:17:41 -0500 Subject: [PATCH 4/8] AchievementManager: Ensure update callback is always valid This way we don't need to do any validity checking aside from the initial setting of the callback. Also cuts down on line noise. --- Source/Core/Core/AchievementManager.cpp | 64 ++++++++++++------------- Source/Core/Core/AchievementManager.h | 2 +- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 56d2a2a311..9c262fee94 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -55,6 +55,10 @@ void AchievementManager::Init() void AchievementManager::SetUpdateCallback(UpdateCallback callback) { m_update_callback = std::move(callback); + + if (!m_update_callback) + m_update_callback = [] {}; + m_update_callback(); } @@ -69,8 +73,8 @@ AchievementManager::ResponseType AchievementManager::Login(const std::string& pa const ResponseType r_type = VerifyCredentials(password); FetchBadges(); - if (m_update_callback) - m_update_callback(); + + m_update_callback(); return r_type; } @@ -86,8 +90,7 @@ void AchievementManager::LoginAsync(const std::string& password, const ResponseC m_queue.EmplaceItem([this, password, callback] { callback(VerifyCredentials(password)); FetchBadges(); - if (m_update_callback) - m_update_callback(); + m_update_callback(); }); } @@ -316,8 +319,7 @@ void AchievementManager::LoadGameSync(const ResponseCallback& callback) m_last_ping_time = 0; INFO_LOG_FMT(ACHIEVEMENTS, "RetroAchievements successfully loaded for {}.", m_game_data.title); - if (m_update_callback) - m_update_callback(); + m_update_callback(); callback(fetch_game_data_response); } @@ -344,8 +346,7 @@ void AchievementManager::LoadUnlockData(const ResponseCallback& callback) } callback(FetchUnlockData(false)); - if (m_update_callback) - m_update_callback(); + m_update_callback(); }); } @@ -382,8 +383,7 @@ void AchievementManager::ActivateDeactivateLeaderboards() rc_runtime_activate_lboard(&m_runtime, leaderboard_id, leaderboard.definition, nullptr, 0); m_queue.EmplaceItem([this, leaderboard_id] { FetchBoardInfo(leaderboard_id); - if (m_update_callback) - m_update_callback(); + m_update_callback(); }); } else @@ -411,8 +411,7 @@ void AchievementManager::FetchBadges() { if (!m_is_runtime_initialized || !IsLoggedIn() || !Config::Get(Config::RA_BADGES_ENABLED)) { - if (m_update_callback) - m_update_callback(); + m_update_callback(); return; } m_image_queue.Cancel(); @@ -447,15 +446,14 @@ void AchievementManager::FetchBadges() { WARN_LOG_FMT(ACHIEVEMENTS, "Failed to download player badge id {}.", name_to_fetch); } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); }); } if (!IsGameLoaded()) { - if (m_update_callback) - m_update_callback(); + m_update_callback(); return; } @@ -494,8 +492,8 @@ void AchievementManager::FetchBadges() { WARN_LOG_FMT(ACHIEVEMENTS, "Failed to download game badge id {}.", name_to_fetch); } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); }); } @@ -581,8 +579,8 @@ void AchievementManager::FetchBadges() WARN_LOG_FMT(ACHIEVEMENTS, "Failed to download unlocked achievement badge id {}.", name_to_fetch); } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); }); } if (unlock_status.locked_badge.name != badge_name_to_fetch) @@ -651,13 +649,13 @@ void AchievementManager::FetchBadges() WARN_LOG_FMT(ACHIEVEMENTS, "Failed to download locked achievement badge id {}.", name_to_fetch); } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); }); } } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); } void AchievementManager::DoFrame() @@ -691,8 +689,7 @@ void AchievementManager::DoFrame() GenerateRichPresence(); m_queue.EmplaceItem([this] { PingRichPresence(m_rich_presence); }); m_last_ping_time = current_time; - if (m_update_callback) - m_update_callback(); + m_update_callback(); } } @@ -755,8 +752,8 @@ void AchievementManager::AchievementEventHandler(const rc_runtime_event_t* runti break; } } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); } std::recursive_mutex& AchievementManager::GetLock() @@ -920,8 +917,8 @@ void AchievementManager::CloseGame() m_system = nullptr; } } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); INFO_LOG_FMT(ACHIEVEMENTS, "Game closed."); } @@ -933,8 +930,8 @@ void AchievementManager::Logout() m_player_badge.name = ""; Config::SetBaseOrCurrent(Config::RA_API_TOKEN, ""); } - if (m_update_callback) - m_update_callback(); + + m_update_callback(); INFO_LOG_FMT(ACHIEVEMENTS, "Logged out from server."); } @@ -1593,8 +1590,7 @@ void AchievementManager::HandleLeaderboardTriggeredEvent(const rc_runtime_event_ } m_queue.EmplaceItem([this, event_id] { FetchBoardInfo(event_id); - if (m_update_callback) - m_update_callback(); + m_update_callback(); }); break; } diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 43ac903b13..3c67edd85d 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -204,7 +204,7 @@ private: rc_runtime_t m_runtime{}; Core::System* m_system{}; bool m_is_runtime_initialized = false; - UpdateCallback m_update_callback; + UpdateCallback m_update_callback = [] {}; std::unique_ptr m_loading_volume; bool m_disabled = false; std::string m_display_name; From 184fe932ed7c605f173a81987a1b8e09cf6de024 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:29:55 -0500 Subject: [PATCH 5/8] AchievementManager: std::move leaderboard info in FetchBoardInfo() Avoids churning some allocations. --- Source/Core/Core/AchievementManager.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 9c262fee94..4e0b18e69c 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1221,15 +1221,17 @@ AchievementManager::ResponseType AchievementManager::FetchBoardInfo(AchievementI for (u32 i = 0; i < board_info.num_entries; ++i) { const auto& org_entry = board_info.entries[i]; - LeaderboardEntry dest_entry = - LeaderboardEntry{.username = org_entry.username, .rank = org_entry.rank}; + auto dest_entry = LeaderboardEntry{ + .username = org_entry.username, + .rank = org_entry.rank, + }; if (rc_runtime_format_lboard_value(dest_entry.score.data(), FORMAT_SIZE, org_entry.score, board_info.format) == 0) { ERROR_LOG_FMT(ACHIEVEMENTS, "Failed to format leaderboard score {}.", org_entry.score); strncpy(dest_entry.score.data(), fmt::format("{}", org_entry.score).c_str(), FORMAT_SIZE); } - lboard.entries[org_entry.index] = dest_entry; + lboard.entries.insert_or_assign(org_entry.index, std::move(dest_entry)); } rc_api_destroy_fetch_leaderboard_info_response(&board_info); } @@ -1257,15 +1259,17 @@ AchievementManager::ResponseType AchievementManager::FetchBoardInfo(AchievementI for (u32 i = 0; i < board_info.num_entries; ++i) { const auto& org_entry = board_info.entries[i]; - LeaderboardEntry dest_entry = - LeaderboardEntry{.username = org_entry.username, .rank = org_entry.rank}; + auto dest_entry = LeaderboardEntry{ + .username = org_entry.username, + .rank = org_entry.rank, + }; if (rc_runtime_format_lboard_value(dest_entry.score.data(), FORMAT_SIZE, org_entry.score, board_info.format) == 0) { ERROR_LOG_FMT(ACHIEVEMENTS, "Failed to format leaderboard score {}.", org_entry.score); strncpy(dest_entry.score.data(), fmt::format("{}", org_entry.score).c_str(), FORMAT_SIZE); } - lboard.entries[org_entry.index] = dest_entry; + lboard.entries.insert_or_assign(org_entry.index, std::move(dest_entry)); if (org_entry.username == username) lboard.player_index = org_entry.index; } @@ -1274,7 +1278,7 @@ AchievementManager::ResponseType AchievementManager::FetchBoardInfo(AchievementI { std::lock_guard lg{m_lock}; - m_leaderboard_map[leaderboard_id] = lboard; + m_leaderboard_map.insert_or_assign(leaderboard_id, std::move(lboard)); } return ResponseType::SUCCESS; From 2d8af7b7f89f8245c46585e37135058845004040 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:34:50 -0500 Subject: [PATCH 6/8] AchievementManager: Replace memsets where applicable We can just use brace initialization to zero these out. Smaller to write and a little quicker to read. --- Source/Core/Core/AchievementManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 4e0b18e69c..b90393bebf 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -911,7 +911,7 @@ void AchievementManager::CloseGame() m_unlock_map.clear(); m_leaderboard_map.clear(); rc_api_destroy_fetch_game_data_response(&m_game_data); - std::memset(&m_game_data, 0, sizeof(m_game_data)); + m_game_data = {}; m_queue.Cancel(); m_image_queue.Cancel(); m_system = nullptr; @@ -1134,7 +1134,7 @@ AchievementManager::ResponseType AchievementManager::FetchGameData() game_id, api_request.url, api_request.post_data == nullptr ? "NULL" : api_request.post_data, response_str); rc_api_destroy_fetch_game_data_response(&m_game_data); - std::memset(&m_game_data, 0, sizeof(m_game_data)); + m_game_data = {}; return ResponseType::MALFORMED_OBJECT; } if (!m_game_data.response.succeeded) @@ -1146,7 +1146,7 @@ AchievementManager::ResponseType AchievementManager::FetchGameData() // Logout technically does this via a CloseGame call, but doing this now prevents the activate // methods from thinking they have something to do. rc_api_destroy_fetch_game_data_response(&m_game_data); - std::memset(&m_game_data, 0, sizeof(m_game_data)); + m_game_data = {}; Logout(); return ResponseType::INVALID_CREDENTIALS; } @@ -1156,7 +1156,7 @@ AchievementManager::ResponseType AchievementManager::FetchGameData() "Attempted to retrieve game data for ID {}; running game is now ID {}", game_id, m_game_id); rc_api_destroy_fetch_game_data_response(&m_game_data); - std::memset(&m_game_data, 0, sizeof(m_game_data)); + m_game_data = {}; return ResponseType::EXPIRED_CONTEXT; } INFO_LOG_FMT(ACHIEVEMENTS, "Retrieved game data for ID {}.", game_id); From c14414a151d1047c741f9864e0ec7c2072d9a5ee Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:35:53 -0500 Subject: [PATCH 7/8] AchievementManager: clear name in CloseGame()/LogOut() A little more idiomatic. --- Source/Core/Core/AchievementManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index b90393bebf..17a42f55c0 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -907,7 +907,7 @@ void AchievementManager::CloseGame() ActivateDeactivateLeaderboards(); ActivateDeactivateRichPresence(); m_game_id = 0; - m_game_badge.name = ""; + m_game_badge.name.clear(); m_unlock_map.clear(); m_leaderboard_map.clear(); rc_api_destroy_fetch_game_data_response(&m_game_data); @@ -927,7 +927,7 @@ void AchievementManager::Logout() { std::lock_guard lg{m_lock}; CloseGame(); - m_player_badge.name = ""; + m_player_badge.name.clear(); Config::SetBaseOrCurrent(Config::RA_API_TOKEN, ""); } From db80abbadd10de775fc2555ffdbddebc436df09c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 31 Jan 2024 22:39:29 -0500 Subject: [PATCH 8/8] AchievementManager: Tidy up GetRichPresence() This can be a direct return. --- Source/Core/Core/AchievementManager.cpp | 5 ++--- Source/Core/Core/AchievementManager.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 17a42f55c0..c0b35d430f 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -862,11 +862,10 @@ AchievementManager::GetLeaderboardsInfo() const return m_leaderboard_map; } -AchievementManager::RichPresence AchievementManager::GetRichPresence() +AchievementManager::RichPresence AchievementManager::GetRichPresence() const { std::lock_guard lg{m_lock}; - RichPresence rich_presence = m_rich_presence; - return rich_presence; + return m_rich_presence; } void AchievementManager::SetDisabled(bool disable) diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 3c67edd85d..ff5c722066 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -143,7 +143,7 @@ public: AchievementManager::ResponseType GetAchievementProgress(AchievementId achievement_id, u32* value, u32* target); const std::unordered_map& GetLeaderboardsInfo() const; - RichPresence GetRichPresence(); + RichPresence GetRichPresence() const; bool IsDisabled() const { return m_disabled; }; void SetDisabled(bool disabled); const NamedIconMap& GetChallengeIcons() const;