From aa7a552654ba3b218b87397dedc9e5a66d2f6701 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sun, 10 Jan 2021 23:08:07 -0500 Subject: implemented exe command better error when cwd doesn't exist --- src/commandline.cpp | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) (limited to 'src/commandline.cpp') 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 #include @@ -251,7 +252,7 @@ std::optional 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 Command::runPreOrganizer() return {}; } -std::optional Command::runPostOrganizer() +std::optional Command::runPostOrganizer(OrganizerCore&) { return {}; } @@ -655,13 +656,43 @@ Command::Meta ExeCommand::meta() const return {"exe", "launches a configured executable"}; } -std::optional ExeCommand::runPostOrganizer() +std::optional ExeCommand::runPostOrganizer(OrganizerCore& organizer) { - const auto exe = vm()["exe-name"].as(); - const auto args = vm()["arguments"].as(); - const auto cwd = vm()["cwd"].as(); + const auto exe = QString::fromStdString(vm()["exe-name"].as()); - 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())); + } + + if (vm().count("cwd")) { + p.setCurrentDirectory(QString::fromStdString(vm()["cwd"].as())); + } + + 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 RunCommand::runPostOrganizer() +std::optional RunCommand::runPostOrganizer(OrganizerCore&) { std::cout << "not implemented\n"; return {}; -- cgit v1.3.1