aboutsummaryrefslogtreecommitdiff
path: root/api/logic/minecraft/update
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2021-07-25 19:11:59 +0200
committerPetr Mrázek <peterix@gmail.com>2021-07-25 19:50:44 +0200
commit20b9f2b42a3b58b6081af271774fbcc34025dccb (patch)
tree064fa59facb3357139b47bd4e60bfc8edb35ca11 /api/logic/minecraft/update
parentdd133680858351e3e07690e286882327a4f42ba5 (diff)
downloadPrismLauncher-20b9f2b42a3b58b6081af271774fbcc34025dccb.tar.gz
PrismLauncher-20b9f2b42a3b58b6081af271774fbcc34025dccb.tar.bz2
PrismLauncher-20b9f2b42a3b58b6081af271774fbcc34025dccb.zip
NOISSUE Flatten gui and logic libraries into MultiMC
Diffstat (limited to 'api/logic/minecraft/update')
-rw-r--r--api/logic/minecraft/update/AssetUpdateTask.cpp107
-rw-r--r--api/logic/minecraft/update/AssetUpdateTask.h28
-rw-r--r--api/logic/minecraft/update/FMLLibrariesTask.cpp131
-rw-r--r--api/logic/minecraft/update/FMLLibrariesTask.h31
-rw-r--r--api/logic/minecraft/update/FoldersTask.cpp21
-rw-r--r--api/logic/minecraft/update/FoldersTask.h17
-rw-r--r--api/logic/minecraft/update/LibrariesTask.cpp90
-rw-r--r--api/logic/minecraft/update/LibrariesTask.h26
8 files changed, 0 insertions, 451 deletions
diff --git a/api/logic/minecraft/update/AssetUpdateTask.cpp b/api/logic/minecraft/update/AssetUpdateTask.cpp
deleted file mode 100644
index e26ab4ef..00000000
--- a/api/logic/minecraft/update/AssetUpdateTask.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-#include "Env.h"
-#include "AssetUpdateTask.h"
-#include "minecraft/MinecraftInstance.h"
-#include "minecraft/PackProfile.h"
-#include "net/ChecksumValidator.h"
-#include "minecraft/AssetsUtils.h"
-
-AssetUpdateTask::AssetUpdateTask(MinecraftInstance * inst)
-{
- m_inst = inst;
-}
-
-AssetUpdateTask::~AssetUpdateTask()
-{
-}
-
-void AssetUpdateTask::executeTask()
-{
- setStatus(tr("Updating assets index..."));
- auto components = m_inst->getPackProfile();
- auto profile = components->getProfile();
- auto assets = profile->getMinecraftAssets();
- QUrl indexUrl = assets->url;
- QString localPath = assets->id + ".json";
- auto job = new NetJob(tr("Asset index for %1").arg(m_inst->name()));
-
- auto metacache = ENV.metacache();
- auto entry = metacache->resolveEntry("asset_indexes", localPath);
- entry->setStale(true);
- auto hexSha1 = assets->sha1.toLatin1();
- qDebug() << "Asset index SHA1:" << hexSha1;
- auto dl = Net::Download::makeCached(indexUrl, entry);
- auto rawSha1 = QByteArray::fromHex(assets->sha1.toLatin1());
- dl->addValidator(new Net::ChecksumValidator(QCryptographicHash::Sha1, rawSha1));
- job->addNetAction(dl);
-
- downloadJob.reset(job);
-
- connect(downloadJob.get(), &NetJob::succeeded, this, &AssetUpdateTask::assetIndexFinished);
- connect(downloadJob.get(), &NetJob::failed, this, &AssetUpdateTask::assetIndexFailed);
- connect(downloadJob.get(), &NetJob::progress, this, &AssetUpdateTask::progress);
-
- qDebug() << m_inst->name() << ": Starting asset index download";
- downloadJob->start();
-}
-
-bool AssetUpdateTask::canAbort() const
-{
- return true;
-}
-
-void AssetUpdateTask::assetIndexFinished()
-{
- AssetsIndex index;
- qDebug() << m_inst->name() << ": Finished asset index download";
-
- auto components = m_inst->getPackProfile();
- auto profile = components->getProfile();
- auto assets = profile->getMinecraftAssets();
-
- QString asset_fname = "assets/indexes/" + assets->id + ".json";
- // FIXME: this looks like a job for a generic validator based on json schema?
- if (!AssetsUtils::loadAssetsIndexJson(assets->id, asset_fname, index))
- {
- auto metacache = ENV.metacache();
- auto entry = metacache->resolveEntry("asset_indexes", assets->id + ".json");
- metacache->evictEntry(entry);
- emitFailed(tr("Failed to read the assets index!"));
- }
-
- auto job = index.getDownloadJob();
- if(job)
- {
- setStatus(tr("Getting the assets files from Mojang..."));
- downloadJob = job;
- connect(downloadJob.get(), &NetJob::succeeded, this, &AssetUpdateTask::emitSucceeded);
- connect(downloadJob.get(), &NetJob::failed, this, &AssetUpdateTask::assetsFailed);
- connect(downloadJob.get(), &NetJob::progress, this, &AssetUpdateTask::progress);
- downloadJob->start();
- return;
- }
- emitSucceeded();
-}
-
-void AssetUpdateTask::assetIndexFailed(QString reason)
-{
- qDebug() << m_inst->name() << ": Failed asset index download";
- emitFailed(tr("Failed to download the assets index:\n%1").arg(reason));
-}
-
-void AssetUpdateTask::assetsFailed(QString reason)
-{
- emitFailed(tr("Failed to download assets:\n%1").arg(reason));
-}
-
-bool AssetUpdateTask::abort()
-{
- if(downloadJob)
- {
- return downloadJob->abort();
- }
- else
- {
- qWarning() << "Prematurely aborted AssetUpdateTask";
- }
- return true;
-}
diff --git a/api/logic/minecraft/update/AssetUpdateTask.h b/api/logic/minecraft/update/AssetUpdateTask.h
deleted file mode 100644
index fdfa8f1c..00000000
--- a/api/logic/minecraft/update/AssetUpdateTask.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-#include "tasks/Task.h"
-#include "net/NetJob.h"
-class MinecraftInstance;
-
-class AssetUpdateTask : public Task
-{
- Q_OBJECT
-public:
- AssetUpdateTask(MinecraftInstance * inst);
- virtual ~AssetUpdateTask();
-
- void executeTask() override;
-
- bool canAbort() const override;
-
-private slots:
- void assetIndexFinished();
- void assetIndexFailed(QString reason);
- void assetsFailed(QString reason);
-
-public slots:
- bool abort() override;
-
-private:
- MinecraftInstance *m_inst;
- NetJobPtr downloadJob;
-};
diff --git a/api/logic/minecraft/update/FMLLibrariesTask.cpp b/api/logic/minecraft/update/FMLLibrariesTask.cpp
deleted file mode 100644
index a05a7c2a..00000000
--- a/api/logic/minecraft/update/FMLLibrariesTask.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "Env.h"
-#include <FileSystem.h>
-#include <minecraft/VersionFilterData.h>
-#include "FMLLibrariesTask.h"
-#include "minecraft/MinecraftInstance.h"
-#include "minecraft/PackProfile.h"
-#include "BuildConfig.h"
-
-FMLLibrariesTask::FMLLibrariesTask(MinecraftInstance * inst)
-{
- m_inst = inst;
-}
-void FMLLibrariesTask::executeTask()
-{
- // Get the mod list
- MinecraftInstance *inst = (MinecraftInstance *)m_inst;
- auto components = inst->getPackProfile();
- auto profile = components->getProfile();
-
- if (!profile->hasTrait("legacyFML"))
- {
- emitSucceeded();
- return;
- }
-
- QString version = components->getComponentVersion("net.minecraft");
- auto &fmlLibsMapping = g_VersionFilterData.fmlLibsMapping;
- if (!fmlLibsMapping.contains(version))
- {
- emitSucceeded();
- return;
- }
-
- auto &libList = fmlLibsMapping[version];
-
- // determine if we need some libs for FML or forge
- setStatus(tr("Checking for FML libraries..."));
- if(!components->getComponent("net.minecraftforge"))
- {
- emitSucceeded();
- return;
- }
-
- // now check the lib folder inside the instance for files.
- for (auto &lib : libList)
- {
- QFileInfo libInfo(FS::PathCombine(inst->libDir(), lib.filename));
- if (libInfo.exists())
- continue;
- fmlLibsToProcess.append(lib);
- }
-
- // if everything is in place, there's nothing to do here...
- if (fmlLibsToProcess.isEmpty())
- {
- emitSucceeded();
- return;
- }
-
- // download missing libs to our place
- setStatus(tr("Dowloading FML libraries..."));
- auto dljob = new NetJob("FML libraries");
- auto metacache = ENV.metacache();
- for (auto &lib : fmlLibsToProcess)
- {
- auto entry = metacache->resolveEntry("fmllibs", lib.filename);
- QString urlString = BuildConfig.FMLLIBS_BASE_URL + lib.filename;
- dljob->addNetAction(Net::Download::makeCached(QUrl(urlString), entry));
- }
-
- connect(dljob, &NetJob::succeeded, this, &FMLLibrariesTask::fmllibsFinished);
- connect(dljob, &NetJob::failed, this, &FMLLibrariesTask::fmllibsFailed);
- connect(dljob, &NetJob::progress, this, &FMLLibrariesTask::progress);
- downloadJob.reset(dljob);
- downloadJob->start();
-}
-
-bool FMLLibrariesTask::canAbort() const
-{
- return true;
-}
-
-void FMLLibrariesTask::fmllibsFinished()
-{
- downloadJob.reset();
- if (!fmlLibsToProcess.isEmpty())
- {
- setStatus(tr("Copying FML libraries into the instance..."));
- MinecraftInstance *inst = (MinecraftInstance *)m_inst;
- auto metacache = ENV.metacache();
- int index = 0;
- for (auto &lib : fmlLibsToProcess)
- {
- progress(index, fmlLibsToProcess.size());
- auto entry = metacache->resolveEntry("fmllibs", lib.filename);
- auto path = FS::PathCombine(inst->libDir(), lib.filename);
- if (!FS::ensureFilePathExists(path))
- {
- emitFailed(tr("Failed creating FML library folder inside the instance."));
- return;
- }
- if (!QFile::copy(entry->getFullPath(), FS::PathCombine(inst->libDir(), lib.filename)))
- {
- emitFailed(tr("Failed copying Forge/FML library: %1.").arg(lib.filename));
- return;
- }
- index++;
- }
- progress(index, fmlLibsToProcess.size());
- }
- emitSucceeded();
-}
-void FMLLibrariesTask::fmllibsFailed(QString reason)
-{
- QStringList failed = downloadJob->getFailedFiles();
- QString failed_all = failed.join("\n");
- emitFailed(tr("Failed to download the following files:\n%1\n\nReason:%2\nPlease try again.").arg(failed_all, reason));
-}
-
-bool FMLLibrariesTask::abort()
-{
- if(downloadJob)
- {
- return downloadJob->abort();
- }
- else
- {
- qWarning() << "Prematurely aborted FMLLibrariesTask";
- }
- return true;
-}
diff --git a/api/logic/minecraft/update/FMLLibrariesTask.h b/api/logic/minecraft/update/FMLLibrariesTask.h
deleted file mode 100644
index a1e70ed4..00000000
--- a/api/logic/minecraft/update/FMLLibrariesTask.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#pragma once
-#include "tasks/Task.h"
-#include "net/NetJob.h"
-#include "minecraft/VersionFilterData.h"
-
-class MinecraftInstance;
-
-class FMLLibrariesTask : public Task
-{
- Q_OBJECT
-public:
- FMLLibrariesTask(MinecraftInstance * inst);
- virtual ~FMLLibrariesTask() {};
-
- void executeTask() override;
-
- bool canAbort() const override;
-
-private slots:
- void fmllibsFinished();
- void fmllibsFailed(QString reason);
-
-public slots:
- bool abort() override;
-
-private:
- MinecraftInstance *m_inst;
- NetJobPtr downloadJob;
- QList<FMLlib> fmlLibsToProcess;
-};
-
diff --git a/api/logic/minecraft/update/FoldersTask.cpp b/api/logic/minecraft/update/FoldersTask.cpp
deleted file mode 100644
index e2b1bb48..00000000
--- a/api/logic/minecraft/update/FoldersTask.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "FoldersTask.h"
-#include "minecraft/MinecraftInstance.h"
-#include <QDir>
-
-FoldersTask::FoldersTask(MinecraftInstance * inst)
- :Task()
-{
- m_inst = inst;
-}
-
-void FoldersTask::executeTask()
-{
- // Make directories
- QDir mcDir(m_inst->gameRoot());
- if (!mcDir.exists() && !mcDir.mkpath("."))
- {
- emitFailed(tr("Failed to create folder for minecraft binaries."));
- return;
- }
- emitSucceeded();
-}
diff --git a/api/logic/minecraft/update/FoldersTask.h b/api/logic/minecraft/update/FoldersTask.h
deleted file mode 100644
index f6ed5e6d..00000000
--- a/api/logic/minecraft/update/FoldersTask.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#include "tasks/Task.h"
-
-class MinecraftInstance;
-class FoldersTask : public Task
-{
- Q_OBJECT
-public:
- FoldersTask(MinecraftInstance * inst);
- virtual ~FoldersTask() {};
-
- void executeTask() override;
-private:
- MinecraftInstance *m_inst;
-};
-
diff --git a/api/logic/minecraft/update/LibrariesTask.cpp b/api/logic/minecraft/update/LibrariesTask.cpp
deleted file mode 100644
index 7f66a651..00000000
--- a/api/logic/minecraft/update/LibrariesTask.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-#include "Env.h"
-#include "LibrariesTask.h"
-#include "minecraft/MinecraftInstance.h"
-#include "minecraft/PackProfile.h"
-
-LibrariesTask::LibrariesTask(MinecraftInstance * inst)
-{
- m_inst = inst;
-}
-
-void LibrariesTask::executeTask()
-{
- setStatus(tr("Getting the library files from Mojang..."));
- qDebug() << m_inst->name() << ": downloading libraries";
- MinecraftInstance *inst = (MinecraftInstance *)m_inst;
-
- // Build a list of URLs that will need to be downloaded.
- auto components = inst->getPackProfile();
- auto profile = components->getProfile();
-
- auto job = new NetJob(tr("Libraries for instance %1").arg(inst->name()));
- downloadJob.reset(job);
-
- auto metacache = ENV.metacache();
-
- auto processArtifactPool = [&](const QList<LibraryPtr> & pool, QStringList & errors, const QString & localPath)
- {
- for (auto lib : pool)
- {
- if(!lib)
- {
- emitFailed(tr("Null jar is specified in the metadata, aborting."));
- return false;
- }
- auto dls = lib->getDownloads(currentSystem, metacache.get(), errors, localPath);
- for(auto dl : dls)
- {
- downloadJob->addNetAction(dl);
- }
- }
- return true;
- };
-
- QStringList failedLocalLibraries;
- QList<LibraryPtr> libArtifactPool;
- libArtifactPool.append(profile->getLibraries());
- libArtifactPool.append(profile->getNativeLibraries());
- libArtifactPool.append(profile->getMavenFiles());
- libArtifactPool.append(profile->getMainJar());
- processArtifactPool(libArtifactPool, failedLocalLibraries, inst->getLocalLibraryPath());
-
- QStringList failedLocalJarMods;
- processArtifactPool(profile->getJarMods(), failedLocalJarMods, inst->jarModsDir());
-
- if (!failedLocalJarMods.empty() || !failedLocalLibraries.empty())
- {
- downloadJob.reset();
- QString failed_all = (failedLocalLibraries + failedLocalJarMods).join("\n");
- emitFailed(tr("Some artifacts marked as 'local' are missing their files:\n%1\n\nYou need to either add the files, or removed the packages that require them.\nYou'll have to correct this problem manually.").arg(failed_all));
- return;
- }
-
- connect(downloadJob.get(), &NetJob::succeeded, this, &LibrariesTask::emitSucceeded);
- connect(downloadJob.get(), &NetJob::failed, this, &LibrariesTask::jarlibFailed);
- connect(downloadJob.get(), &NetJob::progress, this, &LibrariesTask::progress);
- downloadJob->start();
-}
-
-bool LibrariesTask::canAbort() const
-{
- return true;
-}
-
-void LibrariesTask::jarlibFailed(QString reason)
-{
- emitFailed(tr("Game update failed: it was impossible to fetch the required libraries.\nReason:\n%1").arg(reason));
-}
-
-bool LibrariesTask::abort()
-{
- if(downloadJob)
- {
- return downloadJob->abort();
- }
- else
- {
- qWarning() << "Prematurely aborted LibrariesTask";
- }
- return true;
-}
diff --git a/api/logic/minecraft/update/LibrariesTask.h b/api/logic/minecraft/update/LibrariesTask.h
deleted file mode 100644
index 49f76932..00000000
--- a/api/logic/minecraft/update/LibrariesTask.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#pragma once
-#include "tasks/Task.h"
-#include "net/NetJob.h"
-class MinecraftInstance;
-
-class LibrariesTask : public Task
-{
- Q_OBJECT
-public:
- LibrariesTask(MinecraftInstance * inst);
- virtual ~LibrariesTask() {};
-
- void executeTask() override;
-
- bool canAbort() const override;
-
-private slots:
- void jarlibFailed(QString reason);
-
-public slots:
- bool abort() override;
-
-private:
- MinecraftInstance *m_inst;
- NetJobPtr downloadJob;
-};