diff --git a/BetterGenshinImpact/Model/Gear/BaseGearTask.cs b/BetterGenshinImpact/Model/Gear/BaseGearTask.cs new file mode 100644 index 00000000..1e593f44 --- /dev/null +++ b/BetterGenshinImpact/Model/Gear/BaseGearTask.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception; +using CommunityToolkit.Mvvm.ComponentModel; +using Microsoft.Extensions.Logging; + +namespace BetterGenshinImpact.Model.Gear; + +/// +/// 为了和其他Task做区分,使用Gear(齿轮)来作为前缀命名调度器内定义的任务 +/// +public abstract class BaseGearTask : ObservableObject +{ + [JsonIgnore] + private readonly ILogger _logger = App.GetLogger(); + + /// + /// 任务名称 + /// + public string Name { get; set; } = string.Empty; + + /// + /// 任务的位置相对 User 目录下的路径 + /// + public string RelativePath { get; set; } = string.Empty; + + /// + /// 任务是否启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 父节点 + /// + public BaseGearTask? Father { get; set; } + + /// + /// 子节点 + /// + public List Children { get; set; } = []; + + /// + /// 执行任务 + /// + public async Task Execute() + { + var stopwatch = new Stopwatch(); + try + { + _logger.LogInformation("------------------------------"); + stopwatch.Start(); + await Run(); + } + catch (NormalEndException e) + { + throw; + } + catch (TaskCanceledException e) + { + _logger.LogInformation("取消执行配置组: {Msg}", e.Message); + throw; + } + catch (Exception e) + { + _logger.LogDebug(e, "执行脚本时发生异常"); + _logger.LogError("执行脚本时发生异常: {Msg}", e.Message); + } + finally + { + stopwatch.Stop(); + var elapsedTime = TimeSpan.FromMilliseconds(stopwatch.ElapsedMilliseconds); + _logger.LogInformation("→ 脚本执行结束: {Name}, 耗时: {Minutes}分{Seconds:0.000}秒", Name, + elapsedTime.Hours * 60 + elapsedTime.Minutes, elapsedTime.TotalSeconds % 60); + _logger.LogInformation("------------------------------"); + } + } + + /// + /// 执行任务 + /// + public abstract Task Run(); +} \ No newline at end of file diff --git a/BetterGenshinImpact/Model/Gear/GearTask.cs b/BetterGenshinImpact/Model/Gear/GearTask.cs deleted file mode 100644 index 9b4c7504..00000000 --- a/BetterGenshinImpact/Model/Gear/GearTask.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace BetterGenshinImpact.Model.Gear; - -/// -/// 为了和其他Task做区分,使用Gear(齿轮)来作为前缀命名调度器内定义的任务 -/// -public class GearTask -{ - -} \ No newline at end of file diff --git a/BetterGenshinImpact/Model/Gear/GearTrigger.cs b/BetterGenshinImpact/Model/Gear/GearTrigger.cs new file mode 100644 index 00000000..67987d98 --- /dev/null +++ b/BetterGenshinImpact/Model/Gear/GearTrigger.cs @@ -0,0 +1,9 @@ +namespace BetterGenshinImpact.Model.Gear; + +/// +/// 为了和其他Trigger做区分,使用Gear(齿轮)来作为前缀命名调度器内定义的触发器 +/// +public class GearTrigger +{ + +} \ No newline at end of file