aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft
diff options
context:
space:
mode:
authorflow <thiagodonato300@gmail.com>2022-04-13 19:16:36 -0300
committerflow <flowlnlnln@gmail.com>2022-05-23 14:42:22 -0300
commitb30b88716e67de93ea1c97d9dfd02a41af5428f3 (patch)
treedf418d6c9c2b9519e57113714addbe456bca3e3b /launcher/minecraft
parentdca4ea5ceaa30f1285570d2bf32ea112118b9204 (diff)
downloadPrismLauncher-b30b88716e67de93ea1c97d9dfd02a41af5428f3.tar.gz
PrismLauncher-b30b88716e67de93ea1c97d9dfd02a41af5428f3.tar.bz2
PrismLauncher-b30b88716e67de93ea1c97d9dfd02a41af5428f3.zip
feat: add very early mod.toml packwiz support
Also use it as a on-disk format for storing mod metadata. This will be used later on to make better mod managment.
Diffstat (limited to 'launcher/minecraft')
-rw-r--r--launcher/minecraft/mod/LocalModUpdateTask.cpp32
-rw-r--r--launcher/minecraft/mod/LocalModUpdateTask.h26
2 files changed, 58 insertions, 0 deletions
diff --git a/launcher/minecraft/mod/LocalModUpdateTask.cpp b/launcher/minecraft/mod/LocalModUpdateTask.cpp
new file mode 100644
index 00000000..0f48217b
--- /dev/null
+++ b/launcher/minecraft/mod/LocalModUpdateTask.cpp
@@ -0,0 +1,32 @@
+#include "LocalModUpdateTask.h"
+
+#include <toml.h>
+
+#include "FileSystem.h"
+#include "modplatform/packwiz/Packwiz.h"
+
+LocalModUpdateTask::LocalModUpdateTask(QDir mods_dir, ModPlatform::IndexedPack& mod, ModPlatform::IndexedVersion& mod_version)
+ : m_mod(mod), m_mod_version(mod_version)
+{
+ // Ensure a '.index' folder exists in the mods folder, and create it if it does not
+ m_index_dir = { QString("%1/.index").arg(mods_dir.absolutePath()) };
+ if (!FS::ensureFolderPathExists(m_index_dir.path())) {
+ emitFailed(QString("Unable to create index for mod %1!").arg(m_mod.name));
+ }
+}
+
+void LocalModUpdateTask::executeTask()
+{
+ setStatus(tr("Updating index for mod:\n%1").arg(m_mod.name));
+
+ auto pw_mod = Packwiz::createModFormat(m_index_dir, m_mod, m_mod_version);
+ Packwiz::updateModIndex(m_index_dir, pw_mod);
+
+ emitSucceeded();
+}
+
+bool LocalModUpdateTask::abort()
+{
+ emitAborted();
+ return true;
+}
diff --git a/launcher/minecraft/mod/LocalModUpdateTask.h b/launcher/minecraft/mod/LocalModUpdateTask.h
new file mode 100644
index 00000000..866089e9
--- /dev/null
+++ b/launcher/minecraft/mod/LocalModUpdateTask.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <QDir>
+
+#include "tasks/Task.h"
+#include "modplatform/ModIndex.h"
+
+class LocalModUpdateTask : public Task {
+ Q_OBJECT
+ public:
+ using Ptr = shared_qobject_ptr<LocalModUpdateTask>;
+
+ explicit LocalModUpdateTask(QDir mods_dir, ModPlatform::IndexedPack& mod, ModPlatform::IndexedVersion& mod_version);
+
+ bool canAbort() const override { return true; }
+ bool abort() override;
+
+ protected slots:
+ //! Entry point for tasks.
+ void executeTask() override;
+
+ private:
+ QDir m_index_dir;
+ ModPlatform::IndexedPack& m_mod;
+ ModPlatform::IndexedVersion& m_mod_version;
+};