aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod/ModFolderLoadTask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/minecraft/mod/ModFolderLoadTask.cpp')
-rw-r--r--launcher/minecraft/mod/ModFolderLoadTask.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/launcher/minecraft/mod/ModFolderLoadTask.cpp b/launcher/minecraft/mod/ModFolderLoadTask.cpp
index 88349877..fd4d6008 100644
--- a/launcher/minecraft/mod/ModFolderLoadTask.cpp
+++ b/launcher/minecraft/mod/ModFolderLoadTask.cpp
@@ -1,18 +1,35 @@
#include "ModFolderLoadTask.h"
#include <QDebug>
-ModFolderLoadTask::ModFolderLoadTask(QDir dir) :
- m_dir(dir), m_result(new Result())
+#include "modplatform/packwiz/Packwiz.h"
+
+ModFolderLoadTask::ModFolderLoadTask(QDir& mods_dir, QDir& index_dir) :
+ m_mods_dir(mods_dir), m_index_dir(index_dir), m_result(new Result())
{
}
void ModFolderLoadTask::run()
{
- m_dir.refresh();
- for (auto entry : m_dir.entryInfoList())
+ // Read metadata first
+ m_index_dir.refresh();
+ for(auto entry : m_index_dir.entryList()){
+ // QDir::Filter::NoDotAndDotDot seems to exclude all files for some reason...
+ if(entry == "." || entry == "..")
+ continue;
+
+ entry.chop(5); // Remove .toml at the end
+ Mod mod(m_mods_dir, Packwiz::getIndexForMod(m_index_dir, entry));
+ m_result->mods[mod.mmc_id()] = mod;
+ }
+
+ // Read JAR files that don't have metadata
+ m_mods_dir.refresh();
+ for (auto entry : m_mods_dir.entryInfoList())
{
- Mod m(entry);
- m_result->mods[m.mmc_id()] = m;
+ Mod mod(entry);
+ if(!m_result->mods.contains(mod.mmc_id()))
+ m_result->mods[mod.mmc_id()] = mod;
}
+
emit succeeded();
}