diff --git a/BetterGenshinImpact/App.xaml.cs b/BetterGenshinImpact/App.xaml.cs index 699f0ff3..596078f0 100644 --- a/BetterGenshinImpact/App.xaml.cs +++ b/BetterGenshinImpact/App.xaml.cs @@ -184,6 +184,11 @@ public partial class App : Application { return _host.Services.GetService(typeof(T)) as T; } + + public static T GetRequiredService() where T : class + { + return _host.Services.GetRequiredService(); + } /// /// Gets registered service. diff --git a/BetterGenshinImpact/Model/Gear/Tasks/GearTaskRefence.cs b/BetterGenshinImpact/Model/Gear/Tasks/GearTaskRefence.cs index 3f346032..b2ff7384 100644 --- a/BetterGenshinImpact/Model/Gear/Tasks/GearTaskRefence.cs +++ b/BetterGenshinImpact/Model/Gear/Tasks/GearTaskRefence.cs @@ -1,8 +1,11 @@ +using System; + namespace BetterGenshinImpact.Model.Gear.Tasks; /// /// 针对GearTask的引用类 /// +[Obsolete] public class GearTaskRefence { /// diff --git a/BetterGenshinImpact/Model/Gear/Triggers/GearBaseTrigger.cs b/BetterGenshinImpact/Model/Gear/Triggers/GearBaseTrigger.cs index 896fb47a..f055606c 100644 --- a/BetterGenshinImpact/Model/Gear/Triggers/GearBaseTrigger.cs +++ b/BetterGenshinImpact/Model/Gear/Triggers/GearBaseTrigger.cs @@ -1,6 +1,9 @@ +using System; using System.Collections.ObjectModel; +using System.Diagnostics; using System.Threading.Tasks; using BetterGenshinImpact.Model.Gear.Tasks; +using BetterGenshinImpact.Service; namespace BetterGenshinImpact.Model.Gear.Triggers; @@ -11,10 +14,23 @@ public abstract class GearBaseTrigger /// public string Name { get; set; } = string.Empty; - public ObservableCollection GearTaskRefenceList { get; set; } = []; - + /// + /// 是否启用 + /// + public bool IsEnabled { get; set; } = true; + + /// + /// 任务定义名称 + /// + public string TaskDefinitionName { get; set; } = string.Empty; + /// /// 执行任务 /// - public abstract Task Trigger(); + public async Task Trigger() + { + var gearTaskExecutor = App.GetRequiredService(); + await gearTaskExecutor.ExecuteTaskDefinitionAsync(TaskDefinitionName); + } + } \ No newline at end of file diff --git a/BetterGenshinImpact/Model/Gear/Triggers/HotkeyGearTrigger.cs b/BetterGenshinImpact/Model/Gear/Triggers/HotkeyGearTrigger.cs index 473f2b4d..1a7c99ae 100644 --- a/BetterGenshinImpact/Model/Gear/Triggers/HotkeyGearTrigger.cs +++ b/BetterGenshinImpact/Model/Gear/Triggers/HotkeyGearTrigger.cs @@ -17,60 +17,16 @@ public class HotkeyGearTrigger : GearBaseTrigger /// 热键配置 /// public HotKey? Hotkey { get; set; } - - /// - /// 是否启用 - /// - public bool IsEnabled { get; set; } = true; - - /// - /// 冷却时间(毫秒),防止重复触发 - /// - public int CooldownMs { get; set; } = 1000; + private DateTime _lastExecutionTime = DateTime.MinValue; - private bool _isExecuting = false; - - public override async Task Trigger() - { - // 热键触发器通常不直接调用Run方法 - // 而是通过热键事件触发ExecuteTasks方法 - await ExecuteTasks(); - } + /// /// 热键触发时执行任务 /// public async Task OnHotkeyPressed() { - if (!IsEnabled || _isExecuting) - return; - - // 检查冷却时间 - var now = DateTime.Now; - if ((now - _lastExecutionTime).TotalMilliseconds < CooldownMs) - return; - - _lastExecutionTime = now; - _isExecuting = true; - - try - { - await ExecuteTasks(); - } - finally - { - _isExecuting = false; - } - } - - private async Task ExecuteTasks() - { - List list = GearTaskRefenceList.Select(gearTask => gearTask.ToGearTask()).ToList(); - foreach (var gearTask in list) - { - await gearTask.Run(CancellationToken.None); - } } /// diff --git a/BetterGenshinImpact/Model/Gear/Triggers/QuartzCronGearTrigger.cs b/BetterGenshinImpact/Model/Gear/Triggers/QuartzCronGearTrigger.cs index a8dbe7b4..619084d7 100644 --- a/BetterGenshinImpact/Model/Gear/Triggers/QuartzCronGearTrigger.cs +++ b/BetterGenshinImpact/Model/Gear/Triggers/QuartzCronGearTrigger.cs @@ -1,4 +1,7 @@ +using System; +using System.Diagnostics; using System.Threading.Tasks; +using BetterGenshinImpact.Service; using Microsoft.Extensions.Logging; namespace BetterGenshinImpact.Model.Gear.Triggers; @@ -19,9 +22,4 @@ public class QuartzCronGearTrigger : GearBaseTrigger /// 使用 Cron 表达式(如果设置,将覆盖 IntervalMs 设置) /// public string? CronExpression { get; set; } - - public override async Task Trigger() - { - - } } \ No newline at end of file diff --git a/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs b/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs index c8898b13..f846560a 100644 --- a/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs +++ b/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs @@ -23,7 +23,7 @@ public class QuartzGearTaskJob : IJob { try { - var jobDataMap = context.JobDetail.JobDataMap; + var jobDataMap = context.MergedJobDataMap; var taskListJson = jobDataMap.GetString("GearTaskReferenceList"); var triggerName = jobDataMap.GetString("TriggerName") ?? "Unknown"; var triggerId = jobDataMap.GetString("TriggerId") ?? Guid.NewGuid().ToString(); diff --git a/BetterGenshinImpact/Model/Gear/Triggers/SequentialGearTrigger.cs b/BetterGenshinImpact/Model/Gear/Triggers/SequentialGearTrigger.cs index 82347f24..553dee01 100644 --- a/BetterGenshinImpact/Model/Gear/Triggers/SequentialGearTrigger.cs +++ b/BetterGenshinImpact/Model/Gear/Triggers/SequentialGearTrigger.cs @@ -11,12 +11,4 @@ namespace BetterGenshinImpact.Model.Gear.Triggers; /// public class SequentialGearTrigger : GearBaseTrigger { - public override async Task Trigger() - { - List list = GearTaskRefenceList.Select(gearTask => gearTask.ToGearTask()).ToList(); - foreach (var gearTask in list) - { - await gearTask.Run(CancellationToken.None); - } - } } \ No newline at end of file diff --git a/BetterGenshinImpact/ViewModel/Pages/Component/GearTaskDefinitionViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/Component/GearTaskDefinitionViewModel.cs index 171ea737..7781af47 100644 --- a/BetterGenshinImpact/ViewModel/Pages/Component/GearTaskDefinitionViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/Component/GearTaskDefinitionViewModel.cs @@ -43,26 +43,4 @@ public partial class GearTaskDefinitionViewModel : ObservableObject Description = description; RootTask = new GearTaskViewModel(name, true); } - - /// - /// 获取任务总数(包括所有子任务) - /// - /// - public int GetTotalTaskCount() - { - if (RootTask == null) return 0; - return 1 + Enumerable.Count(RootTask.GetAllChildren()); - } - - /// - /// 获取启用的任务数量 - /// - /// - public int GetEnabledTaskCount() - { - if (RootTask == null) return 0; - var count = RootTask.IsEnabled ? 1 : 0; - count += Enumerable.Count(RootTask.GetAllChildren(), t => t.IsEnabled); - return count; - } } \ No newline at end of file diff --git a/BetterGenshinImpact/ViewModel/Pages/Component/GearTriggerViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/Component/GearTriggerViewModel.cs index c409dd98..121e2aa4 100644 --- a/BetterGenshinImpact/ViewModel/Pages/Component/GearTriggerViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/Component/GearTriggerViewModel.cs @@ -40,30 +40,15 @@ public partial class GearTriggerViewModel : ObservableObject /// 任务引用列表 /// [ObservableProperty] - private ObservableCollection _taskReferences = new(); + private string _taskDefinitionName = string.Empty; // 顺序触发器属性(无额外属性) - - // 定时触发器属性 - [ObservableProperty] - private int _intervalMs = 5000; - - [ObservableProperty] - private bool _isRepeating = true; - - [ObservableProperty] - private int _delayMs = 0; - - [ObservableProperty] - private int _maxExecutions = 0; + // 热键触发器属性 [ObservableProperty] private HotKey? _hotkey; - [ObservableProperty] - private int _cooldownMs = 1000; - public GearTriggerViewModel() { } @@ -105,23 +90,23 @@ public partial class GearTriggerViewModel : ObservableObject /// public string HotkeyDisplayText => Hotkey?.ToString() ?? "未设置"; - /// - /// 获取定时器配置显示文本 - /// - public string TimerDisplayText - { - get - { - if (TriggerType != TriggerType.Timed) return ""; - - var text = $"间隔: {IntervalMs}ms"; - if (DelayMs > 0) text += $", 延迟: {DelayMs}ms"; - if (MaxExecutions > 0) text += $", 最大次数: {MaxExecutions}"; - if (!IsRepeating) text += ", 单次执行"; - - return text; - } - } + // /// + // /// 获取定时器配置显示文本 + // /// + // public string TimerDisplayText + // { + // get + // { + // if (TriggerType != TriggerType.Timed) return ""; + // + // var text = $"间隔: {IntervalMs}ms"; + // if (DelayMs > 0) text += $", 延迟: {DelayMs}ms"; + // if (MaxExecutions > 0) text += $", 最大次数: {MaxExecutions}"; + // if (!IsRepeating) text += ", 单次执行"; + // + // return text; + // } + // } /// /// 转换为对应的触发器实例 @@ -141,14 +126,13 @@ public partial class GearTriggerViewModel : ObservableObject TriggerType.Hotkey => new HotkeyGearTrigger { Hotkey = Hotkey, - CooldownMs = CooldownMs, IsEnabled = IsEnabled }, _ => new SequentialGearTrigger() }; trigger.Name = Name; - trigger.GearTaskRefenceList = new ObservableCollection(TaskReferences); + trigger.TaskDefinitionName = _taskDefinitionName; return trigger; }