diff options
Diffstat (limited to 'src/commandline.cpp')
| -rw-r--r-- | src/commandline.cpp | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/src/commandline.cpp b/src/commandline.cpp index c31b726f..596ece68 100644 --- a/src/commandline.cpp +++ b/src/commandline.cpp @@ -2,6 +2,7 @@ #include "env.h" #include "organizercore.h" #include "shared/util.h" +#include "shared/error_report.h" #include <log.h> #include <report.h> @@ -251,7 +252,7 @@ std::optional<int> CommandLine::run(OrganizerCore& organizer) const return 1; } } else if (m_command) { - return m_command->runPostOrganizer(); + return m_command->runPostOrganizer(organizer); } return {}; @@ -483,7 +484,7 @@ std::optional<int> Command::runPreOrganizer() return {}; } -std::optional<int> Command::runPostOrganizer() +std::optional<int> Command::runPostOrganizer(OrganizerCore&) { return {}; } @@ -655,13 +656,43 @@ Command::Meta ExeCommand::meta() const return {"exe", "launches a configured executable"}; } -std::optional<int> ExeCommand::runPostOrganizer() +std::optional<int> ExeCommand::runPostOrganizer(OrganizerCore& organizer) { - const auto exe = vm()["exe-name"].as<std::string>(); - const auto args = vm()["arguments"].as<std::string>(); - const auto cwd = vm()["cwd"].as<std::string>(); + const auto exe = QString::fromStdString(vm()["exe-name"].as<std::string>()); - std::cout << "not implemented\n"; + const auto& exes = *organizer.executablesList(); + + auto itor = exes.find(exe); + if (itor == exes.end()) { + MOShared::criticalOnTop(QObject::tr("Executable '%1' not found.").arg(exe)); + return 1; + } + + try { + // make sure MO doesn't exit even if locking is disabled, ForceWait and + // PreventExit will do that + auto p = organizer.processRunner(); + + p.setFromExecutable(*itor); + + if (vm().count("arguments")) { + p.setArguments(QString::fromStdString(vm()["arguments"].as<std::string>())); + } + + if (vm().count("cwd")) { + p.setCurrentDirectory(QString::fromStdString(vm()["cwd"].as<std::string>())); + } + + p.setWaitForCompletion(ProcessRunner::ForceWait, UILocker::PreventExit); + p.run(); + + return 0; + } + catch (const std::exception &e) { + reportError( + QObject::tr("failed to start shortcut: %1").arg(e.what())); + return 1; + } return 0; } @@ -677,7 +708,7 @@ Command::Meta RunCommand::meta() const return {"run", "launches an arbitrary program"}; } -std::optional<int> RunCommand::runPostOrganizer() +std::optional<int> RunCommand::runPostOrganizer(OrganizerCore&) { std::cout << "not implemented\n"; return {}; |
