From 5cf597dcfe9bd883ea7f07462e477ed3c263120e Mon Sep 17 00:00:00 2001 From: xacnio Date: Thu, 26 Mar 2026 01:47:56 +0300 Subject: [PATCH] Add folder-based split tunneling support --- .../Strings/ar-SA/Resources.resw | 9 + .../Strings/be-BY/Resources.resw | 9 + .../Strings/ca-ES/Resources.resw | 9 + .../Strings/cs-CZ/Resources.resw | 9 + .../Strings/da-DK/Resources.resw | 9 + .../Strings/de-DE/Resources.resw | 9 + .../Strings/el-GR/Resources.resw | 9 + .../Strings/en-US/Resources.resw | 12 +- .../Strings/es-419/Resources.resw | 9 + .../Strings/es-ES/Resources.resw | 9 + .../Strings/fa-IR/Resources.resw | 9 + .../Strings/fi-FI/Resources.resw | 9 + .../Strings/fr-FR/Resources.resw | 9 + .../Strings/hu-HU/Resources.resw | 9 + .../Strings/id-ID/Resources.resw | 9 + .../Strings/it-IT/Resources.resw | 9 + .../Strings/ja-JP/Resources.resw | 9 + .../Strings/ka-GE/Resources.resw | 9 + .../Strings/ko-KR/Resources.resw | 9 + .../Strings/nb-NO/Resources.resw | 9 + .../Strings/nl-NL/Resources.resw | 9 + .../Strings/pl-PL/Resources.resw | 9 + .../Strings/pt-BR/Resources.resw | 9 + .../Strings/pt-PT/Resources.resw | 9 + .../Strings/ro-RO/Resources.resw | 9 + .../Strings/ru-RU/Resources.resw | 9 + .../Strings/sk-SK/Resources.resw | 9 + .../Strings/sl-SI/Resources.resw | 9 + .../Strings/sv-SE/Resources.resw | 9 + .../Strings/tr-TR/Resources.resw | 11 +- .../Strings/uk-UA/Resources.resw | 9 + .../Strings/zh-CN/Resources.resw | 9 + .../Strings/zh-TW/Resources.resw | 9 + .../MainSettingsRequestCreator.cs | 49 ++- .../IVpnServiceCaller.cs | 5 +- .../VpnServiceCaller.cs | 12 +- .../Extensions/WindowExtensions.cs | 19 +- .../SplitTunneling/FolderWatcherService.cs | 376 ++++++++++++++++++ .../SplitTunneling/IFolderWatcherService.cs | 64 +++ .../SplitTunnelingFolderOrchestrator.cs | 214 ++++++++++ .../ProtonVPN.Client/Installers/AppModule.cs | 4 +- .../SplitTunnelingFolderViewModel.cs | 79 ++++ .../Connection/SplitTunnelingPageView.xaml | 147 +++++++ .../Connection/SplitTunnelingPageViewModel.cs | 111 +++++- .../DefaultSettings.cs | 3 +- .../IUserSettings.cs | 4 +- .../Models/SplitTunnelingFolder.cs | 55 +++ .../ProtonVPN.Client.Settings/UserSettings.cs | 14 +- .../Controllers/IVpnController.cs | 5 +- .../Settings/DynamicAppPathsIpcEntity.cs | 29 ++ .../SplitTunneling/ISplitTunnelClient.cs | 6 +- .../SplitTunneling/SplitTunnelClient.cs | 26 +- .../SplitTunnelNetworkFilters.cs | 107 ++++- src/ProtonVPN.Service/VpnController.cs | 16 +- 54 files changed, 1609 insertions(+), 38 deletions(-) create mode 100644 src/Client/ProtonVPN.Client.Core/Services/SplitTunneling/FolderWatcherService.cs create mode 100644 src/Client/ProtonVPN.Client.Core/Services/SplitTunneling/IFolderWatcherService.cs create mode 100644 src/Client/ProtonVPN.Client/Handlers/SplitTunnelingFolderOrchestrator.cs create mode 100644 src/Client/ProtonVPN.Client/UI/Main/Settings/Pages/Connection/SplitTunnelingFolderViewModel.cs create mode 100644 src/Client/Settings/ProtonVPN.Client.Settings.Contracts/Models/SplitTunnelingFolder.cs create mode 100644 src/ProcessCommunication/ProtonVPN.ProcessCommunication.Contracts/Entities/Settings/DynamicAppPathsIpcEntity.cs diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ar-SA/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ar-SA/Resources.resw index e91d1c365..ee4012bec 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ar-SA/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ar-SA/Resources.resw @@ -3999,6 +3999,15 @@ VPN استبعاد Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + المجلدات المختارة ({0}) + + + إزالة المجلد + + + لم يتم العثور على المجلد + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/be-BY/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/be-BY/Resources.resw index 1b135528c..0d5353ee4 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/be-BY/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/be-BY/Resources.resw @@ -3783,6 +3783,15 @@ Secure Core Выключае Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + Выбраныя папкі ({0}) + + + Выдаліць папку + + + Папка не знойдзеna + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ca-ES/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ca-ES/Resources.resw index 3354b93fa..cded2096b 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ca-ES/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/ca-ES/Resources.resw @@ -3568,6 +3568,15 @@ Una càrrega elevada del servidor pot alentir la vostra connexió. Exclou Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + Carpetes seleccionades ({0}) + + + Eliminar carpeta + + + Carpeta no trobada + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/cs-CZ/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/cs-CZ/Resources.resw index 5ac9bcb2a..c4e22aae0 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/cs-CZ/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/cs-CZ/Resources.resw @@ -3783,6 +3783,15 @@ Vysoké vytížení serveru může zpomalit vaše připojení. Vyloučit Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + Vybrané složky ({0}) + + + Odebrat složku + + + Složka nenalezena + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/da-DK/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/da-DK/Resources.resw index b98547d2a..707338d15 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/da-DK/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/da-DK/Resources.resw @@ -3567,6 +3567,15 @@ En høj serverbelastning kan gøre din forbindelse langsommere. Ekskluder Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + Valgte mapper ({0}) + + + Fjern mappe + + + Mappen blev ikke fundet + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/de-DE/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/de-DE/Resources.resw index 9bf2acd5e..1a8116dad 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/de-DE/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/de-DE/Resources.resw @@ -3567,6 +3567,15 @@ Eine hohe Serverauslastung kann deine Verbindung verlangsamen. Ausschließen Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + Ausgewählte Ordner ({0}) + + + Ordner entfernen + + + Ordner nicht gefunden + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/el-GR/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/el-GR/Resources.resw index 53d1a9e97..fbf45e376 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/el-GR/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/el-GR/Resources.resw @@ -3567,6 +3567,15 @@ Εξαίρεση Shorter version (if possible) of "Exclude mode". To be used when available space is limited. + + Επιλεγμένοι φάκελοι ({0}) + + + Κατάργηση φακέλου + + + Δεν βρέθηκε ο φάκελος + VPN Accelerator diff --git a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/en-US/Resources.resw b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/en-US/Resources.resw index 5031eec9a..34c156c43 100644 --- a/src/Client/Localization/ProtonVPN.Client.Localization/Strings/en-US/Resources.resw +++ b/src/Client/Localization/ProtonVPN.Client.Localization/Strings/en-US/Resources.resw @@ -1,4 +1,4 @@ - +