Skip to content

Commit 42c872e

Browse files
committed
FullscreenUI: Add achievement game icon download
1 parent 3867c84 commit 42c872e

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

src/core/fullscreenui_settings.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ static void DrawPatchesOrCheatsSettingsPage(bool cheats);
9898

9999
static void DrawCoverDownloaderWindow();
100100
static void DrawAchievementsLoginWindow();
101+
static void StartAchievementsGameIconDownload();
101102

102103
static bool ShouldShowAdvancedSettings();
103104
static bool IsEditingGameSettings(SettingsInterface* bsi);
@@ -4782,6 +4783,12 @@ void FullscreenUI::DrawAchievementsSettingsPage(std::unique_lock<std::mutex>& se
47824783
});
47834784
}
47844785

4786+
if (MenuButton(FSUI_ICONVSTR(ICON_FA_DOWNLOAD, "Download Game Icons"),
4787+
FSUI_VSTR("Downloads icons for all games from RetroAchievements.")))
4788+
{
4789+
StartAchievementsGameIconDownload();
4790+
}
4791+
47854792
if (bsi->ContainsValue("Cheevos", "Token"))
47864793
{
47874794
const std::string ts_string = Host::FormatNumber(
@@ -4908,6 +4915,25 @@ void FullscreenUI::DrawAchievementsLoginWindow()
49084915
EndFixedPopupDialog();
49094916
}
49104917

4918+
void FullscreenUI::StartAchievementsGameIconDownload()
4919+
{
4920+
auto progress = OpenModalProgressDialog(FSUI_STR("Download Game Icons"));
4921+
4922+
System::QueueAsyncTask([progress = progress.release()]() {
4923+
Error error;
4924+
const bool result = Achievements::DownloadGameIcons(progress, &error);
4925+
Host::RunOnCPUThread([error = std::move(error), progress, result]() mutable {
4926+
GPUThread::RunOnThread([error = std::move(error), progress, result]() mutable {
4927+
delete progress;
4928+
if (result)
4929+
ShowToast(OSDMessageType::Info, {}, FSUI_STR("Game icons downloaded."));
4930+
else
4931+
FullscreenUI::OpenInfoMessageDialog(FSUI_STR("Download Game Icons"), error.TakeDescription());
4932+
});
4933+
});
4934+
});
4935+
}
4936+
49114937
void FullscreenUI::DrawAdvancedSettingsPage()
49124938
{
49134939
SettingsInterface* bsi = GetEditingSettingsInterface();

src/core/fullscreenui_strings.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,9 @@ TRANSLATE_NOOP("FullscreenUI", "Dithering");
276276
TRANSLATE_NOOP("FullscreenUI", "Do you want to continue from the automatic save created at {}?");
277277
TRANSLATE_NOOP("FullscreenUI", "Double-Click Toggles Fullscreen");
278278
TRANSLATE_NOOP("FullscreenUI", "Download Covers");
279+
TRANSLATE_NOOP("FullscreenUI", "Download Game Icons");
279280
TRANSLATE_NOOP("FullscreenUI", "Downloads covers from a user-specified URL template.");
281+
TRANSLATE_NOOP("FullscreenUI", "Downloads icons for all games from RetroAchievements.");
280282
TRANSLATE_NOOP("FullscreenUI", "Downsamples the rendered image prior to displaying it. Can improve overall image quality in mixed 2D/3D games.");
281283
TRANSLATE_NOOP("FullscreenUI", "Downsampling");
282284
TRANSLATE_NOOP("FullscreenUI", "Downsampling Display Scale");
@@ -379,6 +381,7 @@ TRANSLATE_NOOP("FullscreenUI", "Game Properties");
379381
TRANSLATE_NOOP("FullscreenUI", "Game Quick Save");
380382
TRANSLATE_NOOP("FullscreenUI", "Game Slot {0}##game_slot_{0}");
381383
TRANSLATE_NOOP("FullscreenUI", "Game compatibility rating copied to clipboard.");
384+
TRANSLATE_NOOP("FullscreenUI", "Game icons downloaded.");
382385
TRANSLATE_NOOP("FullscreenUI", "Game path copied to clipboard.");
383386
TRANSLATE_NOOP("FullscreenUI", "Game region copied to clipboard.");
384387
TRANSLATE_NOOP("FullscreenUI", "Game serial copied to clipboard.");

src/core/fullscreenui_widgets.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3955,13 +3955,18 @@ FullscreenUI::ProgressDialog::ProgressCallbackImpl::ProgressCallbackImpl() = def
39553955

39563956
FullscreenUI::ProgressDialog::ProgressCallbackImpl::~ProgressCallbackImpl()
39573957
{
3958-
Host::RunOnCPUThread([]() mutable {
3959-
GPUThread::RunOnThread([]() mutable {
3960-
if (!s_state.progress_dialog.IsOpen())
3961-
return;
3962-
s_state.progress_dialog.StartClose();
3963-
});
3964-
});
3958+
static constexpr auto close_cb = []() {
3959+
if (!s_state.progress_dialog.IsOpen())
3960+
return;
3961+
s_state.progress_dialog.StartClose();
3962+
};
3963+
if (GPUThread::IsOnThread())
3964+
{
3965+
close_cb();
3966+
return;
3967+
}
3968+
3969+
Host::RunOnCPUThread([]() { GPUThread::RunOnThread(close_cb); });
39653970
}
39663971

39673972
void FullscreenUI::ProgressDialog::ProgressCallbackImpl::SetStatusText(std::string_view text)

0 commit comments

Comments
 (0)