From b4f6275c3ef888551e14e5d64739e1c32978b8e8 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sat, 7 Nov 2020 18:14:24 -0500 Subject: split getCurrentInstance() --- src/moapplication.cpp | 54 ++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 24 deletions(-) (limited to 'src/moapplication.cpp') diff --git a/src/moapplication.cpp b/src/moapplication.cpp index b4ba7da6..24cafd05 100644 --- a/src/moapplication.cpp +++ b/src/moapplication.cpp @@ -160,8 +160,13 @@ int MOApplication::run(SingleInstance& singleInstance) // IOrganizer::getPluginDataPath() MOBase::details::setPluginDataPath(OrganizerCore::pluginDataPath()); + // MO runs in a loop because it can be restarted in several ways, such as + // when switching instances or changing some settings for (;;) { + // resets things when MO is "restarted" + resetForRestart(); + const auto r = doOneRun(singleInstance); if (r == RestartExitCode) { continue; @@ -175,18 +180,37 @@ int MOApplication::doOneRun(SingleInstance& singleInstance) { TimeThis tt("doOneRun() to runApplication()"); - // resets things when MO is "restarted" - resetForRestart(); + auto currentInstance = getCurrentInstance(); + if (!currentInstance) { + return 1; + } + + const QString dataPath = currentInstance->directory(); + setProperty("dataPath", dataPath); + + setExceptionHandlers(); + + if (!setLogDirectory(dataPath)) { + reportError("Failed to create log folder"); + InstanceManager::singleton().clearCurrentInstance(); + return 1; + } + + log::debug("command line: '{}'", QString::fromWCharArray(GetCommandLineW())); + + tt.stop(); + + return runApplication(singleInstance, dataPath, *currentInstance); +} +std::optional MOApplication::getCurrentInstance() +{ auto& m = InstanceManager::singleton(); auto currentInstance = m.currentInstance(); if (!currentInstance) { currentInstance = selectInstance(); - if (!currentInstance) { - return 1; - } } else { @@ -204,28 +228,10 @@ int MOApplication::doOneRun(SingleInstance& singleInstance) } currentInstance = selectInstance(); - if (!currentInstance) { - return 1; - } } } - const QString dataPath = currentInstance->directory(); - setProperty("dataPath", dataPath); - - setExceptionHandlers(); - - if (!setLogDirectory(dataPath)) { - reportError("Failed to create log folder"); - InstanceManager::singleton().clearCurrentInstance(); - return 1; - } - - log::debug("command line: '{}'", QString::fromWCharArray(GetCommandLineW())); - - tt.stop(); - - return runApplication(singleInstance, dataPath, *currentInstance); + return currentInstance; } int MOApplication::runApplication( -- cgit v1.3.1