mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2026-07-05 12:56:58 +03:00
73 lines
1.8 KiB
C++
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;
|
|
};
|