diff options
author | Petr Mrázek <peterix@gmail.com> | 2017-04-24 01:30:51 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2017-04-24 01:30:51 +0200 |
commit | 4fa3e2a7144c532af62520c9da53f423d6f002ca (patch) | |
tree | 22af01b94f28c7f6bd56e42d399b1c76887a2fc5 /api/logic/minecraft | |
parent | d25a7ad3a627dfc15067adb1e2c178faafc5bd3e (diff) | |
download | MultiMC-4fa3e2a7144c532af62520c9da53f423d6f002ca.tar MultiMC-4fa3e2a7144c532af62520c9da53f423d6f002ca.tar.gz MultiMC-4fa3e2a7144c532af62520c9da53f423d6f002ca.tar.lz MultiMC-4fa3e2a7144c532af62520c9da53f423d6f002ca.tar.xz MultiMC-4fa3e2a7144c532af62520c9da53f423d6f002ca.zip |
GH-1856 Fix metadata version and list loading
Shouldn't crash anymore, shouldn't overwrite data in some bad way anymore either.
Diffstat (limited to 'api/logic/minecraft')
-rw-r--r-- | api/logic/minecraft/MinecraftProfile.cpp | 6 | ||||
-rw-r--r-- | api/logic/minecraft/MinecraftProfile.h | 3 | ||||
-rw-r--r-- | api/logic/minecraft/ProfilePatch.cpp | 5 | ||||
-rw-r--r-- | api/logic/minecraft/ProfilePatch.h | 1 | ||||
-rw-r--r-- | api/logic/minecraft/onesix/OneSixUpdate.cpp | 33 |
5 files changed, 29 insertions, 19 deletions
diff --git a/api/logic/minecraft/MinecraftProfile.cpp b/api/logic/minecraft/MinecraftProfile.cpp index e7e88efd..4c1ab818 100644 --- a/api/logic/minecraft/MinecraftProfile.cpp +++ b/api/logic/minecraft/MinecraftProfile.cpp @@ -385,6 +385,7 @@ bool MinecraftProfile::reapplyPatches() clear(); for(auto file: m_patches) { + qDebug() << "Applying" << file->getID() << (file->getProblemSeverity() == ProblemSeverity::Error ? "ERROR" : "GOOD"); file->applyTo(this); } } @@ -663,11 +664,6 @@ void MinecraftProfile::installJarMods(QStringList selectedFiles) m_strategy->installJarMods(selectedFiles); } -void MinecraftProfile::installVersion(BaseVersionPtr version) -{ - // TODO: implement -} - /* * TODO: get rid of this. Get rid of all order numbers. */ diff --git a/api/logic/minecraft/MinecraftProfile.h b/api/logic/minecraft/MinecraftProfile.h index 8cb5331f..192c77f9 100644 --- a/api/logic/minecraft/MinecraftProfile.h +++ b/api/logic/minecraft/MinecraftProfile.h @@ -58,9 +58,6 @@ public: /// install more jar mods void installJarMods(QStringList selectedFiles); - /// install more jar mods - void installVersion(BaseVersionPtr version); - /// DEPRECATED, remove ASAP int getFreeOrderNumber(); diff --git a/api/logic/minecraft/ProfilePatch.cpp b/api/logic/minecraft/ProfilePatch.cpp index 3ca2ac68..a2605278 100644 --- a/api/logic/minecraft/ProfilePatch.cpp +++ b/api/logic/minecraft/ProfilePatch.cpp @@ -17,6 +17,11 @@ ProfilePatch::ProfilePatch(std::shared_ptr<VersionFile> file, const QString& fil { } +std::shared_ptr<Meta::Version> ProfilePatch::getMeta() +{ + return m_metaVersion; +} + void ProfilePatch::applyTo(MinecraftProfile* profile) { auto vfile = getVersionFile(); diff --git a/api/logic/minecraft/ProfilePatch.h b/api/logic/minecraft/ProfilePatch.h index 53f4c5e4..59171a0a 100644 --- a/api/logic/minecraft/ProfilePatch.h +++ b/api/logic/minecraft/ProfilePatch.h @@ -36,6 +36,7 @@ public: virtual QString getID(); virtual QString getName(); virtual QString getVersion(); + virtual std::shared_ptr<Meta::Version> getMeta(); virtual QDateTime getReleaseDateTime(); virtual QString getFilename(); diff --git a/api/logic/minecraft/onesix/OneSixUpdate.cpp b/api/logic/minecraft/onesix/OneSixUpdate.cpp index bf234189..e0027032 100644 --- a/api/logic/minecraft/onesix/OneSixUpdate.cpp +++ b/api/logic/minecraft/onesix/OneSixUpdate.cpp @@ -44,25 +44,36 @@ OneSixUpdate::OneSixUpdate(OneSixInstance *inst, QObject *parent) : Task(parent) m_tasks.append(std::make_shared<FoldersTask>(m_inst)); } - // add a version update task, if necessary + // add metadata update tasks, if necessary { /* * FIXME: there are some corner cases here that remain unhandled: * what if local load succeeds but remote fails? The version is still usable... + * We should not rely on the remote to be there... and prefer local files if it does not respond. */ - // FIXME: derive this from the actual list of version patches... - auto loadVersion = [&](const QString & uid, const QString & version) + qDebug() << "Updating patches..."; + auto profile = m_inst->getMinecraftProfile(); + m_inst->reloadProfile(); + for(int i = 0; i < profile->rowCount(); i++) { - auto obj = ENV.metadataIndex()->get(uid, version); - obj->load(); - auto task = obj->getCurrentTask(); - if(task) + auto patch = profile->versionPatch(i); + auto id = patch->getID(); + auto metadata = patch->getMeta(); + if(metadata) { - m_tasks.append(task.unwrap()); + metadata->load(); + auto task = metadata->getCurrentTask(); + if(task) + { + qDebug() << "Loading remote meta patch" << id; + m_tasks.append(task.unwrap()); + } } - }; - loadVersion("org.lwjgl", m_inst->getComponentVersion("org.lwjgl")); - loadVersion("net.minecraft", m_inst->getComponentVersion("net.minecraft")); + else + { + qDebug() << "Ignoring local patch" << id; + } + } } // libraries download |