summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-07-18 00:35:26 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2020-11-03 11:39:01 -0500
commitb103f297752b170ee4ade6e0e9085c6d31c020ca (patch)
treebe9c58357e069e4b5e7add1fc24016a0d44d3283 /src/main.cpp
parenta7d4f2a0c40d35d547e93994be3f92b6d43a0833 (diff)
added --multiple to allow launching multiple instances
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp47
1 files changed, 28 insertions, 19 deletions
diff --git a/src/main.cpp b/src/main.cpp
index a81ae962..7130d15c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -112,19 +112,19 @@ bool createAndMakeWritable(const std::wstring &subPath) {
}
}
-bool bootstrap()
+void purgeOldFiles()
{
- // remove the temporary backup directory in case we're restarting after an update
+ // remove the temporary backup directory in case we're restarting after an
+ // update
QString backupDirectory = qApp->applicationDirPath() + "/update_backup";
if (QDir(backupDirectory).exists()) {
shellDelete(QStringList(backupDirectory));
}
// cycle log file
- removeOldFiles(qApp->property("dataPath").toString() + "/" + QString::fromStdWString(AppConfig::logPath()),
- "usvfs*.log", 5, QDir::Name);
-
- return true;
+ removeOldFiles(
+ qApp->property("dataPath").toString() + "/" + QString::fromStdWString(AppConfig::logPath()),
+ "usvfs*.log", 5, QDir::Name);
}
thread_local LPTOP_LEVEL_EXCEPTION_FILTER prevUnhandledExceptionFilter = nullptr;
@@ -533,8 +533,9 @@ static QString getVersionDisplayString()
}
-int runApplication(MOApplication &application, SingleInstance &instance,
- const QString &splashPath)
+int runApplication(
+ MOApplication &application, QStringList& arguments,
+ SingleInstance &instance, const QString &splashPath)
{
TimeThis tt("runApplication() to exec()");
@@ -555,17 +556,13 @@ int runApplication(MOApplication &application, SingleInstance &instance,
log::debug("this is a portable instance");
}
- if (!bootstrap()) {
- reportError("failed to set up data paths");
- InstanceManager::instance().clearCurrentInstance();
- return 1;
+ if (!instance.secondary()) {
+ purgeOldFiles();
}
QWindowsWindowFunctions::setWindowActivationBehavior(
QWindowsWindowFunctions::AlwaysActivateWindow);
- QStringList arguments = application.arguments();
-
try {
log::info("working directory: {}", QDir::currentPath());
@@ -574,6 +571,11 @@ int runApplication(MOApplication &application, SingleInstance &instance,
log::debug("using ini at '{}'", settings.filename());
+ if (instance.secondary()) {
+ log::debug("another instance of MO is running but --multiple was given");
+ }
+
+
// global crashDumpType sits in OrganizerCore to make a bit less ugly to
// update it when the settings are changed during runtime
OrganizerCore::setGlobalCrashDumpsType(settings.diagnostics().crashDumpsType());
@@ -929,16 +931,23 @@ int main(int argc, char *argv[])
setupPath();
- bool forcePrimary = false;
+
+ SingleInstance::Flags siFlags = SingleInstance::NoFlags;
+
if (arguments.contains("update")) {
arguments.removeAll("update");
- forcePrimary = true;
+ siFlags |= SingleInstance::ForcePrimary;
+ }
+
+ if (arguments.contains("--multiple")) {
+ arguments.removeAll("--multiple");
+ siFlags |= SingleInstance::AllowMultiple;
}
MOShortcut moshortcut{ arguments.size() > 1 ? arguments.at(1) : "" };
- SingleInstance instance(forcePrimary);
- if (!instance.primaryInstance()) {
+ SingleInstance instance(siFlags);
+ if (instance.ephemeral()) {
if (moshortcut ||
arguments.size() > 1 && OrganizerCore::isNxmLink(arguments.at(1)))
{
@@ -998,7 +1007,7 @@ int main(int argc, char *argv[])
tt.stop();
- const int result = runApplication(application, instance, splash);
+ const int result = runApplication(application, arguments, instance, splash);
if (result != RestartExitCode) {
return result;
}