diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-08-09 00:26:35 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-08-09 00:26:35 +0200 |
commit | bf5f5091ef6daeaf7067f4fc8973eb068ddc52fc (patch) | |
tree | 647f77c1d7f8c8e0e7bdf90fb7f3b0eac9aa5f6c /backend/tasks | |
parent | c8925e0f667b0c94028345586d99008066358200 (diff) | |
download | MultiMC-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.cpp | 23 | ||||
-rw-r--r-- | backend/tasks/LoginTask.h | 11 | ||||
-rw-r--r-- | backend/tasks/Task.cpp | 18 | ||||
-rw-r--r-- | backend/tasks/Task.h | 23 |
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); |