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