Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit aa44b13

Browse files
authored
Merge pull request BeyondDimension#3471 from BeyondDimension/feature/ipv6check
Feature/ipv6check
2 parents de69402 + 1039180 commit aa44b13

10 files changed

Lines changed: 413 additions & 367 deletions
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using FluentAvalonia.Core;
2+
using System.Reactive;
3+
4+
namespace BD.WTTS.Models;
5+
6+
public class ProxyDomainGroupViewModel : ReactiveObject
7+
{
8+
private readonly INetworkTestService networkTestService = INetworkTestService.Instance;
9+
10+
public string Name { get; set; } = string.Empty;
11+
12+
public string IconUrl { get; set; } = string.Empty;
13+
14+
public ReadOnlyCollection<ProxyDomainViewModel>? EnableProxyDomainVMs { get; set; }
15+
16+
public ReactiveCommand<Unit, Unit> ConnectTestCommand { get; set; }
17+
18+
public ProxyDomainGroupViewModel()
19+
{
20+
ConnectTestCommand = ReactiveCommand.CreateFromTask(async () =>
21+
{
22+
if (EnableProxyDomainVMs == null)
23+
{
24+
Toast.Show(ToastIcon.Warning, "没有可测试的项目");
25+
return;
26+
}
27+
28+
var tasks = EnableProxyDomainVMs.Select(async enableDomain =>
29+
{
30+
enableDomain.DelayMillseconds = "- ms";
31+
var (success, delayMs) = await networkTestService.TestOpenUrlAsync(enableDomain.Url);
32+
enableDomain.DelayMillseconds = success switch
33+
{
34+
true when delayMs > 20000 => "Timeout",
35+
true => delayMs.ToString() + " ms",
36+
false => "error",
37+
};
38+
});
39+
40+
await Task.WhenAll(tasks);
41+
42+
if (EnableProxyDomainVMs.Count(x => x.DelayMillseconds == "Timeout") == EnableProxyDomainVMs.Count)
43+
{
44+
Toast.Show(ToastIcon.Error, "当前测试项全部未通过,请检查网络链接状况,以及代理设置里的设置项是否正常。");
45+
}
46+
});
47+
}
48+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using Avalonia.Media;
2+
3+
namespace BD.WTTS.Models;
4+
5+
public class ProxyDomainViewModel : ReactiveObject
6+
{
7+
private readonly INetworkTestService networkTestService = INetworkTestService.Instance;
8+
9+
public string Name { get; }
10+
11+
public ProxyType ProxyType { get; }
12+
13+
public string Url { get; }
14+
15+
[Reactive]
16+
public string DelayMillseconds { get; set; } = string.Empty;
17+
18+
[ObservableAsProperty]
19+
public bool RetestButtonVisible { get; }
20+
21+
[ObservableAsProperty]
22+
public IBrush DelayColor { get; } = null!;
23+
24+
public ReadOnlyCollection<ProxyDomainViewModel>? Children { get; }
25+
26+
public ProxyDomainViewModel(string name, ProxyType proxyType, string url, List<ProxyDomainViewModel>? children = null)
27+
{
28+
Name = name;
29+
ProxyType = proxyType;
30+
Url = url;
31+
Children = children?.AsReadOnly();
32+
33+
this.WhenAnyValue(x => x.DelayMillseconds)
34+
.Subscribe(delay => Children?.ForEach(child => child.DelayMillseconds = delay));
35+
36+
this.WhenAnyValue(x => x.DelayMillseconds)
37+
.Select(d => d != string.Empty && d != "-")
38+
.ToPropertyEx(this, x => x.RetestButtonVisible);
39+
40+
const int DelayMiddle = 1000;
41+
this.WhenAnyValue(x => x.DelayMillseconds)
42+
.Select(d => d switch
43+
{
44+
"Timeout" or "error" => Brushes.Red,
45+
var s when s.Split(' ') is [var num, "ms"] && int.TryParse(num, out int ms)
46+
=> ms switch
47+
{
48+
<= DelayMiddle => Brushes.Green,
49+
> DelayMiddle => Brushes.Orange,
50+
},
51+
_ => Brushes.Gray,
52+
})
53+
.ToPropertyEx(this, x => x.DelayColor);
54+
}
55+
}

src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/AcceleratorPageViewModel.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,24 @@ public AcceleratorPageViewModel()
129129
.IsExecuting
130130
.ToPropertyEx(this, x => x.IsDNSChecking);
131131

132+
IPv6CheckCommand = ReactiveCommand.CreateFromTask(async () =>
133+
{
134+
var result = await IMicroServiceClient.Instance.Accelerate.GetMyIP(ipV6: true);
135+
if (result.IsSuccess)
136+
{
137+
IsSupportIPv6 = true;
138+
IPv6Address = result.Content ?? string.Empty;
139+
}
140+
else
141+
{
142+
IsSupportIPv6 = false;
143+
IPv6Address = string.Empty;
144+
}
145+
});
146+
IPv6CheckCommand
147+
.IsExecuting
148+
.ToPropertyEx(this, x => x.IsIPv6Checking);
149+
132150
ProxySettingsCommand = ReactiveCommand.Create(() =>
133151
{
134152
var vm = new ProxySettingsWindowViewModel();

src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/AcceleratorPageViewModel.props.cs

Lines changed: 11 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,7 @@
1-
using Avalonia.Controls;
2-
using Avalonia.Controls.Primitives;
3-
using Avalonia.Media;
41
using System.Reactive;
52

63
namespace BD.WTTS.UI.ViewModels;
74

8-
public class ProxyDomainGroupViewModel : ReactiveObject
9-
{
10-
private readonly INetworkTestService networkTestService = INetworkTestService.Instance;
11-
12-
public string Name { get; set; } = string.Empty;
13-
14-
public string IconUrl { get; set; } = string.Empty;
15-
16-
public ReadOnlyCollection<ProxyDomainViewModel>? EnableProxyDomainVMs { get; set; }
17-
18-
public ReactiveCommand<Unit, Unit> ConnectTestCommand { get; set; }
19-
20-
public ProxyDomainGroupViewModel()
21-
{
22-
ConnectTestCommand = ReactiveCommand.CreateFromTask(async () =>
23-
{
24-
var tasks = EnableProxyDomainVMs!.Select(async enableDomain =>
25-
{
26-
enableDomain.DelayMillseconds = "- ms";
27-
var (success, delayMs) = await networkTestService.TestOpenUrlAsync(enableDomain.Url);
28-
enableDomain.DelayMillseconds = success switch
29-
{
30-
true when delayMs > 20000 => "Timeout",
31-
true => delayMs.ToString() + " ms",
32-
false => "error",
33-
};
34-
});
35-
36-
await Task.WhenAll(tasks);
37-
});
38-
}
39-
}
40-
41-
public class ProxyDomainViewModel : ReactiveObject
42-
{
43-
private readonly INetworkTestService networkTestService = INetworkTestService.Instance;
44-
45-
public string Name { get; }
46-
47-
public ProxyType ProxyType { get; }
48-
49-
public string Url { get; }
50-
51-
[Reactive]
52-
public string DelayMillseconds { get; set; } = string.Empty;
53-
54-
[ObservableAsProperty]
55-
public bool RetestButtonVisible { get; }
56-
57-
[ObservableAsProperty]
58-
public IBrush DelayColor { get; } = null!;
59-
60-
public ReadOnlyCollection<ProxyDomainViewModel>? Children { get; }
61-
62-
public ProxyDomainViewModel(string name, ProxyType proxyType, string url, List<ProxyDomainViewModel>? children = null)
63-
{
64-
Name = name;
65-
ProxyType = proxyType;
66-
Url = url;
67-
Children = children?.AsReadOnly();
68-
69-
this.WhenAnyValue(x => x.DelayMillseconds)
70-
.Subscribe(delay => Children?.ForEach(child => child.DelayMillseconds = delay));
71-
72-
this.WhenAnyValue(x => x.DelayMillseconds)
73-
.Select(d => d != string.Empty && d != "-")
74-
.ToPropertyEx(this, x => x.RetestButtonVisible);
75-
76-
const int DelayMiddle = 1000;
77-
this.WhenAnyValue(x => x.DelayMillseconds)
78-
.Select(d => d switch
79-
{
80-
"Timeout" or "error" => Brushes.Red,
81-
var s when s.Split(' ') is [var num, "ms"] && int.TryParse(num, out int ms)
82-
=> ms switch
83-
{
84-
<= DelayMiddle => Brushes.Green,
85-
> DelayMiddle => Brushes.Orange,
86-
},
87-
_ => Brushes.Gray,
88-
})
89-
.ToPropertyEx(this, x => x.DelayColor);
90-
}
91-
}
92-
935
public sealed partial class AcceleratorPageViewModel : TabItemViewModel
946
{
957
public enum NatTypeSimple
@@ -119,6 +31,9 @@ public enum NatTypeSimple
11931
[ObservableAsProperty]
12032
public bool IsDNSChecking { get; }
12133

34+
[ObservableAsProperty]
35+
public bool IsIPv6Checking { get; }
36+
12237
[Reactive]
12338
public string DomainPendingTest { get; set; } = string.Empty;
12439

@@ -137,10 +52,18 @@ public enum NatTypeSimple
13752
[Reactive]
13853
public string DNSTestResult { get; set; } = string.Empty;
13954

55+
[Reactive]
56+
public string IPv6Address { get; set; } = string.Empty;
57+
58+
[Reactive]
59+
public bool IsSupportIPv6 { get; set; }
60+
14061
public ReactiveCommand<Unit, (NatTypeSimple Nat, bool PingSuccess)> NATCheckCommand { get; }
14162

14263
public ReactiveCommand<Unit, Unit> DNSCheckCommand { get; }
14364

65+
public ReactiveCommand<Unit, Unit> IPv6CheckCommand { get; }
66+
14467
public ICommand StartProxyCommand { get; }
14568

14669
public ICommand RefreshCommand { get; }

src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/ProxySettingsWindowViewModel.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,16 @@ public ProxySettingsWindowViewModel()
4444
DohAddres_360,
4545
TUNA_DohAddres,
4646
};
47+
48+
public void ResetSettings()
49+
{
50+
ProxySettings.SystemProxyIp.Reset();
51+
ProxySettings.ProxyMasterDns.Reset();
52+
ProxySettings.SystemProxyPortId.Reset();
53+
ProxySettings.ProgramStartupRunProxy.Reset();
54+
ProxySettings.EnableHttpProxyToHttps.Reset();
55+
ProxySettings.UseDoh.Reset();
56+
ProxySettings.CustomDohAddres2.Reset();
57+
ProxySettings.OnlyEnableProxyScript.Reset();
58+
}
4759
}

src/BD.WTTS.Client.Plugins.Accelerator/UI/Views/Controls/AcceleratorServiceStatus.axaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</ItemsControl.ItemsPanel>
2525

2626
<ItemsControl.ItemTemplate>
27-
<DataTemplate>
27+
<DataTemplate x:DataType="spp:ProxyDomainGroupViewModel">
2828
<Border>
2929
<ui:SettingsExpander IsClickEnabled="False" IsExpanded="True">
3030
<ui:SettingsExpander.Header>
@@ -77,7 +77,8 @@
7777
DockPanel.Dock="Right"
7878
Foreground="{Binding DelayColor}"
7979
Text="{Binding DelayMillseconds}"
80-
ToolTip.Tip="此数值代表测试网页打开访问所需时间,仅供参考" />
80+
ToolTip.ShowDelay="0"
81+
ToolTip.Tip="此数值代表测试网页打开访问所需时间,请以实际浏览器访问网页状况为准" />
8182
</DockPanel>
8283
</TreeDataTemplate>
8384
</TreeView.ItemTemplate>

0 commit comments

Comments
 (0)