Remove invalid by test results

pull/6714/head
2dust 2025-02-16 15:07:09 +08:00
parent f6dbfc2dac
commit b3e9a957c4
13 changed files with 134 additions and 10 deletions

View File

@ -1051,6 +1051,27 @@ namespace ServiceLib.Handler
return itemSocks;
}
public static async Task<int> RemoveInvalidServerResult(Config config, string subid)
{
var lstModel = await AppHandler.Instance.ProfileItems(subid, "");
if (lstModel is { Count: <= 0 })
{
return -1;
}
var lstProfileExs = await ProfileExHandler.Instance.GetProfileExs();
var lstProfile = (from t in lstModel
join t2 in lstProfileExs on t.IndexId equals t2.IndexId
where t2.Delay == -1
select t.IndexId).ToList();
foreach (var item in lstProfile)
{
await RemoveProfileItem(config, item);
}
return lstProfile.Count;
}
#endregion Server
#region Batch add servers

View File

@ -1311,6 +1311,15 @@ namespace ServiceLib.Resx {
}
}
/// <summary>
/// 查找类似 Remove invalid by test results 的本地化字符串。
/// </summary>
public static string menuRemoveInvalidServerResult {
get {
return ResourceManager.GetString("menuRemoveInvalidServerResult", resourceCulture);
}
}
/// <summary>
/// 查找类似 Remove selected servers (Delete) 的本地化字符串。
/// </summary>
@ -1680,6 +1689,15 @@ namespace ServiceLib.Resx {
}
}
/// <summary>
/// 查找类似 By test result 的本地化字符串。
/// </summary>
public static string menuTestServerResult {
get {
return ResourceManager.GetString("menuTestServerResult", resourceCulture);
}
}
/// <summary>
/// 查找类似 {0} Website 的本地化字符串。
/// </summary>
@ -2004,6 +2022,15 @@ namespace ServiceLib.Resx {
}
}
/// <summary>
/// 查找类似 Removed {0} invalid test results. 的本地化字符串。
/// </summary>
public static string RemoveInvalidServerResultTip {
get {
return ResourceManager.GetString("RemoveInvalidServerResultTip", resourceCulture);
}
}
/// <summary>
/// 查找类似 Are you sure to remove the rules? 的本地化字符串。
/// </summary>
@ -3221,7 +3248,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Number per time for auto batch during speedtest(max 1000) 的本地化字符串。
/// 查找类似 The number of concurrent during multi-test 的本地化字符串。
/// </summary>
public static string TbSettingsMixedConcurrencyCount {
get {

View File

@ -1396,4 +1396,13 @@
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>شروع آزمایش مجدد قطعات ناموفق، {0} باقی مانده است. برای خاتمه ESC را فشار دهید...</value>
</data>
<data name="menuTestServerResult" xml:space="preserve">
<value>By test result</value>
</data>
<data name="menuRemoveInvalidServerResult" xml:space="preserve">
<value>Remove invalid by test results</value>
</data>
<data name="RemoveInvalidServerResultTip" xml:space="preserve">
<value>Removed {0} invalid test results.</value>
</data>
</root>

View File

@ -1396,4 +1396,13 @@
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>Starting retesting failed parts, {0} remaining. Press ESC to terminate...</value>
</data>
<data name="menuTestServerResult" xml:space="preserve">
<value>By test result</value>
</data>
<data name="menuRemoveInvalidServerResult" xml:space="preserve">
<value>Remove invalid by test results</value>
</data>
<data name="RemoveInvalidServerResultTip" xml:space="preserve">
<value>Removed {0} invalid test results.</value>
</data>
</root>

View File

@ -1396,4 +1396,13 @@
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>Starting retesting failed parts, {0} remaining. Press ESC to terminate...</value>
</data>
<data name="menuTestServerResult" xml:space="preserve">
<value>By test result</value>
</data>
<data name="menuRemoveInvalidServerResult" xml:space="preserve">
<value>Remove invalid by test results</value>
</data>
<data name="RemoveInvalidServerResultTip" xml:space="preserve">
<value>Removed {0} invalid test results.</value>
</data>
</root>

View File

@ -1396,4 +1396,13 @@
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>Starting retesting failed parts, {0} remaining. Press ESC to terminate...</value>
</data>
<data name="menuTestServerResult" xml:space="preserve">
<value>By test result</value>
</data>
<data name="menuRemoveInvalidServerResult" xml:space="preserve">
<value>Remove invalid by test results</value>
</data>
<data name="RemoveInvalidServerResultTip" xml:space="preserve">
<value>Removed {0} invalid test results.</value>
</data>
</root>

View File

@ -1393,4 +1393,13 @@
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>开始对失败部分进行重新测试,剩余 {0} 个。可按 ESC 终止...</value>
</data>
<data name="menuTestServerResult" xml:space="preserve">
<value>按测试结果</value>
</data>
<data name="menuRemoveInvalidServerResult" xml:space="preserve">
<value>按测试结果移除无效</value>
</data>
<data name="RemoveInvalidServerResultTip" xml:space="preserve">
<value>移除无效测试结果 {0} 个。</value>
</data>
</root>

View File

@ -1394,4 +1394,13 @@
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>開始對失敗部分進行重新測試,剩餘 {0} 個。可按 ESC 終止...</value>
</data>
<data name="menuTestServerResult" xml:space="preserve">
<value>按測試結果</value>
</data>
<data name="menuRemoveInvalidServerResult" xml:space="preserve">
<value>按測試結果移除無效</value>
</data>
<data name="RemoveInvalidServerResultTip" xml:space="preserve">
<value>移除無效測試結果 {0} 個。</value>
</data>
</root>

View File

@ -79,6 +79,7 @@ namespace ServiceLib.ViewModels
public ReactiveCommand<Unit, Unit> RealPingServerCmd { get; }
public ReactiveCommand<Unit, Unit> SpeedServerCmd { get; }
public ReactiveCommand<Unit, Unit> SortServerResultCmd { get; }
public ReactiveCommand<Unit, Unit> RemoveInvalidServerResultCmd { get; }
//servers export
public ReactiveCommand<Unit, Unit> Export2ClientConfigCmd { get; }
@ -197,6 +198,10 @@ namespace ServiceLib.ViewModels
{
await SortServer(EServerColName.DelayVal.ToString());
});
RemoveInvalidServerResultCmd = ReactiveCommand.CreateFromTask(async () =>
{
await RemoveInvalidServerResult();
});
//servers export
Export2ClientConfigCmd = ReactiveCommand.CreateFromTask(async () =>
{
@ -659,6 +664,13 @@ namespace ServiceLib.ViewModels
RefreshServers();
}
public async Task RemoveInvalidServerResult()
{
var count = await ConfigHandler.RemoveInvalidServerResult(_config, _config.SubIndexId);
RefreshServers();
NoticeHandler.Instance.Enqueue(string.Format(ResUI.RemoveInvalidServerResultTip, count));
}
//move server
private async Task MoveToGroup(bool c)
{

View File

@ -104,14 +104,16 @@
<MenuItem x:Name="menuShareServer" Header="{x:Static resx:ResUI.menuShareServer}" />
<Separator />
<MenuItem x:Name="menuSetDefaultMultipleServer" Header="{x:Static resx:ResUI.menuSetDefaultMultipleServer}" />
<MenuItem x:Name="menuSetDefaultLoadBalanceServer" Header="{x:Static resx:ResUI.menuSetDefaultLoadBalanceServer}" />
<Separator />
<MenuItem x:Name="menuMixedTestServer" Header="{x:Static resx:ResUI.menuMixedTestServer}" />
<MenuItem x:Name="menuTcpingServer" Header="{x:Static resx:ResUI.menuTcpingServer}" />
<MenuItem x:Name="menuRealPingServer" Header="{x:Static resx:ResUI.menuRealPingServer}" />
<MenuItem x:Name="menuSpeedServer" Header="{x:Static resx:ResUI.menuSpeedServer}" />
<MenuItem x:Name="menuSortServerResult" Header="{x:Static resx:ResUI.menuSortServerResult}" />
<MenuItem Header="{x:Static resx:ResUI.menuTestServerResult}">
<MenuItem x:Name="menuSortServerResult" Header="{x:Static resx:ResUI.menuSortServerResult}" />
<MenuItem x:Name="menuRemoveInvalidServerResult" Header="{x:Static resx:ResUI.menuRemoveInvalidServerResult}" />
</MenuItem>
<Separator />
<MenuItem x:Name="menuMoveToGroup" Header="{x:Static resx:ResUI.menuMoveToGroup}">
<MenuItem>
@ -245,4 +247,4 @@
</DataGrid>
</DockPanel>
</Grid>
</UserControl>
</UserControl>

View File

@ -85,7 +85,8 @@ namespace v2rayN.Desktop.Views
this.BindCommand(ViewModel, vm => vm.RealPingServerCmd, v => v.menuRealPingServer).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SpeedServerCmd, v => v.menuSpeedServer).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SortServerResultCmd, v => v.menuSortServerResult).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.RemoveInvalidServerResultCmd, v => v.menuRemoveInvalidServerResult).DisposeWith(disposables);
//servers export
this.BindCommand(ViewModel, vm => vm.Export2ClientConfigCmd, v => v.menuExport2ClientConfig).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.Export2ClientConfigClipboardCmd, v => v.menuExport2ClientConfigClipboard).DisposeWith(disposables);

View File

@ -146,10 +146,16 @@
x:Name="menuSpeedServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSpeedServer}" />
<MenuItem
x:Name="menuSortServerResult"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSortServerResult}" />
<MenuItem Header="{x:Static resx:ResUI.menuTestServerResult}">
<MenuItem
x:Name="menuSortServerResult"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSortServerResult}" />
<MenuItem
x:Name="menuRemoveInvalidServerResult"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRemoveInvalidServerResult}" />
</MenuItem>
<Separator />
<MenuItem
x:Name="menuMoveToGroup"
@ -321,4 +327,4 @@
</DataGrid>
</DockPanel>
</Grid>
</reactiveui:ReactiveUserControl>
</reactiveui:ReactiveUserControl>

View File

@ -79,6 +79,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.RealPingServerCmd, v => v.menuRealPingServer).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SpeedServerCmd, v => v.menuSpeedServer).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SortServerResultCmd, v => v.menuSortServerResult).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.RemoveInvalidServerResultCmd, v => v.menuRemoveInvalidServerResult).DisposeWith(disposables);
//servers export
this.BindCommand(ViewModel, vm => vm.Export2ClientConfigCmd, v => v.menuExport2ClientConfig).DisposeWith(disposables);