From 4a9e8f5d1e86fc4c41b39ef504a63658dd0aa943 Mon Sep 17 00:00:00 2001 From: Status102 <102887808+status102@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:13:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor(wpf):=20=E9=95=BF=E8=8D=89=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=BF=90=E8=A1=8C=E7=8A=B6=E6=80=81=20(#13928)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * rft(wpf): 长草任务运行状态 移除战斗任务及基建任务独立运行状态, link to #12315 * perf: remove debug log * perf: remove debug log --- src/MaaWpfGui/Main/AsstProxy.cs | 18 ++--- .../Models/TaskSettingVisibilityInfo.cs | 78 ++++++++++++++++++- .../ViewModels/UI/CopilotViewModel.cs | 13 ++-- .../ViewModels/UI/TaskQueueViewModel.cs | 19 ----- .../InfrastSettingsUserControlModel.cs | 3 +- .../TaskQueue/FightSettingsUserControl.xaml | 65 +++++++++------- .../TaskQueue/InfrastSettingsUserControl.xaml | 5 +- 7 files changed, 131 insertions(+), 70 deletions(-) diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 152d7af77a..8c1c17a8bc 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -318,8 +318,7 @@ namespace MaaWpfGui.Main { if (args.Action == NotifyCollectionChangedAction.Reset) { - Instances.TaskQueueViewModel.FightTaskRunning = false; - Instances.TaskQueueViewModel.InfrastTaskRunning = false; + TaskSettingVisibilityInfo.Instance.CurrentTask = string.Empty; } }; } @@ -1894,7 +1893,7 @@ namespace MaaWpfGui.Main AchievementTrackerHelper.Instance.SetProgress(AchievementIds.OverLimitAgent, FightTask.FightReport.TimesFinished); } - if (Instances.TaskQueueViewModel.FightTaskRunning && FightTask.Instance.HasTimesLimited != false && FightTask.FightReport.TimesFinished + FightTask.FightReport.Series > FightTask.Instance.MaxTimes) + if (FightTask.Instance.HasTimesLimited != false && FightTask.FightReport.TimesFinished + FightTask.FightReport.Series > FightTask.Instance.MaxTimes) { Instances.TaskQueueViewModel.AddLog(string.Format(LocalizationHelper.GetString("FightTimesUnused"), FightTask.FightReport.TimesFinished, FightTask.FightReport.Series, FightTask.FightReport.TimesFinished + FightTask.FightReport.Series, FightTask.Instance.MaxTimes), UiLogColor.Error); } @@ -2337,22 +2336,15 @@ namespace MaaWpfGui.Main if (_tasksStatus.TryGetValue(id, out var value)) { value.Status = status; - if (value.Type == TaskType.Fight) + if (value.Status == TaskStatus.InProgress) { - Instances.TaskQueueViewModel.FightTaskRunning = status == TaskStatus.InProgress; - } - else if (value.Type == TaskType.Infrast) - { - Instances.TaskQueueViewModel.InfrastTaskRunning = status == TaskStatus.InProgress; + TaskSettingVisibilityInfo.Instance.CurrentTask = value.Type.ToString(); } return true; } - else - { - Log.Error("Task ID {TaskId} not found in _tasksStatus", id); - } + _logger.Error("Task ID {TaskId} not found in _tasksStatus", id); return false; } diff --git a/src/MaaWpfGui/Models/TaskSettingVisibilityInfo.cs b/src/MaaWpfGui/Models/TaskSettingVisibilityInfo.cs index 07dd39e29e..660f420748 100644 --- a/src/MaaWpfGui/Models/TaskSettingVisibilityInfo.cs +++ b/src/MaaWpfGui/Models/TaskSettingVisibilityInfo.cs @@ -29,7 +29,7 @@ namespace MaaWpfGui.Models private bool _startUp; private bool _recruit; private bool _infrast; - private bool _combat; + private bool _fight; private bool _mall; private bool _award; private bool _roguelike; @@ -43,7 +43,7 @@ namespace MaaWpfGui.Models public bool Base { get => _infrast; set => SetAndNotify(ref _infrast, value); } - public bool Combat { get => _combat; set => SetAndNotify(ref _combat, value); } + public bool Combat { get => _fight; set => SetAndNotify(ref _fight, value); } public bool Mall { get => _mall; set => SetAndNotify(ref _mall, value); } @@ -64,6 +64,7 @@ namespace MaaWpfGui.Models public void Set(string taskName, bool enable) { + bool ret = false; if (Guide && enable) { _currentEnableSetting = taskName; @@ -74,33 +75,42 @@ namespace MaaWpfGui.Models { case "WakeUp": WakeUp = enable; + SetRunning("StartUp"); break; case "Recruiting": Recruiting = enable; + SetRunning("Recruit"); break; case "Base": Base = enable; + SetRunning("Infrast"); break; case "Combat": Combat = enable; + SetRunning("Fight"); break; case "Mall": Mall = enable; + SetRunning("Mall"); break; case "Mission": Mission = enable; + SetRunning("Award"); break; case "AutoRoguelike": AutoRoguelike = enable; + SetRunning("Roguelike"); break; case "Reclamation": Reclamation = enable; + SetRunning("Reclamation"); break; case "AfterAction": AfterAction = enable; break; case "Custom": Custom = enable; + SetRunning("Custom"); break; } @@ -113,6 +123,70 @@ namespace MaaWpfGui.Models { AdvancedSettingsVisibility = true; } + + if (enable && !ret) // 如果切换到的不是当前运行任务 + { + IsCurrentTaskRunning = false; + } + + void SetRunning(in string task) + { + if (enable && CurrentTask.StartsWith(task)) + { + IsCurrentTaskRunning = true; + ret = true; + } + } + } + + private string _currentTask = string.Empty; + + // 重构前的临时过渡 + public string CurrentTask + { + get => _currentTask; + set + { + _currentTask = value; + if (string.IsNullOrEmpty(value)) + { + IsCurrentTaskRunning = false; + return; + } + + bool ret = false; + CheckTask("StartUp", _startUp); + CheckTask("Recruit", _recruit); + CheckTask("Infrast", _infrast); + CheckTask("Fight", _fight); + CheckTask("Mall", _mall); + CheckTask("Award", _award); + CheckTask("Roguelike", _roguelike); + CheckTask("Reclamation", _reclamation); + CheckTask("Custom", _custom); + if (!ret) // 如果没有匹配上任何任务 + { + IsCurrentTaskRunning = false; + } + + void CheckTask(string taskName, bool taskIsShown) + { + if (taskIsShown && value.StartsWith(taskName)) + { + IsCurrentTaskRunning = true; + ret = true; + } + } + } + } + + private bool _isCurrentTaskRunning; + + /// Gets or sets a value indicating whether 当前选中的任务是否正在运行 + public bool IsCurrentTaskRunning + { + get => _isCurrentTaskRunning; + set => SetAndNotify(ref _isCurrentTaskRunning, value); } private bool _enableAdvancedSettings; diff --git a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs index 0dde92469e..5372ac26c8 100644 --- a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs @@ -1423,13 +1423,6 @@ namespace MaaWpfGui.ViewModels.UI private async Task VerifyCopilotListTask() { var copilotItemViewModels = CopilotItemViewModels.Where(i => i.IsChecked).ToArray(); - - if (copilotItemViewModels.Any(i => string.IsNullOrEmpty(i.Name.Trim()))) - { - AddLog(LocalizationHelper.GetString("CopilotTasksWithEmptyName"), UiLogColor.Error, showTime: false); - return false; - } - switch (copilotItemViewModels.Length) { case 0: @@ -1440,6 +1433,12 @@ namespace MaaWpfGui.ViewModels.UI return false; } + if (copilotItemViewModels.Any(i => string.IsNullOrEmpty(i.Name.Trim()))) + { + AddLog(LocalizationHelper.GetString("CopilotTasksWithEmptyName"), UiLogColor.Error, showTime: false); + return false; + } + var stageNames = copilotItemViewModels.Select(i => i.FilePath).ToHashSet().Select(async path => { if (!File.Exists(path)) diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index f7ac80531a..6cc9736da9 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -1689,25 +1689,6 @@ namespace MaaWpfGui.ViewModels.UI private set => SetAndNotify(ref _waiting, value); } - private bool _fightTaskRunning; - - /// - /// Gets or sets a value indicating whether the battle task is running. - /// - public bool FightTaskRunning - { - get => _fightTaskRunning; - set => SetAndNotify(ref _fightTaskRunning, value); - } - - private bool _infrastTaskRunning; - - public bool InfrastTaskRunning - { - get => _infrastTaskRunning; - set => SetAndNotify(ref _infrastTaskRunning, value); - } - /* private bool _shutdown = false; diff --git a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/InfrastSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/InfrastSettingsUserControlModel.cs index 2d2815bf34..4747c614ef 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/InfrastSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/InfrastSettingsUserControlModel.cs @@ -22,6 +22,7 @@ using JetBrains.Annotations; using MaaWpfGui.Constants; using MaaWpfGui.Constants.Enums; using MaaWpfGui.Helper; +using MaaWpfGui.Main; using MaaWpfGui.Models; using MaaWpfGui.Models.AsstTasks; using MaaWpfGui.Services; @@ -586,7 +587,7 @@ public class InfrastSettingsUserControlModel : TaskViewModel public void RefreshCustomInfrastPlanIndexByPeriod() { - if (InfrastMode != Mode.Custom || !_customInfrastPlanHasPeriod || Instances.TaskQueueViewModel.InfrastTaskRunning) + if (InfrastMode != Mode.Custom || !_customInfrastPlanHasPeriod || Instances.AsstProxy.TasksStatus.FirstOrDefault(i => i.Value.Type == AsstProxy.TaskType.Infrast).Value.Status == TaskStatus.InProgress) { return; } diff --git a/src/MaaWpfGui/Views/UserControl/TaskQueue/FightSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/TaskQueue/FightSettingsUserControl.xaml index 79ef383096..bc97d07481 100644 --- a/src/MaaWpfGui/Views/UserControl/TaskQueue/FightSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/TaskQueue/FightSettingsUserControl.xaml @@ -180,9 +180,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Key" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding SeriesList}" SelectedValue="{Binding Series}" SelectedValuePath="Value" /> @@ -267,9 +268,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Display" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding StageList}" SelectedValue="{Binding Stage1}" SelectedValuePath="Value" /> @@ -281,9 +283,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Display" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding StageList}" SelectedValue="{Binding Stage2}" SelectedValuePath="Value" /> @@ -291,9 +294,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Display" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding StageList}" SelectedValue="{Binding Stage3}" SelectedValuePath="Value" /> @@ -301,9 +305,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Display" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding StageList}" SelectedValue="{Binding Stage4}" SelectedValuePath="Value" /> @@ -312,10 +317,11 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Display" IsEnabled="{c:Binding UseRemainingSanityStage}" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding RemainingSanityStageList}" SelectedValue="{Binding RemainingSanityStage}" SelectedValuePath="Value" @@ -329,9 +335,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" hc:InfoElement.Placeholder="{DynamicResource DefaultStage}" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" Text="{Binding Stage1, UpdateSourceTrigger=PropertyChanged}" ToolTip="{DynamicResource CustomStageCodeTip}" /> @@ -370,10 +380,11 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" hc:InfoElement.Placeholder="{DynamicResource NotSelected}" IsEnabled="{c:Binding UseRemainingSanityStage}" - IsHitTestVisible="{c:Binding !FightTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" Text="{Binding RemainingSanityStage, UpdateSourceTrigger=PropertyChanged}" Visibility="{c:Binding UseRemainingSanityStage}" /> @@ -404,9 +415,10 @@ Height="30" Margin="6" VerticalContentAlignment="Center" + d:IsHitTestVisible="True" DisplayMemberPath="Display" - IsHitTestVisible="{c:Binding !InfrastTaskRunning, - Source={x:Static helper:Instances.TaskQueueViewModel}}" + IsHitTestVisible="{c:Binding !IsCurrentTaskRunning, + Source={x:Static setting:TaskQueueViewModel.TaskSettingVisibilities}}" ItemsSource="{Binding CustomInfrastPlanList, Source={x:Static ui:InfrastSettingsUserControlModel.Instance}}" SelectedValue="{Binding CustomInfrastPlanIndex, Source={x:Static ui:InfrastSettingsUserControlModel.Instance}}" SelectedValuePath="Value" /> @@ -422,9 +434,10 @@ IsChecked="{Binding UseCustomAnnihilation}" />