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}" />