diff options
author | Petr Mrázek <peterix@gmail.com> | 2021-07-25 19:11:59 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2021-07-25 19:50:44 +0200 |
commit | 20b9f2b42a3b58b6081af271774fbcc34025dccb (patch) | |
tree | 064fa59facb3357139b47bd4e60bfc8edb35ca11 /api/logic/minecraft/update | |
parent | dd133680858351e3e07690e286882327a4f42ba5 (diff) | |
download | PrismLauncher-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.cpp | 107 | ||||
-rw-r--r-- | api/logic/minecraft/update/AssetUpdateTask.h | 28 | ||||
-rw-r--r-- | api/logic/minecraft/update/FMLLibrariesTask.cpp | 131 | ||||
-rw-r--r-- | api/logic/minecraft/update/FMLLibrariesTask.h | 31 | ||||
-rw-r--r-- | api/logic/minecraft/update/FoldersTask.cpp | 21 | ||||
-rw-r--r-- | api/logic/minecraft/update/FoldersTask.h | 17 | ||||
-rw-r--r-- | api/logic/minecraft/update/LibrariesTask.cpp | 90 | ||||
-rw-r--r-- | api/logic/minecraft/update/LibrariesTask.h | 26 |
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; -}; |