From c8b13791135fbb5644479ebc599095f873fba7d8 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Sun, 1 Oct 2023 00:59:43 -0400 Subject: [PATCH] Added error checking and logging to AchievementManager::GetAchievementProgress. --- Source/Core/Core/AchievementManager.cpp | 21 +++++++++++++++---- Source/Core/Core/AchievementManager.h | 3 ++- .../AchievementProgressWidget.cpp | 5 +++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 1cf02daa5d..c0954532a2 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -688,12 +688,25 @@ AchievementManager::GetUnlockStatus(AchievementId achievement_id) const return m_unlock_map.at(achievement_id); } -void AchievementManager::GetAchievementProgress(AchievementId achievement_id, u32* value, - u32* target) +AchievementManager::ResponseType +AchievementManager::GetAchievementProgress(AchievementId achievement_id, u32* value, u32* target) { if (!IsGameLoaded()) - return; - rc_runtime_get_achievement_measured(&m_runtime, achievement_id, value, target); + { + ERROR_LOG_FMT( + ACHIEVEMENTS, + "Attempted to request measured data for achievement ID {} when no game is running.", + achievement_id); + return ResponseType::INVALID_REQUEST; + } + int result = rc_runtime_get_achievement_measured(&m_runtime, achievement_id, value, target); + if (result == 0) + { + WARN_LOG_FMT(ACHIEVEMENTS, "Failed to get measured data for achievement ID {}.", + achievement_id); + return ResponseType::MALFORMED_OBJECT; + } + return ResponseType::SUCCESS; } AchievementManager::RichPresence AchievementManager::GetRichPresence() diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index f7866f0926..fd32460d8d 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -111,7 +111,8 @@ public: rc_api_fetch_game_data_response_t* GetGameData(); const BadgeStatus& GetGameBadge() const; const UnlockStatus& GetUnlockStatus(AchievementId achievement_id) const; - void GetAchievementProgress(AchievementId achievement_id, u32* value, u32* target); + AchievementManager::ResponseType GetAchievementProgress(AchievementId achievement_id, u32* value, + u32* target); RichPresence GetRichPresence(); void CloseGame(); diff --git a/Source/Core/DolphinQt/Achievements/AchievementProgressWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementProgressWidget.cpp index 0ec17930c2..636aa24709 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementProgressWidget.cpp +++ b/Source/Core/DolphinQt/Achievements/AchievementProgressWidget.cpp @@ -105,8 +105,9 @@ AchievementProgressWidget::CreateAchievementBox(const rc_api_achievement_definit a_progress_bar->setSizePolicy(sp_retain); unsigned int value = 0; unsigned int target = 0; - AchievementManager::GetInstance()->GetAchievementProgress(achievement->id, &value, &target); - if (target > 0) + if (AchievementManager::GetInstance()->GetAchievementProgress(achievement->id, &value, &target) == + AchievementManager::ResponseType::SUCCESS && + target > 0) { a_progress_bar->setRange(0, target); a_progress_bar->setValue(value);