summaryrefslogtreecommitdiffstats
path: root/backend/tasks
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 /backend/tasks
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 'backend/tasks')
-rw-r--r--backend/tasks/LoginTask.cpp23
-rw-r--r--backend/tasks/LoginTask.h11
-rw-r--r--backend/tasks/Task.cpp18
-rw-r--r--backend/tasks/Task.h23
4 files changed, 31 insertions, 44 deletions
diff --git a/backend/tasks/LoginTask.cpp b/backend/tasks/LoginTask.cpp
index 7a1d5262..48202044 100644
--- a/backend/tasks/LoginTask.cpp
+++ b/backend/tasks/LoginTask.cpp
@@ -71,44 +71,41 @@ void LoginTask::processNetReply(QNetworkReply *reply)
QString username = strings[2];
QString sessionID = strings[3];
- LoginResponse response{username, sessionID, latestVersion};
- emit loginComplete(response);
+ result = {username, sessionID, latestVersion};
+ emitSucceeded();
}
else
{
- emit loginFailed("Failed to parse Minecraft version string.");
+ emitFailed("Failed to parse Minecraft version string.");
}
}
else
{
if (responseStr.toLower() == "bad login")
- emit loginFailed("Invalid username or password.");
+ emitFailed("Invalid username or password.");
else if (responseStr.toLower() == "old version")
- emit loginFailed("Launcher outdated, please update.");
+ emitFailed("Launcher outdated, please update.");
else
- emit loginFailed("Login failed: " + responseStr);
+ emitFailed("Login failed: " + responseStr);
}
}
else if (responseCode == 503)
{
- emit loginFailed("The login servers are currently unavailable. "
- "Check http://help.mojang.com/ for more info.");
+ emitFailed("The login servers are currently unavailable. Check http://help.mojang.com/ for more info.");
}
else
{
- emit loginFailed(QString("Login failed: Unknown HTTP error %1 occurred.").
- arg(QString::number(responseCode)));
+ emitFailed(QString("Login failed: Unknown HTTP error %1 occurred.").arg(QString::number(responseCode)));
}
break;
}
case QNetworkReply::OperationCanceledError:
- emit loginFailed("Login canceled.");
+ emitFailed("Login canceled.");
break;
default:
- emit loginFailed("Login failed: " + reply->errorString());
+ emitFailed("Login failed: " + reply->errorString());
break;
}
- emitEnded();
}
diff --git a/backend/tasks/LoginTask.h b/backend/tasks/LoginTask.h
index 81d1b6cc..77d65255 100644
--- a/backend/tasks/LoginTask.h
+++ b/backend/tasks/LoginTask.h
@@ -40,17 +40,18 @@ class LIBMULTIMC_EXPORT LoginTask : public Task
Q_OBJECT
public:
explicit LoginTask(const UserInfo& uInfo, QObject *parent = 0);
+ LoginResponse getResult()
+ {
+ return result;
+ };
-public slots:
+protected slots:
void processNetReply(QNetworkReply* reply);
-signals:
- void loginComplete(LoginResponse loginResponse);
- void loginFailed(const QString& errorMsg);
-
protected:
void executeTask();
+ LoginResponse result;
QNetworkReply* netReply;
UserInfo uInfo;
};
diff --git a/backend/tasks/Task.cpp b/backend/tasks/Task.cpp
index 30dd2d10..7c148591 100644
--- a/backend/tasks/Task.cpp
+++ b/backend/tasks/Task.cpp
@@ -37,11 +37,6 @@ int Task::getProgress() const
return progress;
}
-void Task::calcProgress(int parts, int whole)
-{
- setProgress((int)((((float)parts) / ((float)whole))*100)); // Not sure if C++ or LISP...
-}
-
void Task::setProgress(int progress)
{
this->progress = progress;
@@ -58,16 +53,21 @@ void Task::emitStarted()
{
running = true;
emit started();
- emit started(this);
}
-void Task::emitEnded()
+void Task::emitFailed(QString reason)
+{
+ running = false;
+ emit failed(reason);
+}
+
+void Task::emitSucceeded()
{
running = false;
- emit ended();
- emit ended(this);
+ emit succeeded();
}
+
bool Task::isRunning() const
{
return running;
diff --git a/backend/tasks/Task.h b/backend/tasks/Task.h
index bbe27ae1..15219931 100644
--- a/backend/tasks/Task.h
+++ b/backend/tasks/Task.h
@@ -27,33 +27,21 @@ class LIBMULTIMC_EXPORT Task : public QObject
public:
explicit Task(QObject *parent = 0);
- // Starts the task.
- void startTask();
-
QString getStatus() const;
int getProgress() const;
-
bool isRunning() const;
- /*!
- * \brief Calculates and sets the task's progress based on the number of parts completed out of the total number to complete.
- * This is essentially just shorthand for setProgress((parts / whole) * 100);
- * \param parts The parts out of the whole completed. This parameter should
- * be less than whole. If it is greater than whole, progress is set to 100.
- * \param whole The total number of things that need to be completed.
- */
- void calcProgress(int parts, int whole);
+public slots:
+ void startTask();
protected slots:
void setStatus(const QString& status);
void setProgress(int progress);
signals:
- void started(Task* task);
- void ended(Task* task);
-
void started();
- void ended();
+ void failed(QString reason);
+ void succeeded();
void statusChanged(Task* task, const QString& status);
void progressChanged(Task* task, int progress);
@@ -65,7 +53,8 @@ protected:
virtual void executeTask() = 0;
virtual void emitStarted();
- virtual void emitEnded();
+ virtual void emitFailed(QString reason);
+ virtual void emitSucceeded();
virtual void emitStatusChange(const QString &status);
virtual void emitProgressChange(int progress);