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.
This commit is contained in:
Lioncash 2024-01-31 22:17:41 -05:00
parent 2b83cc739a
commit 76c381e6f7
2 changed files with 31 additions and 35 deletions

View File

@ -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;
}

View File

@ -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<DiscIO::Volume> m_loading_volume;
bool m_disabled = false;
std::string m_display_name;