Permalink
Browse files

NOISSUE model Task states as one enum instead of multiple flags

This adds Task::State::AbortedByUser as a possibility
  • Loading branch information...
peterix committed Dec 10, 2018
1 parent fb29e45 commit de568b32b85b24fb24fdec2bc90066bf00b2f013
Showing with 51 additions and 20 deletions.
  1. +1 −0 api/logic/modplatform/ftb/FtbPackInstallTask.cpp
  2. +39 −17 api/logic/tasks/Task.cpp
  3. +11 −3 api/logic/tasks/Task.h
@@ -58,6 +58,7 @@ void FtbPackInstallTask::onDownloadSucceeded()

void FtbPackInstallTask::onDownloadFailed(QString reason)
{
abortable = false;
emitFailed(reason);
}

@@ -39,23 +39,49 @@ void Task::setProgress(qint64 current, qint64 total)

void Task::start()
{
m_running = true;
switch(m_state)
{
case State::Inactive:
{
qDebug() << "Task" << describe() << "starting for the first time";
break;
}
case State::AbortedByUser:
{
qDebug() << "Task" << describe() << "restarting for after being aborted by user";
break;
}
case State::Failed:
{
qDebug() << "Task" << describe() << "restarting for after failing at first";
break;
}
case State::Succeeded:
{
qDebug() << "Task" << describe() << "restarting for after succeeding at first";
break;
}
case State::Running:
{
qWarning() << "MultiMC tried to start task" << describe() << "while it was already running!";
return;
}
}
// NOTE: only fall thorugh to here in end states
m_state = State::Running;
emit started();
qDebug() << "Task" << describe() << "started";
executeTask();
}

void Task::emitFailed(QString reason)
{
// Don't fail twice.
if (!m_running)
if (!isRunning())
{
qCritical() << "Task" << describe() << "failed while not running!!!!: " << reason;
return;
}
m_running = false;
m_finished = true;
m_succeeded = false;
m_state = State::Failed;
m_failReason = reason;
qCritical() << "Task" << describe() << "failed: " << reason;
emit failed(reason);
@@ -65,14 +91,12 @@ void Task::emitFailed(QString reason)
void Task::emitAborted()
{
// Don't abort twice.
if (!m_running)
if (!isRunning())
{
qCritical() << "Task" << describe() << "aborted while not running!!!!";
return;
}
m_running = false;
m_finished = true;
m_succeeded = false;
m_state = State::AbortedByUser;
m_failReason = "Aborted.";
qDebug() << "Task" << describe() << "aborted.";
emit failed(m_failReason);
@@ -82,14 +106,12 @@ void Task::emitAborted()
void Task::emitSucceeded()
{
// Don't succeed twice.
if (!m_running)
if (!isRunning())
{
qCritical() << "Task" << describe() << "succeeded while not running!!!!";
return;
}
m_running = false;
m_finished = true;
m_succeeded = true;
m_state = State::Succeeded;
qDebug() << "Task" << describe() << "succeeded";
emit succeeded();
emit finished();
@@ -116,17 +138,17 @@ QString Task::describe()

bool Task::isRunning() const
{
return m_running;
return m_state == State::Running;
}

bool Task::isFinished() const
{
return m_finished;
return m_state != State::Running && m_state != State::Inactive;
}

bool Task::wasSuccessful() const
{
return m_succeeded;
return m_state == State::Succeeded;
}

QString Task::failReason() const
@@ -24,6 +24,16 @@
class MULTIMC_LOGIC_EXPORT Task : public QObject
{
Q_OBJECT
public:
enum class State
{
Inactive,
Running,
Succeeded,
Failed,
AbortedByUser
};

public:
explicit Task(QObject *parent = 0);
virtual ~Task() {};
@@ -88,9 +98,7 @@ public slots:
void setProgress(qint64 current, qint64 total);

private:
bool m_running = false;
bool m_finished = false;
bool m_succeeded = false;
State m_state = State::Inactive;
QStringList m_Warnings;
QString m_failReason = "";
QString m_status;

0 comments on commit de568b3

Please sign in to comment.