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();