summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2017-05-02 23:29:47 +0200
committerPetr Mrázek <peterix@gmail.com>2017-05-02 23:29:47 +0200
commit907aa367046bde6ad05893917cff11320019ddda (patch)
treec937c84bb16ae224b38a0ca9b6f489bf8ee1580b
parent6a8bb3691b9e30bcb90003eead34b287010cf17f (diff)
downloadMultiMC-907aa367046bde6ad05893917cff11320019ddda.tar
MultiMC-907aa367046bde6ad05893917cff11320019ddda.tar.gz
MultiMC-907aa367046bde6ad05893917cff11320019ddda.tar.lz
MultiMC-907aa367046bde6ad05893917cff11320019ddda.tar.xz
MultiMC-907aa367046bde6ad05893917cff11320019ddda.zip
GH-1874 Do not allow launching instances during an update
-rw-r--r--application/MainWindow.cpp6
-rw-r--r--application/MultiMC.cpp12
-rw-r--r--application/MultiMC.h4
3 files changed, 21 insertions, 1 deletions
diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp
index 4ec0af86..9ecfbfd0 100644
--- a/application/MainWindow.cpp
+++ b/application/MainWindow.cpp
@@ -989,8 +989,14 @@ void MainWindow::downloadUpdates(GoUpdate::Status status)
// If the task succeeds, install the updates.
if (updateDlg.execWithTask(&updateTask))
{
+ /**
+ * NOTE: This disables launching instances until the update either succeeds (and this process exits)
+ * or the update fails (and the control leaves this scope).
+ */
+ MMC->updateIsRunning(true);
UpdateController update(this, MMC->root(), updateTask.updateFilesDir(), updateTask.operations());
update.installUpdates();
+ MMC->updateIsRunning(false);
}
else
{
diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp
index 6d83fd07..d9d59aa6 100644
--- a/application/MultiMC.cpp
+++ b/application/MultiMC.cpp
@@ -939,7 +939,11 @@ bool MultiMC::openJsonEditor(const QString &filename)
bool MultiMC::launch(InstancePtr instance, bool online, BaseProfilerFactory *profiler)
{
- if(instance->canLaunch())
+ if(m_updateRunning)
+ {
+ qDebug() << "Cannot launch instances while an update is running.";
+ }
+ else if(instance->canLaunch())
{
auto & extras = m_instanceExtras[instance->id()];
auto & window = extras.window;
@@ -1027,6 +1031,12 @@ bool MultiMC::updatesAreAllowed()
return m_runningInstances == 0;
}
+void MultiMC::updateIsRunning(bool running)
+{
+ m_updateRunning = running;
+}
+
+
void MultiMC::controllerSucceeded()
{
auto controller = qobject_cast<LaunchController *>(QObject::sender());
diff --git a/application/MultiMC.h b/application/MultiMC.h
index 48be3b22..de768a98 100644
--- a/application/MultiMC.h
+++ b/application/MultiMC.h
@@ -151,6 +151,7 @@ public:
return m_runningInstances;
}
+ void updateIsRunning(bool running);
bool updatesAreAllowed();
signals:
@@ -227,8 +228,11 @@ private:
shared_qobject_ptr<LaunchController> controller;
};
std::map<QString, InstanceXtras> m_instanceExtras;
+
+ // main state variables
size_t m_openWindows = 0;
size_t m_runningInstances = 0;
+ bool m_updateRunning = false;
// main window, if any
MainWindow * m_mainWindow = nullptr;