From 37cba5ee342f59834125c0396f3be901dcf56f84 Mon Sep 17 00:00:00 2001
From: 2dust <31833384+2dust@users.noreply.github.com>
Date: Tue, 31 Dec 2024 14:15:09 +0800
Subject: [PATCH] Fix export rule order issue

https://github.com/2dust/v2rayN/issues/6377
---
 v2rayN/ServiceLib/Resx/ResUI.Designer.cs       | 18 +++++++++---------
 .../ViewModels/RoutingRuleSettingViewModel.cs  |  8 ++++----
 .../v2rayN.Desktop/Views/ProfilesView.axaml.cs |  7 +------
 .../Views/RoutingRuleSettingWindow.axaml.cs    |  7 +------
 .../Views/RoutingSettingWindow.axaml.cs        |  7 +------
 .../Views/SubSettingWindow.axaml.cs            |  7 +------
 6 files changed, 17 insertions(+), 37 deletions(-)

diff --git a/v2rayN/ServiceLib/Resx/ResUI.Designer.cs b/v2rayN/ServiceLib/Resx/ResUI.Designer.cs
index 6b854e1b..d0422079 100644
--- a/v2rayN/ServiceLib/Resx/ResUI.Designer.cs
+++ b/v2rayN/ServiceLib/Resx/ResUI.Designer.cs
@@ -1248,15 +1248,6 @@ namespace ServiceLib.Resx {
             }
         }
         
-        /// <summary>
-        ///   查找类似 Russia 的本地化字符串。
-        /// </summary>
-        public static string menuRegionalPresetsRussia {
-            get {
-                return ResourceManager.GetString("menuRegionalPresetsRussia", resourceCulture);
-            }
-        }
-        
         /// <summary>
         ///   查找类似 Iran 的本地化字符串。
         /// </summary>
@@ -1266,6 +1257,15 @@ namespace ServiceLib.Resx {
             }
         }
         
+        /// <summary>
+        ///   查找类似 Russia 的本地化字符串。
+        /// </summary>
+        public static string menuRegionalPresetsRussia {
+            get {
+                return ResourceManager.GetString("menuRegionalPresetsRussia", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   查找类似 Reload 的本地化字符串。
         /// </summary>
diff --git a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs
index 1e678776..f931170d 100644
--- a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs
@@ -177,12 +177,12 @@ namespace ServiceLib.ViewModels
             }
 
             var lst = new List<RulesItem>();
-            foreach (var it in SelectedSources ?? [SelectedSource])
+            var sources = SelectedSources ?? [SelectedSource];
+            foreach (var it in _rules)
             {
-                var item = _rules.FirstOrDefault(t => t.Id == it?.Id);
-                if (item != null)
+                if (sources.Any(t => t.Id == it?.Id))
                 {
-                    var item2 = JsonUtils.DeepCopy(item); //JsonUtils.Deserialize<RulesItem4Ray>(JsonUtils.Serialize(item));
+                    var item2 = JsonUtils.DeepCopy(it);
                     item2.Id = null;
                     lst.Add(item2 ?? new());
                 }
diff --git a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
index 4ddfa2c2..4f66d926 100644
--- a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
@@ -187,12 +187,7 @@ namespace v2rayN.Desktop.Views
 
         private void lstProfiles_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            List<ProfileItemModel> lst = [];
-            foreach (var item in lstProfiles.SelectedItems)
-            {
-                lst.Add((ProfileItemModel)item);
-            }
-            ViewModel.SelectedProfiles = lst;
+            ViewModel.SelectedProfiles = lstProfiles.SelectedItems.Cast<ProfileItemModel>().ToList();
         }
 
         private void LstProfiles_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
diff --git a/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs
index 5be3c793..deeba10d 100644
--- a/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml.cs
@@ -166,12 +166,7 @@ namespace v2rayN.Desktop.Views
 
         private void lstRules_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            List<RulesItemModel> lst = [];
-            foreach (var item in lstRules.SelectedItems)
-            {
-                lst.Add((RulesItemModel)item);
-            }
-            ViewModel.SelectedSources = lst;
+            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 de74c39e..15f5dd2f 100644
--- a/v2rayN/v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/RoutingSettingWindow.axaml.cs
@@ -107,12 +107,7 @@ namespace v2rayN.Desktop.Views
 
         private void lstRoutings_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            List<RoutingItemModel> lst = [];
-            foreach (var item in lstRoutings.SelectedItems)
-            {
-                lst.Add((RoutingItemModel)item);
-            }
-            ViewModel.SelectedSources = lst;
+            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 7a9aad66..b37f5ac1 100644
--- a/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs
@@ -82,12 +82,7 @@ namespace v2rayN.Desktop.Views
 
         private void LstSubscription_SelectionChanged(object? sender, SelectionChangedEventArgs e)
         {
-            List<SubItem> lst = [];
-            foreach (var item in lstSubscription.SelectedItems)
-            {
-                lst.Add((SubItem)item);
-            }
-            ViewModel.SelectedSources = lst;
+            ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast<SubItem>().ToList();
         }
 
         private void menuClose_Click(object? sender, RoutedEventArgs e)