From f2ef6ff8ec07eacd929f95c27d43ffdedb0b4c66 Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Sat, 25 Nov 2023 10:10:16 +0800
Subject: [PATCH] fix #1099 again
---
.../IncomingFeature/GeniusInvokationDecoding.cs | 1 -
src/Snap.Hutao/Snap.Hutao/App.xaml | 1 +
.../Control/Layout/UniformStaggeredLayout.cs | 9 +--------
.../Layout/UniformStaggeredLayoutState.cs | 15 +++++++++++++++
.../Control/SizeRestrictedContentControl.cs | 12 ++++++++----
.../Snap.Hutao/Control/Theme/ComboBox.xaml | 11 +++++++++++
.../IocHttpClientConfiguration.cs | 2 ++
.../Service/Discord/DiscordController.cs | 17 ++++++++++++++---
src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 6 ++++++
.../Snap.Hutao/View/Page/AchievementPage.xaml | 7 +++----
.../Snap.Hutao/View/Page/CultivationPage.xaml | 7 +++----
.../Snap.Hutao/View/Page/GachaLogPage.xaml | 7 +++----
.../Snap.Hutao/View/Page/LaunchGamePage.xaml | 4 +---
.../Web/Hoyolab/Takumi/GameRecord/CardClient.cs | 2 +-
.../Takumi/GameRecord/GameRecordClient.cs | 16 ++++++++++++++++
15 files changed, 85 insertions(+), 32 deletions(-)
create mode 100644 src/Snap.Hutao/Snap.Hutao/Control/Theme/ComboBox.xaml
diff --git a/src/Snap.Hutao/Snap.Hutao.Test/IncomingFeature/GeniusInvokationDecoding.cs b/src/Snap.Hutao/Snap.Hutao.Test/IncomingFeature/GeniusInvokationDecoding.cs
index 7307d894..aaa2b7ce 100644
--- a/src/Snap.Hutao/Snap.Hutao.Test/IncomingFeature/GeniusInvokationDecoding.cs
+++ b/src/Snap.Hutao/Snap.Hutao.Test/IncomingFeature/GeniusInvokationDecoding.cs
@@ -1,7 +1,6 @@
using System;
using System.Buffers.Binary;
using System.Globalization;
-using System.Runtime.InteropServices;
using System.Text;
namespace Snap.Hutao.Test.IncomingFeature;
diff --git a/src/Snap.Hutao/Snap.Hutao/App.xaml b/src/Snap.Hutao/Snap.Hutao/App.xaml
index b15eeb24..a7c38922 100644
--- a/src/Snap.Hutao/Snap.Hutao/App.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/App.xaml
@@ -10,6 +10,7 @@
+
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayout.cs b/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayout.cs
index e9e17beb..58b31d1a 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayout.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayout.cs
@@ -128,15 +128,8 @@ internal sealed partial class UniformStaggeredLayout : VirtualizingLayout
UniformStaggeredItem item = state.GetItemAt(i);
if (item.Height == 0)
{
- // https://github.com/DGP-Studio/Snap.Hutao/issues/1079
- // The first element must be force refreshed otherwise
- // it will use the old one realized
- // https://github.com/DGP-Studio/Snap.Hutao/issues/1099
- // Now we need to refresh the first element of each column
- ElementRealizationOptions options = i < numberOfColumns ? ElementRealizationOptions.ForceCreate : ElementRealizationOptions.None;
-
// Item has not been measured yet. Get the element and store the values
- UIElement element = context.GetOrCreateElementAt(i, options);
+ UIElement element = context.GetOrCreateElementAt(i);
element.Measure(new Size(state.ColumnWidth, availableHeight));
item.Height = element.DesiredSize.Height;
item.Element = element;
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayoutState.cs b/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayoutState.cs
index bd191648..e39662f3 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayoutState.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Layout/UniformStaggeredLayoutState.cs
@@ -74,6 +74,21 @@ internal sealed class UniformStaggeredLayoutState
///
internal void Clear()
{
+ // https://github.com/DGP-Studio/Snap.Hutao/issues/1079
+ // The first element must be force refreshed otherwise
+ // it will use the old one realized
+ // https://github.com/DGP-Studio/Snap.Hutao/issues/1099
+ // Now we need to refresh the first element of each column
+ // https://github.com/DGP-Studio/Snap.Hutao/issues/1099
+ // Finally we need to refresh the whole layout when we reset
+ if (context.ItemCount > 0)
+ {
+ for (int i = 0; i < context.ItemCount; i++)
+ {
+ RecycleElementAt(i);
+ }
+ }
+
columnLayout.Clear();
items.Clear();
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/SizeRestrictedContentControl.cs b/src/Snap.Hutao/Snap.Hutao/Control/SizeRestrictedContentControl.cs
index 48e89b61..986de656 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/SizeRestrictedContentControl.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/SizeRestrictedContentControl.cs
@@ -3,6 +3,7 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
+using Snap.Hutao.Core;
using Windows.Foundation;
namespace Snap.Hutao.Control;
@@ -20,12 +21,15 @@ internal sealed partial class SizeRestrictedContentControl : ContentControl
{
element.Measure(availableSize);
Size contentDesiredSize = element.DesiredSize;
+ Size contentActualOrDesiredSize = new(
+ Math.Max(element.ActualWidth, contentDesiredSize.Width),
+ Math.Max(element.ActualHeight, contentDesiredSize.Height));
if (IsWidthRestricted)
{
- if (contentDesiredSize.Width > minContentWidth)
+ if (contentActualOrDesiredSize.Width > minContentWidth)
{
- minContentWidth = contentDesiredSize.Width;
+ minContentWidth = contentActualOrDesiredSize.Width;
}
element.MinWidth = minContentWidth;
@@ -33,9 +37,9 @@ internal sealed partial class SizeRestrictedContentControl : ContentControl
if (IsHeightRestricted)
{
- if (contentDesiredSize.Height > minContentHeight)
+ if (contentActualOrDesiredSize.Height > minContentHeight)
{
- minContentHeight = contentDesiredSize.Height;
+ minContentHeight = contentActualOrDesiredSize.Height;
}
element.MinHeight = minContentHeight;
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Theme/ComboBox.xaml b/src/Snap.Hutao/Snap.Hutao/Control/Theme/ComboBox.xaml
new file mode 100644
index 00000000..babd8d20
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Theme/ComboBox.xaml
@@ -0,0 +1,11 @@
+
+
+
+ 0
+
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs
index d9b10b3a..4f975aa0 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs
@@ -63,8 +63,10 @@ internal static partial class IocHttpClientConfiguration
client.DefaultRequestHeaders.Add("x-rpc-app_version", SaltConstants.CNVersion);
client.DefaultRequestHeaders.Add("x-rpc-client_type", "2");
client.DefaultRequestHeaders.Add("x-rpc-device_id", HoyolabOptions.DeviceId);
+ client.DefaultRequestHeaders.Add("x-rpc-device_name", string.Empty);
client.DefaultRequestHeaders.Add("x-rpc-game_biz", "bbs_cn");
client.DefaultRequestHeaders.Add("x-rpc-sdk_version", "2.16.0");
+ //client.DefaultRequestHeaders.Add("x-rpc-tool_verison", "v4.2.2-ys");
}
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs b/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs
index df269176..f45d2dbb 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Discord/DiscordController.cs
@@ -78,7 +78,13 @@ internal static class DiscordController
lock (SyncRoot)
{
StopTokenSource.Cancel();
- discordManager?.Dispose();
+ try
+ {
+ discordManager?.Dispose();
+ }
+ catch (SEHException)
+ {
+ }
}
}
@@ -135,13 +141,18 @@ internal static class DiscordController
}
catch (ResultException ex)
{
- System.Diagnostics.Debug.WriteLine($"[Discord.GameSDK]:[ERROR]:{ex.Result}");
+ // If result is Ok
+ // Maybe the connection is reset.
+ if (ex.Result is not Result.Ok)
+ {
+ System.Diagnostics.Debug.WriteLine($"[Discord.GameSDK ERROR]:{ex.Result:D} {ex.Result}");
+ }
}
catch (SEHException ex)
{
// Known error codes:
// 0x80004005 E_FAIL
- System.Diagnostics.Debug.WriteLine($"[Discord.GameSDK]:[ERROR]:0x{ex.ErrorCode:X}");
+ System.Diagnostics.Debug.WriteLine($"[Discord.GameSDK ERROR]:0x{ex.ErrorCode:X}");
}
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj
index 71d0bc9e..55b4bf4e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj
+++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj
@@ -83,6 +83,7 @@
+
@@ -317,6 +318,11 @@
+
+
+ MSBuild:Compile
+
+
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml
index 8ec0dd69..7677b0e1 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml
@@ -247,13 +247,12 @@
-
+
+ SelectedItem="{Binding SelectedArchive, Mode=TwoWay}"
+ Style="{ThemeResource CommandBarComboBoxStyle}"/>
-
+
+ SelectedItem="{Binding SelectedProject, Mode=TwoWay}"
+ Style="{ThemeResource CommandBarComboBoxStyle}"/>
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml
index 48da2f6e..9f079fb2 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml
@@ -231,13 +231,12 @@
IsHitTestVisible="False"/>
-
+
+ SelectedItem="{Binding SelectedArchive, Mode=TwoWay}"
+ Style="{ThemeResource CommandBarComboBoxStyle}"/>
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
index 8d340d31..c01951f2 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
@@ -218,9 +218,8 @@
-
+
@@ -252,7 +251,6 @@
> CreateVerificationAsync(User user, CancellationToken token)
{
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
- .SetRequestUri(ApiEndpoints.CardCreateVerification(false))
+ .SetRequestUri(ApiEndpoints.CardCreateVerification(true))
.SetUserCookieAndFpHeader(user, CookieType.LToken)
.Get();
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 dcd36a43..e7b21cac 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
@@ -40,6 +40,7 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordDailyNote(userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.Get();
await builder.SignDataAsync(DataSignAlgorithmVersion.Gen2, SaltType.X4, false).ConfigureAwait(false);
@@ -60,6 +61,7 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder verifiedbuilder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordDailyNote(userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.SetXrpcChallenge(challenge)
.Get();
@@ -86,6 +88,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordIndex(userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.Get();
await builder.SignDataAsync(DataSignAlgorithmVersion.Gen2, SaltType.X4, false).ConfigureAwait(false);
@@ -106,6 +110,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder verifiedbuilder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordIndex(userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.SetXrpcChallenge(challenge)
.Get();
@@ -133,6 +139,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordSpiralAbyss(schedule, userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.Get();
await builder.SignDataAsync(DataSignAlgorithmVersion.Gen2, SaltType.X4, false).ConfigureAwait(false);
@@ -153,6 +161,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder verifiedbuilder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordSpiralAbyss(schedule, userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.SetXrpcChallenge(challenge)
.Get();
@@ -179,6 +189,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordRoleBasicInfo(userAndUid.Uid))
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.Get();
await builder.SignDataAsync(DataSignAlgorithmVersion.Gen2, SaltType.X4, false).ConfigureAwait(false);
@@ -203,6 +215,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordCharacter)
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.PostJson(new CharacterData(userAndUid.Uid, playerInfo.Avatars.Select(x => x.Id)));
await builder.SignDataAsync(DataSignAlgorithmVersion.Gen2, SaltType.X4, false).ConfigureAwait(false);
@@ -223,6 +237,8 @@ internal sealed partial class GameRecordClient : IGameRecordClient
HttpRequestMessageBuilder verifiedBuilder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(ApiEndpoints.GameRecordCharacter)
.SetUserCookieAndFpHeader(userAndUid, CookieType.Cookie)
+ .SetHeader("x-rpc-page", "v4.2.2-ys_#/ys/daily")
+ .SetReferer(ApiEndpoints.WebStaticMihoyoReferer)
.SetXrpcChallenge(challenge)
.PostJson(new CharacterData(userAndUid.Uid, playerInfo.Avatars.Select(x => x.Id)));