NOISSUE hack it together enough to get launching back

Meta index will now always return valid objects.
They just might never load if they don't exist on the server.
This commit is contained in:
Petr Mrázek
2017-03-19 02:13:49 +01:00
parent e46aba9da5
commit 2660418d58
12 changed files with 162 additions and 58 deletions

View File

@ -12,6 +12,8 @@
#include <QJsonArray>
#include <QSaveFile>
#include <QResource>
#include <meta/Index.h>
#include <meta/Version.h>
OneSixProfileStrategy::OneSixProfileStrategy(OneSixInstance* instance)
{
@ -98,7 +100,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches()
}
else
{
auto mcversion = ENV.getVersion("net.minecraft", m_instance->intendedVersionId());
auto mcversion = ENV.metadataIndex()->get("net.minecraft", m_instance->intendedVersionId());
minecraftPatch = std::dynamic_pointer_cast<ProfilePatch>(mcversion);
}
if (!minecraftPatch)
@ -121,7 +123,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches()
}
else
{
auto lwjglversion = ENV.getVersion("org.lwjgl", "2.9.1" /*m_instance->intendedVersionId()*/);
auto lwjglversion = ENV.metadataIndex()->get("org.lwjgl", "2.9.1");
lwjglPatch = std::dynamic_pointer_cast<ProfilePatch>(lwjglversion);
}
if (!lwjglPatch)

View File

@ -34,6 +34,9 @@
#include "update/FMLLibrariesTask.h"
#include "update/AssetUpdateTask.h"
#include <meta/Index.h>
#include <meta/Version.h>
OneSixUpdate::OneSixUpdate(OneSixInstance *inst, QObject *parent) : Task(parent), m_inst(inst)
{
// create folders
@ -44,30 +47,22 @@ OneSixUpdate::OneSixUpdate(OneSixInstance *inst, QObject *parent) : Task(parent)
// add a version update task, if necessary
{
/*
auto list = std::dynamic_pointer_cast<MinecraftVersionList>(ENV.getVersionList("net.minecraft"));
auto version = std::dynamic_pointer_cast<MinecraftVersion>(list->findVersion(m_inst->intendedVersionId()));
if (version == nullptr)
* FIXME: there are some corner cases here that remain unhandled:
* what if local load succeeds but remote fails? The version is still usable...
*/
// FIXME: derive this from the actual list of version patches...
auto loadVersion = [&](const QString & uid, const QString & version)
{
// don't do anything if it was invalid
m_preFailure = tr("The specified Minecraft version is invalid. Choose a different one.");
}
else if (m_inst->providesVersionFile() || !version->needsUpdate())
{
qDebug() << "Instance either provides a version file or doesn't need an update.";
}
else
{
auto versionUpdateTask = list->createUpdateTask(m_inst->intendedVersionId());
if (!versionUpdateTask)
auto obj = ENV.metadataIndex()->get(uid, version);
obj->load();
auto task = obj->getCurrentTask();
if(task)
{
qDebug() << "Didn't spawn an update task.";
m_tasks.append(task.unwrap());
}
else
{
m_tasks.append(versionUpdateTask);
}
}
*/
};
loadVersion("org.lwjgl", "2.9.1");
loadVersion("net.minecraft", m_inst->intendedVersionId());
}
// libraries download
@ -118,11 +113,20 @@ void OneSixUpdate::next()
return;
}
auto task = m_tasks[m_currentTask];
// if the task is already finished by the time we look at it, skip it
if(task->isFinished())
{
next();
}
connect(task.get(), &Task::succeeded, this, &OneSixUpdate::subtaskSucceeded);
connect(task.get(), &Task::failed, this, &OneSixUpdate::subtaskFailed);
connect(task.get(), &Task::progress, this, &OneSixUpdate::progress);
connect(task.get(), &Task::status, this, &OneSixUpdate::setStatus);
task->start();
// if the task is already running, do not start it again
if(!task->isRunning())
{
task->start();
}
}
void OneSixUpdate::subtaskSucceeded()