summaryrefslogtreecommitdiffstats
path: root/logic/LoggedProcess.h
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-05-11 22:21:37 +0200
committerPetr Mrázek <peterix@gmail.com>2015-06-30 07:16:20 +0200
commit34ddfc7ecc2b0450b3d501e65cb4203ac747ed42 (patch)
treec53d32ac89aa996347901ea64f25909231a75895 /logic/LoggedProcess.h
parentd14a61b0df38d150e1449b19b7eee411e91e5211 (diff)
downloadMultiMC-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.h60
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;
+};