Navigation Menu

Skip to content

Commit

Permalink
NOISSUE model Task states as one enum instead of multiple flags
Browse files Browse the repository at this point in the history
This adds Task::State::AbortedByUser as a possibility
  • Loading branch information
peterix committed Dec 10, 2018
1 parent fb29e45 commit de568b3
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 20 deletions.
1 change: 1 addition & 0 deletions api/logic/modplatform/ftb/FtbPackInstallTask.cpp
Expand Up @@ -58,6 +58,7 @@ void FtbPackInstallTask::onDownloadSucceeded()

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

Expand Down
56 changes: 39 additions & 17 deletions api/logic/tasks/Task.cpp
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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();
Expand All @@ -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
Expand Down
14 changes: 11 additions & 3 deletions api/logic/tasks/Task.h
Expand Up @@ -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() {};
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit de568b3

Please sign in to comment.