From 1cd6aad5180f1da3d1bf4cc489953de43da80925 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Sat, 6 Jul 2024 10:09:07 +0800 Subject: [PATCH] fix game account attach uid crash --- .../Game/Account/GameAccountService.cs | 7 +++++-- .../Game/Account/IGameAccountService.cs | 2 +- .../GameConfigurationFileService.cs | 20 +++++++++++-------- .../Service/Game/GameServiceFacade.cs | 4 ++-- .../Service/Game/IGameServiceFacade.cs | 2 +- .../UI/Xaml/View/Card/LaunchGameCard.xaml | 1 + .../ViewModel/Game/LaunchGameViewModel.cs | 2 +- 7 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/GameAccountService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/GameAccountService.cs index 93612d6f..dbce927b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/GameAccountService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/GameAccountService.cs @@ -88,10 +88,13 @@ internal sealed partial class GameAccountService : IGameAccountService return RegistryInterop.Set(account); } - public void AttachGameAccountToUid(GameAccount gameAccount, string uid) + public async ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid) { - gameAccount.UpdateAttachUid(uid); + await taskContext.SwitchToBackgroundAsync(); gameDbService.UpdateGameAccount(gameAccount); + + await taskContext.SwitchToMainThreadAsync(); + gameAccount.UpdateAttachUid(uid); } public async ValueTask ModifyGameAccountAsync(GameAccount gameAccount) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/IGameAccountService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/IGameAccountService.cs index eb132170..c3c7da9e 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/IGameAccountService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Account/IGameAccountService.cs @@ -11,7 +11,7 @@ internal interface IGameAccountService { ObservableReorderableDbCollection GameAccountCollection { get; } - void AttachGameAccountToUid(GameAccount gameAccount, string uid); + ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid); GameAccount? DetectCurrentGameAccount(SchemeType schemeType); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Configuration/GameConfigurationFileService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Configuration/GameConfigurationFileService.cs index ba1a84d0..1b257f94 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Configuration/GameConfigurationFileService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Configuration/GameConfigurationFileService.cs @@ -27,15 +27,19 @@ internal sealed partial class GameConfigurationFileService : IGameConfigurationF string serverCacheFolder = runtimeOptions.GetDataFolderServerCacheFolder(); string source = Path.Combine(serverCacheFolder, ConfigurationFileName); - if (File.Exists(source)) + if (!File.Exists(source)) { - string? directory = Path.GetDirectoryName(destination); - if (string.IsNullOrEmpty(directory) || !Directory.Exists(directory)) - { - return; - } - - File.Copy(source, destination, true); + return; } + + // If target directory does not exist, do not copy the file + // This often means user has moved the game folder away. + string? directory = Path.GetDirectoryName(destination); + if (string.IsNullOrEmpty(directory) || !Directory.Exists(directory)) + { + return; + } + + File.Copy(source, destination, true); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameServiceFacade.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameServiceFacade.cs index 83958a87..9c011292 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameServiceFacade.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameServiceFacade.cs @@ -54,9 +54,9 @@ internal sealed partial class GameServiceFacade : IGameServiceFacade } /// - public void AttachGameAccountToUid(GameAccount gameAccount, string uid) + public ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid) { - gameAccountService.AttachGameAccountToUid(gameAccount, uid); + return gameAccountService.AttachGameAccountToUidAsync(gameAccount, uid); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameServiceFacade.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameServiceFacade.cs index ecb03421..e79731a3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameServiceFacade.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameServiceFacade.cs @@ -25,7 +25,7 @@ internal interface IGameServiceFacade /// /// 游戏内账号 /// uid - void AttachGameAccountToUid(GameAccount gameAccount, string uid); + ValueTask AttachGameAccountToUidAsync(GameAccount gameAccount, string uid); ValueTask DetectGameAccountAsync(SchemeType scheme); diff --git a/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Card/LaunchGameCard.xaml b/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Card/LaunchGameCard.xaml index 0d6378e0..7c465128 100644 --- a/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Card/LaunchGameCard.xaml +++ b/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Card/LaunchGameCard.xaml @@ -60,6 +60,7 @@ Command="{Binding NavigateCommand}" Content="{StaticResource FontIconContentSetting}" FontFamily="{StaticResource SymbolThemeFontFamily}" + Style="{ThemeResource ButtonRevealStyle}" ToolTipService.ToolTip="{shuxm:ResourceString Name=ViewPageHomeLaunchGameSettingAction}"/>