From 714359b5445935e8fc34deee6a098475ae31b622 Mon Sep 17 00:00:00 2001 From: Functionable <40835042+Functionable@users.noreply.github.com> Date: Wed, 7 Jan 2026 19:02:27 +0000 Subject: [PATCH] ISO: Move icon loading to a common function in qt_utils.h --- rpcs3/rpcs3qt/game_list_base.cpp | 17 ++++----------- rpcs3/rpcs3qt/qt_utils.cpp | 24 ++++++++++++++++++++++ rpcs3/rpcs3qt/qt_utils.h | 3 +++ rpcs3/rpcs3qt/savestate_manager_dialog.cpp | 11 +--------- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/rpcs3/rpcs3qt/game_list_base.cpp b/rpcs3/rpcs3qt/game_list_base.cpp index e4fb012b17..4105d754b0 100644 --- a/rpcs3/rpcs3qt/game_list_base.cpp +++ b/rpcs3/rpcs3qt/game_list_base.cpp @@ -1,8 +1,7 @@ #include "stdafx.h" +#include "qt_utils.h" #include "game_list_base.h" -#include "Loader/ISO.h" - #include #include @@ -54,18 +53,10 @@ void game_list_base::IconLoadFunction(game_info game, qreal device_pixel_ratio, { if (game->icon_in_archive) { - iso_archive archive(game->info.path); - auto icon_file = archive.open(game->info.icon_path); - auto icon_size = icon_file.size(); - QByteArray data(icon_size, 0); - icon_file.read(data.data(), icon_size); - QImage iconImage; - if (iconImage.loadFromData(data)) - { - game->icon = QPixmap::fromImage(iconImage); - } + game->icon_in_archive = gui::utils::load_icon(game->icon, game->info.icon_path, game->info.path); } - else if (game_list_log.warning) + + if (!game->icon_in_archive && game_list_log.warning) { bool logged = false; { diff --git a/rpcs3/rpcs3qt/qt_utils.cpp b/rpcs3/rpcs3qt/qt_utils.cpp index fc53dc542a..b10799a453 100644 --- a/rpcs3/rpcs3qt/qt_utils.cpp +++ b/rpcs3/rpcs3qt/qt_utils.cpp @@ -12,6 +12,7 @@ #include "Emu/system_utils.hpp" #include "Utilities/File.h" +#include "Loader/ISO.h" #include LOG_CHANNEL(gui_log, "GUI"); @@ -682,6 +683,29 @@ namespace gui return QString("%1 days ago %2").arg(current_date - exctrated_date).arg(date.toString(fmt_relative)); } + bool load_icon(QPixmap& icon, const std::string& icon_path, + const std::string& archive_path) + { + if (!is_file_iso(archive_path)) return false; + + iso_archive archive(archive_path); + if (!archive.exists(icon_path)) return false; + + auto icon_file = archive.open(icon_path); + auto icon_size = icon_file.size(); + + QByteArray data(icon_size, 0); + icon_file.read(data.data(), icon_size); + QImage iconImage; + + if (iconImage.loadFromData(data)) + { + icon = QPixmap::fromImage(iconImage); + } + + return true; + } + QString format_timestamp(s64 time, const QString& fmt) { return format_datetime(datetime(time), fmt); diff --git a/rpcs3/rpcs3qt/qt_utils.h b/rpcs3/rpcs3qt/qt_utils.h index dc15385923..de2473c083 100644 --- a/rpcs3/rpcs3qt/qt_utils.h +++ b/rpcs3/rpcs3qt/qt_utils.h @@ -178,6 +178,9 @@ namespace gui return color_scheme() == Qt::ColorScheme::Dark; } + // Loads an icon from an (ISO) archive file. + bool load_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path); + template void stop_future_watcher(QFutureWatcher& watcher, bool cancel, std::shared_ptr> cancel_flag = nullptr) { diff --git a/rpcs3/rpcs3qt/savestate_manager_dialog.cpp b/rpcs3/rpcs3qt/savestate_manager_dialog.cpp index 1af19a197c..9e871800e2 100644 --- a/rpcs3/rpcs3qt/savestate_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/savestate_manager_dialog.cpp @@ -450,16 +450,7 @@ void savestate_manager_dialog::ResizeGameIcons() if (!archive_path.empty()) { - iso_archive archive(archive_path); - auto icon_file = archive.open(icon_path); - auto icon_size = icon_file.size(); - QByteArray data(icon_size, 0); - icon_file.read(data.data(), icon_size); - QImage iconImage; - if (iconImage.loadFromData(data)) - { - icon = QPixmap::fromImage(iconImage); - } + gui::utils::load_icon(icon, icon_path, archive_path); } if (cancel && cancel->load())