From 2acfd00d76b79c49b61f651b5459f65803601a95 Mon Sep 17 00:00:00 2001 From: Stiepen22 Date: Fri, 6 Sep 2013 17:08:12 +0200 Subject: [PATCH] Implemented basic offline mode --- MultiMC.pro | 3 ++- gui/logindialog.cpp | 22 ++++++++++++++++++++++ gui/logindialog.h | 9 +++++++++ gui/mainwindow.cpp | 26 +++++++++++++++++++------- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/MultiMC.pro b/MultiMC.pro index 6af1ec0d..b3b7faff 100644 --- a/MultiMC.pro +++ b/MultiMC.pro @@ -39,7 +39,8 @@ HEADERS += gui/mainwindow.h \ FORMS += gui/mainwindow.ui \ gui/settingsdialog.ui \ gui/modeditwindow.ui \ - gui/instancesettings.ui + gui/instancesettings.ui \ + gui/logindialog.ui RESOURCES += \ multimc.qrc diff --git a/gui/logindialog.cpp b/gui/logindialog.cpp index 3b44c440..a4dad1c1 100644 --- a/gui/logindialog.cpp +++ b/gui/logindialog.cpp @@ -24,12 +24,21 @@ LoginDialog::LoginDialog(QWidget *parent, const QString& loginErrMsg) : { ui->setupUi(this); + //TODO: make translateable + offlineButton = new QPushButton("Offline Once"); + + ui->loginButtonBox->addButton(offlineButton, QDialogButtonBox::ActionRole); + blockToggles = false; + isOnline_ = true; + onlineForced = false; + //FIXME: translateable? ui->usernameTextBox->lineEdit()->setPlaceholderText(QApplication::translate("LoginDialog", "Name", 0)); connect(ui->usernameTextBox, SIGNAL(currentTextChanged(QString)), this, SLOT(userTextChanged(QString))); connect(ui->forgetButton, SIGNAL(clicked(bool)), this, SLOT(forgetCurrentUser())); + connect(offlineButton, SIGNAL(clicked(bool)), this, SLOT(launchOffline())); if (loginErrMsg.isEmpty()) ui->loginErrorLabel->setVisible(false); @@ -60,6 +69,7 @@ LoginDialog::LoginDialog(QWidget *parent, const QString& loginErrMsg) : LoginDialog::~LoginDialog() { + delete offlineButton; delete ui; } @@ -173,3 +183,15 @@ void LoginDialog::accept() } QDialog::accept(); } + +void LoginDialog::launchOffline() +{ + isOnline_ = false; + QDialog::accept(); +} + +void LoginDialog::forceOnline() +{ + onlineForced = true; + offlineButton->setEnabled(false); +} \ No newline at end of file diff --git a/gui/logindialog.h b/gui/logindialog.h index 3bb45753..f7c0e930 100644 --- a/gui/logindialog.h +++ b/gui/logindialog.h @@ -17,6 +17,7 @@ #define LOGINDIALOG_H #include +#include namespace Ui { class LoginDialog; @@ -32,6 +33,10 @@ public: QString getUsername() const; QString getPassword() const; + + inline bool isOnline() { return isOnline_; } + + void forceOnline(); public slots: virtual void accept(); @@ -40,9 +45,13 @@ public slots: private slots: void usernameToggled ( bool ); void passwordToggled ( bool ); + void launchOffline(); private: Ui::LoginDialog *ui; bool blockToggles; + QPushButton *offlineButton; + bool isOnline_; + bool onlineForced; }; #endif // LOGINDIALOG_H diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 7cdf93ad..4ccc12b6 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -473,17 +473,29 @@ void MainWindow::doLogin(const QString& errorMsg) return; LoginDialog* loginDlg = new LoginDialog(this, errorMsg); + if (!m_selectedInstance->lastLaunch()) + loginDlg->forceOnline(); + loginDlg->exec(); if(loginDlg->result() == QDialog::Accepted) { - UserInfo uInfo{loginDlg->getUsername(), loginDlg->getPassword()}; + if (loginDlg->isOnline()) + { + UserInfo uInfo{loginDlg->getUsername(), loginDlg->getPassword()}; - TaskDialog* tDialog = new TaskDialog(this); - LoginTask* loginTask = new LoginTask(uInfo, tDialog); - connect(loginTask, SIGNAL(succeeded()),SLOT(onLoginComplete()), Qt::QueuedConnection); - connect(loginTask, SIGNAL(failed(QString)), SLOT(doLogin(QString)), Qt::QueuedConnection); - m_activeInst = m_selectedInstance; - tDialog->exec(loginTask); + TaskDialog* tDialog = new TaskDialog(this); + LoginTask* loginTask = new LoginTask(uInfo, tDialog); + connect(loginTask, SIGNAL(succeeded()),SLOT(onLoginComplete()), Qt::QueuedConnection); + connect(loginTask, SIGNAL(failed(QString)), SLOT(doLogin(QString)), Qt::QueuedConnection); + m_activeInst = m_selectedInstance; + tDialog->exec(loginTask); + } + else + { + m_activeLogin = {loginDlg->getUsername(), QString("Offline"), qint64(-1)}; + m_activeInst = m_selectedInstance; + launchInstance(m_activeInst, m_activeLogin); + } } }