From 9238015dd44e997f411d36a845816bb8829fb5b9 Mon Sep 17 00:00:00 2001 From: lioncash Date: Wed, 19 Sep 2018 18:45:57 +0200 Subject: [PATCH 1/5] yuzu: Move GameListWorker to its own source files This has gotten sufficiently large enough to warrant moving it to its own source files. Especially given it dumps the file_sys headers around code that doesn't use it for the most part. This'll also make it easier to introduce a type alias for the compatibility list, so a large unordered_map type declaration doesn't need to be specified all the time (we don't want to propagate the game_list_p.h include via the main game_list.h header). --- src/citra_qt/CMakeLists.txt | 2 + src/citra_qt/game_list.cpp | 124 +----------------------- src/citra_qt/game_list.h | 1 + src/citra_qt/game_list_p.h | 66 ++----------- src/citra_qt/game_list_worker.cpp | 152 ++++++++++++++++++++++++++++++ src/citra_qt/game_list_worker.h | 64 +++++++++++++ 6 files changed, 230 insertions(+), 179 deletions(-) create mode 100644 src/citra_qt/game_list_worker.cpp create mode 100644 src/citra_qt/game_list_worker.h diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index 3a61f9aa0..aa96a2e0d 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -76,6 +76,8 @@ add_executable(citra-qt game_list.cpp game_list.h game_list_p.h + game_list_worker.cpp + game_list_worker.h hotkeys.cpp hotkeys.h main.cpp diff --git a/src/citra_qt/game_list.cpp b/src/citra_qt/game_list.cpp index f736c21df..c16b63b86 100644 --- a/src/citra_qt/game_list.cpp +++ b/src/citra_qt/game_list.cpp @@ -23,6 +23,7 @@ #include #include "citra_qt/game_list.h" #include "citra_qt/game_list_p.h" +#include "citra_qt/game_list_worker.h" #include "citra_qt/main.h" #include "citra_qt/ui_settings.h" #include "common/common_paths.h" @@ -30,7 +31,6 @@ #include "core/file_sys/archive_extsavedata.h" #include "core/file_sys/archive_source_sd_savedata.h" #include "core/hle/service/fs/archive.h" -#include "core/loader/loader.h" GameListSearchField::KeyReleaseEater::KeyReleaseEater(GameList* gamelist) : gamelist{gamelist} {} @@ -648,11 +648,6 @@ void GameList::LoadInterfaceLayout() { const QStringList GameList::supported_file_extensions = {"3ds", "3dsx", "elf", "axf", "cci", "cxi", "app"}; -static bool HasSupportedFileExtension(const std::string& file_name) { - QFileInfo file = QFileInfo(QString::fromStdString(file_name)); - return GameList::supported_file_extensions.contains(file.suffix(), Qt::CaseInsensitive); -} - void GameList::RefreshGameDirectory() { if (!UISettings::values.game_dirs.isEmpty() && current_worker != nullptr) { LOG_INFO(Frontend, "Change detected in the games directory. Reloading game list."); @@ -678,123 +673,6 @@ QString GameList::FindGameByProgramID(QStandardItem* current_item, u64 program_i return ""; } -void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion, - GameListDir* parent_dir) { - const auto callback = [this, recursion, parent_dir](u64* num_entries_out, - const std::string& directory, - const std::string& virtual_name) -> bool { - std::string physical_name = directory + DIR_SEP + virtual_name; - - if (stop_processing) - return false; // Breaks the callback loop. - - bool is_dir = FileUtil::IsDirectory(physical_name); - if (!is_dir && HasSupportedFileExtension(physical_name)) { - std::unique_ptr loader = Loader::GetLoader(physical_name); - if (!loader) - return true; - - u64 program_id = 0; - loader->ReadProgramId(program_id); - - u64 extdata_id = 0; - loader->ReadExtdataId(extdata_id); - - std::vector smdh = [program_id, &loader]() -> std::vector { - std::vector original_smdh; - loader->ReadIcon(original_smdh); - - if (program_id < 0x0004000000000000 || program_id > 0x00040000FFFFFFFF) - return original_smdh; - - std::string update_path = Service::AM::GetTitleContentPath( - Service::FS::MediaType::SDMC, program_id + 0x0000000E00000000); - - if (!FileUtil::Exists(update_path)) - return original_smdh; - - std::unique_ptr update_loader = Loader::GetLoader(update_path); - - if (!update_loader) - return original_smdh; - - std::vector update_smdh; - update_loader->ReadIcon(update_smdh); - return update_smdh; - }(); - - if (!Loader::IsValidSMDH(smdh) && UISettings::values.game_list_hide_no_icon) { - // Skip this invalid entry - return true; - } - - auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); - - // The game list uses this as compatibility number for untested games - QString compatibility("99"); - if (it != compatibility_list.end()) - compatibility = it->second.first; - - emit EntryReady( - { - new GameListItemPath(QString::fromStdString(physical_name), smdh, program_id, - extdata_id), - new GameListItemCompat(compatibility), - new GameListItemRegion(smdh), - new GameListItem( - QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))), - new GameListItemSize(FileUtil::GetSize(physical_name)), - }, - parent_dir); - - } else if (is_dir && recursion > 0) { - watch_list.append(QString::fromStdString(physical_name)); - AddFstEntriesToGameList(physical_name, recursion - 1, parent_dir); - } - - return true; - }; - - FileUtil::ForeachDirectoryEntry(nullptr, dir_path, callback); -} - -void GameListWorker::run() { - stop_processing = false; - for (UISettings::GameDir& game_dir : game_dirs) { - if (game_dir.path == "INSTALLED") { - QString path = - QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)) + - "Nintendo " - "3DS/00000000000000000000000000000000/" - "00000000000000000000000000000000/title/00040000"; - watch_list.append(path); - GameListDir* game_list_dir = new GameListDir(game_dir, GameListItemType::InstalledDir); - emit DirEntryReady({game_list_dir}); - AddFstEntriesToGameList(path.toStdString(), 2, game_list_dir); - } else if (game_dir.path == "SYSTEM") { - QString path = - QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)) + - "00000000000000000000000000000000/title/00040010"; - watch_list.append(path); - GameListDir* game_list_dir = new GameListDir(game_dir, GameListItemType::SystemDir); - emit DirEntryReady({game_list_dir}); - AddFstEntriesToGameList(path.toStdString(), 2, game_list_dir); - } else { - watch_list.append(game_dir.path); - GameListDir* game_list_dir = new GameListDir(game_dir); - emit DirEntryReady({game_list_dir}); - AddFstEntriesToGameList(game_dir.path.toStdString(), game_dir.deep_scan ? 256 : 0, - game_list_dir); - } - }; - emit Finished(watch_list); -} - -void GameListWorker::Cancel() { - this->disconnect(); - stop_processing = true; -} - GameListPlaceholder::GameListPlaceholder(GMainWindow* parent) : QWidget{parent} { this->main_window = parent; diff --git a/src/citra_qt/game_list.h b/src/citra_qt/game_list.h index c355ecc1e..cfcf23615 100644 --- a/src/citra_qt/game_list.h +++ b/src/citra_qt/game_list.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include "common/common_types.h" diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index cc8b92851..46f4714bc 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -4,7 +4,6 @@ #pragma once -#include #include #include #include @@ -59,17 +58,6 @@ static QPixmap GetDefaultIcon(bool large) { return icon; } -static auto FindMatchingCompatibilityEntry( - const std::unordered_map>& compatibility_list, - u64 program_id) { - return std::find_if( - compatibility_list.begin(), compatibility_list.end(), - [program_id](const std::pair>& element) { - std::string pid = fmt::format("{:016X}", program_id); - return element.first == pid; - }); -} - /** * Gets the short game title from SMDH data. * @param smdh SMDH data @@ -373,50 +361,16 @@ public: } }; -/** - * Asynchronous worker object for populating the game list. - * Communicates with other threads through Qt's signal/slot system. - */ -class GameListWorker : public QObject, public QRunnable { - Q_OBJECT - -public: - explicit GameListWorker( - QList& game_dirs, - const std::unordered_map>& compatibility_list) - : game_dirs(game_dirs), compatibility_list(compatibility_list) {} - -public slots: - /// Starts the processing of directory tree information. - void run() override; - /// Tells the worker that it should no longer continue processing. Thread-safe. - void Cancel(); - -signals: - /** - * The `EntryReady` signal is emitted once an entry has been prepared and is ready - * to be added to the game list. - * @param entry_items a list with `QStandardItem`s that make up the columns of the new - * entry. - */ - void DirEntryReady(GameListDir* entry_items); - void EntryReady(QList entry_items, GameListDir* parent_dir); - - /** - * After the worker has traversed the game directory looking for entries, this signal is - * emitted with a list of folders that should be watched for changes as well. - */ - void Finished(QStringList watch_list); - -private: - QStringList watch_list; - const std::unordered_map>& compatibility_list; - QList& game_dirs; - std::atomic_bool stop_processing; - - void AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion, - GameListDir* parent_dir); -}; +inline auto FindMatchingCompatibilityEntry( + const std::unordered_map>& compatibility_list, + u64 program_id) { + return std::find_if( + compatibility_list.begin(), compatibility_list.end(), + [program_id](const std::pair>& element) { + std::string pid = fmt::format("{:016X}", program_id); + return element.first == pid; + }); +} class GameList; class QHBoxLayout; diff --git a/src/citra_qt/game_list_worker.cpp b/src/citra_qt/game_list_worker.cpp new file mode 100644 index 000000000..b29f4246b --- /dev/null +++ b/src/citra_qt/game_list_worker.cpp @@ -0,0 +1,152 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include +#include +#include + +#include +#include + +#include "citra_qt/game_list.h" +#include "citra_qt/game_list_p.h" +#include "citra_qt/game_list_worker.h" +#include "citra_qt/ui_settings.h" +#include "common/common_paths.h" +#include "common/file_util.h" +#include "core/hle/service/am/am.h" +#include "core/hle/service/fs/archive.h" +#include "core/loader/loader.h" + +namespace { +bool HasSupportedFileExtension(const std::string& file_name) { + const QFileInfo file = QFileInfo(QString::fromStdString(file_name)); + return GameList::supported_file_extensions.contains(file.suffix(), Qt::CaseInsensitive); +} +} // Anonymous namespace + +GameListWorker::GameListWorker( + QList& game_dirs, + const std::unordered_map>& compatibility_list) + : game_dirs(game_dirs), compatibility_list(compatibility_list) {} + +GameListWorker::~GameListWorker() = default; + +void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion, + GameListDir* parent_dir) { + const auto callback = [this, recursion, parent_dir](u64* num_entries_out, + const std::string& directory, + const std::string& virtual_name) -> bool { + std::string physical_name = directory + DIR_SEP + virtual_name; + + if (stop_processing) + return false; // Breaks the callback loop. + + bool is_dir = FileUtil::IsDirectory(physical_name); + if (!is_dir && HasSupportedFileExtension(physical_name)) { + std::unique_ptr loader = Loader::GetLoader(physical_name); + if (!loader) + return true; + + u64 program_id = 0; + loader->ReadProgramId(program_id); + + u64 extdata_id = 0; + loader->ReadExtdataId(extdata_id); + + std::vector smdh = [program_id, &loader]() -> std::vector { + std::vector original_smdh; + loader->ReadIcon(original_smdh); + + if (program_id < 0x0004000000000000 || program_id > 0x00040000FFFFFFFF) + return original_smdh; + + std::string update_path = Service::AM::GetTitleContentPath( + Service::FS::MediaType::SDMC, program_id + 0x0000000E00000000); + + if (!FileUtil::Exists(update_path)) + return original_smdh; + + std::unique_ptr update_loader = Loader::GetLoader(update_path); + + if (!update_loader) + return original_smdh; + + std::vector update_smdh; + update_loader->ReadIcon(update_smdh); + return update_smdh; + }(); + + if (!Loader::IsValidSMDH(smdh) && UISettings::values.game_list_hide_no_icon) { + // Skip this invalid entry + return true; + } + + auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); + + // The game list uses this as compatibility number for untested games + QString compatibility("99"); + if (it != compatibility_list.end()) + compatibility = it->second.first; + + emit EntryReady( + { + new GameListItemPath(QString::fromStdString(physical_name), smdh, program_id, + extdata_id), + new GameListItemCompat(compatibility), + new GameListItemRegion(smdh), + new GameListItem( + QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))), + new GameListItemSize(FileUtil::GetSize(physical_name)), + }, + parent_dir); + + } else if (is_dir && recursion > 0) { + watch_list.append(QString::fromStdString(physical_name)); + AddFstEntriesToGameList(physical_name, recursion - 1, parent_dir); + } + + return true; + }; + + FileUtil::ForeachDirectoryEntry(nullptr, dir_path, callback); +} + +void GameListWorker::run() { + stop_processing = false; + for (UISettings::GameDir& game_dir : game_dirs) { + if (game_dir.path == "INSTALLED") { + QString path = + QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)) + + "Nintendo " + "3DS/00000000000000000000000000000000/" + "00000000000000000000000000000000/title/00040000"; + watch_list.append(path); + GameListDir* game_list_dir = new GameListDir(game_dir, GameListItemType::InstalledDir); + emit DirEntryReady({game_list_dir}); + AddFstEntriesToGameList(path.toStdString(), 2, game_list_dir); + } else if (game_dir.path == "SYSTEM") { + QString path = + QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)) + + "00000000000000000000000000000000/title/00040010"; + watch_list.append(path); + GameListDir* game_list_dir = new GameListDir(game_dir, GameListItemType::SystemDir); + emit DirEntryReady({game_list_dir}); + AddFstEntriesToGameList(path.toStdString(), 2, game_list_dir); + } else { + watch_list.append(game_dir.path); + GameListDir* game_list_dir = new GameListDir(game_dir); + emit DirEntryReady({game_list_dir}); + AddFstEntriesToGameList(game_dir.path.toStdString(), game_dir.deep_scan ? 256 : 0, + game_list_dir); + } + }; + emit Finished(watch_list); +} + +void GameListWorker::Cancel() { + this->disconnect(); + stop_processing = true; +} diff --git a/src/citra_qt/game_list_worker.h b/src/citra_qt/game_list_worker.h new file mode 100644 index 000000000..b35e890ca --- /dev/null +++ b/src/citra_qt/game_list_worker.h @@ -0,0 +1,64 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "common/common_types.h" + +class QStandardItem; + +/** + * Asynchronous worker object for populating the game list. + * Communicates with other threads through Qt's signal/slot system. + */ +class GameListWorker : public QObject, public QRunnable { + Q_OBJECT + +public: + GameListWorker( + QList& game_dirs, + const std::unordered_map>& compatibility_list); + ~GameListWorker() override; + + /// Starts the processing of directory tree information. + void run() override; + + /// Tells the worker that it should no longer continue processing. Thread-safe. + void Cancel(); + +signals: + /** + * The `EntryReady` signal is emitted once an entry has been prepared and is ready + * to be added to the game list. + * @param entry_items a list with `QStandardItem`s that make up the columns of the new entry. + */ + void DirEntryReady(GameListDir* entry_items); + void EntryReady(QList entry_items, GameListDir* parent_dir); + + /** + * After the worker has traversed the game directory looking for entries, this signal is emitted + * with a list of folders that should be watched for changes as well. + */ + void Finished(QStringList watch_list); + +private: + void AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion, + GameListDir* parent_dir); + + QStringList watch_list; + const std::unordered_map>& compatibility_list; + QList& game_dirs; + std::atomic_bool stop_processing; +}; From 230edc8c7c14dac2495ecde947cc837affdffce9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 9 Sep 2018 19:09:37 -0400 Subject: [PATCH 2/5] yuzu: Move compatibility list specifics to their own source files Lets us keep the generic portions of the compatibility list code together, and allows us to introduce a type alias that makes it so we don't need to type out a very long type declaration anymore, making the immediate readability of some code better. --- src/citra_qt/CMakeLists.txt | 2 ++ src/citra_qt/compatibility_list.cpp | 18 ++++++++++++++++++ src/citra_qt/compatibility_list.h | 17 +++++++++++++++++ src/citra_qt/game_list.cpp | 1 + src/citra_qt/game_list.h | 9 ++++----- src/citra_qt/game_list_p.h | 11 ----------- src/citra_qt/game_list_worker.cpp | 6 +++--- src/citra_qt/game_list_worker.h | 8 ++++---- src/citra_qt/main.cpp | 8 +++----- src/citra_qt/main.h | 6 +++--- 10 files changed, 55 insertions(+), 31 deletions(-) create mode 100644 src/citra_qt/compatibility_list.cpp create mode 100644 src/citra_qt/compatibility_list.h diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index aa96a2e0d..3fb9c8433 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -14,6 +14,8 @@ add_executable(citra-qt applets/swkbd.h bootmanager.cpp bootmanager.h + compatibility_list.cpp + compatibility_list.h camera/camera_util.cpp camera/camera_util.h camera/still_image_camera.cpp diff --git a/src/citra_qt/compatibility_list.cpp b/src/citra_qt/compatibility_list.cpp new file mode 100644 index 000000000..5bf6e5648 --- /dev/null +++ b/src/citra_qt/compatibility_list.cpp @@ -0,0 +1,18 @@ +// Copyright 2018 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include + +#include + +#include "citra_qt/compatibility_list.h" + +CompatibilityList::const_iterator FindMatchingCompatibilityEntry( + const CompatibilityList& compatibility_list, u64 program_id) { + return std::find_if(compatibility_list.begin(), compatibility_list.end(), + [program_id](const auto& element) { + std::string pid = fmt::format("{:016X}", program_id); + return element.first == pid; + }); +} diff --git a/src/citra_qt/compatibility_list.h b/src/citra_qt/compatibility_list.h new file mode 100644 index 000000000..bc0175bd3 --- /dev/null +++ b/src/citra_qt/compatibility_list.h @@ -0,0 +1,17 @@ +// Copyright 2018 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +#include + +#include "common/common_types.h" + +using CompatibilityList = std::unordered_map>; + +CompatibilityList::const_iterator FindMatchingCompatibilityEntry( + const CompatibilityList& compatibility_list, u64 program_id); diff --git a/src/citra_qt/game_list.cpp b/src/citra_qt/game_list.cpp index c16b63b86..c28878b88 100644 --- a/src/citra_qt/game_list.cpp +++ b/src/citra_qt/game_list.cpp @@ -21,6 +21,7 @@ #include #include #include +#include "citra_qt/compatibility_list.h" #include "citra_qt/game_list.h" #include "citra_qt/game_list_p.h" #include "citra_qt/game_list_worker.h" diff --git a/src/citra_qt/game_list.h b/src/citra_qt/game_list.h index cfcf23615..a10d7fe15 100644 --- a/src/citra_qt/game_list.h +++ b/src/citra_qt/game_list.h @@ -4,10 +4,10 @@ #pragma once -#include #include #include #include +#include "citra_qt/compatibility_list.h" #include "common/common_types.h" #include "ui_settings.h" @@ -71,9 +71,8 @@ signals: void GameChosen(QString game_path); void ShouldCancelWorker(); void OpenFolderRequested(u64 program_id, GameListOpenTarget target); - void NavigateToGamedbEntryRequested( - u64 program_id, - std::unordered_map>& compatibility_list); + void NavigateToGamedbEntryRequested(u64 program_id, + const CompatibilityList& compatibility_list); void OpenDirectory(QString directory); void AddDirectory(); void ShowList(bool show); @@ -104,7 +103,7 @@ private: QStandardItemModel* item_model = nullptr; GameListWorker* current_worker = nullptr; QFileSystemWatcher* watcher = nullptr; - std::unordered_map> compatibility_list; + CompatibilityList compatibility_list; friend class GameListSearchField; }; diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index 46f4714bc..2a1cb615c 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -361,17 +361,6 @@ public: } }; -inline auto FindMatchingCompatibilityEntry( - const std::unordered_map>& compatibility_list, - u64 program_id) { - return std::find_if( - compatibility_list.begin(), compatibility_list.end(), - [program_id](const std::pair>& element) { - std::string pid = fmt::format("{:016X}", program_id); - return element.first == pid; - }); -} - class GameList; class QHBoxLayout; class QTreeView; diff --git a/src/citra_qt/game_list_worker.cpp b/src/citra_qt/game_list_worker.cpp index b29f4246b..5e1e98466 100644 --- a/src/citra_qt/game_list_worker.cpp +++ b/src/citra_qt/game_list_worker.cpp @@ -10,6 +10,7 @@ #include #include +#include "citra_qt/compatibility_list.h" #include "citra_qt/game_list.h" #include "citra_qt/game_list_p.h" #include "citra_qt/game_list_worker.h" @@ -27,9 +28,8 @@ bool HasSupportedFileExtension(const std::string& file_name) { } } // Anonymous namespace -GameListWorker::GameListWorker( - QList& game_dirs, - const std::unordered_map>& compatibility_list) +GameListWorker::GameListWorker(QList& game_dirs, + const CompatibilityList& compatibility_list) : game_dirs(game_dirs), compatibility_list(compatibility_list) {} GameListWorker::~GameListWorker() = default; diff --git a/src/citra_qt/game_list_worker.h b/src/citra_qt/game_list_worker.h index b35e890ca..f87492cb1 100644 --- a/src/citra_qt/game_list_worker.h +++ b/src/citra_qt/game_list_worker.h @@ -15,6 +15,7 @@ #include #include +#include "citra_qt/compatibility_list.h" #include "common/common_types.h" class QStandardItem; @@ -27,9 +28,8 @@ class GameListWorker : public QObject, public QRunnable { Q_OBJECT public: - GameListWorker( - QList& game_dirs, - const std::unordered_map>& compatibility_list); + GameListWorker(QList& game_dirs, + const CompatibilityList& compatibility_list); ~GameListWorker() override; /// Starts the processing of directory tree information. @@ -58,7 +58,7 @@ private: GameListDir* parent_dir); QStringList watch_list; - const std::unordered_map>& compatibility_list; + const CompatibilityList& compatibility_list; QList& game_dirs; std::atomic_bool stop_processing; }; diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 8d0856af1..f09c228a7 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -21,6 +21,7 @@ #include "citra_qt/camera/qt_multimedia_camera.h" #include "citra_qt/camera/still_image_camera.h" #include "citra_qt/compatdb.h" +#include "citra_qt/compatibility_list.h" #include "citra_qt/configuration/config.h" #include "citra_qt/configuration/configure_dialog.h" #include "citra_qt/debugger/console.h" @@ -960,14 +961,11 @@ void GMainWindow::OnGameListOpenFolder(u64 data_id, GameListOpenTarget target) { QDesktopServices::openUrl(QUrl::fromLocalFile(qpath)); } -void GMainWindow::OnGameListNavigateToGamedbEntry( - u64 program_id, - std::unordered_map>& compatibility_list) { - +void GMainWindow::OnGameListNavigateToGamedbEntry(u64 program_id, + const CompatibilityList& compatibility_list) { auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); QString directory; - if (it != compatibility_list.end()) directory = it->second.second; diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index bbc0714c5..fc1382ddd 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -9,6 +9,7 @@ #include #include #include +#include "citra_qt/compatibility_list.h" #include "citra_qt/hotkeys.h" #include "common/announce_multiplayer_room.h" #include "core/core.h" @@ -153,9 +154,8 @@ private slots: /// Called whenever a user selects a game in the game list widget. void OnGameListLoadFile(QString game_path); void OnGameListOpenFolder(u64 program_id, GameListOpenTarget target); - void OnGameListNavigateToGamedbEntry( - u64 program_id, - std::unordered_map>& compatibility_list); + void OnGameListNavigateToGamedbEntry(u64 program_id, + const CompatibilityList& compatibility_list); void OnGameListOpenDirectory(QString path); void OnGameListAddDirectory(); void OnGameListShowList(bool show); From 52ec85be12e79676bf31aba5b328da67e7e3a355 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 17 Sep 2018 05:31:27 -0400 Subject: [PATCH 3/5] game_list_p: Amend typo in GameListItemCompat's constructor parameter Adds a missing 'i' character that was missing in compatibility. --- src/citra_qt/game_list_p.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index 2a1cb615c..40f19d229 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -204,7 +204,7 @@ class GameListItemCompat : public GameListItem { public: static const int CompatNumberRole = SortRole; GameListItemCompat() = default; - explicit GameListItemCompat(const QString& compatiblity) { + explicit GameListItemCompat(const QString& compatibility) { setData(type(), TypeRole); struct CompatStatus { @@ -223,13 +223,13 @@ public: {"99", {"#000000", QT_TR_NOOP("Not Tested"), QT_TR_NOOP("The game has not yet been tested.")}}}; // clang-format on - auto iterator = status_data.find(compatiblity); + auto iterator = status_data.find(compatibility); if (iterator == status_data.end()) { - LOG_WARNING(Frontend, "Invalid compatibility number {}", compatiblity.toStdString()); + LOG_WARNING(Frontend, "Invalid compatibility number {}", compatibility.toStdString()); return; } CompatStatus status = iterator->second; - setData(compatiblity, CompatNumberRole); + setData(compatibility, CompatNumberRole); setText(QObject::tr(status.text)); setToolTip(QObject::tr(status.tooltip)); setData(CreateCirclePixmapFromColor(status.color), Qt::DecorationRole); From f56a8403334d1a54c714c0c7beaf1ddcc05bec9f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 17 Sep 2018 05:30:09 -0400 Subject: [PATCH 4/5] game_list_p: Take map iterator contents by const reference We don't need to copy the whole struct in this instance, we can just utilize a reference instead. --- src/citra_qt/game_list_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index 40f19d229..b3f473397 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -228,7 +228,7 @@ public: LOG_WARNING(Frontend, "Invalid compatibility number {}", compatibility.toStdString()); return; } - CompatStatus status = iterator->second; + const CompatStatus& status = iterator->second; setData(compatibility, CompatNumberRole); setText(QObject::tr(status.text)); setToolTip(QObject::tr(status.tooltip)); From 111b7db759b06e37bb080a9832c0e18943b69c66 Mon Sep 17 00:00:00 2001 From: fearlessTobi Date: Fri, 21 Sep 2018 17:25:42 +0200 Subject: [PATCH 5/5] Stop splitting includes --- src/citra_qt/compatibility_list.cpp | 2 -- src/citra_qt/compatibility_list.h | 2 -- src/citra_qt/game_list_worker.cpp | 2 -- src/citra_qt/game_list_worker.h | 2 -- 4 files changed, 8 deletions(-) diff --git a/src/citra_qt/compatibility_list.cpp b/src/citra_qt/compatibility_list.cpp index 5bf6e5648..92e729dee 100644 --- a/src/citra_qt/compatibility_list.cpp +++ b/src/citra_qt/compatibility_list.cpp @@ -3,9 +3,7 @@ // Refer to the license.txt file included. #include - #include - #include "citra_qt/compatibility_list.h" CompatibilityList::const_iterator FindMatchingCompatibilityEntry( diff --git a/src/citra_qt/compatibility_list.h b/src/citra_qt/compatibility_list.h index bc0175bd3..df2dbd60a 100644 --- a/src/citra_qt/compatibility_list.h +++ b/src/citra_qt/compatibility_list.h @@ -6,9 +6,7 @@ #include #include - #include - #include "common/common_types.h" using CompatibilityList = std::unordered_map>; diff --git a/src/citra_qt/game_list_worker.cpp b/src/citra_qt/game_list_worker.cpp index 5e1e98466..7ec7c7677 100644 --- a/src/citra_qt/game_list_worker.cpp +++ b/src/citra_qt/game_list_worker.cpp @@ -6,10 +6,8 @@ #include #include #include - #include #include - #include "citra_qt/compatibility_list.h" #include "citra_qt/game_list.h" #include "citra_qt/game_list_p.h" diff --git a/src/citra_qt/game_list_worker.h b/src/citra_qt/game_list_worker.h index f87492cb1..a955e6376 100644 --- a/src/citra_qt/game_list_worker.h +++ b/src/citra_qt/game_list_worker.h @@ -9,12 +9,10 @@ #include #include #include - #include #include #include #include - #include "citra_qt/compatibility_list.h" #include "common/common_types.h"