From 7e8018481284ff9ac1915425e9ed94d532ab33db Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Mon, 11 Jan 2021 00:01:50 -0500 Subject: merged exe and run commands, added -e flag instead added dialog when selected profile doesn't exist, this can happen with -p on the command line --- src/commandline.cpp | 92 ++++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) (limited to 'src/commandline.cpp') diff --git a/src/commandline.cpp b/src/commandline.cpp index 596ece68..fd0f6cb5 100644 --- a/src/commandline.cpp +++ b/src/commandline.cpp @@ -1,6 +1,7 @@ #include "commandline.h" #include "env.h" #include "organizercore.h" +#include "instancemanager.h" #include "shared/util.h" #include "shared/error_report.h" #include @@ -53,7 +54,6 @@ CommandLine::CommandLine() : m_command(nullptr) { createOptions(); - m_commands.push_back(std::make_unique()); m_commands.push_back(std::make_unique()); m_commands.push_back(std::make_unique()); m_commands.push_back(std::make_unique()); @@ -616,64 +616,74 @@ LPCWSTR LaunchCommand::UntouchedCommandLineArguments( } -std::string ExeCommand::getUsageLine() const +std::string RunCommand::getUsageLine() const { - return "[options] exe-name"; + return "[options] program"; } -po::options_description ExeCommand::getVisibleOptions() const +po::options_description RunCommand::getVisibleOptions() const { po::options_description d; d.add_options() - ("arguments,a", po::value()->default_value(""), "override arguments") - ("cwd,c", po::value()->default_value(""), "override working directory"); + ("executable,e", po::value()->default_value(false)->zero_tokens(), "the program is a configured executable name") + ("arguments,a", po::value(), "override arguments") + ("cwd,c", po::value(), "override working directory"); return d; } -po::options_description ExeCommand::getInternalOptions() const +po::options_description RunCommand::getInternalOptions() const { po::options_description d; d.add_options() - ("exe-name", po::value()->required(), "executable name"); + ("program", po::value()->required(), "program or executable name"); return d; } -po::positional_options_description ExeCommand::getPositional() const +po::positional_options_description RunCommand::getPositional() const { po::positional_options_description d; - d.add("exe-name", 1); + d.add("program", 1); return d; } -Command::Meta ExeCommand::meta() const +Command::Meta RunCommand::meta() const { - return {"exe", "launches a configured executable"}; + return {"run", "runs a program, file or a configured executable"}; } -std::optional ExeCommand::runPostOrganizer(OrganizerCore& organizer) +std::optional RunCommand::runPostOrganizer(OrganizerCore& organizer) { - const auto exe = QString::fromStdString(vm()["exe-name"].as()); - - 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; - } + const auto program = QString::fromStdString(vm()["program"].as()); - try { + 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()["executable"].as()) { + const auto& exes = *organizer.executablesList(); + + auto itor = exes.find(program); + if (itor == exes.end()) { + MOShared::criticalOnTop( + QObject::tr("Executable '%1' not found in instance '%2'.") + .arg(program) + .arg(InstanceManager::singleton().currentInstance()->name())); + + return 1; + } + + p.setFromExecutable(*itor); + } else { + p.setFromFile(nullptr, QFileInfo(program)); + } if (vm().count("arguments")) { p.setArguments(QString::fromStdString(vm()["arguments"].as())); @@ -684,34 +694,24 @@ std::optional ExeCommand::runPostOrganizer(OrganizerCore& organizer) } p.setWaitForCompletion(ProcessRunner::ForceWait, UILocker::PreventExit); - p.run(); + + const auto r = p.run(); + if (r == ProcessRunner::Error) { + MOShared::criticalOnTop( + QObject::tr("Failed to run '%1'. The logs might have more information.").arg(program)); + + return 1; + } return 0; } catch (const std::exception &e) { - reportError( - QObject::tr("failed to start shortcut: %1").arg(e.what())); + MOShared::criticalOnTop( + QObject::tr("Failed to run '%1'. The logs might have more information. %2") + .arg(program).arg(e.what())); + return 1; } - - return 0; -} - - -po::options_description RunCommand::getOptions() const -{ - return {}; -} - -Command::Meta RunCommand::meta() const -{ - return {"run", "launches an arbitrary program"}; -} - -std::optional RunCommand::runPostOrganizer(OrganizerCore&) -{ - std::cout << "not implemented\n"; - return {}; } } // namespace -- cgit v1.3.1