From b6080c45c2934c0f5923489c59e2b7dd3fddb1f8 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Wed, 23 Aug 2023 20:21:32 +0800 Subject: [PATCH] fix #823 --- .../Factory/GachaStatisticsFactory.cs | 8 ++-- .../Snap.Hutao/Service/Hutao/HutaoCache.cs | 2 +- .../Snap.Hutao/Service/Hutao/HutaoService.cs | 2 +- .../Service/Hutao/HutaoUserOptions.cs | 23 +++++++--- .../Service/Hutao/HutaoUserService.cs | 8 +++- .../Snap.Hutao/Service/Hutao/IHutaoCache.cs | 2 +- .../Snap.Hutao/Service/Hutao/IHutaoService.cs | 2 +- .../Service/Hutao/ObjectCacheDbService.cs | 2 +- .../Complex/HutaoDatabaseViewModel.cs | 2 +- .../ViewModel/Complex/ReliquarySetView.cs | 2 +- .../Snap.Hutao/ViewModel/Complex/Team.cs | 2 +- .../ViewModel/Complex/TeamAppearanceView.cs | 2 +- .../SpiralAbyss/SpiralAbyssRecordViewModel.cs | 3 +- .../Snap.Hutao/Web/Geetest/GeetestClient.cs | 1 + .../Hoyolab/Takumi/GameRecord/CardClient.cs | 1 + .../Takumi/GameRecord/GameRecordClient.cs | 5 ++- .../Verification/HomaGeetestCardVerifier.cs | 43 +++++++++++++++++++ .../Verification/IGeetestCardVerifier.cs | 11 +++++ .../SlientGeetestCardVerifier.cs} | 8 ++-- .../Verification/VerificationRegistration.cs | 2 +- .../Verification/VerificationResult.cs | 2 +- .../Web/Hutao/GachaLog/HomaGachaLogClient.cs | 17 ++++---- ...assportHttpClientAuthorizationExtension.cs | 16 +++++++ .../Web/Hutao/Geetest/HomaGeetestClient.cs | 4 +- .../Web/Hutao/HomaPassportClient.cs | 2 +- .../AvatarAppearanceRank.cs | 2 +- .../{Model => SpiralAbyss}/AvatarBuild.cs | 2 +- .../AvatarCollocation.cs | 2 +- .../AvatarConstellationInfo.cs | 2 +- .../{Model => SpiralAbyss}/AvatarUsageRank.cs | 2 +- .../Converter/ReliquarySetsConverter.cs | 2 +- .../HomaSpiralAbyssClient.cs | 8 ++-- .../Hutao/{Model => SpiralAbyss}/ItemRate.cs | 2 +- .../Hutao/{Model => SpiralAbyss}/Overview.cs | 2 +- .../Post/SimpleAvatar.cs | 2 +- .../Post/SimpleBattle.cs | 2 +- .../Post/SimpleFloor.cs | 2 +- .../Post/SimpleLevel.cs | 2 +- .../{Model => SpiralAbyss}/Post/SimpleRank.cs | 2 +- .../Post/SimpleRecord.cs | 4 +- .../Post/SimpleSpiralAbyss.cs | 4 +- .../Hutao/{Model => SpiralAbyss}/RankInfo.cs | 2 +- .../Hutao/{Model => SpiralAbyss}/RankValue.cs | 2 +- .../{Model => SpiralAbyss}/ReliquarySet.cs | 2 +- .../{Model => SpiralAbyss}/ReliquarySets.cs | 4 +- .../Web/Hutao/{Model => SpiralAbyss}/Team.cs | 2 +- .../{Model => SpiralAbyss}/TeamAppearance.cs | 2 +- .../Hutao/{Model => SpiralAbyss}/UserInfo.cs | 2 +- .../{Model => SpiralAbyss}/WeaponBuild.cs | 2 +- .../WeaponCollocation.cs | 2 +- 50 files changed, 161 insertions(+), 73 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/HomaGeetestCardVerifier.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/IGeetestCardVerifier.cs rename src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/{CardVerifier.cs => Verification/SlientGeetestCardVerifier.cs} (85%) create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaPassportHttpClientAuthorizationExtension.cs rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/AvatarAppearanceRank.cs (90%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/AvatarBuild.cs (88%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/AvatarCollocation.cs (93%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/AvatarConstellationInfo.cs (91%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/AvatarUsageRank.cs (90%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Converter/ReliquarySetsConverter.cs (95%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{ => SpiralAbyss}/HomaSpiralAbyssClient.cs (97%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/ItemRate.cs (94%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Overview.cs (98%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleAvatar.cs (95%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleBattle.cs (93%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleFloor.cs (94%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleLevel.cs (94%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleRank.cs (95%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleRecord.cs (91%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Post/SimpleSpiralAbyss.cs (91%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/RankInfo.cs (90%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/RankValue.cs (95%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/ReliquarySet.cs (95%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/ReliquarySets.cs (83%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/Team.cs (92%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/TeamAppearance.cs (92%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/UserInfo.cs (90%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/WeaponBuild.cs (88%) rename src/Snap.Hutao/Snap.Hutao/Web/Hutao/{Model => SpiralAbyss}/WeaponCollocation.cs (89%) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsFactory.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsFactory.cs index ae20b701..1212a10b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsFactory.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/GachaStatisticsFactory.cs @@ -9,7 +9,7 @@ using Snap.Hutao.Model.Metadata.Avatar; using Snap.Hutao.Model.Metadata.Weapon; using Snap.Hutao.Service.Metadata; using Snap.Hutao.ViewModel.GachaLog; -using Snap.Hutao.Web.Hutao; +using Snap.Hutao.Web.Hutao.GachaLog; using System.Runtime.InteropServices; namespace Snap.Hutao.Service.GachaLog.Factory; @@ -28,7 +28,7 @@ internal sealed partial class GachaStatisticsFactory : IGachaStatisticsFactory private readonly AppOptions options; /// - public async ValueTask CreateAsync(List items, GachaLogServiceMetadataContext context) + public async ValueTask CreateAsync(List items, GachaLogServiceMetadataContext context) { await taskContext.SwitchToBackgroundAsync(); List gachaEvents = await metadataService.GetGachaEventsAsync().ConfigureAwait(false); @@ -40,7 +40,7 @@ internal sealed partial class GachaStatisticsFactory : IGachaStatisticsFactory private static GachaStatistics CreateCore( ITaskContext taskContext, HomaGachaLogClient gachaLogClient, - List items, + List items, List historyWishBuilders, in GachaLogServiceMetadataContext context, bool isEmptyHistoryWishVisible) @@ -62,7 +62,7 @@ internal sealed partial class GachaStatisticsFactory : IGachaStatisticsFactory // Items are ordered by precise time, first is oldest // 'ref' is not allowed here because we have lambda below - foreach (GachaItem item in CollectionsMarshal.AsSpan(items)) + foreach (Model.Entity.GachaItem item in CollectionsMarshal.AsSpan(items)) { // Find target history wish to operate. HistoryWishBuilder? targetHistoryWishBuilder = historyWishBuilders diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoCache.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoCache.cs index 47360271..0e44e587 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoCache.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoCache.cs @@ -8,7 +8,7 @@ using Snap.Hutao.Model.Metadata.Weapon; using Snap.Hutao.Model.Primitive; using Snap.Hutao.Service.Metadata; using Snap.Hutao.ViewModel.Complex; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; namespace Snap.Hutao.Service.Hutao; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoService.cs index 5f5c6814..5ae45ac0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoService.cs @@ -6,7 +6,7 @@ using Snap.Hutao.Core.Database; using Snap.Hutao.Model.Entity; using Snap.Hutao.Model.Entity.Database; using Snap.Hutao.Web.Hutao; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; using Snap.Hutao.Web.Response; namespace Snap.Hutao.Service.Hutao; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs index e6e510aa..4a68d8b0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs @@ -3,7 +3,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using Microsoft.Extensions.Options; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; using System.Text.RegularExpressions; namespace Snap.Hutao.Service.Hutao; @@ -14,6 +14,7 @@ namespace Snap.Hutao.Service.Hutao; [Injection(InjectAs.Singleton)] internal sealed class HutaoUserOptions : ObservableObject, IOptions { + private readonly TaskCompletionSource initializedTaskCompletionSource = new(); private string? userName = SH.ViewServiceHutaoUserLoginOrRegisterHint; private string? token; private bool isLoggedIn; @@ -31,11 +32,6 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions public string? ActualUserName { get => IsLoggedIn ? UserName : null; } - /// - /// 访问令牌 - /// - public string? Token { get => token; set => SetProperty(ref token, value); } - /// /// 是否已登录 /// @@ -67,8 +63,9 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions @@ -77,6 +74,12 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions @@ -89,4 +92,10 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions DateTimeOffset.Now; } + + public async ValueTask GetTokenAsync() + { + await initializedTaskCompletionSource.Task.ConfigureAwait(false); + return token; + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserService.cs index f443bda2..4adcb51f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserService.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Core.Setting; using Snap.Hutao.Web.Hutao; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; namespace Snap.Hutao.Service.Hutao; @@ -35,7 +35,11 @@ internal sealed partial class HutaoUserService : IHutaoUserService, IHutaoUserSe string userName = LocalSetting.Get(SettingKeys.PassportUserName, string.Empty); string passport = LocalSetting.Get(SettingKeys.PassportPassword, string.Empty); - if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(passport)) + if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(passport)) + { + options.SkipLogin(); + } + else { Web.Response.Response response = await passportClient.LoginAsync(userName, passport, token).ConfigureAwait(false); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoCache.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoCache.cs index 79741833..13f191cc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoCache.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoCache.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Model.Binding.Hutao; using Snap.Hutao.Model.Primitive; using Snap.Hutao.ViewModel.Complex; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; namespace Snap.Hutao.Service.Hutao; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoService.cs index 7f37e7a0..f21d11d0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoService.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; namespace Snap.Hutao.Service.Hutao; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/ObjectCacheDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/ObjectCacheDbService.cs index cb9e8631..5350410b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/ObjectCacheDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/ObjectCacheDbService.cs @@ -8,7 +8,7 @@ using Snap.Hutao.Core.ExceptionService; using Snap.Hutao.Model.Entity; using Snap.Hutao.Model.Entity.Database; using Snap.Hutao.Web.Hutao; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; using Snap.Hutao.Web.Response; namespace Snap.Hutao.Service.Hutao; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/HutaoDatabaseViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/HutaoDatabaseViewModel.cs index e9616e1c..7a291a07 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/HutaoDatabaseViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/HutaoDatabaseViewModel.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Binding.Hutao; using Snap.Hutao.Service.Hutao; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; namespace Snap.Hutao.ViewModel.Complex; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/ReliquarySetView.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/ReliquarySetView.cs index b9ce59fa..b108fc67 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/ReliquarySetView.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/ReliquarySetView.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Metadata.Converter; using Snap.Hutao.Model.Primitive; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/Team.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/Team.cs index 457cf592..4340042c 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/Team.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/Team.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Primitives; using Snap.Hutao.Model.Metadata.Avatar; using Snap.Hutao.Model.Primitive; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; using System.Globalization; namespace Snap.Hutao.ViewModel.Complex; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/TeamAppearanceView.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/TeamAppearanceView.cs index be1eb0b8..c914b6ed 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/TeamAppearanceView.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Complex/TeamAppearanceView.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Metadata.Avatar; using Snap.Hutao.Model.Primitive; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; namespace Snap.Hutao.ViewModel.Complex; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs index bdfe1195..6d76281c 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyss/SpiralAbyssRecordViewModel.cs @@ -12,7 +12,8 @@ using Snap.Hutao.Service.SpiralAbyss; using Snap.Hutao.Service.User; using Snap.Hutao.ViewModel.User; using Snap.Hutao.Web.Hutao; -using Snap.Hutao.Web.Hutao.Model.Post; +using Snap.Hutao.Web.Hutao.SpiralAbyss; +using Snap.Hutao.Web.Hutao.SpiralAbyss.Post; using System.Collections.ObjectModel; namespace Snap.Hutao.ViewModel.SpiralAbyss; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs index 980a58e1..21f45783 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Geetest/GeetestClient.cs @@ -3,6 +3,7 @@ using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; +using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; using System.Net.Http; namespace Snap.Hutao.Web.Geetest; 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 af7d1417..b1ab1bc1 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 @@ -5,6 +5,7 @@ using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; using Snap.Hutao.Model.Entity; using Snap.Hutao.Web.Hoyolab.Annotation; using Snap.Hutao.Web.Hoyolab.DynamicSecret; +using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; using Snap.Hutao.Web.Response; using System.Net.Http; 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 78da7a3d..8c295996 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 @@ -6,6 +6,7 @@ using Snap.Hutao.ViewModel.User; using Snap.Hutao.Web.Hoyolab.Annotation; using Snap.Hutao.Web.Hoyolab.DynamicSecret; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Avatar; +using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; using Snap.Hutao.Web.Response; using System.Net.Http; @@ -46,9 +47,9 @@ internal sealed partial class GameRecordClient : IGameRecordClient { // Replace message resp.Message = SH.WebDailyNoteVerificationFailed; - CardVerifier cardVerifier = serviceProvider.GetRequiredService(); + IGeetestCardVerifier verifier = serviceProvider.GetRequiredService(); - if (await cardVerifier.TryGetXrpcChallengeAsync(userAndUid.User, token).ConfigureAwait(false) is { } challenge) + if (await verifier.TryValidateXrpcChallengeAsync(userAndUid.User, token).ConfigureAwait(false) is { } challenge) { resp = await httpClient .SetUser(userAndUid.User, CookieType.Cookie) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/HomaGeetestCardVerifier.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/HomaGeetestCardVerifier.cs new file mode 100644 index 00000000..ff59fec2 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/HomaGeetestCardVerifier.cs @@ -0,0 +1,43 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Model.Entity; +using Snap.Hutao.Web.Geetest; +using Snap.Hutao.Web.Hutao.Geetest; + +namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; + +[ConstructorGenerated] +[Injection(InjectAs.Transient)] +internal sealed partial class HomaGeetestCardVerifier : IGeetestCardVerifier +{ + private readonly CardClient cardClient; + private readonly HomaGeetestClient homaGeetestClient; + + public async ValueTask TryValidateXrpcChallengeAsync(User user, CancellationToken token) + { + Response.Response registrationResponse = await cardClient.CreateVerificationAsync(user, token).ConfigureAwait(false); + if (registrationResponse.IsOk()) + { + VerificationRegistration registration = registrationResponse.Data; + + GeetestResponse response = await homaGeetestClient.VerifyAsync(registration.Gt, registration.Challenge, token).ConfigureAwait(false); + + if (response is { Code: 0, Data.Validate: string validate }) + { + Response.Response verifyResponse = await cardClient.VerifyVerificationAsync(registration.Challenge, validate, token).ConfigureAwait(false); + if (verifyResponse.IsOk()) + { + VerificationResult result = verifyResponse.Data; + + if (result.Challenge is not null) + { + return result.Challenge; + } + } + } + } + + return default; + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/IGeetestCardVerifier.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/IGeetestCardVerifier.cs new file mode 100644 index 00000000..1ffc505f --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/IGeetestCardVerifier.cs @@ -0,0 +1,11 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Model.Entity; + +namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; + +internal interface IGeetestCardVerifier +{ + ValueTask TryValidateXrpcChallengeAsync(User user, CancellationToken token); +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardVerifier.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/SlientGeetestCardVerifier.cs similarity index 85% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardVerifier.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/SlientGeetestCardVerifier.cs index 9db52add..25c774c0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/CardVerifier.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/SlientGeetestCardVerifier.cs @@ -4,14 +4,14 @@ using Snap.Hutao.Model.Entity; using Snap.Hutao.Web.Geetest; -namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; +namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; /// /// CardApi验证器 /// [HighQuality] [Injection(InjectAs.Transient)] -internal sealed class CardVerifier +internal sealed class SlientGeetestCardVerifier : IGeetestCardVerifier { private readonly CardClient cardClient; private readonly GeetestClient geetestClient; @@ -21,7 +21,7 @@ internal sealed class CardVerifier /// /// card客户端 /// 极验客户端 - public CardVerifier(CardClient cardClient, GeetestClient geetestClient) + public SlientGeetestCardVerifier(CardClient cardClient, GeetestClient geetestClient) { this.cardClient = cardClient; this.geetestClient = geetestClient; @@ -33,7 +33,7 @@ internal sealed class CardVerifier /// 用户 /// 取消令牌 /// 流水号 - public async ValueTask TryGetXrpcChallengeAsync(User user, CancellationToken token) + public async ValueTask TryValidateXrpcChallengeAsync(User user, CancellationToken token) { Response.Response registrationResponse = await cardClient.CreateVerificationAsync(user, token).ConfigureAwait(false); if (registrationResponse.IsOk()) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationRegistration.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationRegistration.cs index f273a19b..8efcf680 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationRegistration.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationRegistration.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; +namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; /// /// 验证注册 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationResult.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationResult.cs index 45e5fc63..2c346bb4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationResult.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Verification/VerificationResult.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; +namespace Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Verification; /// /// 验证结果 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaGachaLogClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaGachaLogClient.cs index b7c97272..455c0628 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaGachaLogClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaGachaLogClient.cs @@ -6,6 +6,7 @@ using Snap.Hutao.Service.Hutao; using Snap.Hutao.Web.Hutao.GachaLog; using Snap.Hutao.Web.Response; using System.Net.Http; +using System.Runtime.CompilerServices; namespace Snap.Hutao.Web.Hutao.GachaLog; @@ -28,7 +29,7 @@ internal sealed partial class HomaGachaLogClient /// 祈愿统计信息 public async ValueTask> GetGachaEventStatisticsAsync(CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); Response? resp = await httpClient .TryCatchGetFromJsonAsync>(HutaoEndpoints.GachaLogStatisticsCurrentEvents, options, logger, token) @@ -45,7 +46,7 @@ internal sealed partial class HomaGachaLogClient /// 祈愿分布 public async ValueTask> GetGachaDistributionAsync(GachaDistributionType distributionType, CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); Response? resp = await httpClient .TryCatchGetFromJsonAsync>(HutaoEndpoints.GachaLogStatisticsDistribution(distributionType), options, logger, token) @@ -62,7 +63,7 @@ internal sealed partial class HomaGachaLogClient [Obsolete("Use GetGachaEntriesAsync instead")] public async ValueTask>> GetUidsAsync(CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); Response>? resp = await httpClient .TryCatchGetFromJsonAsync>>(HutaoEndpoints.GachaLogUids, options, logger, token) @@ -78,7 +79,7 @@ internal sealed partial class HomaGachaLogClient /// Uid 列表 public async ValueTask>> GetGachaEntriesAsync(CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); Response>? resp = await httpClient .TryCatchGetFromJsonAsync>>(HutaoEndpoints.GachaLogEntries, options, logger, token) @@ -95,7 +96,7 @@ internal sealed partial class HomaGachaLogClient /// 末尾Id public async ValueTask> GetEndIdsAsync(string uid, CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); Response? resp = await httpClient .TryCatchGetFromJsonAsync>(HutaoEndpoints.GachaLogEndIds(uid), options, logger, token) @@ -113,7 +114,7 @@ internal sealed partial class HomaGachaLogClient /// 云端祈愿记录 public async ValueTask>> RetrieveGachaItemsAsync(string uid, EndIds endIds, CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); UidAndEndIds uidAndEndIds = new(uid, endIds); @@ -133,7 +134,7 @@ internal sealed partial class HomaGachaLogClient /// 响应 public async ValueTask UploadGachaItemsAsync(string uid, List gachaItems, CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); UidAndItems uidAndItems = new(uid, gachaItems); @@ -152,7 +153,7 @@ internal sealed partial class HomaGachaLogClient /// 响应 public async ValueTask DeleteGachaItemsAsync(string uid, CancellationToken token = default) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); Response.Response? resp = await httpClient .TryCatchGetFromJsonAsync>>(HutaoEndpoints.GachaLogDelete(uid), options, logger, token) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaPassportHttpClientAuthorizationExtension.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaPassportHttpClientAuthorizationExtension.cs new file mode 100644 index 00000000..bc15ebbd --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/GachaLog/HomaPassportHttpClientAuthorizationExtension.cs @@ -0,0 +1,16 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Service.Hutao; +using System.Net.Http; + +namespace Snap.Hutao.Web.Hutao.GachaLog; + +internal static class HomaPassportHttpClientAuthorizationExtension +{ + public static async ValueTask TrySetTokenAsync(this HttpClient httpClient, HutaoUserOptions hutaoUserOptions) + { + string? token = await hutaoUserOptions.GetTokenAsync().ConfigureAwait(false); + httpClient.DefaultRequestHeaders.Authorization = new("Bearer", token); + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Geetest/HomaGeetestClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Geetest/HomaGeetestClient.cs index ad585add..4710abcc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Geetest/HomaGeetestClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Geetest/HomaGeetestClient.cs @@ -20,10 +20,10 @@ internal sealed partial class HomaGeetestClient public async ValueTask VerifyAsync(string gt, string challenge, CancellationToken token) { - httpClient.DefaultRequestHeaders.Authorization = new("Bearer", hutaoUserOptions.Token); + await httpClient.TrySetTokenAsync(hutaoUserOptions).ConfigureAwait(false); GeetestResponse? resp = await httpClient - .TryCatchGetFromJsonAsync(HutaoEndpoints.GeetestVerify(gt,challenge), options, logger, token) + .TryCatchGetFromJsonAsync(HutaoEndpoints.GeetestVerify(gt, challenge), options, logger, token) .ConfigureAwait(false); ArgumentNullException.ThrowIfNull(resp); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs index 91ba4658..3e1741c5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaPassportClient.cs @@ -2,7 +2,7 @@ // Licensed under the MIT license. using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; -using Snap.Hutao.Web.Hutao.Model; +using Snap.Hutao.Web.Hutao.SpiralAbyss; using Snap.Hutao.Web.Response; using System.Net.Http; using System.Security.Cryptography; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarAppearanceRank.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarAppearanceRank.cs similarity index 90% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarAppearanceRank.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarAppearanceRank.cs index c2c37248..3e2c3525 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarAppearanceRank.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarAppearanceRank.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Primitive; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 出场率 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarBuild.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarBuild.cs similarity index 88% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarBuild.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarBuild.cs index 493710aa..802f42c4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarBuild.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarBuild.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Primitive; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 角色相关构筑 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarCollocation.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarCollocation.cs similarity index 93% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarCollocation.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarCollocation.cs index 2cfa44ed..3f4cdbe4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarCollocation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarCollocation.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Primitive; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 角色搭配 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarConstellationInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarConstellationInfo.cs similarity index 91% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarConstellationInfo.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarConstellationInfo.cs index c0ac00d5..e19493eb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarConstellationInfo.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarConstellationInfo.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 角色命座信息 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarUsageRank.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarUsageRank.cs similarity index 90% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarUsageRank.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarUsageRank.cs index a6bd71ed..86cb2ca9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/AvatarUsageRank.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/AvatarUsageRank.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Primitive; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 使用率 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Converter/ReliquarySetsConverter.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Converter/ReliquarySetsConverter.cs similarity index 95% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Converter/ReliquarySetsConverter.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Converter/ReliquarySetsConverter.cs index 422c9289..3dd9235b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Converter/ReliquarySetsConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Converter/ReliquarySetsConverter.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.Primitives; -namespace Snap.Hutao.Web.Hutao.Model.Converter; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Converter; /// /// 圣遗物套装转换器 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HomaSpiralAbyssClient.cs similarity index 97% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HomaSpiralAbyssClient.cs index 8f3f678f..b420e7c8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/HomaSpiralAbyssClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/HomaSpiralAbyssClient.cs @@ -9,12 +9,12 @@ using Snap.Hutao.Web.Hoyolab; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Avatar; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -using Snap.Hutao.Web.Hutao.Model; -using Snap.Hutao.Web.Hutao.Model.Post; +using Snap.Hutao.Web.Hutao.SpiralAbyss; +using Snap.Hutao.Web.Hutao.SpiralAbyss.Post; using Snap.Hutao.Web.Response; using System.Net.Http; -namespace Snap.Hutao.Web.Hutao; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 胡桃API客户端 @@ -190,7 +190,7 @@ internal sealed partial class HomaSpiralAbyssClient if (charactersResponse.IsOk()) { - Response spiralAbyssResponse = await gameRecordClient + Response spiralAbyssResponse = await gameRecordClient .GetSpiralAbyssAsync(userAndUid, SpiralAbyssSchedule.Current, token) .ConfigureAwait(false); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ItemRate.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ItemRate.cs similarity index 94% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ItemRate.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ItemRate.cs index 4a609275..e818ec33 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ItemRate.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ItemRate.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 物品与率 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Overview.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Overview.cs similarity index 98% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Overview.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Overview.cs index 07c250e6..207cb629 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Overview.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Overview.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 统计数据 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleAvatar.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleAvatar.cs similarity index 95% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleAvatar.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleAvatar.cs index 241714cf..6455a3d5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleAvatar.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleAvatar.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Model.Primitive; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Avatar; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 角色详情 角色 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleBattle.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleBattle.cs similarity index 93% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleBattle.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleBattle.cs index a0263152..2766682f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleBattle.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleBattle.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Model.Primitive; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 上下半信息 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleFloor.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleFloor.cs similarity index 94% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleFloor.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleFloor.cs index 81246adb..479d9af8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleFloor.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleFloor.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 层信息 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleLevel.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleLevel.cs similarity index 94% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleLevel.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleLevel.cs index 6951cabc..02bfae2c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleLevel.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleLevel.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 间信息 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleRank.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleRank.cs similarity index 95% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleRank.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleRank.cs index 1ec227c2..07b94b24 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleRank.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleRank.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Model.Primitive; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 数值 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleRecord.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleRecord.cs similarity index 91% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleRecord.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleRecord.cs index 1e96e5f6..f6583560 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleRecord.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleRecord.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.Avatar; using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 记录 @@ -19,7 +19,7 @@ internal sealed class SimpleRecord /// 详细的角色信息 /// 深渊信息 /// 用户名 - public SimpleRecord(string uid, List characters, SpiralAbyss spiralAbyss, string? reservedUserName) + public SimpleRecord(string uid, List characters, Hoyolab.Takumi.GameRecord.SpiralAbyss.SpiralAbyss spiralAbyss, string? reservedUserName) { Uid = uid; Identity = "Snap Hutao"; // hardcoded Identity name diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleSpiralAbyss.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleSpiralAbyss.cs similarity index 91% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleSpiralAbyss.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleSpiralAbyss.cs index 01fcfc38..1c12b855 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Post/SimpleSpiralAbyss.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Post/SimpleSpiralAbyss.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.SpiralAbyss; -namespace Snap.Hutao.Web.Hutao.Model.Post; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss.Post; /// /// 深渊数据 @@ -15,7 +15,7 @@ internal sealed class SimpleSpiralAbyss /// 构造一个新的深渊信息 /// /// 深渊信息 - public SimpleSpiralAbyss(SpiralAbyss spiralAbyss) + public SimpleSpiralAbyss(Hoyolab.Takumi.GameRecord.SpiralAbyss.SpiralAbyss spiralAbyss) { ScheduleId = spiralAbyss.ScheduleId; TotalBattleTimes = spiralAbyss.TotalBattleTimes; diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/RankInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/RankInfo.cs similarity index 90% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/RankInfo.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/RankInfo.cs index b51c9002..6bbe1d2e 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/RankInfo.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/RankInfo.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 排行包装 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/RankValue.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/RankValue.cs similarity index 95% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/RankValue.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/RankValue.cs index 7618a493..2c7826e0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/RankValue.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/RankValue.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 伤害值 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ReliquarySet.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ReliquarySet.cs similarity index 95% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ReliquarySet.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ReliquarySet.cs index 4a2dd9f2..bb3f114b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ReliquarySet.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ReliquarySet.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Model.Primitive; using System.Globalization; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 圣遗物套装 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ReliquarySets.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ReliquarySets.cs similarity index 83% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ReliquarySets.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ReliquarySets.cs index fd17b486..2d5e6d6b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/ReliquarySets.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/ReliquarySets.cs @@ -1,9 +1,9 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -using Snap.Hutao.Web.Hutao.Model.Converter; +using Snap.Hutao.Web.Hutao.SpiralAbyss.Converter; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 包装圣遗物套装 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Team.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Team.cs similarity index 92% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Team.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Team.cs index 2b125778..adc9a949 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/Team.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/Team.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Core.Json.Converter; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 队伍 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/TeamAppearance.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/TeamAppearance.cs similarity index 92% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/TeamAppearance.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/TeamAppearance.cs index 59023dce..809bca0f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/TeamAppearance.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/TeamAppearance.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 队伍出场次数 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/UserInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/UserInfo.cs similarity index 90% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/UserInfo.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/UserInfo.cs index 50d7fea3..e8d2383c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/UserInfo.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/UserInfo.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 用户信息 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/WeaponBuild.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/WeaponBuild.cs similarity index 88% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/WeaponBuild.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/WeaponBuild.cs index 9e81c3a5..3ac7dcd6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/WeaponBuild.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/WeaponBuild.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Primitive; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 武器相关构筑 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/WeaponCollocation.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/WeaponCollocation.cs similarity index 89% rename from src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/WeaponCollocation.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/WeaponCollocation.cs index 0d170e95..97dccd90 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/Model/WeaponCollocation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/SpiralAbyss/WeaponCollocation.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Model.Primitive; -namespace Snap.Hutao.Web.Hutao.Model; +namespace Snap.Hutao.Web.Hutao.SpiralAbyss; /// /// 武器搭配