|
|
|
|
@ -305,7 +305,8 @@ std::string Achievements::GetGameHash(CDImage* image)
|
|
|
|
|
|
|
|
|
|
void Achievements::DownloadImage(std::string url, std::string cache_filename)
|
|
|
|
|
{
|
|
|
|
|
auto callback = [cache_filename](s32 status_code, const std::string& content_type, HTTPDownloader::Request::Data data) {
|
|
|
|
|
auto callback = [cache_filename](s32 status_code, const std::string& content_type,
|
|
|
|
|
HTTPDownloader::Request::Data data) {
|
|
|
|
|
if (status_code != HTTPDownloader::HTTP_STATUS_OK)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
@ -615,18 +616,18 @@ uint32_t Achievements::ClientReadMemory(uint32_t address, uint8_t* buffer, uint3
|
|
|
|
|
void Achievements::ClientServerCall(const rc_api_request_t* request, rc_client_server_callback_t callback,
|
|
|
|
|
void* callback_data, rc_client_t* client)
|
|
|
|
|
{
|
|
|
|
|
HTTPDownloader::Request::Callback hd_callback = [callback, callback_data](s32 status_code, const std::string& content_type,
|
|
|
|
|
HTTPDownloader::Request::Data data) {
|
|
|
|
|
rc_api_server_response_t rr;
|
|
|
|
|
rr.http_status_code = (status_code <= 0) ? (status_code == HTTPDownloader::HTTP_STATUS_CANCELLED ?
|
|
|
|
|
RC_API_SERVER_RESPONSE_CLIENT_ERROR :
|
|
|
|
|
RC_API_SERVER_RESPONSE_RETRYABLE_CLIENT_ERROR) :
|
|
|
|
|
status_code;
|
|
|
|
|
rr.body_length = data.size();
|
|
|
|
|
rr.body = reinterpret_cast<const char*>(data.data());
|
|
|
|
|
|
|
|
|
|
callback(&rr, callback_data);
|
|
|
|
|
};
|
|
|
|
|
HTTPDownloader::Request::Callback hd_callback =
|
|
|
|
|
[callback, callback_data](s32 status_code, const std::string& content_type, HTTPDownloader::Request::Data data) {
|
|
|
|
|
rc_api_server_response_t rr;
|
|
|
|
|
rr.http_status_code = (status_code <= 0) ? (status_code == HTTPDownloader::HTTP_STATUS_CANCELLED ?
|
|
|
|
|
RC_API_SERVER_RESPONSE_CLIENT_ERROR :
|
|
|
|
|
RC_API_SERVER_RESPONSE_RETRYABLE_CLIENT_ERROR) :
|
|
|
|
|
status_code;
|
|
|
|
|
rr.body_length = data.size();
|
|
|
|
|
rr.body = reinterpret_cast<const char*>(data.data());
|
|
|
|
|
|
|
|
|
|
callback(&rr, callback_data);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
HTTPDownloader* http = static_cast<HTTPDownloader*>(rc_client_get_userdata(client));
|
|
|
|
|
|
|
|
|
|
@ -1793,6 +1794,43 @@ bool Achievements::ConfirmHardcoreModeDisable(const char* trigger)
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::function<void(bool)> callback)
|
|
|
|
|
{
|
|
|
|
|
#ifdef ENABLE_RAINTEGRATION
|
|
|
|
|
if (IsUsingRAIntegration())
|
|
|
|
|
{
|
|
|
|
|
const bool result = (RA_WarnDisableHardcore(trigger) != 0);
|
|
|
|
|
callback(result);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (!FullscreenUI::Initialize())
|
|
|
|
|
{
|
|
|
|
|
Host::AddOSDMessage(fmt::format(TRANSLATE_FS("Cannot {} while hardcode mode is active.", trigger)),
|
|
|
|
|
Host::OSD_WARNING_DURATION);
|
|
|
|
|
callback(false);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto real_callback = [callback = std::move(callback)](bool res) mutable {
|
|
|
|
|
// don't run the callback in the middle of rendering the UI
|
|
|
|
|
Host::RunOnCPUThread([callback = std::move(callback), res]() {
|
|
|
|
|
if (res)
|
|
|
|
|
DisableHardcoreMode();
|
|
|
|
|
callback(res);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ImGuiFullscreen::OpenConfirmMessageDialog(
|
|
|
|
|
TRANSLATE_STR("Achievements", "Confirm Hardcore Mode"),
|
|
|
|
|
fmt::format(TRANSLATE_FS("Achievements", "{0} cannot be performed while hardcore mode is active. Do you "
|
|
|
|
|
"want to disable hardcore mode? {0} will be cancelled if you select No."),
|
|
|
|
|
trigger),
|
|
|
|
|
std::move(real_callback), fmt::format(ICON_FA_CHECK " {}", TRANSLATE_SV("Achievements", "Yes")),
|
|
|
|
|
fmt::format(ICON_FA_TIMES " {}", TRANSLATE_SV("Achievements", "No")));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Achievements::ClearUIState()
|
|
|
|
|
{
|
|
|
|
|
#ifndef __ANDROID__
|
|
|
|
|
|