NOISSUE model Task states as one enum instead of multiple flags

This adds Task::State::AbortedByUser as a possibility
This commit is contained in:
Petr Mrázek 2018-12-10 20:50:15 +01:00
parent fb29e45bd0
commit de568b32b8
3 changed files with 51 additions and 20 deletions

View File

@ -58,6 +58,7 @@ void FtbPackInstallTask::onDownloadSucceeded()
void FtbPackInstallTask::onDownloadFailed(QString reason)
{
abortable = false;
emitFailed(reason);
}

View File

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

View File

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