From 09834ada6b75fdbae53c82337c83004570676a6c Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Fri, 16 Jun 2023 16:20:43 +0800 Subject: [PATCH] fix dependabot --- .github/dependabot.yml | 6 +- res/{LEGAL NOTICE.md => README.md} | 2 +- .../DependencyInjectionTest.cs | 56 +++++++++---------- .../Snap.Hutao.Test/JsonSerializeTest.cs | 22 ++------ .../EnumRuntimeBehaviorTest.cs | 3 +- .../ForEachRuntimeBehaviorTest.cs | 2 +- .../PropertyRuntimeBehaviorTest.cs | 2 +- .../RangeRuntimeBehaviorTest.cs | 3 +- .../StringRuntimeBehaviorTest.cs | 4 +- .../UnsafeRuntimeBehaviorTest.cs | 16 ++++++ .../Control/Animation/AnimationDurations.cs | 10 ++++ .../Control/Image/CompositionImage.cs | 13 ++++- .../Control/Markup/TypeExtension.cs | 24 -------- .../Snap.Hutao/Control/Media/Bgra32.cs | 2 +- .../Snap.Hutao/Core/StringLiterals.cs | 13 +++++ src/Snap.Hutao/Snap.Hutao/NativeMethods.txt | 4 +- .../Resource/Localization/SH.Designer.cs | 19 +++++-- .../Snap.Hutao/Resource/Localization/SH.resx | 13 +++-- .../Service/Achievement/AchievementService.cs | 1 - .../Service/DailyNote/DailyNoteService.cs | 14 ----- .../Service/Game/Unlocker/GameFpsUnlocker.cs | 4 +- .../Service/Metadata/MetadataOptions.cs | 2 +- .../Service/Metadata/MetadataService.cs | 3 +- src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 6 +- .../AvatarProperty/AvatarPropertyViewModel.cs | 3 +- src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs | 7 ++- .../Hoyolab/Takumi/GameRecord/CardClient.cs | 2 +- .../Takumi/GameRecord/DailyNote/DailyNote.cs | 5 ++ .../GameRecord/DailyNote/DailyNoteCommon.cs | 2 +- .../Takumi/GameRecord/GameRecordClient.cs | 1 + .../Snap.Hutao/Web/Response/Response.cs | 10 +++- 31 files changed, 149 insertions(+), 125 deletions(-) rename res/{LEGAL NOTICE.md => README.md} (76%) create mode 100644 src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/UnsafeRuntimeBehaviorTest.cs delete mode 100644 src/Snap.Hutao/Snap.Hutao/Control/Markup/TypeExtension.cs diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8c230679..9f1f07d8 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,7 +5,7 @@ version: 2 updates: - - package-ecosystem: "nuget" # See documentation for possible values - directory: "/" # Location of package manifests + - package-ecosystem: "nuget" + directory: "/src/Snap.Hutao" # Snap.Hutao.csproj schedule: - interval: "weekly" + interval: "weekly" \ No newline at end of file diff --git a/res/LEGAL NOTICE.md b/res/README.md similarity index 76% rename from res/LEGAL NOTICE.md rename to res/README.md index b772b51e..e4e21b01 100644 --- a/res/LEGAL NOTICE.md +++ b/res/README.md @@ -1,3 +1,3 @@ 本文件夹中的所有图片,均由 [DGP Studio](https://github.com/DGP-Studio) 委托 [Bilibili 画画的芦苇](https://space.bilibili.com/274422134) 绘制 -Copyright ©2023 DGP Studio, All Rights Reserved. \ No newline at end of file +Copyright © 2023 DGP Studio, All Rights Reserved. \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao.Test/DependencyInjectionTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/DependencyInjectionTest.cs index 832eadf3..dd31a6b3 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/DependencyInjectionTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/DependencyInjectionTest.cs @@ -4,58 +4,54 @@ using System; namespace Snap.Hutao.Test; [TestClass] -public class DependencyInjectionTest +public sealed class DependencyInjectionTest { - [ClassInitialize] - public void Setup() - { - - } + private readonly IServiceProvider services = new ServiceCollection() + .AddSingleton() + .AddSingleton() + .AddScoped() + .AddTransient(typeof(IGenericService<>), typeof(GenericService<>)) + .BuildServiceProvider(); [TestMethod] - public void OriginalTypeNotDiscoverable() + public void OriginalTypeCannotResolved() { - IServiceProvider services = new ServiceCollection() - .AddSingleton() - .AddSingleton() - .BuildServiceProvider(); - Assert.IsNull(services.GetService()); Assert.IsNull(services.GetService()); } - [TestMethod] - public void ScopedServiceInitializeMultipleTimesInScope() - { - IServiceProvider services = new ServiceCollection() - .AddScoped() - .BuildServiceProvider(); - - IServiceScopeFactory scopeFactory = services.GetRequiredService(); - using (IServiceScope scope = scopeFactory.CreateScope()) - { - IService service1 = scope.ServiceProvider.GetRequiredService(); - IService service2 = scope.ServiceProvider.GetRequiredService(); - Assert.AreNotEqual(service1.Id, service2.Id); - } - } - [TestMethod] public void GenericServicesCanBeResolved() { IServiceProvider services = new ServiceCollection() - .AddTransient(typeof(IGenericService<>),typeof(GenericService<>)) + .AddTransient(typeof(IGenericService<>), typeof(GenericService<>)) .BuildServiceProvider(); Assert.IsNotNull(services.GetService>()); } + [TestMethod] + public void ScopedServiceInitializeMultipleTimesInScope() + { + using (IServiceScope scope = services.CreateScope()) + { + IScopedService service1 = scope.ServiceProvider.GetRequiredService(); + IScopedService service2 = scope.ServiceProvider.GetRequiredService(); + Assert.AreNotEqual(service1.Id, service2.Id); + } + } + private interface IService { Guid Id { get; } } - private sealed class ServiceA : IService + private interface IScopedService + { + Guid Id { get; } + } + + private sealed class ServiceA : IService, IScopedService { public Guid Id { diff --git a/src/Snap.Hutao/Snap.Hutao.Test/JsonSerializeTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/JsonSerializeTest.cs index 718408d1..bfc05c2c 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/JsonSerializeTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/JsonSerializeTest.cs @@ -13,13 +13,13 @@ public class JsonSerializeTest } """; - private const string SmapleNumberObjectJson = """ + private const string SmapleEmptyStringObjectJson = """ { "A" : "" } """; - private const string SmapleNumberDictionaryJson = """ + private const string SmapleNumberKeyDictionaryJson = """ { "111" : "12", "222" : "34" @@ -34,21 +34,11 @@ public class JsonSerializeTest } [TestMethod] + [ExpectedException(typeof(JsonException))] public void EmptyStringCannotSerializeAsNumber() { - bool caught = false; - try - { - // Throw - StringNumberSample sample = JsonSerializer.Deserialize(SmapleNumberObjectJson)!; - Assert.AreEqual(sample.A, 0); - } - catch - { - caught = true; - } - - Assert.IsTrue(caught); + StringNumberSample sample = JsonSerializer.Deserialize(SmapleEmptyStringObjectJson)!; + Assert.AreEqual(sample.A, 0); } [TestMethod] @@ -59,7 +49,7 @@ public class JsonSerializeTest NumberHandling = JsonNumberHandling.AllowReadingFromString, }; - Dictionary sample = JsonSerializer.Deserialize>(SmapleNumberDictionaryJson, options)!; + Dictionary sample = JsonSerializer.Deserialize>(SmapleNumberKeyDictionaryJson, options)!; Assert.AreEqual(sample[111], "12"); } diff --git a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/EnumRuntimeBehaviorTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/EnumRuntimeBehaviorTest.cs index 1ee2182e..35900f70 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/EnumRuntimeBehaviorTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/EnumRuntimeBehaviorTest.cs @@ -3,7 +3,7 @@ namespace Snap.Hutao.Test.RuntimeBehavior; [TestClass] -internal sealed class EnumRuntimeBehaviorTest +public sealed class EnumRuntimeBehaviorTest { [TestMethod] [ExpectedException(typeof(ArgumentException))] @@ -20,7 +20,6 @@ internal sealed class EnumRuntimeBehaviorTest } [TestMethod] - [ExpectedException(typeof(Exception), AllowDerivedTypes = true)] public void EnumToStringDecimal() { Assert.AreEqual("2", EnumA.ValueB.ToString("D")); diff --git a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/ForEachRuntimeBehaviorTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/ForEachRuntimeBehaviorTest.cs index e39d996d..8011f30c 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/ForEachRuntimeBehaviorTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/ForEachRuntimeBehaviorTest.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; namespace Snap.Hutao.Test.RuntimeBehavior; [TestClass] -public class ForEachRuntimeBehaviorTest +public sealed class ForEachRuntimeBehaviorTest { [TestMethod] public void ListOfStringCanEnumerateAsReadOnlySpanOfChar() diff --git a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/PropertyRuntimeBehaviorTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/PropertyRuntimeBehaviorTest.cs index ac26ec3a..ebdd15cf 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/PropertyRuntimeBehaviorTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/PropertyRuntimeBehaviorTest.cs @@ -3,7 +3,7 @@ namespace Snap.Hutao.Test.RuntimeBehavior; [TestClass] -internal sealed class PropertyRuntimeBehaviorTest +public sealed class PropertyRuntimeBehaviorTest { [TestMethod] public void GetTwiceOnPropertyResultsNotSame() diff --git a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/RangeRuntimeBehaviorTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/RangeRuntimeBehaviorTest.cs index d8ff4101..9634543e 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/RangeRuntimeBehaviorTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/RangeRuntimeBehaviorTest.cs @@ -2,7 +2,8 @@ namespace Snap.Hutao.Test.RuntimeBehavior; -public class RangeRuntimeBehaviorTest +[TestClass] +public sealed class RangeRuntimeBehaviorTest { [TestMethod] public void RangeTrimLastOne() diff --git a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/StringRuntimeBehaviorTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/StringRuntimeBehaviorTest.cs index eb93ec32..210cfc8e 100644 --- a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/StringRuntimeBehaviorTest.cs +++ b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/StringRuntimeBehaviorTest.cs @@ -3,7 +3,7 @@ namespace Snap.Hutao.Test.RuntimeBehavior; [TestClass] -internal sealed class StringRuntimeBehaviorTest +public sealed class StringRuntimeBehaviorTest { [TestMethod] public unsafe void NullStringFixedIsNullPointer() @@ -32,4 +32,4 @@ internal sealed class StringRuntimeBehaviorTest ReadOnlySpan testSpan = testStr; Assert.IsTrue(testSpan.Length == 0); } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/UnsafeRuntimeBehaviorTest.cs b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/UnsafeRuntimeBehaviorTest.cs new file mode 100644 index 00000000..46c5db18 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao.Test/RuntimeBehavior/UnsafeRuntimeBehaviorTest.cs @@ -0,0 +1,16 @@ +namespace Snap.Hutao.Test.RuntimeBehavior; + +[TestClass] +public sealed class UnsafeRuntimeBehaviorTest +{ + [TestMethod] + public unsafe void UInt32AllSetIs() + { + byte[] bytes = { 0xFF, 0xFF, 0xFF, 0xFF, }; + + fixed (byte* pBytes = bytes) + { + Assert.AreEqual(uint.MaxValue, *(uint*)pBytes); + } + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Animation/AnimationDurations.cs b/src/Snap.Hutao/Snap.Hutao/Control/Animation/AnimationDurations.cs index 2e025658..1601d6f3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Animation/AnimationDurations.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Animation/AnimationDurations.cs @@ -13,4 +13,14 @@ internal static class AnimationDurations /// 图片缩放动画 /// public static readonly TimeSpan ImageZoom = TimeSpan.FromSeconds(0.5); + + /// + /// 图像淡入 + /// + public static readonly TimeSpan ImageFadeIn = TimeSpan.FromSeconds(0.3); + + /// + /// 图像淡出 + /// + public static readonly TimeSpan ImageFadeOut = TimeSpan.FromSeconds(0.2); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs index c20e1240..8f663261 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs @@ -6,6 +6,7 @@ using Microsoft.UI.Composition; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Hosting; using Microsoft.UI.Xaml.Media; +using Snap.Hutao.Control.Animation; using Snap.Hutao.Core.Caching; using Snap.Hutao.Service.Notification; using System.IO; @@ -183,7 +184,11 @@ internal abstract class CompositionImage : Microsoft.UI.Xaml.Controls.Control if (EnableLazyLoading) { - await AnimationBuilder.Create().Opacity(from: 0D, to: 1D).StartAsync(this, token).ConfigureAwait(true); + await AnimationBuilder + .Create() + .Opacity(from: 0D, to: 1D, duration: AnimationDurations.ImageFadeIn) + .StartAsync(this, token) + .ConfigureAwait(true); } else { @@ -200,7 +205,11 @@ internal abstract class CompositionImage : Microsoft.UI.Xaml.Controls.Control if (EnableLazyLoading) { - await AnimationBuilder.Create().Opacity(from: 1D, to: 0D).StartAsync(this, token).ConfigureAwait(true); + await AnimationBuilder + .Create() + .Opacity(from: 1D, to: 0D, duration: AnimationDurations.ImageFadeOut) + .StartAsync(this, token) + .ConfigureAwait(true); } else { diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Markup/TypeExtension.cs b/src/Snap.Hutao/Snap.Hutao/Control/Markup/TypeExtension.cs deleted file mode 100644 index e3c517b0..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Control/Markup/TypeExtension.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -using Microsoft.UI.Xaml.Markup; - -namespace Snap.Hutao.Control.Markup; - -/// -/// 类型拓展 -/// -[MarkupExtensionReturnType(ReturnType = typeof(Type))] -internal sealed class TypeExtension : MarkupExtension -{ - /// - /// 类型 - /// - public Type Type { get; set; } = default!; - - /// - protected override object ProvideValue() - { - return Type; - } -} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Media/Bgra32.cs b/src/Snap.Hutao/Snap.Hutao/Control/Media/Bgra32.cs index de7289f4..eda7c14c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Media/Bgra32.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Media/Bgra32.cs @@ -38,7 +38,7 @@ internal struct Bgra32 /// /// 颜色 /// 新的 BGRA8 结构 - public static unsafe Bgra32 FromColor(Color color) + public static unsafe implicit operator Bgra32(Color color) { Unsafe.SkipInit(out Bgra32 bgra8); *(uint*)&bgra8 = BinaryPrimitives.ReverseEndianness(*(uint*)&color); diff --git a/src/Snap.Hutao/Snap.Hutao/Core/StringLiterals.cs b/src/Snap.Hutao/Snap.Hutao/Core/StringLiterals.cs index 27587360..091f606a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/StringLiterals.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/StringLiterals.cs @@ -1,6 +1,8 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using System.Runtime.CompilerServices; + namespace Snap.Hutao.Core; /// @@ -33,4 +35,15 @@ internal static class StringLiterals /// CRLF 换行符 /// public const string CRLF = "\r\n"; + + /// + /// 获取小写的布尔字符串 + /// + /// 值 + /// 小写布尔字符串 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static string LowerBoolean(bool value) + { + return value ? "true" : "false"; + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/NativeMethods.txt b/src/Snap.Hutao/Snap.Hutao/NativeMethods.txt index 7c20f36a..1230ae78 100644 --- a/src/Snap.Hutao/Snap.Hutao/NativeMethods.txt +++ b/src/Snap.Hutao/Snap.Hutao/NativeMethods.txt @@ -60,4 +60,6 @@ LPTHREAD_START_ROUTINE MINMAXINFO // System.Com -CWMO_FLAGS \ No newline at end of file +CWMO_FLAGS + +D3D12CreateDevice \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs index bfd68fc2..46e8cb52 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs @@ -5524,7 +5524,7 @@ namespace Snap.Hutao.Resource.Localization { } /// - /// 查找类似 今日完成委托次数不足 的本地化字符串。 + /// 查找类似 今日完成委托数量不足 的本地化字符串。 /// internal static string WebDailyNoteExtraTaskRewardNotAllowed { get { @@ -5533,7 +5533,7 @@ namespace Snap.Hutao.Resource.Localization { } /// - /// 查找类似 「每日委托」奖励待领取 的本地化字符串。 + /// 查找类似 「每日委托」奖励未领取 的本地化字符串。 /// internal static string WebDailyNoteExtraTaskRewardNotTaken { get { @@ -5542,7 +5542,7 @@ namespace Snap.Hutao.Resource.Localization { } /// - /// 查找类似 已领取「每日委托」奖励 的本地化字符串。 + /// 查找类似 「每日委托」奖励已领取 的本地化字符串。 /// internal static string WebDailyNoteExtraTaskRewardReceived { get { @@ -5551,7 +5551,7 @@ namespace Snap.Hutao.Resource.Localization { } /// - /// 查找类似 {0} {1:HH:mm} 达到上限 的本地化字符串。 + /// 查找类似 预计 {0} {1:HH:mm} 达到存储上限 的本地化字符串。 /// internal static string WebDailyNoteHomeCoinRecoveryFormat { get { @@ -5596,7 +5596,16 @@ namespace Snap.Hutao.Resource.Localization { } /// - /// 查找类似 {0} {1:HH:mm} 后全部恢复 的本地化字符串。 + /// 查找类似 原粹树脂已完全恢复 的本地化字符串。 + /// + internal static string WebDailyNoteResinRecoveryCompleted { + get { + return ResourceManager.GetString("WebDailyNoteResinRecoveryCompleted", resourceCulture); + } + } + + /// + /// 查找类似 将于 {0} {1:HH:mm} 后全部恢复 的本地化字符串。 /// internal static string WebDailyNoteResinRecoveryFormat { get { diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx index d2fe36dd..40c50861 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx @@ -1711,16 +1711,16 @@ {0} 分 - 今日完成委托次数不足 + 今日完成委托数量不足 - 「每日委托」奖励待领取 + 「每日委托」奖励未领取 - 已领取「每日委托」奖励 + 「每日委托」奖励已领取 - {0} {1:HH:mm} 达到上限 + 预计 {0} {1:HH:mm} 达到存储上限 今天 @@ -1735,7 +1735,7 @@ {0} 天 - {0} {1:HH:mm} 后全部恢复 + 将于 {0} {1:HH:mm} 后全部恢复 无感验证成功 @@ -2034,4 +2034,7 @@ 在读取游戏进程内存时遇到问题:无法读取到指定地址的有效值 + + 原粹树脂已完全恢复 + \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs index 9b42a5b7..183d4b2c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs @@ -42,7 +42,6 @@ internal sealed partial class AchievementService : IAchievementService AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); entityMap = appDbContext.Achievements .Where(a => a.ArchiveId == archive.InnerId) - .AsEnumerable() .ToDictionary(a => (AchievementId)a.Id); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs b/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs index 2415559d..796dac37 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs @@ -116,20 +116,6 @@ internal sealed partial class DailyNoteService : IDailyNoteService, IRecipient(); - - // Special retcode handling for dailynote - if (dailyNoteResponse.ReturnCode == (int)Web.Response.KnownReturnCode.CODE1034) - { - infoBarService.Warning(dailyNoteResponse.ToString()); - } - else - { - infoBarService.Error(dailyNoteResponse.ToString()); - } - } } } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs index 725883f6..fdaee33b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Unlocker/GameFpsUnlocker.cs @@ -141,8 +141,8 @@ internal sealed class GameFpsUnlocker : IGameFpsUnlocker { // E8 ?? ?? ?? ?? 85 C0 7E 07 E8 ?? ?? ?? ?? EB 05 int second = 0; - ReadOnlySpan secondPart = new byte[] { 0x85, 0xC0, 0x7E, 0x07, 0xE8, }; - ReadOnlySpan thirdPart = new byte[] { 0xEB, 0x05, }; + ReadOnlySpan secondPart = stackalloc byte[] { 0x85, 0xC0, 0x7E, 0x07, 0xE8, }; + ReadOnlySpan thirdPart = stackalloc byte[] { 0xEB, 0x05, }; while (second >= 0 && second < memory.Length) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs index 8a2cf312..d67ddd3d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs @@ -85,7 +85,7 @@ internal sealed partial class MetadataOptions : IOptions public string GetLocalizedRemoteFile(string fileNameWithExtension) { #if DEBUG - return Web.HutaoEndpoints.RawGithubUserContentMetadataFile(LocaleName, fileNameWithExtension); + return Web.HutaoEndpoints.HutaoMetadata2File(LocaleName, fileNameWithExtension); #else return Web.HutaoEndpoints.HutaoMetadata2File(LocaleName, fileNameWithExtension); #endif diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs index 6c6abf3b..9e4ccc10 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs @@ -9,6 +9,7 @@ using Snap.Hutao.Core.ExceptionService; using Snap.Hutao.Core.IO.Hashing; using Snap.Hutao.Service.Notification; using System.IO; +using System.Net; using System.Net.Http; using System.Net.Http.Json; @@ -77,7 +78,7 @@ internal sealed partial class MetadataService : IMetadataService, IMetadataServi } catch (HttpRequestException ex) { - if (ex.StatusCode == System.Net.HttpStatusCode.Forbidden) + if (ex.StatusCode is HttpStatusCode.Forbidden or HttpStatusCode.NotFound) { infoBarService.Error(SH.ServiceMetadataVersionNotSupported); } diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj index 326b6754..34b9d830 100644 --- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj +++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj @@ -244,8 +244,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -261,7 +261,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarPropertyViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarPropertyViewModel.cs index c7179a0b..88813bc2 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarPropertyViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarPropertyViewModel.cs @@ -238,8 +238,7 @@ internal sealed partial class AvatarPropertyViewModel : Abstraction.ViewModel, I bool clipboardOpened = false; using (SoftwareBitmap softwareBitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer, BitmapPixelFormat.Bgra8, bitmap.PixelWidth, bitmap.PixelHeight)) { - Color tintColor = serviceProvider.GetRequiredService().GetResource("CompatBackgroundColor"); - Bgra32 tint = Bgra32.FromColor(tintColor); + Bgra32 tint = serviceProvider.GetRequiredService().GetResource("CompatBackgroundColor"); softwareBitmap.NormalBlend(tint); using (InMemoryRandomAccessStream memory = new()) { diff --git a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs index e6cb482f..4fba271a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs @@ -109,7 +109,12 @@ internal static class ApiEndpoints /// /// 发起验证码 /// - public const string CardCreateVerification = $"{ApiTakumiCardWApi}/createVerification?is_high=false"; + /// 是否为高风险 + /// 发起验证码Url + public static string CardCreateVerification(bool highRisk) + { + return $"{ApiTakumiCardWApi}/createVerification?is_high={Core.StringLiterals.LowerBoolean(highRisk)}"; + } /// /// 验证验证码 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 eb13bea3..865682f3 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 @@ -46,7 +46,7 @@ internal sealed class CardClient Response? resp = await httpClient .SetUser(user, CookieType.LToken) .UseDynamicSecret(DynamicSecretVersion.Gen2, SaltType.X4, false) - .TryCatchGetFromJsonAsync>(ApiEndpoints.CardCreateVerification, options, logger, token) + .TryCatchGetFromJsonAsync>(ApiEndpoints.CardCreateVerification(false), options, logger, token) .ConfigureAwait(false); return Response.Response.DefaultIfNull(resp); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNote.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNote.cs index a5110318..4cd07d3e 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNote.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNote.cs @@ -26,6 +26,11 @@ internal sealed class DailyNote : DailyNoteCommon { get { + if (ResinRecoveryTime == 0) + { + return SH.WebDailyNoteResinRecoveryCompleted; + } + DateTime reach = DateTime.Now.AddSeconds(ResinRecoveryTime); int totalDays = (reach - DateTime.Today).Days; string day = totalDays switch diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNoteCommon.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNoteCommon.cs index 935a3019..6549bcb8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNoteCommon.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/DailyNote/DailyNoteCommon.cs @@ -63,7 +63,7 @@ internal abstract class DailyNoteCommon public int MaxResin { get; set; } /// - /// 树脂恢复时间 类型的秒数 + /// 树脂恢复时间的秒数 /// [JsonPropertyName("resin_recovery_time")] public int ResinRecoveryTime { get; set; } 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 3e3ae166..b97adcd6 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 @@ -51,6 +51,7 @@ internal sealed partial class GameRecordClient : IGameRecordClient // We have a verification procedure to handle if (resp?.ReturnCode == (int)KnownReturnCode.CODE1034) { + // Replace message resp.Message = SH.WebDailyNoteVerificationFailed; CardVerifier cardVerifier = serviceProvider.GetRequiredService(); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Response/Response.cs b/src/Snap.Hutao/Snap.Hutao/Web/Response/Response.cs index c1c6601f..bf9068e8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Response/Response.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Response/Response.cs @@ -130,10 +130,10 @@ internal sealed class Response : Response, IJsResult /// /// 响应是否正常 /// - /// 响应 + /// 是否显示错误信息 /// 是否Ok [MemberNotNullWhen(true, nameof(Data))] - public bool IsOk() + public bool IsOk(bool showInfoBar = true) { if (ReturnCode == 0) { @@ -143,7 +143,11 @@ internal sealed class Response : Response, IJsResult } else { - Ioc.Default.GetRequiredService().Error(ToString()); + if (showInfoBar) + { + Ioc.Default.GetRequiredService().Error(ToString()); + } + return false; } }