aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod
diff options
context:
space:
mode:
authorflow <thiagodonato300@gmail.com>2022-04-16 13:27:29 -0300
committerflow <flowlnlnln@gmail.com>2022-05-23 14:42:28 -0300
commitfab4a7a6029beb60bade312ee89e649202d178de (patch)
tree69501f69ee5c50ed0d5f9fe7d1383fb6bcbecab0 /launcher/minecraft/mod
parent092d2f8917271264871d69239ecb8836b34d0994 (diff)
downloadPrismLauncher-fab4a7a6029beb60bade312ee89e649202d178de.tar.gz
PrismLauncher-fab4a7a6029beb60bade312ee89e649202d178de.tar.bz2
PrismLauncher-fab4a7a6029beb60bade312ee89e649202d178de.zip
refactor: abstract metadata handling and clarify names
Diffstat (limited to 'launcher/minecraft/mod')
-rw-r--r--launcher/minecraft/mod/MetadataHandler.h41
-rw-r--r--launcher/minecraft/mod/Mod.cpp6
-rw-r--r--launcher/minecraft/mod/Mod.h7
-rw-r--r--launcher/minecraft/mod/ModFolderModel.cpp2
-rw-r--r--launcher/minecraft/mod/tasks/LocalModUpdateTask.cpp6
-rw-r--r--launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp4
6 files changed, 54 insertions, 12 deletions
diff --git a/launcher/minecraft/mod/MetadataHandler.h b/launcher/minecraft/mod/MetadataHandler.h
new file mode 100644
index 00000000..26b1f799
--- /dev/null
+++ b/launcher/minecraft/mod/MetadataHandler.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <memory>
+
+#include "modplatform/packwiz/Packwiz.h"
+
+// launcher/minecraft/mod/Mod.h
+class Mod;
+
+/* Abstraction file for easily changing the way metadata is stored / handled
+ * Needs to be a class because of -Wunused-function and no C++17 [[maybe_unused]]
+ * */
+class Metadata {
+ public:
+ using ModStruct = Packwiz::V1::Mod;
+
+ static auto create(QDir& index_dir, ModPlatform::IndexedPack& mod_pack, ModPlatform::IndexedVersion& mod_version) -> ModStruct
+ {
+ return Packwiz::V1::createModFormat(index_dir, mod_pack, mod_version);
+ }
+
+ static auto create(QDir& index_dir, Mod& internal_mod) -> ModStruct
+ {
+ return Packwiz::V1::createModFormat(index_dir, internal_mod);
+ }
+
+ static void update(QDir& index_dir, ModStruct& mod)
+ {
+ Packwiz::V1::updateModIndex(index_dir, mod);
+ }
+
+ static void remove(QDir& index_dir, QString& mod_name)
+ {
+ Packwiz::V1::deleteModIndex(index_dir, mod_name);
+ }
+
+ static auto get(QDir& index_dir, QString& mod_name) -> ModStruct
+ {
+ return Packwiz::V1::getIndexForMod(index_dir, mod_name);
+ }
+};
diff --git a/launcher/minecraft/mod/Mod.cpp b/launcher/minecraft/mod/Mod.cpp
index 64c9ffb5..5b35156d 100644
--- a/launcher/minecraft/mod/Mod.cpp
+++ b/launcher/minecraft/mod/Mod.cpp
@@ -20,6 +20,7 @@
#include <FileSystem.h>
#include <QDebug>
+#include "MetadataHandler.h"
namespace {
@@ -33,7 +34,7 @@ Mod::Mod(const QFileInfo& file)
m_changedDateTime = file.lastModified();
}
-Mod::Mod(const QDir& mods_dir, const Packwiz::Mod& metadata)
+Mod::Mod(const QDir& mods_dir, const Metadata::ModStruct& metadata)
: m_file(mods_dir.absoluteFilePath(metadata.filename))
// It is weird, but name is not reliable for comparing with the JAR files name
// FIXME: Maybe use hash when implemented?
@@ -121,8 +122,7 @@ bool Mod::enable(bool value)
bool Mod::destroy(QDir& index_dir)
{
- // Delete metadata
- Packwiz::deleteModIndex(index_dir, m_name);
+ Metadata::remove(index_dir, m_name);
m_type = MOD_UNKNOWN;
return FS::deletePath(m_file.filePath());
diff --git a/launcher/minecraft/mod/Mod.h b/launcher/minecraft/mod/Mod.h
index 46bb1a59..fef8cbe4 100644
--- a/launcher/minecraft/mod/Mod.h
+++ b/launcher/minecraft/mod/Mod.h
@@ -21,7 +21,7 @@
#include <memory>
#include "ModDetails.h"
-#include "modplatform/packwiz/Packwiz.h"
+#include "minecraft/mod/MetadataHandler.h"
class Mod
{
@@ -37,9 +37,9 @@ public:
Mod() = default;
Mod(const QFileInfo &file);
- explicit Mod(const QDir& mods_dir, const Packwiz::Mod& metadata);
+ explicit Mod(const QDir& mods_dir, const Metadata::ModStruct& metadata);
- QFileInfo filename() const { return m_file; }
+ QFileInfo fileinfo() const { return m_file; }
QDateTime dateTimeChanged() const { return m_changedDateTime; }
QString internal_id() const { return m_internal_id; }
ModType type() const { return m_type; }
@@ -82,6 +82,7 @@ protected:
QDateTime m_changedDateTime;
QString m_internal_id;
+ /* Name as reported via the file name */
QString m_name;
ModType m_type = MOD_UNKNOWN;
bool m_from_metadata = false;
diff --git a/launcher/minecraft/mod/ModFolderModel.cpp b/launcher/minecraft/mod/ModFolderModel.cpp
index e2e041eb..e034e35e 100644
--- a/launcher/minecraft/mod/ModFolderModel.cpp
+++ b/launcher/minecraft/mod/ModFolderModel.cpp
@@ -180,7 +180,7 @@ void ModFolderModel::resolveMod(Mod& m)
return;
}
- auto task = new LocalModParseTask(nextResolutionTicket, m.type(), m.filename());
+ auto task = new LocalModParseTask(nextResolutionTicket, m.type(), m.fileinfo());
auto result = task->result();
result->id = m.internal_id();
activeTickets.insert(nextResolutionTicket, result);
diff --git a/launcher/minecraft/mod/tasks/LocalModUpdateTask.cpp b/launcher/minecraft/mod/tasks/LocalModUpdateTask.cpp
index 63f5cf9a..8b6e8ec7 100644
--- a/launcher/minecraft/mod/tasks/LocalModUpdateTask.cpp
+++ b/launcher/minecraft/mod/tasks/LocalModUpdateTask.cpp
@@ -3,7 +3,7 @@
#include <toml.h>
#include "FileSystem.h"
-#include "modplatform/packwiz/Packwiz.h"
+#include "minecraft/mod/MetadataHandler.h"
LocalModUpdateTask::LocalModUpdateTask(QDir index_dir, ModPlatform::IndexedPack& mod, ModPlatform::IndexedVersion& mod_version)
: m_index_dir(index_dir), m_mod(mod), m_mod_version(mod_version)
@@ -18,8 +18,8 @@ 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);
+ auto pw_mod = Metadata::create(m_index_dir, m_mod, m_mod_version);
+ Metadata::update(m_index_dir, pw_mod);
emitSucceeded();
}
diff --git a/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp b/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
index bf7b28d6..e94bdee9 100644
--- a/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
+++ b/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
@@ -1,7 +1,7 @@
#include "ModFolderLoadTask.h"
#include <QDebug>
-#include "modplatform/packwiz/Packwiz.h"
+#include "minecraft/mod/MetadataHandler.h"
ModFolderLoadTask::ModFolderLoadTask(QDir& mods_dir, QDir& index_dir)
: m_mods_dir(mods_dir), m_index_dir(index_dir), m_result(new Result())
@@ -17,7 +17,7 @@ void ModFolderLoadTask::run()
continue;
entry.chop(5); // Remove .toml at the end
- Mod mod(m_mods_dir, Packwiz::getIndexForMod(m_index_dir, entry));
+ Mod mod(m_mods_dir, Metadata::get(m_index_dir, entry));
m_result->mods[mod.internal_id()] = mod;
}