summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-10-24 02:28:20 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-11-06 07:42:57 -0500
commite43500eaf5d40bcd28ba5a820cdbc754cfb47e40 (patch)
tree7e7fafe036453cc585855eb1f3275335c37e7fb6
parent4fb79cae456986795be3f504d440048e476dffb3 (diff)
renamed runExecutable() to runExecutablefile()
added runExecutable() for Executable class, also used by runShortcut()
-rw-r--r--src/mainwindow.cpp24
-rw-r--r--src/modinfodialogconflicts.cpp2
-rw-r--r--src/organizercore.cpp79
-rw-r--r--src/organizercore.h10
4 files changed, 59 insertions, 56 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index b5b9ab0d..2474fdc0 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1542,26 +1542,8 @@ void MainWindow::startExeAction()
}
action->setEnabled(false);
- const Executable& exe = *itor;
- auto& profile = *m_OrganizerCore.currentProfile();
-
- QString customOverwrite = profile.setting("custom_overwrites", exe.title()).toString();
- auto forcedLibraries = profile.determineForcedLibraries(exe.title());
-
- if (!profile.forcedLibrariesEnabled(exe.title())) {
- forcedLibraries.clear();
- }
-
- m_OrganizerCore.spawnBinary(
- exe.binaryInfo(), exe.arguments(),
- exe.workingDirectory().length() != 0
- ? exe.workingDirectory()
- : exe.binaryInfo().absolutePath(),
- exe.steamAppID(),
- customOverwrite,
- forcedLibraries);
+ m_OrganizerCore.runExecutable(*itor);
action->setEnabled(true);
-
}
void MainWindow::activateSelectedProfile()
@@ -2387,7 +2369,7 @@ void MainWindow::on_startButton_clicked()
forcedLibraries.clear();
}
- m_OrganizerCore.spawnBinary(
+ m_OrganizerCore.runExecutableFile(
selectedExecutable->binaryInfo(),
selectedExecutable->arguments(),
selectedExecutable->workingDirectory().length() != 0 ?
@@ -5477,7 +5459,7 @@ void MainWindow::openDataFile()
}
QFileInfo targetInfo(m_ContextItem->data(0, Qt::UserRole).toString());
- m_OrganizerCore.executeFileVirtualized(this, targetInfo);
+ m_OrganizerCore.runFile(this, targetInfo);
}
void MainWindow::openDataOriginExplorer_clicked()
diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp
index 36559a75..68b1be6b 100644
--- a/src/modinfodialogconflicts.cpp
+++ b/src/modinfodialogconflicts.cpp
@@ -527,7 +527,7 @@ void ConflictsTab::openItems(QTreeView* tree)
// the menu item is only shown for a single selection, but handle all of them
// in case this changes
for_each_in_selection(tree, [&](const ConflictItem* item) {
- core().executeFileVirtualized(parentWidget(), item->fileName());
+ core().runFile(parentWidget(), item->fileName());
return true;
});
}
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 4270f3b4..6f36ee3e 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -1188,7 +1188,7 @@ bool OrganizerCore::runFile(
switch (type)
{
case FileExecutionTypes::Executable: {
- runExecutable(
+ runExecutableFile(
binaryInfo, arguments, currentProfile()->name(),
targetInfo.absolutePath());
@@ -1208,25 +1208,33 @@ bool OrganizerCore::runFile(
return false;
}
-void OrganizerCore::runExecutable(
+bool OrganizerCore::runExecutableFile(
const QFileInfo &binary, const QString &arguments,
const QDir &currentDirectory, const QString &steamAppID,
const QString &customOverwrite,
- const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries)
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries,
+ bool refresh)
{
DWORD processExitCode = 0;
HANDLE processHandle = spawnAndWait(
binary, arguments, m_CurrentProfile->name(), currentDirectory, steamAppID,
customOverwrite, forcedLibraries, &processExitCode);
- if (processHandle != INVALID_HANDLE_VALUE) {
+ if (processHandle == INVALID_HANDLE_VALUE) {
+ // failed
+ return false;
+ }
+
+ if (refresh) {
refreshDirectoryStructure();
+
// need to remove our stored load order because it may be outdated if a foreign tool changed the
// file time. After removing that file, refreshESPList will use the file time as the order
if (managedGame()->loadOrderMechanism() == IPluginGame::LoadOrderMechanism::FileTime) {
log::debug("removing loadorder.txt");
QFile::remove(m_CurrentProfile->getLoadOrderFileName());
}
+
refreshDirectoryStructure();
refreshESPList(true);
@@ -1235,6 +1243,42 @@ void OrganizerCore::runExecutable(
//These callbacks should not fiddle with directoy structure and ESPs.
m_FinishedRun(binary.absoluteFilePath(), processExitCode);
}
+
+ return true;
+}
+
+bool OrganizerCore::runExecutable(const Executable& exe, bool refresh)
+{
+ const QString customOverwrite = m_CurrentProfile->setting(
+ "custom_overwrites", exe.title()).toString();
+
+ QList<MOBase::ExecutableForcedLoadSetting> forcedLibraries;
+
+ if (m_CurrentProfile->forcedLibrariesEnabled(exe.title())) {
+ forcedLibraries = m_CurrentProfile->determineForcedLibraries(exe.title());
+ }
+
+ return runExecutableFile(
+ exe.binaryInfo(),
+ exe.arguments(),
+ exe.workingDirectory().length() != 0 ? exe.workingDirectory() : exe.binaryInfo().absolutePath(),
+ exe.steamAppID(),
+ customOverwrite,
+ forcedLibraries,
+ refresh);
+}
+
+bool OrganizerCore::runShortcut(const MOShortcut& shortcut)
+{
+ if (shortcut.hasInstance() && shortcut.instance() != InstanceManager::instance().currentInstance()) {
+ throw std::runtime_error(
+ QString("Refusing to run executable from different instance %1:%2")
+ .arg(shortcut.instance(),shortcut.executable())
+ .toLocal8Bit().constData());
+ }
+
+ const Executable& exe = m_ExecutablesList.get(shortcut.executable());
+ return runExecutable(exe, false);
}
HANDLE OrganizerCore::spawnAndWait(
@@ -1318,33 +1362,6 @@ HANDLE OrganizerCore::spawnAndWait(
return handle;
}
-
-HANDLE OrganizerCore::runShortcut(const MOShortcut& shortcut)
-{
- if (shortcut.hasInstance() && shortcut.instance() != InstanceManager::instance().currentInstance())
- throw std::runtime_error(
- QString("Refusing to run executable from different instance %1:%2")
- .arg(shortcut.instance(),shortcut.executable())
- .toLocal8Bit().constData());
-
- const Executable& exe = m_ExecutablesList.get(shortcut.executable());
-
- auto forcedLibaries = m_CurrentProfile->determineForcedLibraries(shortcut.executable());
- if (!m_CurrentProfile->forcedLibrariesEnabled(shortcut.executable())) {
- forcedLibaries.clear();
- }
-
- return spawnAndWait(
- exe.binaryInfo(), exe.arguments(),
- m_CurrentProfile->name(),
- exe.workingDirectory().length() != 0
- ? exe.workingDirectory()
- : exe.binaryInfo().absolutePath(),
- exe.steamAppID(),
- "",
- forcedLibaries);
-}
-
HANDLE OrganizerCore::startApplication(const QString &executable,
const QStringList &args,
const QString &cwd,
diff --git a/src/organizercore.h b/src/organizercore.h
index 6628452c..ca87a05c 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -163,11 +163,16 @@ public:
bool runFile(QWidget* parent, const QFileInfo& targetInfo);
- void runExecutable(
+ bool runExecutableFile(
const QFileInfo &binary, const QString &arguments,
const QDir &currentDirectory, const QString &steamAppID={},
const QString &customOverwrite={},
- const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries={});
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries={},
+ bool refresh=true);
+
+ bool runExecutable(const Executable& exe, bool refresh=true);
+
+ bool runShortcut(const MOShortcut& shortcut);
void loginSuccessfulUpdate(bool necessary);
void loginFailedUpdate(const QString &message);
@@ -222,7 +227,6 @@ public:
DownloadManager *downloadManager();
PluginList *pluginList();
ModList *modList();
- HANDLE runShortcut(const MOShortcut& shortcut);
HANDLE startApplication(const QString &executable, const QStringList &args, const QString &cwd, const QString &profile, const QString &forcedCustomOverwrite = "", bool ignoreCustomOverwrite = false);
bool waitForApplication(HANDLE processHandle, LPDWORD exitCode = nullptr);
HANDLE findAndOpenAUSVFSProcess(const std::vector<QString>& hiddenList, DWORD preferedParentPid);