diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-05-11 22:21:37 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-06-30 07:16:20 +0200 |
commit | 34ddfc7ecc2b0450b3d501e65cb4203ac747ed42 (patch) | |
tree | c53d32ac89aa996347901ea64f25909231a75895 /logic/LoggedProcess.h | |
parent | d14a61b0df38d150e1449b19b7eee411e91e5211 (diff) | |
download | MultiMC-34ddfc7ecc2b0450b3d501e65cb4203ac747ed42.tar MultiMC-34ddfc7ecc2b0450b3d501e65cb4203ac747ed42.tar.gz MultiMC-34ddfc7ecc2b0450b3d501e65cb4203ac747ed42.tar.lz MultiMC-34ddfc7ecc2b0450b3d501e65cb4203ac747ed42.tar.xz MultiMC-34ddfc7ecc2b0450b3d501e65cb4203ac747ed42.zip |
GH-1053 base process and launch refactor, part 1
Diffstat (limited to 'logic/LoggedProcess.h')
-rw-r--r-- | logic/LoggedProcess.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/logic/LoggedProcess.h b/logic/LoggedProcess.h new file mode 100644 index 00000000..253be2c1 --- /dev/null +++ b/logic/LoggedProcess.h @@ -0,0 +1,60 @@ +#pragma once +#include <QProcess> +#include "MessageLevel.h" + +/* + * This is a basic process. + * It has line-based logging support and hides some of the nasty bits. + */ +class LoggedProcess : public QProcess +{ +Q_OBJECT +public: + enum State + { + NotRunning, + Starting, + FailedToStart, + Running, + Finished, + Crashed, + Aborted, + Skipped + }; + +public: + explicit LoggedProcess(QObject* parent = 0); + virtual ~LoggedProcess() {}; + + State state() const; + int exitCode() const; + +signals: + void log(QStringList lines, MessageLevel::Enum level); + void stateChanged(LoggedProcess::State state); + +public slots: + /** + * @brief kill the process - equivalent to kill -9 + */ + void kill(); + + +private slots: + void on_stdErr(); + void on_stdOut(); + void on_exit(int exit_code, QProcess::ExitStatus status); + void on_error(QProcess::ProcessError error); + void on_stateChange(QProcess::ProcessState); + +private: + void changeState(LoggedProcess::State state); + +private: + QString m_err_leftover; + QString m_out_leftover; + bool m_killed = false; + State m_state = NotRunning; + int m_exit_code = 0; + bool m_is_aborting = false; +}; |