From 6ac94ddcb6f64ffae3948bed778bccc33a92f0fd Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 6 Dec 2013 12:59:58 -0600 Subject: Finish implementing update installation. Also add the option to update on exit. --- gui/MainWindow.cpp | 27 +++++++++++++++++++-------- gui/MainWindow.h | 5 +++++ gui/dialogs/UpdateDialog.ui | 7 +++++++ 3 files changed, 31 insertions(+), 8 deletions(-) (limited to 'gui') diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index 618884ef..7ea5c291 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -439,20 +439,31 @@ void MainWindow::updateAvailable(QString repo, QString versionName, int versionI QLOG_INFO() << "Update will be installed later."; break; case UPDATE_NOW: - { - QLOG_INFO() << "Installing update."; - ProgressDialog updateDlg(this); - DownloadUpdateTask updateTask(repo, versionId, &updateDlg); - updateDlg.exec(&updateTask); - } + downloadUpdates(repo, versionId); break; case UPDATE_ONEXIT: - // TODO: Implement installing updates on exit. - QLOG_INFO() << "Installing on exit is not implemented yet."; + downloadUpdates(repo, versionId, true); break; } } +void MainWindow::downloadUpdates(QString repo, int versionId, bool installOnExit) +{ + QLOG_INFO() << "Downloading updates."; + // TODO: If the user chooses to update on exit, we should download updates in the background. + // Doing so is a bit complicated, because we'd have to make sure it finished downloading before actually exiting MultiMC. + ProgressDialog updateDlg(this); + DownloadUpdateTask updateTask(repo, versionId, &updateDlg); + // If the task succeeds, install the updates. + if (updateDlg.exec(&updateTask)) + { + if (installOnExit) + MMC->setUpdateOnExit(updateTask.updateFilesDir()); + else + MMC->installUpdates(updateTask.updateFilesDir()); + } +} + void MainWindow::onCatToggled(bool state) { setCatBackground(state); diff --git a/gui/MainWindow.h b/gui/MainWindow.h index 1f498eca..b99c54ee 100644 --- a/gui/MainWindow.h +++ b/gui/MainWindow.h @@ -168,6 +168,11 @@ slots: void changeActiveAccount(); void repopulateAccountsMenu(); + + /*! + * Runs the DownloadUpdateTask and installs updates. + */ + void downloadUpdates(QString repo, int versionId, bool installOnExit=false); protected: bool eventFilter(QObject *obj, QEvent *ev); diff --git a/gui/dialogs/UpdateDialog.ui b/gui/dialogs/UpdateDialog.ui index f2361bd3..1fe65e62 100644 --- a/gui/dialogs/UpdateDialog.ui +++ b/gui/dialogs/UpdateDialog.ui @@ -41,6 +41,13 @@ + + + + Update after MultiMC closes + + + -- cgit v1.2.3