aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-08-28 19:23:04 -0300
committerflow <flowlnlnln@gmail.com>2022-09-03 13:37:20 -0300
commitcda2bfc24061870525fa6569f390141e5703a565 (patch)
tree97bb823f1160ffa6dd6667859ac7d1af7d6fbbd6 /launcher/minecraft/mod
parent2f167b1512dc0c3b80731ae412d55ee897da14fd (diff)
downloadPrismLauncher-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.h33
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;
};