diff --git a/v2rayN/ServiceLib/Handler/ConfigHandler.cs b/v2rayN/ServiceLib/Handler/ConfigHandler.cs index a3e35a33..c08ca28e 100644 --- a/v2rayN/ServiceLib/Handler/ConfigHandler.cs +++ b/v2rayN/ServiceLib/Handler/ConfigHandler.cs @@ -1857,12 +1857,25 @@ public class ConfigHandler /// 0 if successful public static async Task SetDefaultRouting(Config config, RoutingItem routingItem) { - if (await SQLiteHelper.Instance.TableAsync().Where(t => t.Id == routingItem.Id).CountAsync() > 0) + var items = await AppHandler.Instance.RoutingItems(); + if (items.Any(t => t.Id == routingItem.Id && t.IsActive == true)) { - config.RoutingBasicItem.RoutingIndexId = routingItem.Id; + return -1; } - await SaveConfig(config); + foreach (var item in items) + { + if (item.Id == routingItem.Id) + { + item.IsActive = true; + } + else + { + item.IsActive = false; + } + } + + await SQLiteHelper.Instance.UpdateAllAsync(items); return 0; } @@ -1875,7 +1888,7 @@ public class ConfigHandler /// The default routing item public static async Task GetDefaultRouting(Config config) { - var item = await AppHandler.Instance.GetRoutingItem(config.RoutingBasicItem.RoutingIndexId); + var item = await SQLiteHelper.Instance.TableAsync().FirstOrDefaultAsync(it => it.IsActive == true); if (item is null) { var item2 = await SQLiteHelper.Instance.TableAsync().FirstOrDefaultAsync(); @@ -1983,6 +1996,18 @@ public class ConfigHandler if (!blImportAdvancedRules && items.Count > 0) { + //migrate + //TODO Temporary code to be removed later + if (config.RoutingBasicItem.RoutingIndexId.IsNotEmpty()) + { + var item = items.FirstOrDefault(t => t.Id == config.RoutingBasicItem.RoutingIndexId); + if (item != null) + { + await SetDefaultRouting(config, item); + } + config.RoutingBasicItem.RoutingIndexId = string.Empty; + } + return 0; } diff --git a/v2rayN/ServiceLib/Models/RoutingItem.cs b/v2rayN/ServiceLib/Models/RoutingItem.cs index 287e37fb..78d93445 100644 --- a/v2rayN/ServiceLib/Models/RoutingItem.cs +++ b/v2rayN/ServiceLib/Models/RoutingItem.cs @@ -19,4 +19,5 @@ public class RoutingItem public string DomainStrategy { get; set; } public string DomainStrategy4Singbox { get; set; } public int Sort { get; set; } + public bool IsActive { get; set; } } diff --git a/v2rayN/ServiceLib/Models/RoutingItemModel.cs b/v2rayN/ServiceLib/Models/RoutingItemModel.cs index 76b35c55..2326f85b 100644 --- a/v2rayN/ServiceLib/Models/RoutingItemModel.cs +++ b/v2rayN/ServiceLib/Models/RoutingItemModel.cs @@ -3,5 +3,4 @@ namespace ServiceLib.Models; [Serializable] public class RoutingItemModel : RoutingItem { - public bool IsActive { get; set; } } diff --git a/v2rayN/ServiceLib/ViewModels/RoutingSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/RoutingSettingViewModel.cs index dc2d7eda..73b18fb7 100644 --- a/v2rayN/ServiceLib/ViewModels/RoutingSettingViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/RoutingSettingViewModel.cs @@ -91,11 +91,9 @@ public class RoutingSettingViewModel : MyReactiveObject var routings = await AppHandler.Instance.RoutingItems(); foreach (var item in routings) { - var def = item.Id == _config.RoutingBasicItem.RoutingIndexId; - var it = new RoutingItemModel() { - IsActive = def, + IsActive = item.IsActive, RuleNum = item.RuleNum, Id = item.Id, Remarks = item.Remarks, diff --git a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index 07a2ec70..dfb5c854 100644 --- a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -372,7 +372,7 @@ public class StatusBarViewModel : MyReactiveObject foreach (var item in routings) { _routingItems.Add(item); - if (item.Id == _config.RoutingBasicItem.RoutingIndexId) + if (item.IsActive) { SelectedRouting = item; } @@ -396,10 +396,6 @@ public class StatusBarViewModel : MyReactiveObject { return; } - if (_config.RoutingBasicItem.RoutingIndexId == item.Id) - { - return; - } if (await ConfigHandler.SetDefaultRouting(_config, item) == 0) {