diff options
author | Lioncash <[email protected]> | 2018-09-07 16:08:08 -0400 |
---|---|---|
committer | Lioncash <[email protected]> | 2018-09-07 16:25:28 -0400 |
commit | 564b7fdc9c15c82f92a71855784801d124b465c4 (patch) | |
tree | 214e82ceaaf55bf1f6e5d81c4efabeba808e7052 /src/yuzu/game_list_worker.h | |
parent | c08c5d346ac8bf0c8571ec68772851a76e27e7f1 (diff) | |
download | yuzu-mainline-564b7fdc9c15c82f92a71855784801d124b465c4.tar.gz yuzu-mainline-564b7fdc9c15c82f92a71855784801d124b465c4.zip |
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).
Diffstat (limited to 'src/yuzu/game_list_worker.h')
-rw-r--r-- | src/yuzu/game_list_worker.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/yuzu/game_list_worker.h b/src/yuzu/game_list_worker.h new file mode 100644 index 000000000..42c93fc31 --- /dev/null +++ b/src/yuzu/game_list_worker.h @@ -0,0 +1,72 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <atomic> +#include <map> +#include <memory> +#include <string> +#include <unordered_map> + +#include <QList> +#include <QObject> +#include <QRunnable> +#include <QString> + +#include "common/common_types.h" + +class QStandardItem; + +namespace FileSys { +class NCA; +class VfsFilesystem; +} // namespace FileSys + +/** + * 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( + std::shared_ptr<FileSys::VfsFilesystem> vfs, QString dir_path, bool deep_scan, + const std::unordered_map<std::string, std::pair<QString, QString>>& 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 EntryReady(QList<QStandardItem*> entry_items); + + /** + * 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 AddInstalledTitlesToGameList(); + void FillControlMap(const std::string& dir_path); + void AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion = 0); + + std::shared_ptr<FileSys::VfsFilesystem> vfs; + std::map<u64, std::shared_ptr<FileSys::NCA>> nca_control_map; + QStringList watch_list; + QString dir_path; + bool deep_scan; + const std::unordered_map<std::string, std::pair<QString, QString>>& compatibility_list; + std::atomic_bool stop_processing; +}; |