Skip to content

Commit da3d4c3

Browse files
committed
Improve and optimize the active rules code in routing settings
1 parent 1d01476 commit da3d4c3

5 files changed

Lines changed: 32 additions & 13 deletions

File tree

v2rayN/ServiceLib/Handler/ConfigHandler.cs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1857,12 +1857,25 @@ public static async Task<int> MoveRoutingRule(List<RulesItem> rules, int index,
18571857
/// <returns>0 if successful</returns>
18581858
public static async Task<int> SetDefaultRouting(Config config, RoutingItem routingItem)
18591859
{
1860-
if (await SQLiteHelper.Instance.TableAsync<RoutingItem>().Where(t => t.Id == routingItem.Id).CountAsync() > 0)
1860+
var items = await AppHandler.Instance.RoutingItems();
1861+
if (items.Any(t => t.Id == routingItem.Id && t.IsActive == true))
18611862
{
1862-
config.RoutingBasicItem.RoutingIndexId = routingItem.Id;
1863+
return -1;
18631864
}
18641865

1865-
await SaveConfig(config);
1866+
foreach (var item in items)
1867+
{
1868+
if (item.Id == routingItem.Id)
1869+
{
1870+
item.IsActive = true;
1871+
}
1872+
else
1873+
{
1874+
item.IsActive = false;
1875+
}
1876+
}
1877+
1878+
await SQLiteHelper.Instance.UpdateAllAsync(items);
18661879

18671880
return 0;
18681881
}
@@ -1875,7 +1888,7 @@ public static async Task<int> SetDefaultRouting(Config config, RoutingItem routi
18751888
/// <returns>The default routing item</returns>
18761889
public static async Task<RoutingItem> GetDefaultRouting(Config config)
18771890
{
1878-
var item = await AppHandler.Instance.GetRoutingItem(config.RoutingBasicItem.RoutingIndexId);
1891+
var item = await SQLiteHelper.Instance.TableAsync<RoutingItem>().FirstOrDefaultAsync(it => it.IsActive == true);
18791892
if (item is null)
18801893
{
18811894
var item2 = await SQLiteHelper.Instance.TableAsync<RoutingItem>().FirstOrDefaultAsync();
@@ -1983,6 +1996,18 @@ public static async Task<int> InitBuiltinRouting(Config config, bool blImportAdv
19831996

19841997
if (!blImportAdvancedRules && items.Count > 0)
19851998
{
1999+
//migrate
2000+
//TODO Temporary code to be removed later
2001+
if (config.RoutingBasicItem.RoutingIndexId.IsNotEmpty())
2002+
{
2003+
var item = items.FirstOrDefault(t => t.Id == config.RoutingBasicItem.RoutingIndexId);
2004+
if (item != null)
2005+
{
2006+
await SetDefaultRouting(config, item);
2007+
}
2008+
config.RoutingBasicItem.RoutingIndexId = string.Empty;
2009+
}
2010+
19862011
return 0;
19872012
}
19882013

v2rayN/ServiceLib/Models/RoutingItem.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ public class RoutingItem
1919
public string DomainStrategy { get; set; }
2020
public string DomainStrategy4Singbox { get; set; }
2121
public int Sort { get; set; }
22+
public bool IsActive { get; set; }
2223
}

v2rayN/ServiceLib/Models/RoutingItemModel.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@ namespace ServiceLib.Models;
33
[Serializable]
44
public class RoutingItemModel : RoutingItem
55
{
6-
public bool IsActive { get; set; }
76
}

v2rayN/ServiceLib/ViewModels/RoutingSettingViewModel.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,9 @@ public async Task RefreshRoutingItems()
9191
var routings = await AppHandler.Instance.RoutingItems();
9292
foreach (var item in routings)
9393
{
94-
var def = item.Id == _config.RoutingBasicItem.RoutingIndexId;
95-
9694
var it = new RoutingItemModel()
9795
{
98-
IsActive = def,
96+
IsActive = item.IsActive,
9997
RuleNum = item.RuleNum,
10098
Id = item.Id,
10199
Remarks = item.Remarks,

v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ public async Task RefreshRoutingsMenu()
372372
foreach (var item in routings)
373373
{
374374
_routingItems.Add(item);
375-
if (item.Id == _config.RoutingBasicItem.RoutingIndexId)
375+
if (item.IsActive)
376376
{
377377
SelectedRouting = item;
378378
}
@@ -396,10 +396,6 @@ private async Task RoutingSelectedChangedAsync(bool c)
396396
{
397397
return;
398398
}
399-
if (_config.RoutingBasicItem.RoutingIndexId == item.Id)
400-
{
401-
return;
402-
}
403399

404400
if (await ConfigHandler.SetDefaultRouting(_config, item) == 0)
405401
{

0 commit comments

Comments
 (0)