diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp
index bbd48c960..3e227863a 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);
@@ -297,11 +297,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
- && m_sitesModel->getRouteMode() != Settings::RouteMode::VpnAllSites) {
- m_sitesModel->setRouteMode(Settings::RouteMode::VpnAllSites);
+ 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())));
}
});
@@ -337,7 +339,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 316cd0763..f94e0514e 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 не реализовано, опция отключена
@@ -1496,75 +1500,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
Добавить импортированные сайты к существующим
diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts
index 592717ab9..8833d5c6c 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
+
@@ -1602,75 +1606,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
将导入的网址添加到现有网址中
diff --git a/client/ui/models/sites_model.cpp b/client/ui/models/sites_model.cpp
index 5fd9a38b3..f6cb9b136 100644
--- a/client/ui/models/sites_model.cpp
+++ b/client/ui/models/sites_model.cpp
@@ -3,7 +3,14 @@
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_isSplitTunnelingEnabled = true;
+ m_currentRouteMode = routeMode;
+ }
fillSites();
}
@@ -93,6 +100,21 @@ 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);
+ }
+ m_isSplitTunnelingEnabled = enabled;
+}
+
QVector > SitesModel::getCurrentSites()
{
return m_sites;
diff --git a/client/ui/models/sites_model.h b/client/ui/models/sites_model.h
index 70def0ec5..ad16b7a33 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/PageSettingsSplitTunneling.qml b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml
index cc4973f14..873ae9977 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
}
}
}
@@ -123,7 +116,7 @@ PageType {
drawerHeight: 0.4375
- enabled: switcher.checked && root.pageEnabled
+ enabled: root.pageEnabled
headerText: qsTr("Mode")
@@ -165,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