PrismLauncher/launcher/modplatform/modrinth/ModrinthInstanceCreationTask.h
Trial97 9f175a4a4d
refactor ModrinthCreationTask
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
2026-05-24 22:07:05 +03:00

73 lines
1.8 KiB
C++

#pragma once
#include <optional>
#include <QByteArray>
#include <QCryptographicHash>
#include <QQueue>
#include <QString>
#include <QUrl>
#include <QVector>
#include "BaseInstance.h"
#include "InstanceTask.h"
class Resource;
class ModrinthCreationTask final : public InstanceTask {
Q_OBJECT
struct File {
QString path;
QCryptographicHash::Algorithm hashAlgorithm;
QByteArray hash;
QQueue<QUrl> downloads;
bool required = true;
};
public:
ModrinthCreationTask(const QString& stagingPath,
SettingsObject* globalSettings,
QWidget* parent,
QString id,
QString versionId = {},
QString originalInstanceId = {})
: m_parent(parent), m_managedId(std::move(id)), m_managedVersionId(std::move(versionId))
{
setStagingPath(stagingPath);
setParentSettings(globalSettings);
m_originalInstanceId = std::move(originalInstanceId);
}
~ModrinthCreationTask() override;
bool abort() override;
void createInstance();
void executeTask() override;
private slots:
void finishInstall();
private:
bool parseManifest(const QString&, std::vector<File>&, bool setInternalData = true, bool showOptionalDialog = true);
void ensureMetaLoop();
void setManagedPack(BaseInstance* instance);
private:
QWidget* m_parent = nullptr;
QString m_minecraftVersion, m_fabricVersion, m_quiltVersion, m_forgeVersion, m_neoForgeVersion;
QString m_managedId, m_managedVersionId, m_managedName;
std::vector<File> m_files;
Task::Ptr m_task;
std::optional<BaseInstance*> m_oldInstance;
std::unique_ptr<MinecraftInstance> m_newInstance{};
QString m_rootPath = "minecraft";
QHash<QString, Resource*> m_resources;
};