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)
{