1 #pragma once
2 
3 #include "common/common_pch.h"
4 
5 #include "mkvtoolnix-gui/util/settings.h"
6 
7 namespace mtx::gui {
8 
9 namespace Jobs {
10 
11 class Job;
12 enum class QueueStatus;
13 
14 class ProgramRunner: public QObject {
15   Q_OBJECT
16 
17 public:
18   using VariableMap = QMap<QString, QStringList>;
19 
20   enum class ExecuteActionCondition {
21     AfterJobFinishes,
22     AfterQueueFinishes,
23   };
24 
25 protected:
26   QMap<ExecuteActionCondition, QSet<Util::Settings::RunProgramConfig *>> m_actionsToExecute;
27 
28 public:
29   explicit ProgramRunner();
30   virtual ~ProgramRunner();
31 
32   virtual void setup();
33   virtual bool isRunProgramTypeSupported(Util::Settings::RunProgramType type);
34 
35   virtual void enableActionToExecute(Util::Settings::RunProgramConfig &config, ExecuteActionCondition condition, bool enable);
36   virtual bool isActionToExecuteEnabled(Util::Settings::RunProgramConfig &config, ExecuteActionCondition condition);
37 
38   virtual void run(Util::Settings::RunProgramForEvent forEvent, std::function<void(VariableMap &)> const &setupVariables, Util::Settings::RunProgramConfigPtr const &forceRunThis = Util::Settings::RunProgramConfigPtr{});
39 
40   virtual QString defaultAudioFileName() const;
41 
42 public Q_SLOTS:
43   virtual void executeActionsAfterJobFinishes(Job const &job);
44   virtual void executeActionsAfterQueueFinishes(Jobs::QueueStatus status);
45 
46 protected:
47   virtual void executeActions(ExecuteActionCondition condition, Job const *job = nullptr);
48   virtual void executeProgram(Util::Settings::RunProgramConfig &config, VariableMap const &variables);
49   virtual void deleteSourceFiles(VariableMap const &variables);
50   virtual void playAudioFile(Util::Settings::RunProgramConfig &config);
51   virtual void shutDownComputer(Util::Settings::RunProgramConfig &config);
52   virtual void hibernateComputer(Util::Settings::RunProgramConfig &config);
53   virtual void sleepComputer(Util::Settings::RunProgramConfig &config);
54 
55 public:
56   static std::unique_ptr<ProgramRunner> create();
57 
58 protected:
59   static void setupGeneralVariables(VariableMap &variables);
60   static QStringList replaceVariables(QStringList const &commandLine, VariableMap const &variables);
61 };
62 
63 }}
64