From 555960e2100d360a96c826c71d767cb0a4355032 Mon Sep 17 00:00:00 2001
From: 2dust <31833384+2dust@users.noreply.github.com>
Date: Wed, 26 Feb 2025 17:01:57 +0800
Subject: [PATCH] Optimize and improve code

---
 .../ViewModels/GlobalHotkeySettingViewModel.cs         |  2 --
 .../v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs  |  5 ++++-
 v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs      |  5 ++++-
 .../Views/RoutingRuleDetailsWindow.axaml.cs            | 10 ++++++++--
 .../Views/RoutingRuleSettingWindow.axaml.cs            |  5 ++++-
 .../v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs |  5 ++++-
 v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs  |  5 ++++-
 v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs        |  5 ++++-
 v2rayN/v2rayN/Views/ProfilesView.xaml.cs               |  5 ++++-
 v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs   | 10 ++++++++--
 v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs   |  5 ++++-
 v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs       |  5 ++++-
 v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs           |  5 ++++-
 13 files changed, 56 insertions(+), 16 deletions(-)

diff --git a/v2rayN/ServiceLib/ViewModels/GlobalHotkeySettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/GlobalHotkeySettingViewModel.cs
index 41160a16..33a222fb 100644
--- a/v2rayN/ServiceLib/ViewModels/GlobalHotkeySettingViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/GlobalHotkeySettingViewModel.cs
@@ -1,7 +1,5 @@
 using System.Reactive;
-using System.Text;
 using ReactiveUI;
-using ReactiveUI.Fody.Helpers;
 
 namespace ServiceLib.ViewModels
 {
diff --git a/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs
index e3e3cfef..728fc6e8 100644
--- a/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/OptionSettingWindow.axaml.cs
@@ -248,7 +248,10 @@ namespace v2rayN.Desktop.Views
 
         private void ClbdestOverride_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.destOverride = clbdestOverride.SelectedItems.Cast<string>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.destOverride = clbdestOverride.SelectedItems.Cast<string>().ToList();
+            }
         }
     }
 }
diff --git a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
index 11574319..dcb390dd 100644
--- a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
@@ -220,7 +220,10 @@ namespace v2rayN.Desktop.Views
 
         private void lstProfiles_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedProfiles = lstProfiles.SelectedItems.Cast<ProfileItemModel>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedProfiles = lstProfiles.SelectedItems.Cast<ProfileItemModel>().ToList();
+            }
         }
 
         private void LstProfiles_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
diff --git a/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs
index 9efe15d3..8199f020 100644
--- a/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/RoutingRuleDetailsWindow.axaml.cs
@@ -85,12 +85,18 @@ namespace v2rayN.Desktop.Views
 
         private void ClbProtocol_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.ProtocolItems = clbProtocol.SelectedItems.Cast<string>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.ProtocolItems = clbProtocol.SelectedItems.Cast<string>().ToList();
+            }
         }
 
         private void ClbInboundTag_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.InboundTagItems = clbInboundTag.SelectedItems.Cast<string>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.InboundTagItems = clbInboundTag.SelectedItems.Cast<string>().ToList();
+            }
         }
 
         private void linkRuleobjectDoc_Click(object? sender, RoutedEventArgs e)
diff --git a/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs
index 67f3f6a8..019026c7 100644
--- a/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs
@@ -167,7 +167,10 @@ namespace v2rayN.Desktop.Views
 
         private void lstRules_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedSources = lstRules.SelectedItems.Cast<RulesItemModel>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedSources = lstRules.SelectedItems.Cast<RulesItemModel>().ToList();
+            }
         }
 
         private void LstRules_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
diff --git a/v2rayN/v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs
index ed110ed8..4b89438d 100644
--- a/v2rayN/v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs
@@ -108,7 +108,10 @@ namespace v2rayN.Desktop.Views
 
         private void lstRoutings_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedSources = lstRoutings.SelectedItems.Cast<RoutingItemModel>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedSources = lstRoutings.SelectedItems.Cast<RoutingItemModel>().ToList();
+            }
         }
 
         private void LstRoutings_DoubleTapped(object? sender, TappedEventArgs e)
diff --git a/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs
index 82a42672..a12c1b33 100644
--- a/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs
@@ -84,7 +84,10 @@ namespace v2rayN.Desktop.Views
 
         private void LstSubscription_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast<SubItem>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast<SubItem>().ToList();
+            }
         }
 
         private void menuClose_Click(object? sender, RoutedEventArgs e)
diff --git a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs
index b6acb033..e100333f 100644
--- a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs
@@ -259,7 +259,10 @@ namespace v2rayN.Views
 
         private void ClbdestOverride_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.destOverride = clbdestOverride.SelectedItems.Cast<string>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.destOverride = clbdestOverride.SelectedItems.Cast<string>().ToList();
+            }
         }
     }
 }
diff --git a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs
index d217c8ea..de4220d7 100644
--- a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs
+++ b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs
@@ -201,7 +201,10 @@ namespace v2rayN.Views
 
         private void lstProfiles_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedProfiles = lstProfiles.SelectedItems.Cast<ProfileItemModel>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedProfiles = lstProfiles.SelectedItems.Cast<ProfileItemModel>().ToList();
+            }
         }
 
         private void LstProfiles_LoadingRow(object? sender, DataGridRowEventArgs e)
diff --git a/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs b/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs
index 7067b7d2..33836186 100644
--- a/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs
@@ -79,12 +79,18 @@ namespace v2rayN.Views
 
         private void ClbProtocol_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.ProtocolItems = clbProtocol.SelectedItems.Cast<string>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.ProtocolItems = clbProtocol.SelectedItems.Cast<string>().ToList();
+            }
         }
 
         private void ClbInboundTag_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.InboundTagItems = clbInboundTag.SelectedItems.Cast<string>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.InboundTagItems = clbInboundTag.SelectedItems.Cast<string>().ToList();
+            }
         }
 
         private void linkRuleobjectDoc_Click(object sender, RoutedEventArgs e)
diff --git a/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs
index 5af934e8..922e265b 100644
--- a/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs
@@ -162,7 +162,10 @@ namespace v2rayN.Views
 
         private void lstRules_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedSources = lstRules.SelectedItems.Cast<RulesItemModel>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedSources = lstRules.SelectedItems.Cast<RulesItemModel>().ToList();
+            }
         }
 
         private void LstRules_MouseDoubleClick(object sender, MouseButtonEventArgs e)
diff --git a/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs
index 245c6ec7..d8ea73b9 100644
--- a/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs
@@ -113,7 +113,10 @@ namespace v2rayN.Views
 
         private void lstRoutings_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedSources = lstRoutings.SelectedItems.Cast<RoutingItemModel>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedSources = lstRoutings.SelectedItems.Cast<RoutingItemModel>().ToList();
+            }
         }
 
         private void LstRoutings_MouseDoubleClick(object sender, MouseButtonEventArgs e)
diff --git a/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs
index fa847dc6..d13a189b 100644
--- a/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs
@@ -94,7 +94,10 @@ namespace v2rayN.Views
 
         private void LstSubscription_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
         {
-            ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast<SubItem>().ToList();
+            if (ViewModel != null)
+            {
+                ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast<SubItem>().ToList();
+            }
         }
 
         private void menuClose_Click(object sender, System.Windows.RoutedEventArgs e)