summaryrefslogtreecommitdiff
path: root/src/moapplication.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-11-07 18:14:24 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-11-07 20:16:27 -0500
commitb4f6275c3ef888551e14e5d64739e1c32978b8e8 (patch)
treeadb5add804f6600c120ef0b8c9d95553a2ea707c /src/moapplication.cpp
parent98b782caff4d1b5c316f5773d7a07494912bb2d8 (diff)
split getCurrentInstance()
Diffstat (limited to 'src/moapplication.cpp')
-rw-r--r--src/moapplication.cpp54
1 files changed, 30 insertions, 24 deletions
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<Instance> 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(