diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index dbfacf97e4..8821a1767a 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -19,7 +19,6 @@ using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Net.Sockets; -using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; @@ -34,17 +33,16 @@ using MaaWpfGui.Models; using MaaWpfGui.Services; using MaaWpfGui.Services.Notification; using MaaWpfGui.States; -using MaaWpfGui.ViewModels; using MaaWpfGui.ViewModels.UI; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Serilog; using Stylet; using static MaaWpfGui.Helper.Instances.Data; -using AsstHandle = System.IntPtr; +using AsstHandle = nint; using AsstInstanceOptionKey = System.Int32; - using AsstTaskId = System.Int32; +using ToastNotification = MaaWpfGui.Helper.ToastNotification; namespace MaaWpfGui.Main { @@ -1569,10 +1567,16 @@ namespace MaaWpfGui.Main Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("UnsupportedLevel") + subTaskDetails!["level"], UiLogColor.Error); Task.Run(async () => { - var ret = await ResourceUpdater.CheckAndDownloadUpdate(); + if (SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates) + { + return; + } + + var ret = await ResourceUpdater.CheckAndDownloadResourceUpdate(); if (ret == VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated) { - _ = Instances.VersionUpdateViewModel.AskToRestart(true); + Instances.AsstProxy.LoadResource(); + ToastNotification.ShowDirect(LocalizationHelper.GetString("GameResourceUpdated")); } }); break; diff --git a/src/MaaWpfGui/Models/ResourceUpdater.cs b/src/MaaWpfGui/Models/ResourceUpdater.cs index b6c0cd16ee..78fb973836 100644 --- a/src/MaaWpfGui/Models/ResourceUpdater.cs +++ b/src/MaaWpfGui/Models/ResourceUpdater.cs @@ -642,7 +642,19 @@ namespace MaaWpfGui.Models return await DownloadFromMirrorChyanAsync(uri); } - public static async Task CheckAndDownloadUpdate() + + /// + /// 检查并下载资源更新。 + /// + /// 返回一个 枚举值,指示更新检查和下载的结果。 + /// + /// :已是最新版本。 + /// :检查成功。(海外源不会自动下载) + /// :下载成功。 + /// :网络错误。 + /// :其他错误。 + /// + public static async Task CheckAndDownloadResourceUpdate() { SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 66023352bf..9b1ec0b198 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -891,7 +891,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla Game resources are being updated. Indexing in progress Game resources updated. - Game resources updated, please restart MAA. + Game resources updated. Game resources update failed, please try again later. diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 1f5ad57232..84b85e0c80 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -894,7 +894,7 @@ C:\\leidian\\LDPlayer9 ゲームリソースが更新中です。 索引の作成中 ゲームリソースが更新されました。 - ゲームリソースが更新されました。MAAを再起動してください。 + ゲームリソースが更新されました。 ゲームリソースの更新に失敗しました。後でもう一度お試しください。 diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 09583fad52..d4cee8d81f 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -894,7 +894,7 @@ C:\\leidian\\LDPlayer9 게임 자원이 업데이트 중입니다. 색인 작성 중 게임 리소스가 업데이트되었으니. - 게임 리소스가 업데이트되었으니 MAA를 다시 시작해주세요. + 게임 리소스가 업데이트되었으니. 게임 리소스 업데이트 실패, 나중에 다시 시도해주세요. diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 55a07f762f..515fa93f2d 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -896,7 +896,7 @@ C:\\leidian\\LDPlayer9。\n 游戏资源正在更新。 正在编制索引 游戏资源已更新。 - 游戏资源已更新,请重启 MAA。 + 游戏资源已更新。 游戏资源更新失败,请稍后尝试。 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 70a8fdaeb6..c2bf4b9e09 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -893,7 +893,7 @@ C:\\leidian\\LDPlayer9。\n 遊戲資源正在更新。 正在編製索引 遊戲資源已更新。 - 遊戲資源已更新,請重啟 MAA。 + 遊戲資源已更新。 遊戲資源更新失敗,請稍後嘗試。 diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 3ae768feec..44f311a8c9 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -469,14 +469,15 @@ namespace MaaWpfGui.ViewModels.UI { _logger.Information($"waiting for update check: {delayTime}"); await Task.Delay(delayTime); - if (await Instances.VersionUpdateViewModel.CheckAndDownloadUpdate() == VersionUpdateViewModel.CheckUpdateRetT.OK) + if (await Instances.VersionUpdateViewModel.CheckAndDownloadVersionUpdate() == VersionUpdateViewModel.CheckUpdateRetT.OK) { _ = Instances.VersionUpdateViewModel.AskToRestart(); } - if (await ResourceUpdater.CheckAndDownloadUpdate() == VersionUpdateViewModel.CheckUpdateRetT.OK) + if (await ResourceUpdater.CheckAndDownloadResourceUpdate() == VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated) { - _ = Instances.VersionUpdateViewModel.AskToRestart(true); + Instances.AsstProxy.LoadResource(); + ToastNotification.ShowDirect(LocalizationHelper.GetString("GameResourceUpdated")); } _isCheckingForUpdates = false; diff --git a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs index 7af96134eb..894478f17f 100644 --- a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs @@ -476,54 +476,50 @@ public class VersionUpdateViewModel : Screen { if (!IsDebugVersion()) { - var ret = await CheckAndDownloadUpdate(); + var ret = await CheckAndDownloadVersionUpdate(); if (ret == CheckUpdateRetT.OK) { _ = AskToRestart(); } - var ret2 = await ResourceUpdater.CheckAndDownloadUpdate(); + var ret2 = await ResourceUpdater.CheckAndDownloadResourceUpdate(); if (ret2 == CheckUpdateRetT.OnlyGameResourceUpdated) { - _ = AskToRestart(true); + Instances.AsstProxy.LoadResource(); + ToastNotification.ShowDirect(LocalizationHelper.GetString("GameResourceUpdated")); } } else { - // await ResourceUpdater.CheckAndDownloadUpdate(); + // await ResourceUpdater.CheckAndDownloadResourceUpdate(); // 跑个空任务避免 async warning await Task.Run(() => { }); } } } - public async Task CheckAndDownloadUpdate() - { - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; - var ret = await CheckAndDownloadVersionUpdate(); - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; - return ret; - } - /// /// 检查更新,并下载更新包。 /// /// 操作成功返回 ,反之则返回 - private async Task CheckAndDownloadVersionUpdate() + public async Task CheckAndDownloadVersionUpdate() { - // 检查更新 + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; var (checkRet, source) = await CheckUpdate(); if (checkRet != CheckUpdateRetT.OK) { + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; return checkRet; } - return source switch + var ret = source switch { AppUpdateSource.MaaApi => await HandleUpdateFromMaaApi(), AppUpdateSource.MirrorChyan => await HandleUpdateFromMirrorChyan(), _ => CheckUpdateRetT.UnknownError, }; + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; + return ret; } private async Task HandleUpdateFromMaaApi() @@ -750,7 +746,7 @@ public class VersionUpdateViewModel : Screen return CheckUpdateRetT.OK; } - public async Task AskToRestart(bool isResource = false) + public async Task AskToRestart() { if (SettingsViewModel.VersionUpdateSettings.AutoInstallUpdatePackage) { @@ -761,8 +757,8 @@ public class VersionUpdateViewModel : Screen await _runningState.UntilIdleAsync(10000); var result = MessageBoxHelper.Show( - LocalizationHelper.GetString(isResource ? "GameResourceUpdated" : "NewVersionDownloadCompletedDesc"), - LocalizationHelper.GetString(isResource ? "Tip" : "NewVersionDownloadCompletedTitle"), + LocalizationHelper.GetString("NewVersionDownloadCompletedDesc"), + LocalizationHelper.GetString("NewVersionDownloadCompletedTitle"), MessageBoxButton.OKCancel, MessageBoxImage.Question, ok: LocalizationHelper.GetString("Ok"), diff --git a/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs index 932cb10bc8..ae3bce8db7 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs @@ -360,91 +360,76 @@ public class VersionUpdateSettingsUserControlModel : PropertyChangedBase /// A representing the asynchronous operation. public async Task ManualUpdate() { - var ret = await Instances.VersionUpdateViewModel.CheckAndDownloadUpdate(); + var ret = await Instances.VersionUpdateViewModel.CheckAndDownloadVersionUpdate(); - var toastMessage = string.Empty; - switch (ret) + var toastMessage = ret switch { - case VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdate: - break; - - case VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdateDebugVersion: - toastMessage = LocalizationHelper.GetString("NoNeedToUpdateDebugVersion"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.AlreadyLatest: - toastMessage = LocalizationHelper.GetString("AlreadyLatest"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.UnknownError: - toastMessage = LocalizationHelper.GetString("NewVersionDetectFailedTitle"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.NetworkError: - toastMessage = LocalizationHelper.GetString("CheckNetworking"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.FailedToGetInfo: - toastMessage = LocalizationHelper.GetString("GetReleaseNoteFailed"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.OK: - _ = Instances.VersionUpdateViewModel.AskToRestart(); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.NewVersionIsBeingBuilt: - toastMessage = LocalizationHelper.GetString("NewVersionIsBeingBuilt"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated: - toastMessage = LocalizationHelper.GetString("GameResourceUpdated"); - break; - - case VersionUpdateViewModel.CheckUpdateRetT.NoMirrorChyanCdk: - toastMessage = LocalizationHelper.GetString("MirrorChyanSoftwareUpdateTip"); - break; - - default: - throw new ArgumentOutOfRangeException(); - } + VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdate => string.Empty, + VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdateDebugVersion => LocalizationHelper.GetString("NoNeedToUpdateDebugVersion"), + VersionUpdateViewModel.CheckUpdateRetT.AlreadyLatest => LocalizationHelper.GetString("AlreadyLatest"), + VersionUpdateViewModel.CheckUpdateRetT.UnknownError => LocalizationHelper.GetString("NewVersionDetectFailedTitle"), + VersionUpdateViewModel.CheckUpdateRetT.NetworkError => LocalizationHelper.GetString("CheckNetworking"), + VersionUpdateViewModel.CheckUpdateRetT.FailedToGetInfo => LocalizationHelper.GetString("GetReleaseNoteFailed"), + VersionUpdateViewModel.CheckUpdateRetT.OK => string.Empty, + VersionUpdateViewModel.CheckUpdateRetT.NewVersionIsBeingBuilt => LocalizationHelper.GetString("NewVersionIsBeingBuilt"), + VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated => LocalizationHelper.GetString("GameResourceUpdated"), + VersionUpdateViewModel.CheckUpdateRetT.NoMirrorChyanCdk => LocalizationHelper.GetString("MirrorChyanSoftwareUpdateTip"), + _ => string.Empty, + }; if (toastMessage != string.Empty) { ToastNotification.ShowDirect(toastMessage); } + + if (ret == VersionUpdateViewModel.CheckUpdateRetT.OK) + { + _ = Instances.VersionUpdateViewModel.AskToRestart(); + } } public async Task ManualUpdateResource() { IsCheckingForUpdates = true; + var (ret, uri) = await ResourceUpdater.CheckFromMirrorChyanAsync(); + var toastMessage = ret switch + { + VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdate => string.Empty, + VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdateDebugVersion => LocalizationHelper.GetString("NoNeedToUpdateDebugVersion"), + VersionUpdateViewModel.CheckUpdateRetT.AlreadyLatest => LocalizationHelper.GetString("AlreadyLatest"), + VersionUpdateViewModel.CheckUpdateRetT.UnknownError => LocalizationHelper.GetString("NewVersionDetectFailedTitle"), + VersionUpdateViewModel.CheckUpdateRetT.NetworkError => LocalizationHelper.GetString("CheckNetworking"), + VersionUpdateViewModel.CheckUpdateRetT.FailedToGetInfo => LocalizationHelper.GetString("GetReleaseNoteFailed"), + VersionUpdateViewModel.CheckUpdateRetT.OK => string.Empty, + VersionUpdateViewModel.CheckUpdateRetT.NewVersionIsBeingBuilt => LocalizationHelper.GetString("NewVersionIsBeingBuilt"), + VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated => LocalizationHelper.GetString("GameResourceUpdated"), + VersionUpdateViewModel.CheckUpdateRetT.NoMirrorChyanCdk => LocalizationHelper.GetString("MirrorChyanSoftwareUpdateTip"), + _ => string.Empty, + }; + + if (toastMessage != string.Empty) + { + ToastNotification.ShowDirect(toastMessage); + } + + if (ret != VersionUpdateViewModel.CheckUpdateRetT.OK) + { + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; + return; + } + bool success = UpdateSource switch { "Github" => await ResourceUpdater.UpdateFromGithubAsync(), - "MirrorChyan" => await ResourceUpdater.UpdateFromMirrorChyanAsync(), + "MirrorChyan" => await ResourceUpdater.DownloadFromMirrorChyanAsync(uri), _ => await ResourceUpdater.UpdateFromGithubAsync(), }; if (success) { - if (AutoInstallUpdatePackage) - { - await Bootstrapper.RestartAfterIdleAsync(); - } - else - { - var result = MessageBoxHelper.Show( - LocalizationHelper.GetString("GameResourceUpdated"), - LocalizationHelper.GetString("Tip"), - MessageBoxButton.OKCancel, - MessageBoxImage.Question, - ok: LocalizationHelper.GetString("Ok"), - cancel: LocalizationHelper.GetString("ManualRestart")); - if (result == MessageBoxResult.OK) - { - Bootstrapper.ShutdownAndRestartWithoutArgs(); - } - } + Instances.AsstProxy.LoadResource(); + ToastNotification.ShowDirect(LocalizationHelper.GetString("GameResourceUpdated")); } IsCheckingForUpdates = false;