diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-12-10 07:22:22 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-12-10 07:22:22 +0100 |
commit | aa61bbe9e414648399aff2802df5b587dee1a084 (patch) | |
tree | ff7809bea445bb76c9fd27a3245e1b2cb7c72596 /gui | |
parent | 3f5c46a1c4b27e82976e0067e4ec2d6abfffd9ba (diff) | |
parent | 712b87c643bbd7bc4ed2cfd459d0b9fdb69e5f0d (diff) | |
download | MultiMC-aa61bbe9e414648399aff2802df5b587dee1a084.tar MultiMC-aa61bbe9e414648399aff2802df5b587dee1a084.tar.gz MultiMC-aa61bbe9e414648399aff2802df5b587dee1a084.tar.lz MultiMC-aa61bbe9e414648399aff2802df5b587dee1a084.tar.xz MultiMC-aa61bbe9e414648399aff2802df5b587dee1a084.zip |
Merge branch 'develop' of github.com:MultiMC/MultiMC5 into develop
Conflicts:
CMakeLists.txt
gui/MainWindow.cpp
Diffstat (limited to 'gui')
-rw-r--r-- | gui/MainWindow.cpp | 54 | ||||
-rw-r--r-- | gui/MainWindow.h | 7 | ||||
-rw-r--r-- | gui/MainWindow.ui | 28 | ||||
-rw-r--r-- | gui/dialogs/UpdateDialog.cpp | 28 | ||||
-rw-r--r-- | gui/dialogs/UpdateDialog.h | 46 | ||||
-rw-r--r-- | gui/dialogs/UpdateDialog.ui | 70 |
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> |