From 0cb8ff40b26401a707781c2c4171d3ec6c114077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 8 Dec 2013 17:34:45 +0100 Subject: Finish preliminary offline support * ProgressProvider now has an abort() call * Abort button support added to the progress dialog * YggdrasilTask and MojangAccount adapted to support abort YggdrasilTask will time out after 10 seconds of no network activity, or when the user pushes the Play Offline button. In offline mode, all instance update tasks are skipped! This will need further work. --- gui/dialogs/AccountListDialog.cpp | 12 ++++++------ gui/dialogs/ProgressDialog.cpp | 26 ++++++++++++++++++++++---- gui/dialogs/ProgressDialog.h | 6 +++++- gui/dialogs/ProgressDialog.ui | 21 +++++++++++++++++---- 4 files changed, 50 insertions(+), 15 deletions(-) (limited to 'gui/dialogs') diff --git a/gui/dialogs/AccountListDialog.cpp b/gui/dialogs/AccountListDialog.cpp index e1f65c16..8dae5f07 100644 --- a/gui/dialogs/AccountListDialog.cpp +++ b/gui/dialogs/AccountListDialog.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -117,14 +118,14 @@ void AccountListDialog::addAccount(const QString& errMsg) QString password(loginDialog.password()); MojangAccountPtr account = MojangAccount::createFromUsername(username); -/* ProgressDialog progDialog(this); - AuthenticateTask authTask(account, password, &progDialog); - if (progDialog.exec(&authTask)) + auto task = account->login(password); + progDialog.exec(task.get()); + if(task->successful()) { - // Add the authenticated account to the accounts list. - MojangAccountPtr account = authTask.getMojangAccount(); m_accounts->addAccount(account); + if (m_accounts->count() == 1) + m_accounts->setActiveAccount(account->username()); // Grab associated player skins auto job = new NetJob("Player skins: " + account->username()); @@ -141,6 +142,5 @@ void AccountListDialog::addAccount(const QString& errMsg) job->start(); } - */ } } diff --git a/gui/dialogs/ProgressDialog.cpp b/gui/dialogs/ProgressDialog.cpp index ca433dab..ba14cca2 100644 --- a/gui/dialogs/ProgressDialog.cpp +++ b/gui/dialogs/ProgressDialog.cpp @@ -25,9 +25,23 @@ ProgressDialog::ProgressDialog(QWidget *parent) : QDialog(parent), ui(new Ui::Pr { MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); + setSkipButton(false); + changeProgress(0, 100); +} + +void ProgressDialog::setSkipButton(bool present, QString label) +{ + ui->skipButton->setEnabled(present); + ui->skipButton->setVisible(present); + ui->skipButton->setText(label); updateSize(); +} - changeProgress(0, 100); +void ProgressDialog::on_skipButton_clicked(bool checked) +{ + Q_UNUSED(checked); + task->abort(); } ProgressDialog::~ProgressDialog() @@ -51,9 +65,13 @@ int ProgressDialog::exec(ProgressProvider *task) connect(task, SIGNAL(status(QString)), SLOT(changeStatus(const QString &))); connect(task, SIGNAL(progress(qint64, qint64)), SLOT(changeProgress(qint64, qint64))); - // this makes sure that the task is started after the dialog is created - QMetaObject::invokeMethod(task, "start", Qt::QueuedConnection); - return QDialog::exec(); + // if this didn't connect to an already running task, invoke start + if(!task->isRunning()) + task->start(); + if(task->isRunning()) + return QDialog::exec(); + else + return 0; } ProgressProvider *ProgressDialog::getTask() diff --git a/gui/dialogs/ProgressDialog.h b/gui/dialogs/ProgressDialog.h index 0029d3ec..fe63a826 100644 --- a/gui/dialogs/ProgressDialog.h +++ b/gui/dialogs/ProgressDialog.h @@ -35,6 +35,7 @@ public: void updateSize(); int exec(ProgressProvider *task); + void setSkipButton(bool present, QString label = QString()); ProgressProvider *getTask(); @@ -47,7 +48,10 @@ slots: void changeStatus(const QString &status); void changeProgress(qint64 current, qint64 total); -signals: + +private +slots: + void on_skipButton_clicked(bool checked); protected: virtual void keyPressEvent(QKeyEvent *e); diff --git a/gui/dialogs/ProgressDialog.ui b/gui/dialogs/ProgressDialog.ui index a56d2a92..04b8fef3 100644 --- a/gui/dialogs/ProgressDialog.ui +++ b/gui/dialogs/ProgressDialog.ui @@ -7,7 +7,7 @@ 0 0 400 - 68 + 100 @@ -25,8 +25,8 @@ Please wait... - - + + Task Status... @@ -36,7 +36,7 @@ - + 24 @@ -46,6 +46,19 @@ + + + + + 0 + 0 + + + + Skip + + + -- cgit v1.2.3