From 8af6eda165ccb5cbb9d05a8c5833cb8df707c5be Mon Sep 17 00:00:00 2001 From: DHR60 Date: Thu, 11 Sep 2025 12:23:08 +0800 Subject: [PATCH] Exclude specific profile types from selection --- .../Views/AddGroupServerWindow.axaml.cs | 11 +++++------ .../Views/RoutingRuleDetailsWindow.axaml.cs | 2 +- v2rayN/v2rayN.Desktop/Views/SubEditWindow.axaml.cs | 4 ++-- v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs | 13 +++++-------- .../v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs | 2 +- v2rayN/v2rayN/Views/SubEditWindow.xaml.cs | 4 ++-- 6 files changed, 16 insertions(+), 20 deletions(-) diff --git a/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs index 0b9a919f..631f201c 100644 --- a/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs @@ -2,6 +2,7 @@ using System.Reactive.Disposables; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; +using DynamicData; using ReactiveUI; using v2rayN.Desktop.Base; @@ -135,15 +136,13 @@ public partial class AddGroupServerWindow : WindowBase private async void MenuAddChild_Click(object? sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); - selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom }, exclude: true); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); + selectWindow.AllowMultiSelect(true); var result = await selectWindow.ShowDialog(this); if (result == true) { - var profile = await selectWindow.ProfileItem; - if (profile != null && ViewModel != null) - { - ViewModel.ChildItemsObs.Add(profile); - } + var profiles = await selectWindow.ProfileItems; + ViewModel?.ChildItemsObs.AddRange(profiles); } } } diff --git a/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs index b19fc923..cbf156bd 100644 --- a/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs @@ -97,7 +97,7 @@ public partial class RoutingRuleDetailsWindow : WindowBase(this); if (result == true) { diff --git a/v2rayN/v2rayN.Desktop/Views/SubEditWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/SubEditWindow.axaml.cs index d030ba02..e07540b2 100644 --- a/v2rayN/v2rayN.Desktop/Views/SubEditWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/SubEditWindow.axaml.cs @@ -63,7 +63,7 @@ public partial class SubEditWindow : WindowBase private async void BtnSelectPrevProfile_Click(object? sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); - selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom }, exclude: true); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); var result = await selectWindow.ShowDialog(this); if (result == true) { @@ -78,7 +78,7 @@ public partial class SubEditWindow : WindowBase private async void BtnSelectNextProfile_Click(object? sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); - selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom }, exclude: true); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); var result = await selectWindow.ShowDialog(this); if (result == true) { diff --git a/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs b/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs index 1b569f05..dd8fc7be 100644 --- a/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs @@ -2,6 +2,7 @@ using System.Windows; using System.Windows.Input; using ReactiveUI; using System.Reactive.Disposables; +using DynamicData; namespace v2rayN.Views; @@ -111,16 +112,12 @@ public partial class AddGroupServerWindow private async void MenuAddChild_Click(object sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); + selectWindow.AllowMultiSelect(true); if (selectWindow.ShowDialog() == true) { - var profile = await selectWindow.ProfileItem; - if (profile != null) - { - if (ViewModel != null) - { - ViewModel.ChildItemsObs.Add(profile); - } - } + var profiles = await selectWindow.ProfileItems; + ViewModel?.ChildItemsObs.AddRange(profiles); } } } diff --git a/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs b/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs index d3e06cb3..4ad8099d 100644 --- a/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs @@ -91,7 +91,7 @@ public partial class RoutingRuleDetailsWindow private async void BtnSelectProfile_Click(object sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); - selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom }, exclude: true); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); if (selectWindow.ShowDialog() == true) { var profile = await selectWindow.ProfileItem; diff --git a/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs b/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs index b58f8d27..8bd7d6c5 100644 --- a/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs @@ -57,7 +57,7 @@ public partial class SubEditWindow private async void BtnSelectPrevProfile_Click(object sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); - selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom }, exclude: true); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); if (selectWindow.ShowDialog() == true) { var profile = await selectWindow.ProfileItem; @@ -71,7 +71,7 @@ public partial class SubEditWindow private async void BtnSelectNextProfile_Click(object sender, RoutedEventArgs e) { var selectWindow = new ProfilesSelectWindow(); - selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom }, exclude: true); + selectWindow.SetConfigTypeFilter(new[] { EConfigType.Custom, EConfigType.PolicyGroup, EConfigType.ProxyChain }, exclude: true); if (selectWindow.ShowDialog() == true) { var profile = await selectWindow.ProfileItem;