This commit is contained in:
LillyJadeKatrin 2026-05-07 02:34:59 -04:00 committed by GitHub
commit 3edc91dea1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 5 deletions

View File

@ -165,6 +165,13 @@ void AchievementManager::LoadGame(const DiscIO::Volume* volume)
"Attempted to load game achievements without achievement client initialized.");
return;
}
if (m_load_async_handle)
{
WARN_LOG_FMT(ACHIEVEMENTS, "Attempted to load while load is in progress; aborting all loads.");
rc_client_abort_async(m_client, m_load_async_handle);
CloseGame();
return;
}
if (volume == nullptr)
{
WARN_LOG_FMT(ACHIEVEMENTS, "Software format unsupported by AchievementManager.");
@ -176,7 +183,7 @@ void AchievementManager::LoadGame(const DiscIO::Volume* volume)
}
else
{
rc_client_begin_load_game(m_client, "", LoadGameCallback, NULL);
m_load_async_handle = rc_client_begin_load_game(m_client, "", LoadGameCallback, NULL);
}
return;
}
@ -210,13 +217,14 @@ void AchievementManager::LoadGame(const DiscIO::Volume* volume)
rc_hash_init_custom_filereader(&volume_reader);
if (rc_client_get_game_info(m_client))
{
rc_client_begin_identify_and_change_media(m_client, "", NULL, 0, ChangeMediaCallback, NULL);
m_load_async_handle =
rc_client_begin_identify_and_change_media(m_client, "", NULL, 0, ChangeMediaCallback, NULL);
}
else
{
u32 console_id = FindConsoleID(volume->GetVolumeType());
rc_client_begin_identify_and_load_game(m_client, console_id, "", NULL, 0, LoadGameCallback,
NULL);
m_load_async_handle = rc_client_begin_identify_and_load_game(m_client, console_id, "", NULL, 0,
LoadGameCallback, NULL);
}
}
@ -1011,6 +1019,7 @@ void AchievementManager::LoadGameCallback(int result, const char* error_message,
{
auto& instance = AchievementManager::GetInstance();
instance.m_loading_volume.reset(nullptr);
instance.m_load_async_handle = nullptr;
if (result == RC_API_FAILURE)
{
WARN_LOG_FMT(ACHIEVEMENTS, "Load data request rejected for old Dolphin version.");
@ -1084,7 +1093,9 @@ void AchievementManager::LoadGameCallback(int result, const char* error_message,
void AchievementManager::ChangeMediaCallback(int result, const char* error_message,
rc_client_t* client, void* userdata)
{
AchievementManager::GetInstance().m_loading_volume.reset(nullptr);
auto& instance = AchievementManager::GetInstance();
instance.m_loading_volume.reset(nullptr);
instance.m_load_async_handle = nullptr;
if (result == RC_OK)
{
return;

View File

@ -259,6 +259,7 @@ private:
rc_client_t* m_client{};
std::atomic<Core::System*> m_system{};
std::unique_ptr<DiscIO::Volume> m_loading_volume;
rc_client_async_handle_t* m_load_async_handle = nullptr;
Config::ConfigChangedCallbackID m_config_changed_callback_id;
Badge m_default_player_badge;
Badge m_default_game_badge;