From 0ac79012d1440f1860ab8a6d57e7d6af8aaad3d2 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Mon, 16 Jan 2023 18:12:12 +0800 Subject: [PATCH] fix #368 --- .../Snap.Hutao/Core/Setting/StaticResource.cs | 31 +++++++++++++++++++ src/Snap.Hutao/Snap.Hutao/MainWindow.xaml.cs | 5 +-- .../Snap.Hutao/Package.appxmanifest | 2 +- .../DailyNoteVerificationDialog.xaml.cs | 9 ++++-- .../ViewModel/AvatarPropertyViewModel.cs | 8 ++--- .../ViewModel/SpiralAbyssRecordViewModel.cs | 10 +++--- .../Snap.Hutao/ViewModel/WelcomeViewModel.cs | 6 ++-- .../Web/Bridge/MiHoYoJSInterface.cs | 21 +------------ 8 files changed, 51 insertions(+), 41 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/Core/Setting/StaticResource.cs diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Setting/StaticResource.cs b/src/Snap.Hutao/Snap.Hutao/Core/Setting/StaticResource.cs new file mode 100644 index 00000000..ae0e6842 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Core/Setting/StaticResource.cs @@ -0,0 +1,31 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Core.Setting; + +/// +/// 静态资源 +/// +internal static class StaticResource +{ + /// + /// 提供的合约是否未完成 + /// + /// 合约的键 + /// 合约是否未完成 + public static bool IsContractUnfulfilled(string contractKey) + { + return !LocalSetting.Get(contractKey, false); + } + + /// + /// 是否有任何静态资源合约尚未完成 + /// + /// 静态资源合约尚未完成 + public static bool IsAnyUnfulfilledContractPresent() + { + return !LocalSetting.Get(SettingKeys.StaticResourceV1Contract, false) + || (!LocalSetting.Get(SettingKeys.StaticResourceV2Contract, false)) + || (!LocalSetting.Get(SettingKeys.StaticResourceV3Contract, false)); + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/MainWindow.xaml.cs b/src/Snap.Hutao/Snap.Hutao/MainWindow.xaml.cs index 099d21b5..17a18be0 100644 --- a/src/Snap.Hutao/Snap.Hutao/MainWindow.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/MainWindow.xaml.cs @@ -33,11 +33,8 @@ public sealed partial class MainWindow : Window, IExtendedWindowSource, IRecipie Ioc.Default.GetRequiredService().Register(this); - // Query the StaticResourceV1Contract & StaticResourceV2Contract. // If not complete we should present the welcome view. - ContentSwitchPresenter.Value = - !LocalSetting.Get(SettingKeys.StaticResourceV1Contract, false) - || (!LocalSetting.Get(SettingKeys.StaticResourceV2Contract, false)); + ContentSwitchPresenter.Value = StaticResource.IsAnyUnfulfilledContractPresent(); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Package.appxmanifest b/src/Snap.Hutao/Snap.Hutao/Package.appxmanifest index 287f36e0..2038ec32 100644 --- a/src/Snap.Hutao/Snap.Hutao/Package.appxmanifest +++ b/src/Snap.Hutao/Snap.Hutao/Package.appxmanifest @@ -12,7 +12,7 @@ + Version="1.3.12.0" /> 胡桃 diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/DailyNoteVerificationDialog.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Dialog/DailyNoteVerificationDialog.xaml.cs index f58f4f1a..95a3f61e 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/DailyNoteVerificationDialog.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/DailyNoteVerificationDialog.xaml.cs @@ -13,6 +13,7 @@ namespace Snap.Hutao.View.Dialog; /// /// 实时便笺验证对话框 /// +[SuppressMessage("", "CA1001")] public sealed partial class DailyNoteVerificationDialog : ContentDialog { private readonly IServiceScope scope; @@ -58,8 +59,12 @@ public sealed partial class DailyNoteVerificationDialog : ContentDialog private void OnContentDialogClosed(ContentDialog sender, ContentDialogClosedEventArgs args) { - dailyNoteJsInterface.ClosePageRequested -= OnClosePageRequested; - dailyNoteJsInterface = null; + if (dailyNoteJsInterface != null) + { + dailyNoteJsInterface!.ClosePageRequested -= OnClosePageRequested; + dailyNoteJsInterface = null; + } + scope.Dispose(); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarPropertyViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarPropertyViewModel.cs index 9dd926a5..7245feae 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarPropertyViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarPropertyViewModel.cs @@ -115,13 +115,9 @@ internal class AvatarPropertyViewModel : Abstraction.ViewModel private Task OpenUIAsync() { - if (userService.Current is User user) + if (UserAndUid.TryFromUser(userService.Current, out UserAndUid? userAndUid)) { - if (user.SelectedUserGameRole is UserGameRole role) - { - UserAndUid userAndUid = new(user.Entity, role); - return RefreshCoreAsync(userAndUid, RefreshOption.None, CancellationToken); - } + return RefreshCoreAsync(userAndUid, RefreshOption.None, CancellationToken); } return Task.CompletedTask; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs index ae94bb88..ecb7d1a6 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs @@ -72,12 +72,12 @@ internal class SpiralAbyssRecordViewModel : Abstraction.ViewModel, IRecipient selectedEntry; set { - if (SetProperty(ref selectedEntry, value)) + // We dont need to check the result here, + // just refresh the view anyway. + SetProperty(ref selectedEntry, value); + if (value != null && idAvatarMap != null) { - if (value != null && idAvatarMap != null) - { - SpiralAbyssView = new(value.SpiralAbyss, idAvatarMap); - } + SpiralAbyssView = new(value.SpiralAbyss, idAvatarMap); } } } diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/WelcomeViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/WelcomeViewModel.cs index 68422544..2619b9ee 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/WelcomeViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/WelcomeViewModel.cs @@ -89,7 +89,7 @@ internal class WelcomeViewModel : ObservableObject { Dictionary downloadSummaries = new(); - if (!LocalSetting.Get(SettingKeys.StaticResourceV1Contract, false)) + if (StaticResource.IsContractUnfulfilled(SettingKeys.StaticResourceV1Contract)) { downloadSummaries.TryAdd("Bg", new(serviceProvider, "基础图标", "Bg")); downloadSummaries.TryAdd("AvatarIcon", new(serviceProvider, "角色图标", "AvatarIcon")); @@ -102,7 +102,7 @@ internal class WelcomeViewModel : ObservableObject downloadSummaries.TryAdd("Talent", new(serviceProvider, "命之座图标", "Talent")); } - if (!LocalSetting.Get(SettingKeys.StaticResourceV2Contract, false)) + if (StaticResource.IsContractUnfulfilled(SettingKeys.StaticResourceV2Contract)) { downloadSummaries.TryAdd("AchievementIcon", new(serviceProvider, "成就图标", "AchievementIcon")); downloadSummaries.TryAdd("ItemIcon", new(serviceProvider, "物品图标", "ItemIcon")); @@ -110,7 +110,7 @@ internal class WelcomeViewModel : ObservableObject downloadSummaries.TryAdd("RelicIcon", new(serviceProvider, "圣遗物图标", "RelicIcon")); } - if (!LocalSetting.Get(SettingKeys.StaticResourceV3Contract, false)) + if (StaticResource.IsContractUnfulfilled(SettingKeys.StaticResourceV3Contract)) { downloadSummaries.TryAdd("Skill", new(serviceProvider, "天赋图标更新", "Skill")); downloadSummaries.TryAdd("Talent", new(serviceProvider, "命之座图标更新", "Talent")); diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs index a7bc6e00..639b8b23 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs @@ -22,6 +22,7 @@ namespace Snap.Hutao.Web.Bridge; /// /// 调用桥 /// +[SuppressMessage("", "CA1001")] [SuppressMessage("", "SA1600")] public class MiHoYoJSInterface { @@ -67,7 +68,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("getActionTicket")] public virtual async Task GetActionTicketAsync(JsParam jsParam) { User user = serviceProvider.GetRequiredService().Current!; @@ -82,7 +82,6 @@ public class MiHoYoJSInterface /// /// 参数 /// Http请求头 - [JsMethod("getHTTPRequestHeaders")] public virtual JsResult> GetHttpRequestHeader(JsParam param) { return new() @@ -101,7 +100,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("getCookieInfo")] public virtual JsResult> GetCookieInfo(JsParam param) { User user = serviceProvider.GetRequiredService().Current!; @@ -122,7 +120,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("getDS")] public virtual JsResult> GetDynamicSecrectV1(JsParam param) { string salt = Core.CoreEnvironment.DynamicSecrets[nameof(SaltType.LK2)]; @@ -153,7 +150,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("getDS2")] public virtual JsResult> GetDynamicSecrectV2(JsParam param) { string salt = Core.CoreEnvironment.DynamicSecrets[nameof(SaltType.X4)]; @@ -177,7 +173,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("getUserInfo")] public virtual JsResult> GetUserInfo(JsParam param) { User user = serviceProvider.GetRequiredService().Current!; @@ -201,7 +196,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("getCookieToken")] public virtual async Task>> GetCookieTokenAsync(JsParam param) { User user = serviceProvider.GetRequiredService().Current!; @@ -237,7 +231,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("closePage")] public virtual IJsResult? ClosePage(JsParam param) { ClosePageRequested?.Invoke(); @@ -249,7 +242,6 @@ public class MiHoYoJSInterface /// /// 参数 /// 响应 - [JsMethod("configure_share")] public virtual IJsResult? ConfigureShare(JsParam param) { return null; @@ -260,68 +252,57 @@ public class MiHoYoJSInterface /// /// 参数 /// 结果 - [JsMethod("getStatusBarHeight")] public virtual JsResult> GetStatusBarHeight(JsParam param) { return new() { Data = new() { ["statusBarHeight"] = 0 } }; } - [JsMethod("pushPage")] public virtual IJsResult? PushPage(JsParam param) { webView.Navigate(param.Payload.Page); return null; } - [JsMethod("showAlertDialog")] public virtual Task ShowAlertDialogAsync(JsParam param) { return Task.FromException(new NotImplementedException()); } - [JsMethod("startRealPersonValidation")] public virtual IJsResult? StartRealPersonValidation(JsParam param) { throw new NotImplementedException(); } - [JsMethod("startRealnameAuth")] public virtual IJsResult? StartRealnameAuth(JsParam param) { throw new NotImplementedException(); } - [JsMethod("genAuthKey")] public virtual IJsResult? GenAuthKey(JsParam param) { throw new NotImplementedException(); } - [JsMethod("genAppAuthKey")] public virtual IJsResult? GenAppAuthKey(JsParam param) { throw new NotImplementedException(); } - [JsMethod("openSystemBrowser")] public virtual IJsResult? OpenSystemBrowser(JsParam param) { throw new NotImplementedException(); } - [JsMethod("saveLoginTicket")] public virtual IJsResult? SaveLoginTicket(JsParam param) { throw new NotImplementedException(); } - [JsMethod("getNotificationSettings")] public virtual Task GetNotificationSettingsAsync(JsParam param) { throw new NotImplementedException(); } - [JsMethod("showToast")] public virtual IJsResult? ShowToast(JsParam param) { throw new NotImplementedException();