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;
///
/// 武器搭配