NOISSUE model Task states as one enum instead of multiple flags
This adds Task::State::AbortedByUser as a possibility
This commit is contained in:
parent
fb29e45bd0
commit
de568b32b8
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user