summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-05-31 19:59:07 +0200
committerPetr Mrázek <peterix@gmail.com>2015-05-31 20:00:15 +0200
commit99f248ecd40d7ebe79723b8a27ac188ff5c8d13b (patch)
tree118ecccd5a6930eccfbd6d4465cb2a0b75a6321e /logic
parentb9e06b5da0bdc3644bac37bfcc45e32d0bcc37a5 (diff)
downloadMultiMC-99f248ecd40d7ebe79723b8a27ac188ff5c8d13b.tar
MultiMC-99f248ecd40d7ebe79723b8a27ac188ff5c8d13b.tar.gz
MultiMC-99f248ecd40d7ebe79723b8a27ac188ff5c8d13b.tar.lz
MultiMC-99f248ecd40d7ebe79723b8a27ac188ff5c8d13b.tar.xz
MultiMC-99f248ecd40d7ebe79723b8a27ac188ff5c8d13b.zip
GH-1015 catch exceptions when doing profile reapply
This is a temporary solution.
Diffstat (limited to 'logic')
-rw-r--r--logic/minecraft/MinecraftProfile.cpp30
-rw-r--r--logic/minecraft/MinecraftProfile.h5
-rw-r--r--logic/minecraft/OneSixProfileStrategy.cpp9
3 files changed, 28 insertions, 16 deletions
diff --git a/logic/minecraft/MinecraftProfile.cpp b/logic/minecraft/MinecraftProfile.cpp
index 345930ca..0661aec1 100644
--- a/logic/minecraft/MinecraftProfile.cpp
+++ b/logic/minecraft/MinecraftProfile.cpp
@@ -22,6 +22,7 @@
#include "minecraft/MinecraftProfile.h"
#include "ProfileUtils.h"
#include "NullProfileStrategy.h"
+#include "VersionBuildError.h"
MinecraftProfile::MinecraftProfile(ProfileStrategy *strategy)
: QAbstractListModel()
@@ -52,7 +53,7 @@ void MinecraftProfile::reload()
{
beginResetModel();
m_strategy->load();
- reapply();
+ reapplySafe();
endResetModel();
}
@@ -109,7 +110,7 @@ bool MinecraftProfile::remove(const int index)
beginRemoveRows(QModelIndex(), index, index);
VersionPatches.removeAt(index);
endRemoveRows();
- reapply();
+ reapplySafe();
saveCurrentOrder();
return true;
}
@@ -141,7 +142,7 @@ bool MinecraftProfile::customize(int index)
qCritical() << "Patch" << patch->getPatchID() << "could not be customized";
return false;
}
- reapply();
+ reapplySafe();
saveCurrentOrder();
// FIXME: maybe later in unstable
// emit dataChanged(createIndex(index, 0), createIndex(index, columnCount(QModelIndex()) - 1));
@@ -161,7 +162,7 @@ bool MinecraftProfile::revert(int index)
qCritical() << "Patch" << patch->getPatchID() << "could not be reverted";
return false;
}
- reapply();
+ reapplySafe();
saveCurrentOrder();
// FIXME: maybe later in unstable
// emit dataChanged(createIndex(index, 0), createIndex(index, columnCount(QModelIndex()) - 1));
@@ -221,13 +222,13 @@ bool MinecraftProfile::revertToVanilla()
if(!remove(it->getPatchID()))
{
qWarning() << "Couldn't remove" << it->getPatchID() << "from profile!";
- reapply();
+ reapplySafe();
saveCurrentOrder();
return false;
}
}
}
- reapply();
+ reapplySafe();
saveCurrentOrder();
return true;
}
@@ -398,8 +399,8 @@ void MinecraftProfile::move(const int index, const MoveDirection direction)
beginMoveRows(QModelIndex(), index, index, QModelIndex(), togap);
VersionPatches.swap(index, theirIndex);
endMoveRows();
+ reapplySafe();
saveCurrentOrder();
- reapply();
}
void MinecraftProfile::resetOrder()
{
@@ -417,6 +418,21 @@ void MinecraftProfile::reapply()
finalize();
}
+bool MinecraftProfile::reapplySafe()
+{
+ try
+ {
+ reapply();
+ }
+ catch(MMCError & error)
+ {
+ clear();
+ qWarning() << "Couldn't apply profile patches because: " << error.cause();
+ return false;
+ }
+ return true;
+}
+
void MinecraftProfile::finalize()
{
// HACK: deny april fools. my head hurts enough already.
diff --git a/logic/minecraft/MinecraftProfile.h b/logic/minecraft/MinecraftProfile.h
index dba7d744..d97f7bb8 100644
--- a/logic/minecraft/MinecraftProfile.h
+++ b/logic/minecraft/MinecraftProfile.h
@@ -82,9 +82,12 @@ public:
/// clear the profile
void clear();
- /// apply the patches
+ /// apply the patches. Throws all sorts of errors.
void reapply();
+ /// apply the patches. Catches all the errors and returns true/false for success/failure
+ bool reapplySafe();
+
/// do a finalization step (should always be done after applying all patches to profile)
void finalize();
diff --git a/logic/minecraft/OneSixProfileStrategy.cpp b/logic/minecraft/OneSixProfileStrategy.cpp
index 160e2c24..e0ee4c21 100644
--- a/logic/minecraft/OneSixProfileStrategy.cpp
+++ b/logic/minecraft/OneSixProfileStrategy.cpp
@@ -389,14 +389,7 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths)
profile->appendPatch(f);
}
profile->saveCurrentOrder();
- try
- {
- profile->reapply();
- }
- catch (VersionIncomplete &error)
- {
- qDebug() << "Version was incomplete:" << error.cause();
- }
+ profile->reapplySafe();
return true;
}