diff --git a/launcher/modplatform/flame/FlamePackExportTask.cpp b/launcher/modplatform/flame/FlamePackExportTask.cpp index d661f1f05..61eaa826d 100644 --- a/launcher/modplatform/flame/FlamePackExportTask.cpp +++ b/launcher/modplatform/flame/FlamePackExportTask.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include "Application.h" #include "Json.h" #include "MMCZip.h" @@ -39,24 +40,23 @@ #include "tasks/Task.h" const QString FlamePackExportTask::TEMPLATE = "
  • {name}{authors}
  • \n"; -const QStringList FlamePackExportTask::FILE_EXTENSIONS({ "jar", "zip" }); +const QStringList FlamePackExportTask::FILE_EXTENSIONS({ "jar", "litemod", "zip" }); -FlamePackExportTask::FlamePackExportTask(const QString& name, - const QString& version, - const QString& author, +FlamePackExportTask::FlamePackExportTask(QString name, + QString version, + QString author, bool optionalFiles, - InstancePtr instance, - const QString& output, + MinecraftInstancePtr instance, + QString output, MMCZip::FilterFunction filter) - : name(name) - , version(version) - , author(author) + : name(std::move(name)) + , version(std::move(version)) + , author(std::move(author)) , optionalFiles(optionalFiles) - , instance(instance) - , mcInstance(dynamic_cast(instance.get())) - , gameRoot(instance->gameRoot()) - , output(output) - , filter(filter) + , instance(std::move(instance)) + , gameRoot(this->instance->gameRoot()) + , output(std::move(output)) + , filter(std::move(filter)) {} void FlamePackExportTask::executeTask() @@ -90,11 +90,7 @@ void FlamePackExportTask::collectFiles() pendingHashes.clear(); resolvedFiles.clear(); - if (mcInstance != nullptr) { - mcInstance->loaderModList()->update(); - connect(mcInstance->loaderModList().get(), &ModFolderModel::updateFinished, this, &FlamePackExportTask::collectHashes); - } else - collectHashes(); + collectHashes(); } void FlamePackExportTask::collectHashes() @@ -102,7 +98,7 @@ void FlamePackExportTask::collectHashes() setAbortable(true); setStatus(tr("Finding file hashes...")); setProgress(1, 5); - auto allMods = mcInstance->loaderModList()->allMods(); + auto allMods = instance->loaderModList()->allMods(); ConcurrentTask::Ptr hashingTask( new ConcurrentTask(this, "MakeHashesTask", APPLICATION->settings()->get("NumberOfConcurrentTasks").toInt())); task.reset(hashingTask); @@ -379,9 +375,9 @@ QByteArray FlamePackExportTask::generateIndex() obj["version"] = version; obj["author"] = author; obj["overrides"] = "overrides"; - if (mcInstance) { + if (instance) { QJsonObject version; - auto profile = mcInstance->getPackProfile(); + auto profile = instance->getPackProfile(); // collect all supported components const ComponentPtr minecraft = profile->getComponent("net.minecraft"); const ComponentPtr quilt = profile->getComponent("org.quiltmc.quilt-loader"); diff --git a/launcher/modplatform/flame/FlamePackExportTask.h b/launcher/modplatform/flame/FlamePackExportTask.h index b11eb17fa..83d870b09 100644 --- a/launcher/modplatform/flame/FlamePackExportTask.h +++ b/launcher/modplatform/flame/FlamePackExportTask.h @@ -28,12 +28,12 @@ class FlamePackExportTask : public Task { Q_OBJECT public: - FlamePackExportTask(const QString& name, - const QString& version, - const QString& author, + FlamePackExportTask(QString name, + QString version, + QString author, bool optionalFiles, - InstancePtr instance, - const QString& output, + MinecraftInstancePtr instance, + QString output, MMCZip::FilterFunction filter); protected: @@ -47,8 +47,7 @@ class FlamePackExportTask : public Task { // inputs const QString name, version, author; const bool optionalFiles; - const InstancePtr instance; - MinecraftInstance* mcInstance; + const MinecraftInstancePtr instance; const QDir gameRoot; const QString output; const MMCZip::FilterFunction filter; diff --git a/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp b/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp index 8df6405ad..c1333963e 100644 --- a/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp +++ b/launcher/modplatform/modrinth/ModrinthPackExportTask.cpp @@ -31,7 +31,6 @@ #include "modplatform/helpers/HashUtils.h" #include "tasks/Task.h" -const QStringList ModrinthPackExportTask::PREFIXES({ "mods/", "coremods/", "resourcepacks/", "texturepacks/", "shaderpacks/" }); const QStringList ModrinthPackExportTask::FILE_EXTENSIONS({ "jar", "litemod", "zip" }); ModrinthPackExportTask::ModrinthPackExportTask(QString name, @@ -87,16 +86,22 @@ void ModrinthPackExportTask::collectFiles() void ModrinthPackExportTask::collectHashes() { + // TODO make this just use EnsureMetadataTask + setStatus(tr("Finding file hashes...")); + QStringList prefixes; + for (const auto& model : instance->resourceLists()) { - QCoreApplication::processEvents(); // TODO: maybe don't do this? + QCoreApplication::processEvents(); QEventLoop loop; connect(model.get(), &ModFolderModel::updateFinished, &loop, &QEventLoop::quit); model->update(); loop.exec(); + prefixes.append(gameRoot.relativeFilePath(model->dir().absolutePath()) + '/'); + for (const Resource* resource : model->allResources()) { QCoreApplication::processEvents(); @@ -163,7 +168,7 @@ void ModrinthPackExportTask::collectHashes() continue; // require sensible file types - if (!std::any_of(PREFIXES.begin(), PREFIXES.end(), [&relative](const QString& prefix) { return relative.startsWith(prefix); })) + if (!std::any_of(prefixes.begin(), prefixes.end(), [&relative](const QString& prefix) { return relative.startsWith(prefix); })) continue; if (!std::any_of(FILE_EXTENSIONS.begin(), FILE_EXTENSIONS.end(), [&relative](const QString& extension) { return relative.endsWith('.' + extension) || relative.endsWith('.' + extension + ".disabled"); diff --git a/launcher/modplatform/modrinth/ModrinthPackExportTask.h b/launcher/modplatform/modrinth/ModrinthPackExportTask.h index 14bc36009..d5dc08678 100644 --- a/launcher/modplatform/modrinth/ModrinthPackExportTask.h +++ b/launcher/modplatform/modrinth/ModrinthPackExportTask.h @@ -48,7 +48,6 @@ class ModrinthPackExportTask : public Task { Metadata::ModSide side; }; - static const QStringList PREFIXES; static const QStringList FILE_EXTENSIONS; // inputs