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.
This commit is contained in:
Petr Mrázek
2013-08-09 00:26:35 +02:00
parent c8925e0f66
commit bf5f5091ef
16 changed files with 122 additions and 148 deletions

View File

@@ -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();
}

View File

@@ -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;
};

View File

@@ -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 ended();
emit ended(this);
emit failed(reason);
}
void Task::emitSucceeded()
{
running = false;
emit succeeded();
}
bool Task::isRunning() const
{
return running;

View File

@@ -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);