diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2021-01-10 23:08:07 -0500 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2021-01-18 08:20:07 -0500 |
| commit | aa7a552654ba3b218b87397dedc9e5a66d2f6701 (patch) | |
| tree | fc3807b35268f2c6b3d8297cd6d46ad065dae805 /src | |
| parent | e4ae41e3a29fc3e4714e1c3f8c9f071768d17b68 (diff) | |
implemented exe command
better error when cwd doesn't exist
Diffstat (limited to 'src')
| -rw-r--r-- | src/commandline.cpp | 47 | ||||
| -rw-r--r-- | src/commandline.h | 6 | ||||
| -rw-r--r-- | src/spawn.cpp | 9 |
3 files changed, 49 insertions, 13 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 {}; diff --git a/src/commandline.h b/src/commandline.h index 14a453b2..d2cfbfa1 100644 --- a/src/commandline.h +++ b/src/commandline.h @@ -60,7 +60,7 @@ public: // // virtual std::optional<int> runPreOrganizer(); - virtual std::optional<int> runPostOrganizer(); + virtual std::optional<int> runPostOrganizer(OrganizerCore& organizer); protected: // meta information about this command, returned by derived classes @@ -160,7 +160,7 @@ protected: po::options_description getInternalOptions() const override; po::positional_options_description getPositional() const override; Meta meta() const override; - std::optional<int> runPostOrganizer() override; + std::optional<int> runPostOrganizer(OrganizerCore& organizer) override; }; @@ -171,7 +171,7 @@ class RunCommand : public Command protected: po::options_description getOptions() const; Meta meta() const override; - std::optional<int> runPostOrganizer() override; + std::optional<int> runPostOrganizer(OrganizerCore& organizer) override; }; diff --git a/src/spawn.cpp b/src/spawn.cpp index a9ecb61e..68526165 100644 --- a/src/spawn.cpp +++ b/src/spawn.cpp @@ -164,9 +164,14 @@ QString makeContent(const SpawnParameters& sp, DWORD code) } else if (code == ERROR_FILE_NOT_FOUND) {
return QObject::tr("The file '%1' does not exist.")
.arg(QDir::toNativeSeparators(sp.binary.absoluteFilePath()));
- } else {
- return QString::fromStdWString(formatSystemMessage(code));
+ } else if (code == ERROR_DIRECTORY) {
+ if (!sp.currentDirectory.exists()) {
+ return QObject::tr("The working directory '%1' does not exist.")
+ .arg(QDir::toNativeSeparators(sp.currentDirectory.absolutePath()));
+ }
}
+
+ return QString::fromStdWString(formatSystemMessage(code));
}
QMessageBox::StandardButton badSteamReg(
|
