diff options
author | flow <flowlnlnln@gmail.com> | 2022-08-28 19:23:04 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-09-03 13:37:20 -0300 |
commit | cda2bfc24061870525fa6569f390141e5703a565 (patch) | |
tree | 97bb823f1160ffa6dd6667859ac7d1af7d6fbbd6 /launcher/minecraft/mod | |
parent | 2f167b1512dc0c3b80731ae412d55ee897da14fd (diff) | |
download | PrismLauncher-cda2bfc24061870525fa6569f390141e5703a565.tar.gz PrismLauncher-cda2bfc24061870525fa6569f390141e5703a565.tar.bz2 PrismLauncher-cda2bfc24061870525fa6569f390141e5703a565.zip |
feat: allow specifying factory for resources in BasicFolderLoadTask
This allows us to hook our own resource type, that possibly has more
content than the base Resource, to it.
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/minecraft/mod')
-rw-r--r-- | launcher/minecraft/mod/tasks/BasicFolderLoadTask.h | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/launcher/minecraft/mod/tasks/BasicFolderLoadTask.h b/launcher/minecraft/mod/tasks/BasicFolderLoadTask.h index cc02a9b9..7ea512b3 100644 --- a/launcher/minecraft/mod/tasks/BasicFolderLoadTask.h +++ b/launcher/minecraft/mod/tasks/BasicFolderLoadTask.h @@ -10,32 +10,41 @@ #include "tasks/Task.h" -/** Very simple task that just loads a folder's contents directly. +/** Very simple task that just loads a folder's contents directly. */ -class BasicFolderLoadTask : public Task -{ +class BasicFolderLoadTask : public Task { Q_OBJECT -public: + public: struct Result { QMap<QString, Resource::Ptr> resources; }; using ResultPtr = std::shared_ptr<Result>; - [[nodiscard]] ResultPtr result() const { - return m_result; - } + [[nodiscard]] ResultPtr result() const { return m_result; } -public: - BasicFolderLoadTask(QDir dir) : Task(nullptr, false), m_dir(dir), m_result(new Result) {} + public: + BasicFolderLoadTask(QDir dir) : Task(nullptr, false), m_dir(dir), m_result(new Result) + { + m_create_func = [](QFileInfo const& entry) -> Resource* { + return new Resource(entry); + }; + } + BasicFolderLoadTask(QDir dir, std::function<Resource*(QFileInfo const&)> create_function) + : Task(nullptr, false), m_dir(dir), m_result(new Result), m_create_func(std::move(create_function)) + {} [[nodiscard]] bool canAbort() const override { return true; } - bool abort() override { m_aborted = true; return true; } + bool abort() override + { + m_aborted = true; + return true; + } void executeTask() override { m_dir.refresh(); for (auto entry : m_dir.entryInfoList()) { - auto resource = new Resource(entry); + auto resource = m_create_func(entry); m_result->resources.insert(resource->internal_id(), resource); } @@ -50,4 +59,6 @@ private: ResultPtr m_result; bool m_aborted = false; + + std::function<Resource*(QFileInfo const&)> m_create_func; }; |