From 42df02f718e87100d593d8e6d46fde50bbbee774 Mon Sep 17 00:00:00 2001 From: k1mlka Date: Wed, 9 Oct 2024 15:22:33 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E7=BD=91=E7=BB=9C=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E9=A1=B5=E9=9D=A2=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AcceleratorPageViewModel.props.cs | 2 -- .../NetworkCheckControlViewModel.cs | 25 ++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/AcceleratorPageViewModel.props.cs b/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/AcceleratorPageViewModel.props.cs index 96cfc069a..d0c4bf29f 100644 --- a/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/AcceleratorPageViewModel.props.cs +++ b/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/AcceleratorPageViewModel.props.cs @@ -6,8 +6,6 @@ public sealed partial class AcceleratorPageViewModel : TabItemViewModel { public override string Name => Strings.Welcome; - public string DefaultTestDomain { get; } = "store.steampowered.com"; - [Reactive] public ReadOnlyCollection? EnableProxyDomainGroupVMs { get; set; } diff --git a/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/NetworkCheckControlViewModel.cs b/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/NetworkCheckControlViewModel.cs index ab7c574cb..2e0bc4b24 100644 --- a/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/NetworkCheckControlViewModel.cs +++ b/src/BD.WTTS.Client.Plugins.Accelerator/UI/ViewModels/NetworkCheckControlViewModel.cs @@ -4,12 +4,28 @@ using System.Reactive; namespace BD.WTTS.UI.ViewModels; -public class NetworkCheckControlViewModel : ViewModelBase +public partial class NetworkCheckControlViewModel : ViewModelBase { + [GeneratedRegex(DomainValidationAttribute.RegPattern)] + private static partial Regex DomainRegExp(); + + public class DomainValidationAttribute : RegularExpressionAttribute + { + public const string RegPattern = @"^[^/]+\.[^/]{2,}$"; + + public override string FormatErrorMessage(string name) => "请填入不带分隔符 \"/\" 的域名"; + + public DomainValidationAttribute() : base(RegPattern) + { + } + } + private readonly INetworkTestService _networkTestService = INetworkTestService.Instance; public record NATFetchResult(string PublicEndPoint, string LocalEndPoint, string NATLevel, string NATTypeTip, bool PingResult); + public string DefaultTestDomain { get; } = "store.steampowered.com"; + [Reactive] public string SelectedSTUNAddress { get; set; } @@ -48,6 +64,7 @@ public class NetworkCheckControlViewModel : ViewModelBase [ObservableAsProperty] public bool IsIPv6Checking { get; } + [DomainValidation] [Reactive] public string DomainPendingTest { get; set; } = string.Empty; @@ -126,9 +143,11 @@ public class NetworkCheckControlViewModel : ViewModelBase .Merge(hidePingResultStream) .ToPropertyEx(this, x => x.PingErrorVisible); + var canDNSCheck = this.WhenAnyValue(x => x.DomainPendingTest) + .Select(domain => domain == string.Empty || DomainRegExp().IsMatch(domain)); DNSCheckCommand = ReactiveCommand.CreateFromTask(async () => { - var testDomain = DomainPendingTest == string.Empty ? "store.steampowered.com" : DomainPendingTest; + var testDomain = DomainPendingTest == string.Empty ? DefaultTestDomain : DomainPendingTest; try { long delayMs; @@ -155,7 +174,7 @@ public class NetworkCheckControlViewModel : ViewModelBase DNSTestDelay = string.Empty; DNSTestResult = "error"; } - }); + }, canDNSCheck); DNSCheckCommand .IsExecuting .ToPropertyEx(this, x => x.IsDNSChecking);