summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-08-09 00:26:35 +0200
committerPetr Mrázek <peterix@gmail.com>2013-08-09 00:26:35 +0200
commitbf5f5091ef6daeaf7067f4fc8973eb068ddc52fc (patch)
tree647f77c1d7f8c8e0e7bdf90fb7f3b0eac9aa5f6c /gui
parentc8925e0f667b0c94028345586d99008066358200 (diff)
downloadMultiMC-bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc.tar
MultiMC-bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc.tar.gz
MultiMC-bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc.tar.lz
MultiMC-bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc.tar.xz
MultiMC-bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc.zip
Various task related improvements.
* Errors are reported back to task users via Failure signals. * Lwjgl doesn't download on each legacy instance start anymore. * Tasks were unified when it comes to success/failure. * Task dialogs don't get spawned after short tasks finish anymore.
Diffstat (limited to 'gui')
-rw-r--r--gui/mainwindow.cpp36
-rw-r--r--gui/mainwindow.h6
-rw-r--r--gui/taskdialog.cpp12
-rw-r--r--gui/taskdialog.h4
4 files changed, 30 insertions, 28 deletions
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 309e4180..4d6a510b 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -173,7 +173,8 @@ void MainWindow::on_actionAddInstance_triggered()
m_versionLoadTask && m_versionLoadTask->isRunning())
{
QEventLoop waitLoop;
- waitLoop.connect(m_versionLoadTask, SIGNAL(ended()), SLOT(quit()));
+ waitLoop.connect(m_versionLoadTask, SIGNAL(failed(QString)), SLOT(quit()));
+ waitLoop.connect(m_versionLoadTask, SIGNAL(succeeded()), SLOT(quit()));
waitLoop.exec();
}
@@ -260,13 +261,11 @@ void MainWindow::on_actionSettings_triggered()
void MainWindow::on_actionReportBug_triggered()
{
- //QDesktopServices::openUrl(QUrl("http://bugs.forkk.net/"));
- openWebPage ( QUrl ( "http://bugs.forkk.net/" ) );
+ openWebPage ( QUrl ( "http://jira.forkk.net/browse/MMC" ) );
}
void MainWindow::on_actionNews_triggered()
{
- //QDesktopServices::openUrl(QUrl("http://news.forkk.net/"));
openWebPage ( QUrl ( "http://news.forkk.net/" ) );
}
@@ -397,20 +396,19 @@ void MainWindow::doLogin(const QString& errorMsg)
TaskDialog* tDialog = new TaskDialog(this);
LoginTask* loginTask = new LoginTask(uInfo, tDialog);
- connect(loginTask, SIGNAL(loginComplete(LoginResponse)),
- SLOT(onLoginComplete(LoginResponse)), Qt::QueuedConnection);
- connect(loginTask, SIGNAL(loginFailed(QString)),
- SLOT(doLogin(QString)), Qt::QueuedConnection);
+ connect(loginTask, SIGNAL(succeeded()),SLOT(onLoginComplete()), Qt::QueuedConnection);
+ connect(loginTask, SIGNAL(failed(QString)), SLOT(doLogin(QString)), Qt::QueuedConnection);
m_activeInst = selectedInstance();
tDialog->exec(loginTask);
}
}
-void MainWindow::onLoginComplete(LoginResponse response)
+void MainWindow::onLoginComplete()
{
if(!m_activeInst)
return;
- m_activeLogin = LoginResponse(response);
+ LoginTask * task = (LoginTask *) QObject::sender();
+ m_activeLogin = task->getResult();
BaseUpdate *updateTask = m_activeInst->doUpdate();
if(!updateTask)
@@ -420,8 +418,8 @@ void MainWindow::onLoginComplete(LoginResponse response)
else
{
TaskDialog *tDialog = new TaskDialog(this);
- connect(updateTask, SIGNAL(gameUpdateComplete()),SLOT(onGameUpdateComplete()));
- connect(updateTask, SIGNAL(gameUpdateError(QString)), SLOT(onGameUpdateError(QString)));
+ connect(updateTask, SIGNAL(succeeded()),SLOT(onGameUpdateComplete()));
+ connect(updateTask, SIGNAL(failed(QString)), SLOT(onGameUpdateError(QString)));
tDialog->exec(updateTask);
}
}
@@ -451,23 +449,25 @@ void MainWindow::launchInstance(BaseInstance *instance, LoginResponse response)
proc->launch();
}
-void MainWindow::taskStart(Task *task)
+void MainWindow::taskStart()
{
// Nothing to do here yet.
}
-void MainWindow::taskEnd(Task *task)
+void MainWindow::taskEnd()
{
- if (task == m_versionLoadTask)
+ QObject *sender = QObject::sender();
+ if (sender == m_versionLoadTask)
m_versionLoadTask = NULL;
- delete task;
+ sender->deleteLater();
}
void MainWindow::startTask(Task *task)
{
- connect(task, SIGNAL(started(Task*)), SLOT(taskStart(Task*)));
- connect(task, SIGNAL(ended(Task*)), SLOT(taskEnd(Task*)));
+ connect(task, SIGNAL(started()), SLOT(taskStart()));
+ connect(task, SIGNAL(succeeded()), SLOT(taskEnd()));
+ connect(task, SIGNAL(failed(QString)), SLOT(taskEnd()));
task->startTask();
}
diff --git a/gui/mainwindow.h b/gui/mainwindow.h
index 6fa83973..2a490ee5 100644
--- a/gui/mainwindow.h
+++ b/gui/mainwindow.h
@@ -98,14 +98,14 @@ private slots:
void doLogin(const QString& errorMsg = "");
- void onLoginComplete(LoginResponse response);
+ void onLoginComplete();
void onGameUpdateComplete();
void onGameUpdateError(QString error);
- void taskStart(Task *task);
- void taskEnd(Task *task);
+ void taskStart();
+ void taskEnd();
void on_actionChangeInstLWJGLVersion_triggered();
diff --git a/gui/taskdialog.cpp b/gui/taskdialog.cpp
index efa64256..f61614e8 100644
--- a/gui/taskdialog.cpp
+++ b/gui/taskdialog.cpp
@@ -45,12 +45,14 @@ void TaskDialog::exec(Task *task)
this->task = task;
// Connect signals.
- connect(task, SIGNAL(started(Task*)), SLOT(onTaskStarted(Task*)));
- connect(task, SIGNAL(ended(Task*)), SLOT(onTaskEnded(Task*)));
+ connect(task, SIGNAL(started()), SLOT(onTaskStarted()));
+ connect(task, SIGNAL(failed(QString)), SLOT(onTaskEnded()));
+ connect(task, SIGNAL(succeeded()), SLOT(onTaskEnded()));
connect(task, SIGNAL(statusChanged(const QString&)), SLOT(changeStatus(const QString&)));
connect(task, SIGNAL(progressChanged(int)), SLOT(changeProgress(int)));
- task->startTask();
+ // this makes sure that the task is started after the dialog is created
+ QMetaObject::invokeMethod(task, "startTask", Qt::QueuedConnection);
QDialog::exec();
}
@@ -59,12 +61,12 @@ Task* TaskDialog::getTask()
return task;
}
-void TaskDialog::onTaskStarted(Task*)
+void TaskDialog::onTaskStarted()
{
}
-void TaskDialog::onTaskEnded(Task*)
+void TaskDialog::onTaskEnded()
{
close();
}
diff --git a/gui/taskdialog.h b/gui/taskdialog.h
index 86cd4b54..3d31b7be 100644
--- a/gui/taskdialog.h
+++ b/gui/taskdialog.h
@@ -39,8 +39,8 @@ public:
Task* getTask();
public slots:
- void onTaskStarted(Task*);
- void onTaskEnded(Task*);
+ void onTaskStarted();
+ void onTaskEnded();
void changeStatus(const QString& status);
void changeProgress(int progress);