summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-05-28 09:36:58 +0200
committerPetr Mrázek <peterix@gmail.com>2015-05-28 09:36:58 +0200
commita98e1df10cef774672e919497c43373e86c77f97 (patch)
treec29b1c33fff9a4ee4281a8ca7f0c1755dbb76bcc
parentf9e186ab704401416832d723c2e70a0f7a7435b3 (diff)
downloadMultiMC-a98e1df10cef774672e919497c43373e86c77f97.tar
MultiMC-a98e1df10cef774672e919497c43373e86c77f97.tar.gz
MultiMC-a98e1df10cef774672e919497c43373e86c77f97.tar.lz
MultiMC-a98e1df10cef774672e919497c43373e86c77f97.tar.xz
MultiMC-a98e1df10cef774672e919497c43373e86c77f97.zip
GH-1011 fetch missing versions when customizing/reverting Minecraft patches
-rw-r--r--application/pages/VersionPage.cpp30
-rw-r--r--application/pages/VersionPage.h1
-rw-r--r--logic/minecraft/MinecraftVersionList.cpp1
-rw-r--r--logic/minecraft/OneSixProfileStrategy.cpp22
4 files changed, 41 insertions, 13 deletions
diff --git a/application/pages/VersionPage.cpp b/application/pages/VersionPage.cpp
index bb310eea..831408f6 100644
--- a/application/pages/VersionPage.cpp
+++ b/application/pages/VersionPage.cpp
@@ -44,6 +44,8 @@
#include "liteloader/LiteLoaderInstaller.h"
#include "auth/MojangAccountList.h"
#include "minecraft/Mod.h"
+#include <minecraft/MinecraftVersion.h>
+#include <minecraft/MinecraftVersionList.h>
#include "icons/IconList.h"
@@ -224,16 +226,21 @@ void VersionPage::on_changeVersionBtn_clicked()
reloadMinecraftProfile();
}
m_inst->setIntendedVersionId(vselect.selectedVersion()->descriptor());
+ doUpdate();
+}
+int VersionPage::doUpdate()
+{
auto updateTask = m_inst->doUpdate();
if (!updateTask)
{
- return;
+ return 1;
}
ProgressDialog tDialog(this);
connect(updateTask.get(), SIGNAL(failed(QString)), SLOT(onGameUpdateError(QString)));
- tDialog.exec(updateTask.get());
+ int ret = tDialog.exec(updateTask.get());
updateButtons();
+ return ret;
}
void VersionPage::on_forgeBtn_clicked()
@@ -353,6 +360,16 @@ void VersionPage::on_customizeBtn_clicked()
{
return;
}
+ //HACK HACK remove, this is dumb
+ auto patch = m_version->versionPatch(version);
+ auto mc = std::dynamic_pointer_cast<MinecraftVersion>(patch);
+ if(mc && mc->needsUpdate())
+ {
+ if(!doUpdate())
+ {
+ return;
+ }
+ }
if(!m_version->customize(version))
{
// TODO: some error box here
@@ -384,6 +401,15 @@ void VersionPage::on_revertBtn_clicked()
{
return;
}
+ auto mcraw = MMC->minecraftlist()->findVersion(m_inst->intendedVersionId());
+ auto mc = std::dynamic_pointer_cast<MinecraftVersion>(mcraw);
+ if(mc && mc->needsUpdate())
+ {
+ if(!doUpdate())
+ {
+ return;
+ }
+ }
if(!m_version->revert(version))
{
// TODO: some error box here
diff --git a/application/pages/VersionPage.h b/application/pages/VersionPage.h
index f3b49544..49837f80 100644
--- a/application/pages/VersionPage.h
+++ b/application/pages/VersionPage.h
@@ -69,6 +69,7 @@ private:
int currentRow();
void updateButtons(int row = -1);
void preselect(int row = 0);
+ int doUpdate();
protected:
/// FIXME: this shouldn't be necessary!
diff --git a/logic/minecraft/MinecraftVersionList.cpp b/logic/minecraft/MinecraftVersionList.cpp
index 90ef5ebe..c20534e9 100644
--- a/logic/minecraft/MinecraftVersionList.cpp
+++ b/logic/minecraft/MinecraftVersionList.cpp
@@ -599,6 +599,7 @@ void MinecraftVersionList::saveCachedList()
QJsonObject entryObj;
entryObj.insert("id", mcversion->descriptor());
+ entryObj.insert("version", mcversion->descriptor());
entryObj.insert("time", mcversion->m_updateTimeString);
entryObj.insert("releaseTime", mcversion->m_releaseTimeString);
entryObj.insert("type", mcversion->m_type);
diff --git a/logic/minecraft/OneSixProfileStrategy.cpp b/logic/minecraft/OneSixProfileStrategy.cpp
index b7ba2bf6..cd8fd976 100644
--- a/logic/minecraft/OneSixProfileStrategy.cpp
+++ b/logic/minecraft/OneSixProfileStrategy.cpp
@@ -275,19 +275,19 @@ bool OneSixProfileStrategy::customizePatch(ProfilePatchPtr patch)
{
return false;
}
- QSaveFile jsonFile(filename);
- if(!jsonFile.open(QIODevice::WriteOnly))
- {
- return false;
- }
- auto document = patch->toJson(true);
- jsonFile.write(document.toJson());
- if(!jsonFile.commit())
- {
- return false;
- }
try
{
+ QSaveFile jsonFile(filename);
+ if(!jsonFile.open(QIODevice::WriteOnly))
+ {
+ return false;
+ }
+ auto document = patch->toJson(true);
+ jsonFile.write(document.toJson());
+ if(!jsonFile.commit())
+ {
+ return false;
+ }
load();
}
catch (VersionIncomplete &error)