From 1e4ce5c53c039c6b9c4f943310f3471ad11d4db4 Mon Sep 17 00:00:00 2001 From: Mitternacht822 Date: Thu, 12 Jun 2025 15:15:37 +0400 Subject: [PATCH 1/4] fixed issue with restoring wrong platform specific variables in backup --- client/ui/controllers/settingsController.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client/ui/controllers/settingsController.cpp b/client/ui/controllers/settingsController.cpp index f8e97a1f..260ad3eb 100644 --- a/client/ui/controllers/settingsController.cpp +++ b/client/ui/controllers/settingsController.cpp @@ -131,6 +131,8 @@ void SettingsController::backupAppConfig(const QString &fileName) QJsonObject config = doc.object(); config["Conf/autoStart"] = Autostart::isAutostart(); + config["Conf/killSwitchEnabled"] = isKillSwitchEnabled(); + config["Conf/strictKillSwitchEnabled"] = isStrictKillSwitchEnabled(); SystemController::saveFile(fileName, QJsonDocument(config).toJson()); } @@ -155,6 +157,7 @@ void SettingsController::restoreAppConfigFromData(const QByteArray &data) } toggleAutoStart(autoStart); #endif + m_serversModel->resetModel(); m_languageModel->changeLanguage( static_cast(m_languageModel->getCurrentLanguageIndex())); @@ -170,6 +173,13 @@ void SettingsController::restoreAppConfigFromData(const QByteArray &data) m_sitesModel->setRouteMode(siteSplitTunnelingRouteMode); m_sitesModel->toggleSplitTunneling(siteSplittunnelingEnabled); +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + m_settings->setAutoConnect(false); + m_settings->setStartMinimized(enable); + m_settings->setKillSwitchEnabled(false); + m_settings->setStrictKillSwitchEnabled(false); +#endif + emit restoreBackupFinished(); } else { emit changeSettingsErrorOccurred(tr("Backup file is corrupted")); From d9992e40d8980d9ac4685ba3da6fbc6bef3befb8 Mon Sep 17 00:00:00 2001 From: Mitternacht822 Date: Thu, 12 Jun 2025 15:16:34 +0400 Subject: [PATCH 2/4] fixed wrong line --- client/ui/controllers/settingsController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ui/controllers/settingsController.cpp b/client/ui/controllers/settingsController.cpp index 260ad3eb..8026aafc 100644 --- a/client/ui/controllers/settingsController.cpp +++ b/client/ui/controllers/settingsController.cpp @@ -175,7 +175,7 @@ void SettingsController::restoreAppConfigFromData(const QByteArray &data) #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) m_settings->setAutoConnect(false); - m_settings->setStartMinimized(enable); + m_settings->setStartMinimized(false); m_settings->setKillSwitchEnabled(false); m_settings->setStrictKillSwitchEnabled(false); #endif From 17ee1c837aa182afa8de6fa5e72ff0813b8d5f08 Mon Sep 17 00:00:00 2001 From: Mitternacht822 Date: Tue, 17 Jun 2025 22:37:40 +0400 Subject: [PATCH 3/4] fixed issue when restong app split tunneling mode not intended for windows platform --- client/ui/controllers/settingsController.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ui/controllers/settingsController.cpp b/client/ui/controllers/settingsController.cpp index 8026aafc..8fe4280a 100644 --- a/client/ui/controllers/settingsController.cpp +++ b/client/ui/controllers/settingsController.cpp @@ -167,6 +167,9 @@ void SettingsController::restoreAppConfigFromData(const QByteArray &data) bool appSplittunnelingEnabled = newConfigData.value("Conf/appsSplitTunnelingEnabled").toBool(); m_appSplitTunnelingModel->setRouteMode(appSplitTunnelingRouteMode); m_appSplitTunnelingModel->toggleSplitTunneling(appSplittunnelingEnabled); + #if defined(Q_OS_WINDOWS) + m_appSplitTunnelingModel->setRouteMode(static_cast(Settings::AppsRouteMode::VpnAllExceptApps)); + #endif #endif int siteSplitTunnelingRouteMode = newConfigData.value("Conf/routeMode").toInt(); bool siteSplittunnelingEnabled = newConfigData.value("Conf/sitesSplitTunnelingEnabled").toBool(); From 4d8bba3ef826ac1385f7a4ff8bff23459f30eaa4 Mon Sep 17 00:00:00 2001 From: Mitternacht822 Date: Fri, 27 Jun 2025 17:23:41 +0400 Subject: [PATCH 4/4] added field containing application platform to backup file, added feature to clear appsSplitTunneling list from backup file if backup was made on other platform --- client/ui/controllers/settingsController.cpp | 33 ++++++++++++++++++-- client/ui/controllers/settingsController.h | 2 ++ client/ui/models/appSplitTunnelingModel.cpp | 19 +++++++---- client/ui/models/appSplitTunnelingModel.h | 1 + 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/client/ui/controllers/settingsController.cpp b/client/ui/controllers/settingsController.cpp index 8fe4280a..73806720 100644 --- a/client/ui/controllers/settingsController.cpp +++ b/client/ui/controllers/settingsController.cpp @@ -35,6 +35,23 @@ SettingsController::SettingsController(const QSharedPointer &serve #endif } +QString getPlatformName() +{ +#if defined(Q_OS_WINDOWS) + return "Windows"; +#elif defined(Q_OS_ANDROID) + return "Android"; +#elif defined(Q_OS_LINUX) + return "Linux"; +#elif defined(Q_OS_MACX) + return "MacOS"; +#elif defined(Q_OS_IOS) + return "iOS"; +#else + return "Unknown"; +#endif +} + void SettingsController::toggleAmneziaDns(bool enable) { m_settings->setUseAmneziaDns(enable); @@ -130,6 +147,7 @@ void SettingsController::backupAppConfig(const QString &fileName) QJsonDocument doc = QJsonDocument::fromJson(data); QJsonObject config = doc.object(); + config["AppPlatform"] = getPlatformName(); config["Conf/autoStart"] = Autostart::isAutostart(); config["Conf/killSwitchEnabled"] = isKillSwitchEnabled(); config["Conf/strictKillSwitchEnabled"] = isStrictKillSwitchEnabled(); @@ -164,15 +182,24 @@ void SettingsController::restoreAppConfigFromData(const QByteArray &data) #if defined(Q_OS_WINDOWS) || defined(Q_OS_ANDROID) int appSplitTunnelingRouteMode = newConfigData.value("Conf/appsRouteMode").toInt(); - bool appSplittunnelingEnabled = newConfigData.value("Conf/appsSplitTunnelingEnabled").toBool(); + bool appSplittunnelingEnabled = newConfigData.value("Conf/appsSplitTunnelingEnabled").toString().toLower() == "true"; m_appSplitTunnelingModel->setRouteMode(appSplitTunnelingRouteMode); - m_appSplitTunnelingModel->toggleSplitTunneling(appSplittunnelingEnabled); + #if defined(Q_OS_WINDOWS) m_appSplitTunnelingModel->setRouteMode(static_cast(Settings::AppsRouteMode::VpnAllExceptApps)); #endif + + if (newConfigData.contains("AppPlatform")) { //if backup is from a new version + if (newConfigData.value("AppPlatform").toString() != getPlatformName()) { + m_appSplitTunnelingModel->clearAppsList(); + } + } + + m_appSplitTunnelingModel->toggleSplitTunneling(appSplittunnelingEnabled); #endif + int siteSplitTunnelingRouteMode = newConfigData.value("Conf/routeMode").toInt(); - bool siteSplittunnelingEnabled = newConfigData.value("Conf/sitesSplitTunnelingEnabled").toBool(); + bool siteSplittunnelingEnabled = newConfigData.value("Conf/sitesSplitTunnelingEnabled").toString().toLower() == "true"; m_sitesModel->setRouteMode(siteSplitTunnelingRouteMode); m_sitesModel->toggleSplitTunneling(siteSplittunnelingEnabled); diff --git a/client/ui/controllers/settingsController.h b/client/ui/controllers/settingsController.h index 1485e1a0..a9e686e6 100644 --- a/client/ui/controllers/settingsController.h +++ b/client/ui/controllers/settingsController.h @@ -136,6 +136,8 @@ private: QString m_appVersion; + QString getPlatform(); + QDateTime m_loggingDisableDate; bool m_isDevModeEnabled = false; diff --git a/client/ui/models/appSplitTunnelingModel.cpp b/client/ui/models/appSplitTunnelingModel.cpp index 2fb2d084..77660c96 100644 --- a/client/ui/models/appSplitTunnelingModel.cpp +++ b/client/ui/models/appSplitTunnelingModel.cpp @@ -26,12 +26,12 @@ QVariant AppSplitTunnelingModel::data(const QModelIndex &index, int role) const return QVariant(); switch (role) { - case AppPathRole: { - return m_apps.at(index.row()).appName; - } - default: { - return true; - } + case AppPathRole: { + return m_apps.at(index.row()).appName; + } + default: { + return true; + } } return QVariant(); @@ -59,6 +59,13 @@ void AppSplitTunnelingModel::removeApp(QModelIndex index) endRemoveRows(); } +void AppSplitTunnelingModel::clearAppsList() { + beginResetModel(); + m_apps.clear(); + m_settings->setVpnApps(m_currentRouteMode, m_apps); + endResetModel(); +} + int AppSplitTunnelingModel::getRouteMode() { return m_currentRouteMode; diff --git a/client/ui/models/appSplitTunnelingModel.h b/client/ui/models/appSplitTunnelingModel.h index b96c0472..998ced49 100644 --- a/client/ui/models/appSplitTunnelingModel.h +++ b/client/ui/models/appSplitTunnelingModel.h @@ -29,6 +29,7 @@ public: public slots: bool addApp(const InstalledAppInfo &appInfo); void removeApp(QModelIndex index); + void clearAppsList(); int getRouteMode(); void setRouteMode(int routeMode);