diff options
| author | LostDragonist <lost.dragonist@gmail.com> | 2019-09-11 11:45:32 -0500 |
|---|---|---|
| committer | LostDragonist <lost.dragonist@gmail.com> | 2019-09-11 11:45:32 -0500 |
| commit | 4d9c1db885bd3ab230440b25e70dcd8049cf4650 (patch) | |
| tree | 06ed754185e3b1dbbfe09563ca4a0499cc5aace7 /src | |
| parent | 99fdbb2539227cec4fab534efc7420cfc5ca1a92 (diff) | |
Add portable lock feature
If the file "portable.txt" is present in the application directory,
MO will force itself to be launched as a portable instance. The
change game button and menu item are hidden to prevent the user
from changing out of the portable instance.
Diffstat (limited to 'src')
| -rw-r--r-- | src/instancemanager.cpp | 21 | ||||
| -rw-r--r-- | src/instancemanager.h | 3 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 4 | ||||
| -rw-r--r-- | src/shared/appconfig.inc | 1 |
4 files changed, 29 insertions, 0 deletions
diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp index fdc30e22..c0d343de 100644 --- a/src/instancemanager.cpp +++ b/src/instancemanager.cpp @@ -186,6 +186,10 @@ QString InstanceManager::queryInstanceName(const QStringList &instanceList) cons QString InstanceManager::chooseInstance(const QStringList &instanceList) const { + if (portableInstallIsLocked()) { + return QString(); + } + enum class Special : uint8_t { NewInstance, Portable, @@ -266,6 +270,19 @@ bool InstanceManager::portableInstall() const } +bool InstanceManager::portableInstallIsLocked() const +{ + return QFile::exists(qApp->applicationDirPath() + "/" + + QString::fromStdWString(AppConfig::portableLockFileName())); +} + + +bool InstanceManager::allowedToChangeInstance() const +{ + return !portableInstallIsLocked(); +} + + void InstanceManager::createDataPath(const QString &dataPath) const { if (!QDir(dataPath).exists()) { @@ -286,6 +303,10 @@ void InstanceManager::createDataPath(const QString &dataPath) const QString InstanceManager::determineDataPath() { QString instanceId = currentInstance(); + if (portableInstallIsLocked()) + { + instanceId.clear(); + } if (instanceId.isEmpty() && !m_Reset && (m_overrideInstance || portableInstall())) { // startup, apparently using portable mode before diff --git a/src/instancemanager.h b/src/instancemanager.h index 4efa6f03..0e31fb08 100644 --- a/src/instancemanager.h +++ b/src/instancemanager.h @@ -38,6 +38,8 @@ public: QString currentInstance() const; + bool allowedToChangeInstance() const; + private: InstanceManager(); @@ -58,6 +60,7 @@ private: void createDataPath(const QString &dataPath) const; bool portableInstall() const; + bool portableInstallIsLocked() const; private: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 657c1a27..bd9f1486 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -727,6 +727,10 @@ void MainWindow::setupToolbar() } else { log::warn("no separator found on the toolbar, icons won't be right-aligned"); } + + if (!InstanceManager::instance().allowedToChangeInstance()) { + ui->actionChange_Game->setVisible(false); + } } void MainWindow::setupActionMenu(QAction* a) diff --git a/src/shared/appconfig.inc b/src/shared/appconfig.inc index e572a32b..709c845d 100644 --- a/src/shared/appconfig.inc +++ b/src/shared/appconfig.inc @@ -17,6 +17,7 @@ APPPARAM(std::wstring, proxyDLLOrig, L"steam_api_orig.dll") // needs to be ident APPPARAM(std::wstring, proxyDLLSource, L"proxy.dll")
APPPARAM(std::wstring, vfs32DLLName, L"usvfs_x86.dll")
APPPARAM(std::wstring, vfs64DLLName, L"usvfs_x64.dll")
+APPPARAM(std::wstring, portableLockFileName, L"portable.txt")
APPPARAM(const wchar_t*, localSavePlaceholder, L"__MOProfileSave__\\")
APPPARAM(std::wstring, firstStepsTutorial, L"tutorial_firststeps_main.js")
|
