21class Pipeline :
public QObject,
public maki::IPipeline
80 VoidResult
add(QProcess* process, maki::OnFail onFail,
81 std::function<
void(
int& exitCode, QProcess::ExitStatus& status)> callback =
nullptr)
override;
129 VoidResult
abort(
bool syncAbort =
false);
131 void startGroup(
const QString& groupName)
override;
132 void endGroup()
override;
134 QWidget* progressWidget(
bool subMenu =
false)
const;
166 void finished(
const Info& info,
int exitCode, QProcess::ExitStatus status);
202 void finishedGroup(
const Info& info,
const QString& groupName,
int exitCode,
const QString& message);
244 void onFinished(
int exitCode, QProcess::ExitStatus status);
263 maki::OnFail
onFail = maki::OnFail::STOP;
266 std::function<void(
int& exitCode, QProcess::ExitStatus& status)>
onFinish;
281 std::vector<std::shared_ptr<PipelineProcess>>
processes;
295 for (
int i = 0; i < (int)
processes.size(); ++i)
313 uint32_t mGroupIndex;
314 QString mCurrentGroup;
315 std::vector<std::shared_ptr<PipelineGroup>> mGroups;
340 int getIndexOfGroup(
const QString&
name)
const;
341 int getIndexofFirstNonEmptyGroup()
const;
342 std::shared_ptr<Pipeline::PipelineGroup> getGroup();
344 VoidResult
start(
const QString& groupName,
bool first =
false);
346 Info constructInfo()
const;
348 QString getRunningTask(
GroupInfo info)
const;
350 int getCompleteTasks(
GroupInfo info)
const;
Executes and manages a sequence of external processes.
Definition pipeline.h:22
void startingGroup(const Info &info, const QString &groupName)
Emitted before a group starts.
State
Internal state of the pipeline execution.
Definition pipeline.h:29
@ Unknown
Not initialized.
Definition pipeline.h:30
@ Idle
Not running.
Definition pipeline.h:31
QString mName
Name of the pipeline.
Definition pipeline.h:308
VoidResult start()
Starts executing the pipeline.
Definition pipeline.cpp:219
VoidResult add(QProcess *process, maki::OnFail onFail, std::function< void(int &exitCode, QProcess::ExitStatus &status)> callback=nullptr) override
Adds a process to the pipeline.
Definition pipeline.cpp:191
void readyReadStandardError(const QByteArray &message)
Emitted when new data is available on the standard error stream.
void onReadyReadStandardOutput()
Slot triggered when the process produces standard output.
Definition pipeline.cpp:383
void finishedGroup(const Info &info, const QString &groupName, int exitCode, const QString &message)
Emitted when the last process in a group finishes.
VoidResult abort(bool syncAbort=false)
Aborts the currently running pipeline.
Definition pipeline.cpp:67
void processStarted(const Info &info, const QString &process, const QStringList &arguments)
Emitted after a process starts.
bool isRunning() const
Indicates whether the pipeline is currently running.
Definition pipeline.cpp:61
void finished(const Info &info, int exitCode, QProcess::ExitStatus status)
Emitted when the currently running process finishes.
void startingProcess(const Info &info, const QString &process, const QStringList &arguments)
Emitted before a process starts.
void onErrorOccurred(QProcess::ProcessError error)
Slot triggered when a process error occurs.
Definition pipeline.cpp:429
void errorOccurred(const Info &info, QProcess::ProcessError error, const QString &message)
Emitted when a process error occurs.
std::shared_ptr< PipelineProcess > mRunningProcess
Currently running process.
Definition pipeline.h:311
void onReadyReadStandardError()
Slot triggered when the process produces standard error output.
Definition pipeline.cpp:397
void setName(const QString &name)
Sets the pipeline name.
Definition pipeline.cpp:47
void finishedLast(const Info &info, int exitCode, const QString &message)
Emitted when the last process in the pipeline finishes.
Pipeline(QObject *parent=nullptr)
Constructs a Pipeline instance.
Definition pipeline.cpp:22
void readyReadStandardOutput(const QByteArray &message)
Emitted when new data is available on the standard output stream.
void onFinished(int exitCode, QProcess::ExitStatus status)
Slot triggered when a process finishes execution.
Definition pipeline.cpp:410
bool handleInputData(QByteArray &data) const
Processes incoming output data from the running process.
Definition pipeline.cpp:362
std::mutex mStateMutex
Mutex protecting access to the pipeline state.
Definition pipeline.h:304
void startNextOrEnd(int exitCode, QProcess::ExitStatus status)
Starts the next process or ends the pipeline.
Definition pipeline.cpp:296
void startingPipeline(const Info &info)
Emitted when the complete pipeline is started.
int size() const
Returns the number of processes registered in the pipeline.
Definition pipeline.cpp:52
QString name() const
Returns the pipeline name.
Definition pipeline.cpp:42
QVector< ProcessInfo > processes
Name of the group.
Definition pipeline.h:47
QString currentPath
Name of the current process.
Definition pipeline.h:53
QVector< GroupInfo > groupInfo
Name of the current process path.
Definition pipeline.h:54
Internal representation of a group of processes.
Definition pipeline.h:276
QString name
Name of the group.
Definition pipeline.h:278
std::vector< std::shared_ptr< PipelineProcess > > processes
Queue of processes waiting to be executed.
Definition pipeline.h:281
Internal representation of a process registered in the pipeline.
Definition pipeline.h:258
QProcess * process
Process to be executed.
Definition pipeline.h:260
maki::OnFail onFail
Policy describing behavior when the process fails.
Definition pipeline.h:263
std::function< void(int &exitCode, QProcess::ExitStatus &status)> onFinish
Optional callback executed when the process finishes.
Definition pipeline.h:266
State state
Current state of a single process.
Definition pipeline.h:269
State status
Name of the process.
Definition pipeline.h:41