From 09abb46159f118d93744aa094fe22b755e7f7bb0 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Sat, 25 Mar 2023 21:26:17 +0800 Subject: [PATCH] fixup some code style phase 1 --- .../HttpClientGenerator.cs | 65 +++--- .../InjectionGenerator.cs | 45 +++-- .../Snap.Hutao/Core/Caching/ImageCache.cs | 2 +- .../Snap.Hutao/Core/CoreEnvironment.cs | 16 +- .../HttpClient/HttpClientAttribute.cs | 2 +- ...igration.cs => HttpClientConfiguration.cs} | 2 +- .../IocHttpClientConfiguration.cs | 10 +- .../Snap.Hutao/Model/Binding/User/User.cs | 190 +++++++++--------- .../Snap.Hutao/Model/Entity/User.cs | 2 +- .../Resource/Localization/SH.Designer.cs | 9 + .../Snap.Hutao/Resource/Localization/SH.resx | 3 + .../Service/Game/Package/PackageConverter.cs | 2 +- .../Service/Metadata/MetadataService.cs | 2 +- .../Snap.Hutao/Service/User/UserService.cs | 2 +- .../View/Dialog/SignInWebViewDialog.xaml.cs | 2 +- .../Web/Bridge/CoreWebView2Extension.cs | 4 +- .../Snap.Hutao/Web/Enka/EnkaClient.cs | 2 +- .../Snap.Hutao/Web/Geetest/GeetestClient.cs | 2 +- .../Web/Hoyolab/App/Account/AccountClient.cs | 2 +- .../Web/Hoyolab/Bbs/User/UserClient.cs | 2 +- .../Snap.Hutao/Web/Hoyolab/Cookie.cs | 2 +- .../Common/Announcement/AnnouncementClient.cs | 2 +- .../Hk4e/Event/GachaInfo/GachaInfoClient.cs | 2 +- .../Web/Hoyolab/Passport/PassportClient.cs | 2 +- .../Web/Hoyolab/Passport/PassportClient2.cs | 2 +- .../Web/Hoyolab/Passport/PassportClientOs.cs | 2 +- .../SdkStatic/Hk4e/Launcher/ResourceClient.cs | 2 +- .../Web/Hoyolab/Takumi/Auth/AuthClient.cs | 2 +- .../Web/Hoyolab/Takumi/Auth/AuthClientOs.cs | 2 +- .../Hoyolab/Takumi/Binding/BindingClient.cs | 2 +- .../Hoyolab/Takumi/Binding/BindingClient2.cs | 2 +- .../Takumi/Event/Calculate/CalculateClient.cs | 2 +- .../Hoyolab/Takumi/GameRecord/CardClient.cs | 2 +- .../Takumi/GameRecord/GameRecordClient.cs | 2 +- .../Takumi/GameRecord/GameRecordClientOs.cs | 2 +- .../Web/Hutao/HomaLogUploadClient.cs | 2 +- .../Web/Hutao/HomaPassportClient.cs | 2 +- .../Web/Hutao/HomaSpiralAbyssClient.cs | 2 +- 38 files changed, 213 insertions(+), 189 deletions(-) rename src/Snap.Hutao/Snap.Hutao.SourceGeneration/{DedendencyInjection => DependencyInjection}/HttpClientGenerator.cs (79%) rename src/Snap.Hutao/Snap.Hutao.SourceGeneration/{DedendencyInjection => DependencyInjection}/InjectionGenerator.cs (83%) rename src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/{HttpClientConfigration.cs => HttpClientConfiguration.cs} (93%) diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DedendencyInjection/HttpClientGenerator.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DependencyInjection/HttpClientGenerator.cs similarity index 79% rename from src/Snap.Hutao/Snap.Hutao.SourceGeneration/DedendencyInjection/HttpClientGenerator.cs rename to src/Snap.Hutao/Snap.Hutao.SourceGeneration/DependencyInjection/HttpClientGenerator.cs index a83e2136..00fd6703 100644 --- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DedendencyInjection/HttpClientGenerator.cs +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DependencyInjection/HttpClientGenerator.cs @@ -11,7 +11,7 @@ using System.Collections.Immutable; using System.Linq; using System.Text; -namespace Snap.Hutao.SourceGeneration.DedendencyInjection; +namespace Snap.Hutao.SourceGeneration.DependencyInjection; /// /// 注入HttpClient代码生成器 @@ -21,10 +21,10 @@ namespace Snap.Hutao.SourceGeneration.DedendencyInjection; [Generator] public class HttpClientGenerator : ISourceGenerator { - private const string DefaultName = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfigration.Default"; - private const string XRpcName = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfigration.XRpc"; - private const string XRpc2Name = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfigration.XRpc2"; - private const string XRpc3Name = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfigration.XRpc3"; + private const string DefaultName = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfiguration.Default"; + private const string XRpcName = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfiguration.XRpc"; + private const string XRpc2Name = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfiguration.XRpc2"; + private const string XRpc3Name = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.HttpClientConfiguration.XRpc3"; private const string PrimaryHttpMessageHandlerAttributeName = "Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient.PrimaryHttpMessageHandlerAttribute"; private const string DynamicSecretAttributeName = "Snap.Hutao.Web.Hoyolab.DynamicSecret.UseDynamicSecretAttribute"; @@ -49,29 +49,34 @@ public class HttpClientGenerator : ISourceGenerator StringBuilder sourceCodeBuilder = new(); - sourceCodeBuilder.Append($@"// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -// This class is generated by Snap.Hutao.SourceGeneration - -using Microsoft.Extensions.DependencyInjection; -using Snap.Hutao.Web.Hoyolab.DynamicSecret; -using System.Net.Http; - -namespace Snap.Hutao.Core.DependencyInjection; - -internal static partial class IocHttpClientConfiguration -{{ - [global::System.CodeDom.Compiler.GeneratedCodeAttribute(""{toolName}"",""1.0.0.0"")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public static partial IServiceCollection AddHttpClients(this IServiceCollection services) - {{"); + sourceCodeBuilder.Append($$""" + // Copyright (c) DGP Studio. All rights reserved. + // Licensed under the MIT license. + + // This class is generated by Snap.Hutao.SourceGeneration + + using Microsoft.Extensions.DependencyInjection; + using Snap.Hutao.Web.Hoyolab.DynamicSecret; + using System.Net.Http; + + namespace Snap.Hutao.Core.DependencyInjection; + + internal static partial class IocHttpClientConfiguration + { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("{{toolName}}","1.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static partial IServiceCollection AddHttpClients(this IServiceCollection services) + { + """); FillWithInjectionServices(receiver, sourceCodeBuilder); - sourceCodeBuilder.Append(@" - return services; - } -}"); + + sourceCodeBuilder.Append(""" + + return services; + } + } + """); context.AddSource("IocHttpClientConfiguration.g.cs", SourceText.From(sourceCodeBuilder.ToString(), Encoding.UTF8)); } @@ -110,7 +115,7 @@ internal static partial class IocHttpClientConfiguration lineBuilder.Append("XRpc3Configuration)"); break; default: - throw new InvalidOperationException($"非法的HttpClientConfigration值: [{injectAsName}]"); + throw new InvalidOperationException($"非法的 HttpClientConfiguration 值: [{injectAsName}]"); } AttributeData? handlerInfo = classSymbol @@ -124,11 +129,11 @@ internal static partial class IocHttpClientConfiguration foreach (KeyValuePair property in properties) { - lineBuilder.Append(" "); + lineBuilder.Append(' '); lineBuilder.Append(property.Key); lineBuilder.Append(" = "); lineBuilder.Append(property.Value.ToCSharpString()); - lineBuilder.Append(","); + lineBuilder.Append(','); } lineBuilder.Append(" })"); @@ -139,7 +144,7 @@ internal static partial class IocHttpClientConfiguration lineBuilder.Append(".AddHttpMessageHandler()"); } - lineBuilder.Append(";"); + lineBuilder.Append(';'); lines.Add(lineBuilder.ToString()); } diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DedendencyInjection/InjectionGenerator.cs b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DependencyInjection/InjectionGenerator.cs similarity index 83% rename from src/Snap.Hutao/Snap.Hutao.SourceGeneration/DedendencyInjection/InjectionGenerator.cs rename to src/Snap.Hutao/Snap.Hutao.SourceGeneration/DependencyInjection/InjectionGenerator.cs index d55b18de..9423035b 100644 --- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DedendencyInjection/InjectionGenerator.cs +++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/DependencyInjection/InjectionGenerator.cs @@ -11,7 +11,7 @@ using System.Collections.Immutable; using System.Linq; using System.Text; -namespace Snap.Hutao.SourceGeneration.DedendencyInjection; +namespace Snap.Hutao.SourceGeneration.DependencyInjection; /// /// 注入代码生成器 @@ -44,27 +44,30 @@ public class InjectionGenerator : ISourceGenerator string toolName = this.GetGeneratorType().FullName; StringBuilder sourceCodeBuilder = new(); - sourceCodeBuilder.Append($@"// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -// This class is generated by Snap.Hutao.SourceGeneration - -using Microsoft.Extensions.DependencyInjection; - -namespace Snap.Hutao.Core.DependencyInjection; - -internal static partial class ServiceCollectionExtension -{{ - [global::System.CodeDom.Compiler.GeneratedCodeAttribute(""{toolName}"",""1.0.0.0"")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public static partial IServiceCollection AddInjections(this IServiceCollection services) - {{"); + sourceCodeBuilder.Append($$""" + // Copyright (c) DGP Studio. All rights reserved. + // Licensed under the MIT license. + + // This class is generated by Snap.Hutao.SourceGeneration + + using Microsoft.Extensions.DependencyInjection; + + namespace Snap.Hutao.Core.DependencyInjection; + + internal static partial class ServiceCollectionExtension + { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("{{toolName}}","1.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static partial IServiceCollection AddInjections(this IServiceCollection services) + { + """); FillWithInjectionServices(receiver, sourceCodeBuilder); - sourceCodeBuilder.Append(@" - return services; - } -}"); + sourceCodeBuilder.Append(""" + return services; + } + } + """); context.AddSource("ServiceCollectionExtension.g.cs", SourceText.From(sourceCodeBuilder.ToString(), Encoding.UTF8)); } @@ -153,4 +156,4 @@ internal static partial class ServiceCollectionExtension } } } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs b/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs index 23a8a390..81181c6a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs @@ -18,7 +18,7 @@ namespace Snap.Hutao.Core.Caching; /// [HighQuality] [Injection(InjectAs.Singleton, typeof(IImageCache))] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] [PrimaryHttpMessageHandler(MaxConnectionsPerServer = 8)] internal sealed class ImageCache : IImageCache, IImageCacheFilePathOperation { diff --git a/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs b/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs index 4684dc78..435770cf 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs @@ -24,21 +24,31 @@ internal static class CoreEnvironment /// public const string HoyolabUA = $"Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBS/{HoyolabXrpcVersion}"; + /// + /// Hoyolab请求UA + /// + public const string HoyolabOsUA = $"Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBSOversea/{HoyolabOsXrpcVersion}"; + /// /// 米游社移动端请求UA /// public const string HoyolabMobileUA = $"Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBS/{HoyolabXrpcVersion}"; /// - /// Hoyolab iPhone 移动端请求UA + /// Hoyolab 移动端请求UA /// - public const string HoyolabOsMobileUA = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBSOversea/2.28.0"; + public const string HoyolabOsMobileUA = $"Mozilla/5.0 (Linux; Android 12) Mobile miHoYoBBSOversea/{HoyolabOsXrpcVersion}"; /// /// 米游社 Rpc 版本 /// public const string HoyolabXrpcVersion = "2.44.1"; + /// + /// Hoyolab Rpc 版本 + /// + public const string HoyolabOsXrpcVersion = "2.28.0"; + /// /// 盐 /// @@ -50,6 +60,8 @@ internal static class CoreEnvironment [SaltType.X4] = "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs", [SaltType.X6] = "t0qEgfub6cvueAPgR5m9aQWWVciEer7v", [SaltType.PROD] = "JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS", + + // This SALT is not reliable [SaltType.OS] = "6cqshh5dhw73bzxn20oexa9k516chk7s", }.ToImmutableDictionary(); diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientAttribute.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientAttribute.cs index f3f77c84..b8a8145a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientAttribute.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientAttribute.cs @@ -15,7 +15,7 @@ internal sealed class HttpClientAttribute : Attribute /// 构造一个新的特性 /// /// 配置 - public HttpClientAttribute(HttpClientConfigration configration) + public HttpClientAttribute(HttpClientConfiguration configration) { } } diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientConfigration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientConfiguration.cs similarity index 93% rename from src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientConfigration.cs rename to src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientConfiguration.cs index 6bc5419c..76609c09 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientConfigration.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/Annotation/HttpClient/HttpClientConfiguration.cs @@ -7,7 +7,7 @@ namespace Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; /// Http客户端配置 /// [HighQuality] -internal enum HttpClientConfigration +internal enum HttpClientConfiguration { /// /// 默认配置 diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs index dc6de29b..451a1c66 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs @@ -12,6 +12,8 @@ namespace Snap.Hutao.Core.DependencyInjection; [HighQuality] internal static partial class IocHttpClientConfiguration { + private const string ApplicationJson = "application/json"; + /// /// 添加 /// @@ -37,7 +39,7 @@ internal static partial class IocHttpClientConfiguration { client.Timeout = Timeout.InfiniteTimeSpan; client.DefaultRequestHeaders.UserAgent.ParseAdd(CoreEnvironment.HoyolabUA); - client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); + client.DefaultRequestHeaders.Accept.ParseAdd(ApplicationJson); client.DefaultRequestHeaders.Add("x-rpc-app_version", CoreEnvironment.HoyolabXrpcVersion); client.DefaultRequestHeaders.Add("x-rpc-client_type", "5"); client.DefaultRequestHeaders.Add("x-rpc-device_id", CoreEnvironment.HoyolabDeviceId); @@ -51,7 +53,7 @@ internal static partial class IocHttpClientConfiguration { client.Timeout = Timeout.InfiniteTimeSpan; client.DefaultRequestHeaders.UserAgent.ParseAdd(CoreEnvironment.HoyolabUA); - client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); + client.DefaultRequestHeaders.Accept.ParseAdd(ApplicationJson); client.DefaultRequestHeaders.Add("x-rpc-aigis", string.Empty); client.DefaultRequestHeaders.Add("x-rpc-app_id", "bll8iq97cem8"); client.DefaultRequestHeaders.Add("x-rpc-app_version", CoreEnvironment.HoyolabXrpcVersion); @@ -69,8 +71,8 @@ internal static partial class IocHttpClientConfiguration private static void XRpc3Configuration(HttpClient client) { client.Timeout = Timeout.InfiniteTimeSpan; - client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"); - client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); + client.DefaultRequestHeaders.UserAgent.ParseAdd(CoreEnvironment.HoyolabOsUA); + client.DefaultRequestHeaders.Accept.ParseAdd(ApplicationJson); client.DefaultRequestHeaders.Add("x-rpc-app_version", "1.5.0"); client.DefaultRequestHeaders.Add("x-rpc-client_type", "4"); } diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Binding/User/User.cs b/src/Snap.Hutao/Snap.Hutao/Model/Binding/User/User.cs index d420b50e..0cbeff53 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Binding/User/User.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Binding/User/User.cs @@ -4,7 +4,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Microsoft.Extensions.DependencyInjection; -using Snap.Hutao.Migrations; using Snap.Hutao.Web.Hoyolab; using Snap.Hutao.Web.Hoyolab.Bbs.User; using Snap.Hutao.Web.Hoyolab.Passport; @@ -104,20 +103,13 @@ internal sealed class User : ObservableObject internal static async Task ResumeAsync(EntityUser inner, CancellationToken token = default) { User user = new(inner); - bool isOk = false; - - if (!user.Entity.IsOversea) - { - isOk = await user.InitializeCoreAsync(token).ConfigureAwait(false); - } - else - { - isOk = await user.InitializeCoreOsAsync(token).ConfigureAwait(false); - } + bool isOk = user.Entity.IsOversea + ? await user.InitializeCoreOsAsync(token).ConfigureAwait(false) + : await user.InitializeCoreAsync(token).ConfigureAwait(false); if (!isOk) { - user.UserInfo = new UserInfo() { Nickname = "网络异常" }; + user.UserInfo = new() { Nickname = SH.ModelBindingUserInitializationFailed }; user.UserGameRoles = new(); } @@ -137,7 +129,6 @@ internal sealed class User : ObservableObject entity.Aid = cookie.GetValueOrDefault(Cookie.STUID); entity.Mid = cookie.GetValueOrDefault(Cookie.MID); - entity.IsOversea = false; if (entity.Aid != null && entity.Mid != null) { @@ -153,20 +144,20 @@ internal sealed class User : ObservableObject } /// - /// 创建并初始化国际服用户(临时) + /// 创建并初始化国际服用户 /// /// cookie /// 取消令牌 /// 用户 - internal static async Task CreateOsUserAsync(Cookie cookie, CancellationToken token = default) + internal static async Task CreateOsAsync(Cookie cookie, CancellationToken token = default) { // 这里只负责创建实体用户,稍后在用户服务中保存到数据库 EntityUser entity = EntityUser.CreateOs(cookie); entity.Aid = cookie.GetValueOrDefault(Cookie.STUID); - // Note: Currently we dont know how to get "mid" for hoyolab user, - // mid is set as the same value of ltuid(stuid/user id) + // Note: Currently we don't know how to get "mid" for hoyolab user, + // mid is set as the same value of ltuid/stuid entity.Mid = entity.Aid; entity.IsOversea = true; @@ -224,6 +215,88 @@ internal sealed class User : ObservableObject return isInitialized = true; } + private async Task InitializeCoreOsAsync(CancellationToken token = default) + { + if (isInitialized) + { + return true; + } + + if (SToken == null) + { + return false; + } + + using (IServiceScope scope = Ioc.Default.CreateScope()) + { + // 自动填充 Ltoken + if (LToken == null) + { + Response ltokenResponse = await scope.ServiceProvider + .GetRequiredService() + .GetLtokenBySTokenAsync(Entity, token) + .ConfigureAwait(false); + + if (ltokenResponse.IsOk()) + { + Cookie ltokenCookie = Cookie.Parse($"ltuid={Entity.Aid};ltoken={ltokenResponse.Data.Ltoken}"); + Entity.LToken = ltokenCookie; + } + else + { + return false; + } + } + + // Fetch user info + Response response = await scope.ServiceProvider + .GetRequiredService() + .GetOsUserFullInfoAsync(Entity, token) + .ConfigureAwait(false); + UserInfo = response.Data?.UserInfo; + + // 自动填充 CookieToken + if (CookieToken == null) + { + Response cookieTokenResponse = await scope.ServiceProvider + .GetRequiredService() + .GetCookieAccountInfoBySTokenAsync(Entity, token) + .ConfigureAwait(false); + + if (cookieTokenResponse.IsOk()) + { + Cookie cookieTokenCookie = Cookie.Parse($"account_id={Entity.Aid};cookie_token={cookieTokenResponse.Data.CookieToken}"); + Entity.CookieToken = cookieTokenCookie; + } + else + { + return false; + } + } + + // 获取游戏角色 + Response> userGameRolesResponse = await scope.ServiceProvider + .GetRequiredService() + .GetOsUserGameRolesByCookieAsync(Entity, token) + .ConfigureAwait(false); + + if (userGameRolesResponse.IsOk()) + { + UserGameRoles = userGameRolesResponse.Data.List; + } + else + { + return false; + } + } + + SelectedUserGameRole = UserGameRoles.FirstOrFirstOrDefault(role => role.IsChosen); + + isInitialized = true; + + return UserInfo != null && UserGameRoles.Any(); + } + private async Task TrySetLTokenAsync(IServiceProvider provider, CancellationToken token) { if (LToken != null) @@ -311,87 +384,4 @@ internal sealed class User : ObservableObject return false; } } - - private async Task InitializeCoreOsAsync(CancellationToken token = default) - { - if (isInitialized) - { - return true; - } - - if (SToken == null) - { - return false; - } - - using (IServiceScope scope = Ioc.Default.CreateScope()) - { - - // 自动填充 Ltoken - if (LToken == null) - { - Response ltokenResponse = await scope.ServiceProvider - .GetRequiredService() - .GetLtokenBySTokenAsync(Entity, token) - .ConfigureAwait(false); - - if (ltokenResponse.IsOk()) - { - Cookie ltokenCookie = Cookie.Parse($"ltuid={Entity.Aid};ltoken={ltokenResponse.Data.Ltoken}"); - Entity.LToken = ltokenCookie; - } - else - { - return false; - } - } - - // Fetch user info - Response response = await scope.ServiceProvider - .GetRequiredService() - .GetOsUserFullInfoAsync(Entity, token) - .ConfigureAwait(false); - UserInfo = response.Data?.UserInfo; - - // 自动填充 CookieToken - if (CookieToken == null) - { - Response cookieTokenResponse = await scope.ServiceProvider - .GetRequiredService() - .GetCookieAccountInfoBySTokenAsync(Entity, token) - .ConfigureAwait(false); - - if (cookieTokenResponse.IsOk()) - { - Cookie cookieTokenCookie = Cookie.Parse($"account_id={Entity.Aid};cookie_token={cookieTokenResponse.Data.CookieToken}"); - Entity.CookieToken = cookieTokenCookie; - } - else - { - return false; - } - } - - // 获取游戏角色 - Response> userGameRolesResponse = await scope.ServiceProvider - .GetRequiredService() - .GetOsUserGameRolesByCookieAsync(Entity, token) - .ConfigureAwait(false); - - if (userGameRolesResponse.IsOk()) - { - UserGameRoles = userGameRolesResponse.Data.List; - } - else - { - return false; - } - } - - SelectedUserGameRole = UserGameRoles.FirstOrFirstOrDefault(role => role.IsChosen); - - isInitialized = true; - - return UserInfo != null && UserGameRoles.Any(); - } } diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/User.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/User.cs index d77bfff2..8c4450fc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/User.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/User.cs @@ -81,7 +81,7 @@ internal sealed class User : ISelectable /// 新创建的用户 public static User CreateOs(Cookie cookie) { - _ = cookie.TryGetAsStokenV1(out Cookie? stoken); + _ = cookie.TryGetAsLegacyStoken(out Cookie? stoken); _ = cookie.TryGetAsLtoken(out Cookie? ltoken); _ = cookie.TryGetAsCookieToken(out Cookie? cookieToken); diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs index 3fba8d01..87ae6114 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs @@ -411,6 +411,15 @@ namespace Snap.Hutao.Resource.Localization { } } + /// + /// 查找类似 网络异常 的本地化字符串。 + /// + internal static string ModelBindingUserInitializationFailed { + get { + return ResourceManager.GetString("ModelBindingUserInitializationFailed", resourceCulture); + } + } + /// /// 查找类似 第 {0} 期 的本地化字符串。 /// diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx index 82831ddc..6d9af48d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx @@ -1806,4 +1806,7 @@ 立即登录或注册 + + 网络异常 + \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs index 749aef85..aeea4eaa 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs @@ -16,7 +16,7 @@ namespace Snap.Hutao.Service.Game.Package; /// 游戏文件包转换器 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class PackageConverter { private readonly JsonSerializerOptions options; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs index 2e613867..f97e23d4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs @@ -19,7 +19,7 @@ namespace Snap.Hutao.Service.Metadata; /// [HighQuality] [Injection(InjectAs.Singleton, typeof(IMetadataService))] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed partial class MetadataService : IMetadataService, IMetadataServiceInitialization { private const string MetaFileName = "Meta.json"; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs index a4aa33cd..588fcdd9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs @@ -329,7 +329,7 @@ internal class UserService : IUserService // 判断是否为国际服 if (isOversea) { - newUser = await BindingUser.CreateOsUserAsync(cookie).ConfigureAwait(false); + newUser = await BindingUser.CreateOsAsync(cookie).ConfigureAwait(false); } else { diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/SignInWebViewDialog.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Dialog/SignInWebViewDialog.xaml.cs index 33a686e0..97c8416d 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/SignInWebViewDialog.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/SignInWebViewDialog.xaml.cs @@ -49,7 +49,7 @@ internal sealed partial class SignInWebViewDialog : ContentDialog if (user.Entity.IsOversea) { - coreWebView2.SetCookie(user.CookieToken, user.LToken, null).SetOsMobileUserAgent(); + coreWebView2.SetCookie(user.CookieToken, user.LToken, null).SetMobileOsUserAgent(); signInJsInterface = new(coreWebView2, scope.ServiceProvider); coreWebView2.Navigate("https://act.hoyolab.com/ys/event/signin-sea-v3/index.html?act_id=e202102251931481&hyl_presentation_style=fullscreen"); } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Extension.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Extension.cs index c32bd1ab..eb6b13ec 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Extension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Extension.cs @@ -24,11 +24,11 @@ internal static class CoreWebView2Extension } /// - /// 设置 移动端UA + /// 设置 移动端OsUA /// /// webview2 /// 链式调用的WebView2 - public static CoreWebView2 SetOsMobileUserAgent(this CoreWebView2 webView) + public static CoreWebView2 SetMobileOsUserAgent(this CoreWebView2 webView) { webView.Settings.UserAgent = Core.CoreEnvironment.HoyolabOsMobileUA; return webView; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Enka/EnkaClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Enka/EnkaClient.cs index 93ff907a..a3a57db7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Enka/EnkaClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Enka/EnkaClient.cs @@ -12,7 +12,7 @@ namespace Snap.Hutao.Web.Enka; /// Enka API 客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class EnkaClient { private const string EnkaAPI = "https://enka.network/api/uid/{0}"; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs index 345b1ab4..f17ee448 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs @@ -11,7 +11,7 @@ namespace Snap.Hutao.Web.Geetest; /// 极验客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class GeetestClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/App/Account/AccountClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/App/Account/AccountClient.cs index 1ea0a8ae..84ee96be 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/App/Account/AccountClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/App/Account/AccountClient.cs @@ -16,7 +16,7 @@ namespace Snap.Hutao.Web.Hoyolab.App.Account; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc)] +[HttpClient(HttpClientConfiguration.XRpc)] internal sealed class AccountClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Bbs/User/UserClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Bbs/User/UserClient.cs index d5f1c5a2..c2d54bea 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Bbs/User/UserClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Bbs/User/UserClient.cs @@ -14,7 +14,7 @@ namespace Snap.Hutao.Web.Hoyolab.Bbs.User; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc)] +[HttpClient(HttpClientConfiguration.XRpc)] internal sealed class UserClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Cookie.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Cookie.cs index 93d7265f..e15374f1 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Cookie.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Cookie.cs @@ -122,7 +122,7 @@ internal sealed partial class Cookie /// /// A cookie contains stoken and stuid, without mid. /// 是否获取成功 - public bool TryGetAsStokenV1([NotNullWhen(true)] out Cookie? cookie) + public bool TryGetAsLegacyStoken([NotNullWhen(true)] out Cookie? cookie) { bool hasStoken = TryGetValue(STOKEN, out string? stoken); bool hasStuid = TryGetValue(STUID, out string? stuid); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs index 4a9224b0..97965579 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs @@ -10,7 +10,7 @@ namespace Snap.Hutao.Web.Hoyolab.Hk4e.Common.Announcement; /// /// 公告客户端 /// -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class AnnouncementClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Event/GachaInfo/GachaInfoClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Event/GachaInfo/GachaInfoClient.cs index 44ad80e3..1454db93 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Event/GachaInfo/GachaInfoClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Event/GachaInfo/GachaInfoClient.cs @@ -11,7 +11,7 @@ namespace Snap.Hutao.Web.Hoyolab.Hk4e.Event.GachaInfo; /// 祈愿记录客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class GachaInfoClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient.cs index bbed4295..61ce91a8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.Web.Hoyolab.Passport; /// 通行证客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class PassportClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient2.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient2.cs index b9542300..8c8d6b21 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient2.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClient2.cs @@ -16,7 +16,7 @@ namespace Snap.Hutao.Web.Hoyolab.Passport; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc2)] +[HttpClient(HttpClientConfiguration.XRpc2)] internal sealed class PassportClient2 { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClientOs.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClientOs.cs index 6c29d9bc..aa1ad5b3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClientOs.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Passport/PassportClientOs.cs @@ -14,7 +14,7 @@ namespace Snap.Hutao.Web.Hoyolab.Passport; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc3)] +[HttpClient(HttpClientConfiguration.XRpc3)] internal sealed class PassportClientOs { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs index 06a76df3..46e8b0b6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs @@ -12,7 +12,7 @@ namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; /// 游戏资源客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class ResourceClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClient.cs index d67b4359..d8c652be 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClient.cs @@ -16,7 +16,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Auth; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class AuthClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClientOs.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClientOs.cs index 27027284..31a0e07f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClientOs.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Auth/AuthClientOs.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Auth; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class AuthClientOs { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient.cs index fa8b55b9..44e65240 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Binding; /// 绑定客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class BindingClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient2.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient2.cs index a1c6ce14..6245eefa 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient2.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/BindingClient2.cs @@ -15,7 +15,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Binding; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc)] +[HttpClient(HttpClientConfiguration.XRpc)] internal sealed class BindingClient2 { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs index 6199ca06..bae2eb16 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate; /// 养成计算器客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class CalculateClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardClient.cs index 601e8663..b863f3ce 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardClient.cs @@ -16,7 +16,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc)] +[HttpClient(HttpClientConfiguration.XRpc)] internal sealed class CardClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClient.cs index 86f2cbf7..d8bfd86b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClient.cs @@ -18,7 +18,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc)] +[HttpClient(HttpClientConfiguration.XRpc)] [PrimaryHttpMessageHandler(UseCookies = false)] internal sealed class GameRecordClient { diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClientOs.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClientOs.cs index 39f5e55d..8b0b2b1d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClientOs.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/GameRecordClientOs.cs @@ -15,7 +15,7 @@ namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; /// [HighQuality] [UseDynamicSecret] -[HttpClient(HttpClientConfigration.XRpc3)] +[HttpClient(HttpClientConfiguration.XRpc3)] [PrimaryHttpMessageHandler(UseCookies = false)] internal sealed class GameRecordClientOs { diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaLogUploadClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaLogUploadClient.cs index d7d91cec..84ef3834 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaLogUploadClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaLogUploadClient.cs @@ -12,7 +12,7 @@ namespace Snap.Hutao.Web.Hutao; /// 胡桃日志客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class HomaLogUploadClient { private readonly HttpClient httpClient; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs index 9b6e3c0a..af0e6243 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs @@ -13,7 +13,7 @@ namespace Snap.Hutao.Web.Hutao; /// 胡桃通行证客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class HomaPassportClient { /// diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs index 076c9b2e..ee7949ba 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs @@ -18,7 +18,7 @@ namespace Snap.Hutao.Web.Hutao; /// 胡桃API客户端 /// [HighQuality] -[HttpClient(HttpClientConfigration.Default)] +[HttpClient(HttpClientConfiguration.Default)] internal sealed class HomaSpiralAbyssClient { private readonly HttpClient httpClient;