From 3f1d293a8df9d382fa269e7cb0cbce798cca731d Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:15:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=99=A8=E5=92=8C=E9=87=8D=E5=90=AF=E8=AF=A2=E9=97=AE?= =?UTF-8?q?=20(#10078)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/UI/TaskQueueViewModel.cs | 141 ++++++++++++------ .../ViewModels/UI/VersionUpdateViewModel.cs | 2 + 2 files changed, 96 insertions(+), 47 deletions(-) diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index d4c95178f9..4891085d6b 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -338,47 +338,76 @@ namespace MaaWpfGui.ViewModels.UI DateTime currentTime = DateTime.Now; currentTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, currentTime.Minute, 0); - if (NeedToUpdateDatePrompt()) - { - UpdateDatePrompt(); - UpdateStageList(false); - - // 随机延迟,防止同时更新 - var delayTime = new Random().Next(0, 60 * 60 * 1000); - _ = Task.Run(async () => - { - await Task.Delay(delayTime); - await _runningState.UntilIdleAsync(60000); - await _stageManager.UpdateStageWeb(); - UpdateDatePrompt(); - UpdateStageList(false); - }); - } - - if (NeedToCheckForUpdates()) - { - if (Instances.SettingsViewModel.UpdateAutoCheck) - { - // 随机延迟,防止同时更新 - var delayTime = new Random().Next(0, 60 * 60 * 1000); - _ = Task.Run(async () => - { - await Task.Delay(delayTime); - _ = Instances.SettingsViewModel.ManualUpdate(); - }); - } - } + HandleDatePromptUpdate(); + HandleCheckForUpdates(); RefreshCustomInfrastPlanIndexByPeriod(); - if (!_runningState.GetIdle() && !Instances.SettingsViewModel.ForceScheduledStart && !Instances.SettingsViewModel.CustomConfig) + await HandleTimerLogic(currentTime); + } + + private static int CalculateRandomDelay() + { + Random random = new Random(); + int delayTime = random.Next(0, 60 * 60 * 1000); + return delayTime; + } + + private bool _isUpdatingDatePrompt; + + private void HandleDatePromptUpdate() + { + if (!NeedToUpdateDatePrompt() || _isUpdatingDatePrompt) { return; } - var timeToStart = false; - var timeToChangeConfig = false; - var configIndex = 0; + _isUpdatingDatePrompt = true; + UpdateDatePrompt(); + UpdateStageList(false); + + var delayTime = CalculateRandomDelay(); + _ = Task.Run(async () => + { + await Task.Delay(delayTime); + await _runningState.UntilIdleAsync(60000); + await _stageManager.UpdateStageWeb(); + UpdateDatePrompt(); + UpdateStageList(false); + _isUpdatingDatePrompt = false; + }); + } + + private bool _isCheckingForUpdates; + + private void HandleCheckForUpdates() + { + if (!NeedToCheckForUpdates() || _isCheckingForUpdates) + { + return; + } + + if (!Instances.SettingsViewModel.UpdateAutoCheck) + { + return; + } + + _isCheckingForUpdates = true; + var delayTime = CalculateRandomDelay(); + _ = Task.Run(async () => + { + await Task.Delay(delayTime); + await Instances.SettingsViewModel.ManualUpdate(); + _isCheckingForUpdates = false; + }); + } + + private static (bool timeToStart, bool timeToChangeConfig, int configIndex) CheckTimers(DateTime currentTime) + { + bool timeToStart = false; + bool timeToChangeConfig = false; + int configIndex = 0; + for (int i = 0; i < 8; ++i) { if (!Instances.SettingsViewModel.TimerModels.Timers[i].IsOn) @@ -417,28 +446,46 @@ namespace MaaWpfGui.ViewModels.UI } } - if (timeToChangeConfig) - { - if (Instances.SettingsViewModel.CustomConfig && - (_runningState.GetIdle() || Instances.SettingsViewModel.ForceScheduledStart)) - { - // CurrentConfiguration设置后会重启 - Instances.SettingsViewModel.CurrentConfiguration = Instances.SettingsViewModel.TimerModels.Timers[configIndex].TimerConfig; - return; - } - } - - if (!timeToStart) + return (timeToStart, timeToChangeConfig, configIndex); + } + private async Task HandleTimerLogic(DateTime currentTime) + { + if (!_runningState.GetIdle() && !Instances.SettingsViewModel.ForceScheduledStart) { return; } + var (timeToStart, timeToChangeConfig, configIndex) = CheckTimers(currentTime); + + if (timeToChangeConfig) + { + HandleConfigChange(configIndex); + return; + } + + if (timeToStart) + { + await HandleScheduledStart(configIndex); + } + } + + private void HandleConfigChange(int configIndex) + { + if (Instances.SettingsViewModel.CustomConfig && + (_runningState.GetIdle() || Instances.SettingsViewModel.ForceScheduledStart)) + { + Instances.SettingsViewModel.CurrentConfiguration = Instances.SettingsViewModel.TimerModels.Timers[configIndex].TimerConfig; + } + } + + private async Task HandleScheduledStart(int configIndex) + { if (Instances.SettingsViewModel.ForceScheduledStart) { - // 什么时候会遇到这种情况? if (Instances.SettingsViewModel.CustomConfig && Instances.SettingsViewModel.CurrentConfiguration != Instances.SettingsViewModel.TimerModels.Timers[configIndex].TimerConfig) { + _logger.Warning($"Scheduled start skipped: Custom configuration is enabled, but the current configuration does not match the scheduled timer configuration (Timer Index: {configIndex}). Current Configuration: {Instances.SettingsViewModel.CurrentConfiguration}, Scheduled Configuration: {Instances.SettingsViewModel.TimerModels.Timers[configIndex].TimerConfig}"); return; } diff --git a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs index ee6f42c659..e4d975ba3d 100644 --- a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs @@ -700,6 +700,8 @@ namespace MaaWpfGui.ViewModels.UI return; } + await _runningState.UntilIdleAsync(10000); + var result = MessageBoxHelper.Show( LocalizationHelper.GetString("NewVersionDownloadCompletedDesc"), LocalizationHelper.GetString("NewVersionDownloadCompletedTitle"),