diff --git a/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/ExceptionRecorder.cs b/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/ExceptionRecorder.cs index fec24cb5..87514817 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/ExceptionRecorder.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/ExceptionRecorder.cs @@ -31,7 +31,7 @@ internal sealed partial class ExceptionRecorder private void OnAppUnhandledException(object? sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs e) { ValueTask task = serviceProvider - .GetRequiredService() + .GetRequiredService() .UploadLogAsync(e.Exception); if (!task.IsCompleted) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs index 0566c9a0..f8fb9434 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs @@ -19,7 +19,7 @@ internal sealed partial class HutaoSpiralAbyssService : IHutaoSpiralAbyssService private readonly TimeSpan cacheExpireTime = TimeSpan.FromHours(4); private readonly IObjectCacheDbService objectCacheDbService; - private readonly HomaSpiralAbyssClient homaClient; + private readonly HutaoSpiralAbyssClient homaClient; private readonly JsonSerializerOptions options; private readonly IMemoryCache memoryCache; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs index efdd065f..71988df7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs @@ -19,7 +19,6 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions public string? ActualUserName { get => IsLoggedIn ? UserName : null; } - /// - /// 设备当前IP - /// - public IPInfo IPInfo { get => ipInfo; set => ipInfo = value; } - /// /// 是否已登录 /// @@ -69,7 +63,7 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions public HutaoUserOptions Value { get => this; } - public async ValueTask PostLoginSucceedAsync(HomaPassportClient passportClient, ITaskContext taskContext, string username, string password, string? token) + public async ValueTask PostLoginSucceedAsync(HutaoPassportClient passportClient, ITaskContext taskContext, string username, string password, string? token) { LocalSetting.Set(SettingKeys.PassportUserName, username); LocalSetting.Set(SettingKeys.PassportPassword, password); @@ -137,11 +131,6 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions(); - homaPassportClient = serviceProvider.GetRequiredService(); + homaPassportClient = serviceProvider.GetRequiredService(); infoBarService = serviceProvider.GetRequiredService(); } diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportResetPasswordDialog.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportResetPasswordDialog.xaml.cs index 480a71ce..7d4a9406 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportResetPasswordDialog.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportResetPasswordDialog.xaml.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.View.Dialog; [DependencyProperty("VerifyCode", typeof(string))] internal sealed partial class HutaoPassportResetPasswordDialog : ContentDialog { - private readonly HomaPassportClient homaPassportClient; + private readonly HutaoPassportClient homaPassportClient; private readonly IInfoBarService infoBarService; private readonly ITaskContext taskContext; @@ -22,7 +22,7 @@ internal sealed partial class HutaoPassportResetPasswordDialog : ContentDialog InitializeComponent(); taskContext = serviceProvider.GetRequiredService(); - homaPassportClient = serviceProvider.GetRequiredService(); + homaPassportClient = serviceProvider.GetRequiredService(); infoBarService = serviceProvider.GetRequiredService(); } diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportUnregisterDialog.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportUnregisterDialog.xaml.cs index b3c8b380..1707c24b 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportUnregisterDialog.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/HutaoPassportUnregisterDialog.xaml.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.View.Dialog; [DependencyProperty("VerifyCode", typeof(string))] internal sealed partial class HutaoPassportUnregisterDialog : ContentDialog { - private readonly HomaPassportClient homaPassportClient; + private readonly HutaoPassportClient homaPassportClient; private readonly IInfoBarService infoBarService; private readonly ITaskContext taskContext; @@ -22,7 +22,7 @@ internal sealed partial class HutaoPassportUnregisterDialog : ContentDialog InitializeComponent(); taskContext = serviceProvider.GetRequiredService(); - homaPassportClient = serviceProvider.GetRequiredService(); + homaPassportClient = serviceProvider.GetRequiredService(); infoBarService = serviceProvider.GetRequiredService(); } diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml index 644e3adb..55b61e25 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml @@ -6,7 +6,9 @@ xmlns:cwc="using:CommunityToolkit.WinUI.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:mxi="using:Microsoft.Xaml.Interactivity" xmlns:shc="using:Snap.Hutao.Control" + xmlns:shcb="using:Snap.Hutao.Control.Behavior" xmlns:shch="using:Snap.Hutao.Control.Helper" xmlns:shcm="using:Snap.Hutao.Control.Markup" xmlns:shvc="using:Snap.Hutao.View.Control" @@ -14,6 +16,11 @@ d:DataContext="{d:DesignInstance shvs:SettingViewModel}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" mc:Ignorable="d"> + + + + + @@ -103,7 +110,7 @@ Description="{Binding HutaoOptions.DeviceId}" Header="{shcm:ResourceString Name=ViewPageSettingDeviceIdHeader}" IsClickEnabled="True"/> - + diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs index e889afc7..22ce7a2b 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs @@ -19,7 +19,7 @@ namespace Snap.Hutao.ViewModel.Setting; internal sealed partial class HutaoPassportViewModel : Abstraction.ViewModel { private readonly IContentDialogFactory contentDialogFactory; - private readonly HomaPassportClient homaPassportClient; + private readonly HutaoPassportClient homaPassportClient; private readonly HutaoUserOptions hutaoUserOptions; private readonly IInfoBarService infoBarService; private readonly ITaskContext taskContext; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs index 26fc68e6..24d3ba74 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs @@ -23,6 +23,7 @@ using Snap.Hutao.Service.Notification; using Snap.Hutao.Service.User; using Snap.Hutao.View.Dialog; using Snap.Hutao.ViewModel.Guide; +using Snap.Hutao.Web.Hutao; using System.Globalization; using System.IO; using System.Runtime.InteropServices; @@ -41,6 +42,7 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel private readonly HomeCardOptions homeCardOptions = new(); private readonly IFileSystemPickerInteraction fileSystemPickerInteraction; + private readonly HutaoInfrastructureClient hutaoInfrastructureClient; private readonly HutaoPassportViewModel hutaoPassportViewModel; private readonly IContentDialogFactory contentDialogFactory; private readonly IGameLocatorFactory gameLocatorFactory; @@ -57,6 +59,7 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel private NameValue? selectedBackdropType; private NameValue? selectedCulture; + private IPInformation? ipInformation; /// /// 应用程序设置 @@ -98,6 +101,18 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel } } + public IPInformation? IPInformation { get => ipInformation; private set => SetProperty(ref ipInformation, value); } + + protected override async ValueTask InitializeUIAsync() + { + IPInformation? information = await hutaoInfrastructureClient.GetIPInformationAsync().ConfigureAwait(false); + + await taskContext.SwitchToMainThreadAsync(); + IPInformation = information; + + return true; + } + [Command("ResetStaticResourceCommand")] private static void ResetStaticResource() { diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs index 301024dc..8a1fd9d9 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs @@ -24,7 +24,7 @@ namespace Snap.Hutao.ViewModel.SpiralAbyss; internal sealed partial class SpiralAbyssRecordViewModel : Abstraction.ViewModel, IRecipient { private readonly ISpiralAbyssRecordService spiralAbyssRecordService; - private readonly HomaSpiralAbyssClient spiralAbyssClient; + private readonly HutaoSpiralAbyssClient spiralAbyssClient; private readonly IInfoBarService infoBarService; private readonly ITaskContext taskContext; private readonly IUserService userService; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoInfrastructureClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoInfrastructureClient.cs new file mode 100644 index 00000000..e3a5073a --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoInfrastructureClient.cs @@ -0,0 +1,31 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; +using Snap.Hutao.Service.Hutao; +using Snap.Hutao.Web.Request.Builder; +using Snap.Hutao.Web.Request.Builder.Abstraction; +using System.Net.Http; +using System.Security.Cryptography; +using System.Text; + +namespace Snap.Hutao.Web.Hutao; + +[HttpClient(HttpClientConfiguration.Default)] +[ConstructorGenerated(ResolveHttpClient = true)] +internal sealed partial class HutaoInfrastructureClient +{ + private readonly IHttpRequestMessageBuilderFactory httpRequestMessageBuilderFactory; + private readonly ILogger logger; + private readonly HttpClient httpClient; + + public async ValueTask GetIPInformationAsync(CancellationToken token = default) + { + HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() + .SetRequestUri(HutaoEndpoints.Ip) + .Get(); + + IPInformation? resp = await builder.TryCatchSendAsync(httpClient, logger, token).ConfigureAwait(false); + return resp ?? IPInformation.Default; + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoPassportClient.cs similarity index 93% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoPassportClient.cs index 4c35a2a3..80fb41b2 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoPassportClient.cs @@ -17,7 +17,7 @@ namespace Snap.Hutao.Web.Hutao; [HighQuality] [HttpClient(HttpClientConfiguration.Default)] [ConstructorGenerated(ResolveHttpClient = true)] -internal sealed partial class HomaPassportClient +internal sealed partial class HutaoPassportClient { /// /// 通行证请求公钥 @@ -35,7 +35,7 @@ internal sealed partial class HomaPassportClient """; private readonly IHttpRequestMessageBuilderFactory httpRequestMessageBuilderFactory; - private readonly ILogger logger; + private readonly ILogger logger; private readonly HutaoUserOptions hutaoUserOptions; private readonly HttpClient httpClient; @@ -193,17 +193,6 @@ internal sealed partial class HomaPassportClient return HutaoResponse.DefaultIfNull(resp); } - public async ValueTask GetIPInfoAsync(CancellationToken token = default) - { - HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() - .SetRequestUri(HutaoEndpoints.Ip) - .Get(); - - IPInfo? resp = await builder.TryCatchSendAsync(httpClient, logger, token).ConfigureAwait(false); - - return resp ?? new(); - } - private static string Encrypt(string text) { byte[] plaintextBytes = Encoding.UTF8.GetBytes(text); @@ -214,4 +203,4 @@ internal sealed partial class HomaPassportClient return Convert.ToBase64String(encryptedBytes); } } -} \ No newline at end of file +} diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportHttpRequestMessageBuilderExtension.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoPassportHttpRequestMessageBuilderExtension.cs similarity index 88% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportHttpRequestMessageBuilderExtension.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoPassportHttpRequestMessageBuilderExtension.cs index a99499b3..91d9edeb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportHttpRequestMessageBuilderExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HutaoPassportHttpRequestMessageBuilderExtension.cs @@ -6,7 +6,7 @@ using Snap.Hutao.Web.Request.Builder; namespace Snap.Hutao.Web.Hutao; -internal static class HomaPassportHttpRequestMessageBuilderExtension +internal static class HutaoPassportHttpRequestMessageBuilderExtension { public static async ValueTask TrySetTokenAsync(this HttpRequestMessageBuilder builder, HutaoUserOptions hutaoUserOptions) { diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInfo.cs deleted file mode 100644 index 3a080ea4..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInfo.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Snap.Hutao.Web.Hutao; - -internal sealed class IPInfo -{ - public IPInfo() - { - } - - [JsonConstructor] - public IPInfo(string ip, string division) - { - Ip = ip; - Division = division; - } - - public string Ip { get; set; } = "Unknown"; - - public string Division { get; set; } = "Unknown"; - - public override string ToString() - { - return SH.FormatViewPageSettingDeviceIpDescription(Ip, Division); - } -} diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs new file mode 100644 index 00000000..1ce1379d --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs @@ -0,0 +1,24 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hutao; + +internal sealed class IPInformation +{ + public static IPInformation Default { get; } = new() + { + Ip = "Unknown", + Division = "Unknown" + }; + + [JsonPropertyName("ip")] + public string Ip { get; set; } = default!; + + [JsonPropertyName("division")] + public string Division { get; set; } = default!; + + public override string ToString() + { + return SH.FormatViewPageSettingDeviceIpDescription(Ip, Division); + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Log/HomaLogUploadClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Log/HutaoLogUploadClient.cs similarity index 93% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Log/HomaLogUploadClient.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/Log/HutaoLogUploadClient.cs index 30d110e4..6f198105 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Log/HomaLogUploadClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Log/HutaoLogUploadClient.cs @@ -16,10 +16,10 @@ namespace Snap.Hutao.Web.Hutao.Log; [HighQuality] [ConstructorGenerated(ResolveHttpClient = true)] [HttpClient(HttpClientConfiguration.Default)] -internal sealed partial class HomaLogUploadClient +internal sealed partial class HutaoLogUploadClient { private readonly IHttpRequestMessageBuilderFactory httpRequestMessageBuilderFactory; - private readonly ILogger logger; + private readonly ILogger logger; private readonly RuntimeOptions runtimeOptions; private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HomaSpiralAbyssClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HutaoSpiralAbyssClient.cs similarity index 98% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HomaSpiralAbyssClient.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HutaoSpiralAbyssClient.cs index d4841cd1..5283549c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HomaSpiralAbyssClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HutaoSpiralAbyssClient.cs @@ -22,10 +22,10 @@ namespace Snap.Hutao.Web.Hutao.SpiralAbyss; [HighQuality] [ConstructorGenerated(ResolveHttpClient = true)] [HttpClient(HttpClientConfiguration.Default)] -internal sealed partial class HomaSpiralAbyssClient +internal sealed partial class HutaoSpiralAbyssClient { private readonly IHttpRequestMessageBuilderFactory httpRequestMessageBuilderFactory; - private readonly ILogger logger; + private readonly ILogger logger; private readonly IServiceProvider serviceProvider; private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs index dbf33add..faf4cd2d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs @@ -11,7 +11,6 @@ namespace Snap.Hutao.Web; /// [HighQuality] [SuppressMessage("", "SA1201")] -[SuppressMessage("", "SA1203")] [SuppressMessage("", "SA1124")] internal static class HutaoEndpoints { @@ -23,8 +22,6 @@ internal static class HutaoEndpoints public const string AnnouncementUpload = $"{HomaSnapGenshinApi}/Service/Announcement/Upload"; - public const string Ip = $"{ApiSnapGenshin}/ip"; - public static string GachaLogCompensation(int days) { return $"{HomaSnapGenshinApi}/Service/GachaLog/Compensation?days={days}"; @@ -251,6 +248,8 @@ internal static class HutaoEndpoints } #endregion + public const string Ip = $"{ApiSnapGenshin}/ip"; + public static string Website(string path) { return $"{HomaSnapGenshinApi}/{path}";