From 7bd1340190abd10964731d66228ba671b3f87aaf Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Sun, 15 Oct 2023 20:41:49 +0500 Subject: [PATCH 1/4] fixed display of sites on page split tunneling --- client/amnezia_application.cpp | 2 +- client/translations/amneziavpn_ru.ts | 44 ++++++++++++------- client/translations/amneziavpn_zh_CN.ts | 44 ++++++++++++------- client/ui/models/sites_model.cpp | 22 +++++++++- client/ui/models/sites_model.h | 4 ++ .../ui/qml/Pages2/PageSettingsConnection.qml | 2 +- .../qml/Pages2/PageSettingsSplitTunneling.qml | 15 ++----- 7 files changed, 85 insertions(+), 48 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 4e6bce2b..229aa7b8 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -297,7 +297,7 @@ void AmneziaApplication::initModels() connect(m_containersModel.get(), &ContainersModel::defaultContainerChanged, this, [this]() { if (m_containersModel->getDefaultContainer() == DockerContainer::WireGuard && m_sitesModel->getRouteMode() != Settings::RouteMode::VpnAllSites) { - m_sitesModel->setRouteMode(Settings::RouteMode::VpnAllSites); + m_sitesModel->toggleSplitTunneling(false); emit m_pageController->showNotificationMessage( tr("Split tunneling for WireGuard is not implemented, the option was disabled")); } diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index d3eef897..14973fbd 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -1471,75 +1471,75 @@ Already installed containers were found on the server. All installed containers Раздельно VPN-туннелирование - + Mode Режим - + Remove Удалить - + Continue Продолжить - + Cancel Отменить - + Site or IP Сайт или IP - + Import/Export Sites Импорт/экспорт Сайтов - + Import Импорт - + Save site list Сохранить список сайтов - + Save sites Сохранить - - - + + + Sites files (*.json) Sites files (*.json) - + Import a list of sites Импортировать список с сайтами - + Replace site list Заменить список сайтов - - + + Open sites file Открыть список с сайтами - + Add imported sites to existing ones Добавление импортированных сайтов к существующим @@ -2621,6 +2621,16 @@ IKEv2 with IPSec encryption layer. Transmits data over fixed UDP ports 500 and 4 error 0x%1: %2 error 0x%1: %2 + + + WireGuard Configuration Highlighter + + + + + &Randomize colors + + SelectLanguageDrawer diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index be519a91..b439deaa 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -1573,75 +1573,75 @@ And if you don't like the app, all the more support it - the donation will 隧道分离 - + Mode 规则 - + Remove 移除 - + Continue 继续 - + Cancel 取消 - + Site or IP 网站或IP地址 - + Import/Export Sites 导入/导出网站 - + Import 导入 - + Save site list 保存网址 - + Save sites 保存网址 - - - + + + Sites files (*.json) - + Import a list of sites 导入网址列表 - + Replace site list 替换网址列表 - - + + Open sites file 打开网址文件 - + Add imported sites to existing ones 将导入的网址添加到现有网址中 @@ -2758,6 +2758,16 @@ IKEv2 with IPSec encryption layer. Transmits data over fixed UDP ports 500 and 4 error 0x%1: %2 错误 0x%1: %2 + + + WireGuard Configuration Highlighter + + + + + &Randomize colors + + SelectLanguageDrawer diff --git a/client/ui/models/sites_model.cpp b/client/ui/models/sites_model.cpp index 5fd9a38b..1e0f1692 100644 --- a/client/ui/models/sites_model.cpp +++ b/client/ui/models/sites_model.cpp @@ -3,7 +3,13 @@ SitesModel::SitesModel(std::shared_ptr settings, QObject *parent) : QAbstractListModel(parent), m_settings(settings) { - m_currentRouteMode = m_settings->routeMode(); + auto routeMode = m_settings->routeMode(); + if (routeMode == Settings::RouteMode::VpnAllSites) { + m_isSplitTunnelingEnabled = false; + m_currentRouteMode = Settings::RouteMode::VpnOnlyForwardSites; + } else { + m_currentRouteMode = routeMode; + } fillSites(); } @@ -93,6 +99,20 @@ void SitesModel::setRouteMode(int routeMode) emit routeModeChanged(); } +bool SitesModel::isSplitTunnelingEnabled() +{ + return m_isSplitTunnelingEnabled; +} + +void SitesModel::toggleSplitTunneling(bool enabled) +{ + if (enabled) { + setRouteMode(m_currentRouteMode); + } else { + m_settings->setRouteMode(Settings::RouteMode::VpnAllSites); + } +} + QVector > SitesModel::getCurrentSites() { return m_sites; diff --git a/client/ui/models/sites_model.h b/client/ui/models/sites_model.h index 70def0ec..ad16b7a3 100644 --- a/client/ui/models/sites_model.h +++ b/client/ui/models/sites_model.h @@ -31,6 +31,9 @@ public slots: int getRouteMode(); void setRouteMode(int routeMode); + bool isSplitTunnelingEnabled(); + void toggleSplitTunneling(bool enabled); + QVector> getCurrentSites(); signals: @@ -44,6 +47,7 @@ private: std::shared_ptr m_settings; + bool m_isSplitTunnelingEnabled; Settings::RouteMode m_currentRouteMode; QVector> m_sites; diff --git a/client/ui/qml/Pages2/PageSettingsConnection.qml b/client/ui/qml/Pages2/PageSettingsConnection.qml index 7f0262f9..b5b1bd97 100644 --- a/client/ui/qml/Pages2/PageSettingsConnection.qml +++ b/client/ui/qml/Pages2/PageSettingsConnection.qml @@ -112,7 +112,7 @@ PageType { } LabelWithButtonType { - visible: !GC.isMobile() + visible: false//!GC.isMobile() Layout.fillWidth: true diff --git a/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml index cc4973f1..d7f77871 100644 --- a/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml +++ b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml @@ -93,22 +93,15 @@ PageType { SwitcherType { id: switcher - property int lastActiveRouteMode: routeMode.onlyForwardSites - enabled: root.pageEnabled Layout.fillWidth: true Layout.rightMargin: 16 - checked: SitesModel.routeMode !== routeMode.allSites - onToggled: { - if (checked) { - SitesModel.routeMode = lastActiveRouteMode - } else { - lastActiveRouteMode = SitesModel.routeMode - selector.text = root.routeModesModel[getRouteModesModelIndex()].name - SitesModel.routeMode = routeMode.allSites - } + checked: SitesModel.isSplitTunnelingEnabled() + onToggled: { + SitesModel.toggleSplitTunneling(checked) + selector.text = root.routeModesModel[getRouteModesModelIndex()].name } } } From 2a4a01a4bec1e73dbfd7a9be6fc1cacfa0ede2b8 Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Mon, 16 Oct 2023 13:28:37 +0500 Subject: [PATCH 2/4] removed split site tunneling page blocking when switcher is turned off --- client/ui/qml/Pages2/PageSettingsSplitTunneling.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml index d7f77871..873ae997 100644 --- a/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml +++ b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml @@ -116,7 +116,7 @@ PageType { drawerHeight: 0.4375 - enabled: switcher.checked && root.pageEnabled + enabled: root.pageEnabled headerText: qsTr("Mode") @@ -158,7 +158,7 @@ PageType { anchors.topMargin: 16 contentHeight: col.implicitHeight + addSiteButton.implicitHeight + addSiteButton.anchors.bottomMargin + addSiteButton.anchors.topMargin - enabled: switcher.checked && root.pageEnabled + enabled: root.pageEnabled Column { id: col From 9cf5590371876be5f084fbbc1622f60455f803a3 Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Mon, 16 Oct 2023 15:17:09 +0500 Subject: [PATCH 3/4] disabled split site tunneling for awg --- client/amnezia_application.cpp | 15 +++++++++------ client/translations/amneziavpn_ru.ts | 8 ++++++-- client/translations/amneziavpn_zh_CN.ts | 8 ++++++-- client/ui/models/sites_model.cpp | 1 + client/ui/qml/Pages2/PageSettingsConnection.qml | 2 +- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 904ffaa6..da00dae7 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -139,7 +139,8 @@ void AmneziaApplication::init() &ConnectionController::openConnection); connect(m_notificationHandler.get(), &NotificationHandler::disconnectRequested, m_connectionController.get(), &ConnectionController::closeConnection); - connect(this, &AmneziaApplication::translationsUpdated, m_notificationHandler.get(), &NotificationHandler::onTranslationsUpdated); + connect(this, &AmneziaApplication::translationsUpdated, m_notificationHandler.get(), + &NotificationHandler::onTranslationsUpdated); m_engine->load(url); m_systemController->setQmlRoot(m_engine->rootObjects().value(0)); @@ -226,14 +227,13 @@ void AmneziaApplication::loadTranslator() updateTranslator(locale); } - void AmneziaApplication::updateTranslator(const QLocale &locale) { if (!m_translator->isEmpty()) { QCoreApplication::removeTranslator(m_translator.get()); } - QString strFileName = QString(":/translations/amneziavpn")+QLatin1String("_")+locale.name()+".qm"; + QString strFileName = QString(":/translations/amneziavpn") + QLatin1String("_") + locale.name() + ".qm"; if (m_translator->load(strFileName)) { if (QCoreApplication::installTranslator(m_translator.get())) { m_settings->setAppLanguage(locale); @@ -295,11 +295,13 @@ void AmneziaApplication::initModels() m_sitesModel.reset(new SitesModel(m_settings, this)); m_engine->rootContext()->setContextProperty("SitesModel", m_sitesModel.get()); connect(m_containersModel.get(), &ContainersModel::defaultContainerChanged, this, [this]() { - if (m_containersModel->getDefaultContainer() == DockerContainer::WireGuard + if ((m_containersModel->getDefaultContainer() == DockerContainer::WireGuard + || m_containersModel->getDefaultContainer() == DockerContainer::Awg) && m_sitesModel->isSplitTunnelingEnabled()) { m_sitesModel->toggleSplitTunneling(false); emit m_pageController->showNotificationMessage( - tr("Split tunneling for WireGuard is not implemented, the option was disabled")); + tr("Split tunneling for %1 is not implemented, the option was disabled") + .arg(ContainerProps::containerHumanNames().value(m_containersModel->getDefaultContainer()))); } }); @@ -335,7 +337,8 @@ void AmneziaApplication::initControllers() m_connectionController.reset(new ConnectionController(m_serversModel, m_containersModel, m_vpnConnection)); m_engine->rootContext()->setContextProperty("ConnectionController", m_connectionController.get()); - connect(this, &AmneziaApplication::translationsUpdated, m_connectionController.get(), &ConnectionController::onTranslationsUpdated); + connect(this, &AmneziaApplication::translationsUpdated, m_connectionController.get(), + &ConnectionController::onTranslationsUpdated); m_pageController.reset(new PageController(m_serversModel, m_settings)); m_engine->rootContext()->setContextProperty("PageController", m_pageController.get()); diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index de026ce1..acb7ac09 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -4,9 +4,13 @@ AmneziaApplication - Split tunneling for WireGuard is not implemented, the option was disabled - Раздельное туннелирование для "Wireguard" не реализовано,опция отключена + Раздельное туннелирование для "Wireguard" не реализовано,опция отключена + + + + Split tunneling for %1 is not implemented, the option was disabled + Раздельное туннелирование для %1 не реализовано, опция отключена diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index 77879a50..658a2c15 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -4,9 +4,13 @@ AmneziaApplication - Split tunneling for WireGuard is not implemented, the option was disabled - 未启用选项,还未实现基于WireGuard协议的VPN分离 + 未启用选项,还未实现基于WireGuard协议的VPN分离 + + + + Split tunneling for %1 is not implemented, the option was disabled + diff --git a/client/ui/models/sites_model.cpp b/client/ui/models/sites_model.cpp index 1e0f1692..61748bfc 100644 --- a/client/ui/models/sites_model.cpp +++ b/client/ui/models/sites_model.cpp @@ -111,6 +111,7 @@ void SitesModel::toggleSplitTunneling(bool enabled) } else { m_settings->setRouteMode(Settings::RouteMode::VpnAllSites); } + m_isSplitTunnelingEnabled = enabled; } QVector > SitesModel::getCurrentSites() diff --git a/client/ui/qml/Pages2/PageSettingsConnection.qml b/client/ui/qml/Pages2/PageSettingsConnection.qml index b5b1bd97..f6ecafd7 100644 --- a/client/ui/qml/Pages2/PageSettingsConnection.qml +++ b/client/ui/qml/Pages2/PageSettingsConnection.qml @@ -125,7 +125,7 @@ PageType { } DividerType { - visible: !GC.isMobile() + visible: false//!GC.isMobile() } } } From f5f72f87a6246ee320aa027348e18edfae97cacc Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Wed, 18 Oct 2023 12:17:24 +0500 Subject: [PATCH 4/4] fixed switcher status display for page split site tunneling --- client/ui/models/sites_model.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ui/models/sites_model.cpp b/client/ui/models/sites_model.cpp index 1e0f1692..5f4afe1a 100644 --- a/client/ui/models/sites_model.cpp +++ b/client/ui/models/sites_model.cpp @@ -8,6 +8,7 @@ SitesModel::SitesModel(std::shared_ptr settings, QObject *parent) m_isSplitTunnelingEnabled = false; m_currentRouteMode = Settings::RouteMode::VpnOnlyForwardSites; } else { + m_isSplitTunnelingEnabled = true; m_currentRouteMode = routeMode; } fillSites();