summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rw-r--r--gui/MainWindow.cpp54
-rw-r--r--gui/MainWindow.h7
-rw-r--r--gui/MainWindow.ui28
-rw-r--r--gui/dialogs/UpdateDialog.cpp28
-rw-r--r--gui/dialogs/UpdateDialog.h46
-rw-r--r--gui/dialogs/UpdateDialog.ui70
6 files changed, 218 insertions, 15 deletions
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp
index d8ba5572..f115f090 100644
--- a/gui/MainWindow.cpp
+++ b/gui/MainWindow.cpp
@@ -59,6 +59,7 @@
#include "gui/dialogs/CopyInstanceDialog.h"
#include "gui/dialogs/AccountListDialog.h"
#include "gui/dialogs/AccountSelectDialog.h"
+#include "gui/dialogs/UpdateDialog.h"
#include "gui/dialogs/EditAccountDialog.h"
#include "gui/ConsoleWindow.h"
@@ -69,6 +70,12 @@
#include "logic/lists/IconList.h"
#include "logic/lists/JavaVersionList.h"
+#include "logic/auth/flows/AuthenticateTask.h"
+#include "logic/auth/flows/RefreshTask.h"
+#include "logic/auth/flows/ValidateTask.h"
+
+#include "logic/updater/DownloadUpdateTask.h"
+
#include "logic/BaseInstance.h"
#include "logic/InstanceFactory.h"
#include "logic/MinecraftProcess.h"
@@ -80,6 +87,7 @@
#include "logic/LegacyInstance.h"
#include "logic/assets/AssetsUtils.h"
+#include <logic/updater/UpdateChecker.h>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
@@ -161,7 +169,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
connect(MMC->instances().get(), SIGNAL(dataIsInvalid()), SLOT(selectionBad()));
m_statusLeft = new QLabel(tr("Instance type"), this);
- m_statusRight = new QLabel(tr("Assets information"), this);
+ m_statusRight = new QLabel(this);
m_statusRight->setAlignment(Qt::AlignRight);
statusBar()->addPermanentWidget(m_statusLeft, 1);
statusBar()->addPermanentWidget(m_statusRight, 0);
@@ -232,6 +240,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
{
MMC->lwjgllist()->loadList();
}
+
+ // set up the updater object.
+ auto updater = MMC->updateChecker();
+ QObject::connect(updater.get(), &UpdateChecker::updateAvailable, this, &MainWindow::updateAvailable);
+ // if automatic update checks are allowed, start one.
+ if(MMC->settings()->get("AutoUpdate").toBool())
+ on_actionCheckUpdate_triggered();
}
const QString currentInstanceId = MMC->settings()->get("SelectedInstance").toString();
@@ -406,6 +421,41 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
return QMainWindow::eventFilter(obj, ev);
}
+void MainWindow::updateAvailable(QString repo, QString versionName, int versionId)
+{
+ UpdateDialog dlg;
+ UpdateAction action = (UpdateAction) dlg.exec();
+ switch(action)
+ {
+ case UPDATE_LATER:
+ QLOG_INFO() << "Update will be installed later.";
+ break;
+ case UPDATE_NOW:
+ downloadUpdates(repo, versionId);
+ break;
+ case UPDATE_ONEXIT:
+ 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);
@@ -593,6 +643,8 @@ void MainWindow::on_actionConfig_Folder_triggered()
void MainWindow::on_actionCheckUpdate_triggered()
{
+ auto updater = MMC->updateChecker();
+ updater->checkForUpdate();
}
void MainWindow::on_actionSettings_triggered()
diff --git a/gui/MainWindow.h b/gui/MainWindow.h
index 795590c0..befe93e6 100644
--- a/gui/MainWindow.h
+++ b/gui/MainWindow.h
@@ -155,11 +155,18 @@ slots:
void startTask(Task *task);
+ void updateAvailable(QString repo, QString versionName, int versionId);
+
void activeAccountChanged();
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/MainWindow.ui b/gui/MainWindow.ui
index 0537d0e5..82e3b05f 100644
--- a/gui/MainWindow.ui
+++ b/gui/MainWindow.ui
@@ -14,7 +14,7 @@
<string>MultiMC 5</string>
</property>
<property name="windowIcon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/multimc/scalable/apps/multimc.svg</normaloff>:/icons/multimc/scalable/apps/multimc.svg</iconset>
</property>
<widget class="QWidget" name="centralWidget">
@@ -123,7 +123,7 @@
</widget>
<action name="actionAddInstance">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/new</normaloff>:/icons/toolbar/new</iconset>
</property>
<property name="text">
@@ -138,7 +138,7 @@
</action>
<action name="actionViewInstanceFolder">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/viewfolder</normaloff>:/icons/toolbar/viewfolder</iconset>
</property>
<property name="text">
@@ -153,7 +153,7 @@
</action>
<action name="actionRefresh">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/refresh</normaloff>:/icons/toolbar/refresh</iconset>
</property>
<property name="text">
@@ -168,7 +168,7 @@
</action>
<action name="actionViewCentralModsFolder">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/centralmods</normaloff>:/icons/toolbar/centralmods</iconset>
</property>
<property name="text">
@@ -183,7 +183,7 @@
</action>
<action name="actionCheckUpdate">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/checkupdate</normaloff>:/icons/toolbar/checkupdate</iconset>
</property>
<property name="text">
@@ -198,7 +198,7 @@
</action>
<action name="actionSettings">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/settings</normaloff>:/icons/toolbar/settings</iconset>
</property>
<property name="text">
@@ -216,7 +216,7 @@
</action>
<action name="actionReportBug">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/bug</normaloff>:/icons/toolbar/bug</iconset>
</property>
<property name="text">
@@ -231,7 +231,7 @@
</action>
<action name="actionNews">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/news</normaloff>:/icons/toolbar/news</iconset>
</property>
<property name="text">
@@ -246,7 +246,7 @@
</action>
<action name="actionAbout">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/about</normaloff>:/icons/toolbar/about</iconset>
</property>
<property name="text">
@@ -300,7 +300,7 @@
<bool>true</bool>
</property>
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/instances/infinity</normaloff>:/icons/instances/infinity</iconset>
</property>
<property name="text">
@@ -440,7 +440,7 @@
<bool>true</bool>
</property>
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/cat</normaloff>:/icons/toolbar/cat</iconset>
</property>
<property name="text">
@@ -452,7 +452,7 @@
</action>
<action name="actionCopyInstance">
<property name="icon">
- <iconset resource="../multimc.qrc">
+ <iconset resource="../graphics.qrc">
<normaloff>:/icons/toolbar/copy</normaloff>:/icons/toolbar/copy</iconset>
</property>
<property name="text">
@@ -476,7 +476,7 @@
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
- <include location="../multimc.qrc"/>
+ <include location="../graphics.qrc"/>
</resources>
<connections/>
</ui>
diff --git a/gui/dialogs/UpdateDialog.cpp b/gui/dialogs/UpdateDialog.cpp
new file mode 100644
index 00000000..c56798b4
--- /dev/null
+++ b/gui/dialogs/UpdateDialog.cpp
@@ -0,0 +1,28 @@
+#include "UpdateDialog.h"
+#include "ui_UpdateDialog.h"
+#include "gui/Platform.h"
+
+UpdateDialog::UpdateDialog(QWidget *parent) : QDialog(parent), ui(new Ui::UpdateDialog)
+{
+ MultiMCPlatform::fixWM_CLASS(this);
+ ui->setupUi(this);
+}
+
+UpdateDialog::~UpdateDialog()
+{
+}
+
+void UpdateDialog::on_btnUpdateLater_clicked()
+{
+ reject();
+}
+
+void UpdateDialog::on_btnUpdateNow_clicked()
+{
+ done(UPDATE_NOW);
+}
+
+void UpdateDialog::on_btnUpdateOnExit_clicked()
+{
+ done(UPDATE_ONEXIT);
+}
diff --git a/gui/dialogs/UpdateDialog.h b/gui/dialogs/UpdateDialog.h
new file mode 100644
index 00000000..c13eb6bf
--- /dev/null
+++ b/gui/dialogs/UpdateDialog.h
@@ -0,0 +1,46 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <QDialog>
+
+namespace Ui
+{
+class UpdateDialog;
+}
+
+enum UpdateAction
+{
+ UPDATE_LATER = QDialog::Rejected,
+ UPDATE_NOW = QDialog::Accepted,
+ UPDATE_ONEXIT = 2
+};
+
+class UpdateDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit UpdateDialog(QWidget *parent = 0);
+ ~UpdateDialog();
+
+private:
+ Ui::UpdateDialog *ui;
+public slots:
+ void on_btnUpdateNow_clicked();
+ void on_btnUpdateOnExit_clicked();
+ void on_btnUpdateLater_clicked();
+};
diff --git a/gui/dialogs/UpdateDialog.ui b/gui/dialogs/UpdateDialog.ui
new file mode 100644
index 00000000..1fe65e62
--- /dev/null
+++ b/gui/dialogs/UpdateDialog.ui
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UpdateDialog</class>
+ <widget class="QDialog" name="UpdateDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>350</width>
+ <height>260</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MultiMC Update</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../../graphics.qrc">
+ <normaloff>:/icons/toolbar/checkupdate</normaloff>:/icons/toolbar/checkupdate</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>A new MultiMC update is available!</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnUpdateNow">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Update now</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnUpdateOnExit">
+ <property name="text">
+ <string>Update after MultiMC closes</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnUpdateLater">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Don't update yet</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../../graphics.qrc"/>
+ </resources>
+ <connections/>
+</ui>