mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
Added RequestImage to AchievementManager
Image requests from RetroAchievements have a slightly different format from other requests, on account of being GET calls that return strings of image data, so this is a separate function that makes such calls. To handle this, I create a BadgeStatus object that ties each badge to a boolean flag for whether it is loaded and thus usable.
This commit is contained in:
@ -944,4 +944,30 @@ AchievementManager::ResponseType AchievementManager::Request(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AchievementManager::ResponseType
|
||||||
|
AchievementManager::RequestImage(rc_api_fetch_image_request_t rc_request, Badge* rc_response)
|
||||||
|
{
|
||||||
|
rc_api_request_t api_request;
|
||||||
|
Common::HttpRequest http_request;
|
||||||
|
if (rc_api_init_fetch_image_request(&api_request, &rc_request) != RC_OK)
|
||||||
|
{
|
||||||
|
ERROR_LOG_FMT(ACHIEVEMENTS, "Invalid request for image.");
|
||||||
|
return ResponseType::INVALID_REQUEST;
|
||||||
|
}
|
||||||
|
auto http_response = http_request.Get(api_request.url);
|
||||||
|
if (http_response.has_value() && http_response->size() > 0)
|
||||||
|
{
|
||||||
|
rc_api_destroy_request(&api_request);
|
||||||
|
*rc_response = std::move(*http_response);
|
||||||
|
return ResponseType::SUCCESS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WARN_LOG_FMT(ACHIEVEMENTS, "RetroAchievements connection failed on image request.\n URL: {}",
|
||||||
|
api_request.url);
|
||||||
|
rc_api_destroy_request(&api_request);
|
||||||
|
return ResponseType::CONNECTION_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif // USE_RETRO_ACHIEVEMENTS
|
#endif // USE_RETRO_ACHIEVEMENTS
|
||||||
|
@ -56,6 +56,7 @@ public:
|
|||||||
using FormattedValue = std::array<char, FORMAT_SIZE>;
|
using FormattedValue = std::array<char, FORMAT_SIZE>;
|
||||||
static constexpr size_t RP_SIZE = 256;
|
static constexpr size_t RP_SIZE = 256;
|
||||||
using RichPresence = std::array<char, RP_SIZE>;
|
using RichPresence = std::array<char, RP_SIZE>;
|
||||||
|
using Badge = std::vector<u8>;
|
||||||
|
|
||||||
struct UnlockStatus
|
struct UnlockStatus
|
||||||
{
|
{
|
||||||
@ -129,6 +130,7 @@ private:
|
|||||||
ResponseType Request(RcRequest rc_request, RcResponse* rc_response,
|
ResponseType Request(RcRequest rc_request, RcResponse* rc_response,
|
||||||
const std::function<int(rc_api_request_t*, const RcRequest*)>& init_request,
|
const std::function<int(rc_api_request_t*, const RcRequest*)>& init_request,
|
||||||
const std::function<int(RcResponse*, const char*)>& process_response);
|
const std::function<int(RcResponse*, const char*)>& process_response);
|
||||||
|
ResponseType RequestImage(rc_api_fetch_image_request_t rc_request, Badge* rc_response);
|
||||||
|
|
||||||
rc_runtime_t m_runtime{};
|
rc_runtime_t m_runtime{};
|
||||||
Core::System* m_system{};
|
Core::System* m_system{};
|
||||||
|
Reference in New Issue
Block a user