From ba4a7c1447146b40948ce2cc4e3a86d8917dcde8 Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Sun, 29 Oct 2023 22:56:10 +0800
Subject: [PATCH] fix #903
---
.../Message/HutaoUserChangedMessage.cs | 8 +++++
.../Service/Hutao/HutaoUserOptions.cs | 35 ++++++++++++-------
.../Service/Hutao/HutaoUserService.cs | 9 +----
.../ViewModel/GachaLog/HutaoCloudViewModel.cs | 9 ++++-
.../Setting/HutaoPassportViewModel.cs | 10 ++----
5 files changed, 42 insertions(+), 29 deletions(-)
create mode 100644 src/Snap.Hutao/Snap.Hutao/Message/HutaoUserChangedMessage.cs
diff --git a/src/Snap.Hutao/Snap.Hutao/Message/HutaoUserChangedMessage.cs b/src/Snap.Hutao/Snap.Hutao/Message/HutaoUserChangedMessage.cs
new file mode 100644
index 00000000..08084ad4
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Message/HutaoUserChangedMessage.cs
@@ -0,0 +1,8 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+namespace Snap.Hutao.Message;
+
+internal sealed class HutaoUserChangedMessage
+{
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs
index e035b262..e56e4b81 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserOptions.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.Options;
using Snap.Hutao.Web.Hutao;
using System.Text.RegularExpressions;
@@ -61,17 +62,25 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions
public HutaoUserOptions Value { get => this; }
- ///
- /// 登录
- ///
- /// 用户名
- /// 令牌
- public void LoginSucceed(string userName, string? token)
+ public async ValueTask PostLoginSucceedAsync(HomaPassportClient passportClient, ITaskContext taskContext, string username, string? token)
{
- UserName = userName;
+ await taskContext.SwitchToMainThreadAsync();
+ UserName = username;
this.token = token;
IsLoggedIn = true;
initializedTaskCompletionSource.TrySetResult();
+
+ await taskContext.SwitchToBackgroundAsync();
+ Web.Response.Response userInfoResponse = await passportClient.GetUserInfoAsync(default).ConfigureAwait(false);
+ if (userInfoResponse.IsOk())
+ {
+ await taskContext.SwitchToMainThreadAsync();
+ UpdateUserInfo(userInfoResponse.Data);
+ Ioc.Default.GetRequiredService().Send(new Message.HutaoUserChangedMessage());
+ return true;
+ }
+
+ return false;
}
public void LogoutOrUnregister()
@@ -109,6 +118,12 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions DateTimeOffset.Now;
}
+ public async ValueTask GetTokenAsync()
+ {
+ await initializedTaskCompletionSource.Task.ConfigureAwait(false);
+ return token;
+ }
+
private void ClearUserInfo()
{
IsLicensedDeveloper = false;
@@ -117,10 +132,4 @@ internal sealed class HutaoUserOptions : ObservableObject, IOptions 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 e6b8d46b..2fc444a0 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoUserService.cs
@@ -44,15 +44,8 @@ internal sealed partial class HutaoUserService : IHutaoUserService, IHutaoUserSe
if (response.IsOk())
{
- await taskContext.SwitchToMainThreadAsync();
- options.LoginSucceed(userName, response.Data);
-
- await taskContext.SwitchToBackgroundAsync();
- Web.Response.Response userInfoResponse = await passportClient.GetUserInfoAsync(token).ConfigureAwait(false);
- if (userInfoResponse.IsOk())
+ if (await options.PostLoginSucceedAsync(passportClient, taskContext, userName, response.Data).ConfigureAwait(false))
{
- await taskContext.SwitchToMainThreadAsync();
- options.UpdateUserInfo(userInfoResponse.Data);
isInitialized = true;
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoCloudViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoCloudViewModel.cs
index 89a250e2..fe2ee86a 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoCloudViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoCloudViewModel.cs
@@ -1,9 +1,11 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
+using CommunityToolkit.Mvvm.Messaging;
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Control.Extension;
using Snap.Hutao.Factory.Abstraction;
+using Snap.Hutao.Message;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Service.GachaLog;
using Snap.Hutao.Service.Hutao;
@@ -20,7 +22,7 @@ namespace Snap.Hutao.ViewModel.GachaLog;
///
[ConstructorGenerated]
[Injection(InjectAs.Scoped)]
-internal sealed partial class HutaoCloudViewModel : Abstraction.ViewModel
+internal sealed partial class HutaoCloudViewModel : Abstraction.ViewModel, IRecipient
{
private readonly INavigationService navigationService;
private readonly IContentDialogFactory contentDialogFactory;
@@ -47,6 +49,11 @@ internal sealed partial class HutaoCloudViewModel : Abstraction.ViewModel
///
internal ICommand RetrieveCommand { get; set; }
+ public void Receive(HutaoUserChangedMessage message)
+ {
+ RefreshUidCollectionAsync().SafeForget();
+ }
+
///
/// 异步获取祈愿记录
///
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs
index cfc00fbf..eb6bee68 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/HutaoPassportViewModel.cs
@@ -58,9 +58,7 @@ internal sealed partial class HutaoPassportViewModel : Abstraction.ViewModel
{
SaveUserNameAndPassword(username, password);
infoBarService.Information(response.Message);
-
- await taskContext.SwitchToMainThreadAsync();
- hutaoUserOptions.LoginSucceed(username, response.Data);
+ await hutaoUserOptions.PostLoginSucceedAsync(homaPassportClient, taskContext, username, response.Data).ConfigureAwait(false);
}
}
}
@@ -114,8 +112,7 @@ internal sealed partial class HutaoPassportViewModel : Abstraction.ViewModel
SaveUserNameAndPassword(username, password);
infoBarService.Information(response.Message);
- await taskContext.SwitchToMainThreadAsync();
- hutaoUserOptions.LoginSucceed(username, response.Data);
+ await hutaoUserOptions.PostLoginSucceedAsync(homaPassportClient, taskContext, username, response.Data).ConfigureAwait(false);
}
}
}
@@ -148,8 +145,7 @@ internal sealed partial class HutaoPassportViewModel : Abstraction.ViewModel
SaveUserNameAndPassword(username, password);
infoBarService.Information(response.Message);
- await taskContext.SwitchToMainThreadAsync();
- hutaoUserOptions.LoginSucceed(username, response.Data);
+ await hutaoUserOptions.PostLoginSucceedAsync(homaPassportClient, taskContext, username, response.Data).ConfigureAwait(false);
}
}
}