diff options
Diffstat (limited to 'api/logic/minecraft/update')
-rw-r--r-- | api/logic/minecraft/update/AssetUpdateTask.cpp | 124 | ||||
-rw-r--r-- | api/logic/minecraft/update/AssetUpdateTask.h | 22 | ||||
-rw-r--r-- | api/logic/minecraft/update/FMLLibrariesTask.cpp | 190 | ||||
-rw-r--r-- | api/logic/minecraft/update/FMLLibrariesTask.h | 22 | ||||
-rw-r--r-- | api/logic/minecraft/update/FoldersTask.cpp | 20 | ||||
-rw-r--r-- | api/logic/minecraft/update/FoldersTask.h | 10 | ||||
-rw-r--r-- | api/logic/minecraft/update/LibrariesTask.cpp | 124 | ||||
-rw-r--r-- | api/logic/minecraft/update/LibrariesTask.h | 18 |
8 files changed, 265 insertions, 265 deletions
diff --git a/api/logic/minecraft/update/AssetUpdateTask.cpp b/api/logic/minecraft/update/AssetUpdateTask.cpp index 905c5b3d..1661822d 100644 --- a/api/logic/minecraft/update/AssetUpdateTask.cpp +++ b/api/logic/minecraft/update/AssetUpdateTask.cpp @@ -7,7 +7,7 @@ AssetUpdateTask::AssetUpdateTask(MinecraftInstance * inst) { - m_inst = inst; + m_inst = inst; } AssetUpdateTask::~AssetUpdateTask() @@ -16,92 +16,92 @@ AssetUpdateTask::~AssetUpdateTask() void AssetUpdateTask::executeTask() { - setStatus(tr("Updating assets index...")); - auto components = m_inst->getComponentList(); - 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())); + setStatus(tr("Updating assets index...")); + auto components = m_inst->getComponentList(); + 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); + 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); + 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); + 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(); + qDebug() << m_inst->name() << ": Starting asset index download"; + downloadJob->start(); } bool AssetUpdateTask::canAbort() const { - return true; + return true; } void AssetUpdateTask::assetIndexFinished() { - AssetsIndex index; - qDebug() << m_inst->name() << ": Finished asset index download"; + AssetsIndex index; + qDebug() << m_inst->name() << ": Finished asset index download"; - auto components = m_inst->getComponentList(); - auto profile = components->getProfile(); - auto assets = profile->getMinecraftAssets(); + auto components = m_inst->getComponentList(); + 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!")); - } + 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(); + 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)); + 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)); + emitFailed(tr("Failed to download assets:\n%1").arg(reason)); } bool AssetUpdateTask::abort() { - if(downloadJob) - { - return downloadJob->abort(); - } - else - { - qWarning() << "Prematurely aborted FMLLibrariesTask"; - } - return true; + if(downloadJob) + { + return downloadJob->abort(); + } + else + { + qWarning() << "Prematurely aborted FMLLibrariesTask"; + } + return true; } diff --git a/api/logic/minecraft/update/AssetUpdateTask.h b/api/logic/minecraft/update/AssetUpdateTask.h index 870cede5..fdfa8f1c 100644 --- a/api/logic/minecraft/update/AssetUpdateTask.h +++ b/api/logic/minecraft/update/AssetUpdateTask.h @@ -5,24 +5,24 @@ class MinecraftInstance; class AssetUpdateTask : public Task { - Q_OBJECT + Q_OBJECT public: - AssetUpdateTask(MinecraftInstance * inst); - virtual ~AssetUpdateTask(); + AssetUpdateTask(MinecraftInstance * inst); + virtual ~AssetUpdateTask(); - void executeTask() override; + void executeTask() override; - bool canAbort() const override; + bool canAbort() const override; private slots: - void assetIndexFinished(); - void assetIndexFailed(QString reason); - void assetsFailed(QString reason); + void assetIndexFinished(); + void assetIndexFailed(QString reason); + void assetsFailed(QString reason); public slots: - bool abort() override; + bool abort() override; private: - MinecraftInstance *m_inst; - NetJobPtr downloadJob; + MinecraftInstance *m_inst; + NetJobPtr downloadJob; }; diff --git a/api/logic/minecraft/update/FMLLibrariesTask.cpp b/api/logic/minecraft/update/FMLLibrariesTask.cpp index 1bd339e4..5b4975ab 100644 --- a/api/logic/minecraft/update/FMLLibrariesTask.cpp +++ b/api/logic/minecraft/update/FMLLibrariesTask.cpp @@ -7,125 +7,125 @@ FMLLibrariesTask::FMLLibrariesTask(MinecraftInstance * inst) { - m_inst = inst; + m_inst = inst; } void FMLLibrariesTask::executeTask() { - // Get the mod list - MinecraftInstance *inst = (MinecraftInstance *)m_inst; - auto components = inst->getComponentList(); - auto profile = components->getProfile(); + // Get the mod list + MinecraftInstance *inst = (MinecraftInstance *)m_inst; + auto components = inst->getComponentList(); + auto profile = components->getProfile(); - if (!profile->hasTrait("legacyFML")) - { - emitSucceeded(); - return; - } + if (!profile->hasTrait("legacyFML")) + { + emitSucceeded(); + return; + } - QString version = components->getComponentVersion("net.minecraft"); - auto &fmlLibsMapping = g_VersionFilterData.fmlLibsMapping; - if (!fmlLibsMapping.contains(version)) - { - emitSucceeded(); - return; - } + QString version = components->getComponentVersion("net.minecraft"); + auto &fmlLibsMapping = g_VersionFilterData.fmlLibsMapping; + if (!fmlLibsMapping.contains(version)) + { + emitSucceeded(); + return; + } - auto &libList = fmlLibsMapping[version]; + 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; - } + // 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); - } + // 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; - } + // 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 = lib.ours ? URLConstants::FMLLIBS_OUR_BASE_URL + lib.filename - : URLConstants::FMLLIBS_FORGE_BASE_URL + lib.filename; - dljob->addNetAction(Net::Download::makeCached(QUrl(urlString), entry)); - } + // 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 = lib.ours ? URLConstants::FMLLIBS_OUR_BASE_URL + lib.filename + : URLConstants::FMLLIBS_FORGE_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(); + 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; + 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(); + 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)); + 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; + 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 index f281890d..a1e70ed4 100644 --- a/api/logic/minecraft/update/FMLLibrariesTask.h +++ b/api/logic/minecraft/update/FMLLibrariesTask.h @@ -7,25 +7,25 @@ class MinecraftInstance; class FMLLibrariesTask : public Task { - Q_OBJECT + Q_OBJECT public: - FMLLibrariesTask(MinecraftInstance * inst); - virtual ~FMLLibrariesTask() {}; + FMLLibrariesTask(MinecraftInstance * inst); + virtual ~FMLLibrariesTask() {}; - void executeTask() override; + void executeTask() override; - bool canAbort() const override; + bool canAbort() const override; private slots: - void fmllibsFinished(); - void fmllibsFailed(QString reason); + void fmllibsFinished(); + void fmllibsFailed(QString reason); public slots: - bool abort() override; + bool abort() override; private: - MinecraftInstance *m_inst; - NetJobPtr downloadJob; - QList<FMLlib> fmlLibsToProcess; + MinecraftInstance *m_inst; + NetJobPtr downloadJob; + QList<FMLlib> fmlLibsToProcess; }; diff --git a/api/logic/minecraft/update/FoldersTask.cpp b/api/logic/minecraft/update/FoldersTask.cpp index 34e2292a..2073b14e 100644 --- a/api/logic/minecraft/update/FoldersTask.cpp +++ b/api/logic/minecraft/update/FoldersTask.cpp @@ -3,19 +3,19 @@ #include <QDir> FoldersTask::FoldersTask(MinecraftInstance * inst) - :Task() + :Task() { - m_inst = inst; + m_inst = inst; } void FoldersTask::executeTask() { - // Make directories - QDir mcDir(m_inst->minecraftRoot()); - if (!mcDir.exists() && !mcDir.mkpath(".")) - { - emitFailed(tr("Failed to create folder for minecraft binaries.")); - return; - } - emitSucceeded(); + // Make directories + QDir mcDir(m_inst->minecraftRoot()); + 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 index e0781ad8..f6ed5e6d 100644 --- a/api/logic/minecraft/update/FoldersTask.h +++ b/api/logic/minecraft/update/FoldersTask.h @@ -5,13 +5,13 @@ class MinecraftInstance; class FoldersTask : public Task { - Q_OBJECT + Q_OBJECT public: - FoldersTask(MinecraftInstance * inst); - virtual ~FoldersTask() {}; + FoldersTask(MinecraftInstance * inst); + virtual ~FoldersTask() {}; - void executeTask() override; + void executeTask() override; private: - MinecraftInstance *m_inst; + MinecraftInstance *m_inst; }; diff --git a/api/logic/minecraft/update/LibrariesTask.cpp b/api/logic/minecraft/update/LibrariesTask.cpp index 0bec61c1..6dcb149c 100644 --- a/api/logic/minecraft/update/LibrariesTask.cpp +++ b/api/logic/minecraft/update/LibrariesTask.cpp @@ -5,86 +5,86 @@ LibrariesTask::LibrariesTask(MinecraftInstance * inst) { - m_inst = 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; + 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->getComponentList(); - auto profile = components->getProfile(); + // Build a list of URLs that will need to be downloaded. + auto components = inst->getComponentList(); + auto profile = components->getProfile(); - auto job = new NetJob(tr("Libraries for instance %1").arg(inst->name())); - downloadJob.reset(job); + auto job = new NetJob(tr("Libraries for instance %1").arg(inst->name())); + downloadJob.reset(job); - auto metacache = ENV.metacache(); - QList<LibraryPtr> brokenLocalLibs; - QStringList failedFiles; - auto createJob = [&](const LibraryPtr & lib) - { - if(!lib) - { - emitFailed(tr("Null jar is specified in the metadata, aborting.")); - return; - } - auto dls = lib->getDownloads(currentSystem, metacache.get(), failedFiles, inst->getLocalLibraryPath()); - for(auto dl : dls) - { - downloadJob->addNetAction(dl); - } - }; - auto createJobs = [&](const QList<LibraryPtr> & libs) - { - for (auto lib : libs) - { - createJob(lib); - } - }; - createJobs(profile->getLibraries()); - createJobs(profile->getNativeLibraries()); - createJobs(profile->getJarMods()); - createJob(profile->getMainJar()); + auto metacache = ENV.metacache(); + QList<LibraryPtr> brokenLocalLibs; + QStringList failedFiles; + auto createJob = [&](const LibraryPtr & lib) + { + if(!lib) + { + emitFailed(tr("Null jar is specified in the metadata, aborting.")); + return; + } + auto dls = lib->getDownloads(currentSystem, metacache.get(), failedFiles, inst->getLocalLibraryPath()); + for(auto dl : dls) + { + downloadJob->addNetAction(dl); + } + }; + auto createJobs = [&](const QList<LibraryPtr> & libs) + { + for (auto lib : libs) + { + createJob(lib); + } + }; + createJobs(profile->getLibraries()); + createJobs(profile->getNativeLibraries()); + createJobs(profile->getJarMods()); + createJob(profile->getMainJar()); - // FIXME: this is never filled!!!! - if (!brokenLocalLibs.empty()) - { - downloadJob.reset(); - QString failed_all = failedFiles.join("\n"); - emitFailed(tr("Some libraries marked as 'local' are missing their jar " - "files:\n%1\n\nYou'll have to correct this problem manually. If this is " - "an externally tracked instance, make sure to run it at least once " - "outside of MultiMC.").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(); + // FIXME: this is never filled!!!! + if (!brokenLocalLibs.empty()) + { + downloadJob.reset(); + QString failed_all = failedFiles.join("\n"); + emitFailed(tr("Some libraries marked as 'local' are missing their jar " + "files:\n%1\n\nYou'll have to correct this problem manually. If this is " + "an externally tracked instance, make sure to run it at least once " + "outside of MultiMC.").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; + 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)); + 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; + 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 index cb9babc3..49f76932 100644 --- a/api/logic/minecraft/update/LibrariesTask.h +++ b/api/logic/minecraft/update/LibrariesTask.h @@ -5,22 +5,22 @@ class MinecraftInstance; class LibrariesTask : public Task { - Q_OBJECT + Q_OBJECT public: - LibrariesTask(MinecraftInstance * inst); - virtual ~LibrariesTask() {}; + LibrariesTask(MinecraftInstance * inst); + virtual ~LibrariesTask() {}; - void executeTask() override; + void executeTask() override; - bool canAbort() const override; + bool canAbort() const override; private slots: - void jarlibFailed(QString reason); + void jarlibFailed(QString reason); public slots: - bool abort() override; + bool abort() override; private: - MinecraftInstance *m_inst; - NetJobPtr downloadJob; + MinecraftInstance *m_inst; + NetJobPtr downloadJob; }; |