新增触发器与持久化

This commit is contained in:
辉鸭蛋
2025-10-02 22:49:37 +08:00
parent 95e20619d2
commit 95a1cc3dfa
8 changed files with 808 additions and 13 deletions

View File

@@ -5,11 +5,19 @@ using BetterGenshinImpact.ViewModel.Pages.Component;
using BetterGenshinImpact.Model.Gear.Triggers;
using BetterGenshinImpact.Model;
using System.Linq;
using BetterGenshinImpact.View.Windows.GearTask;
using BetterGenshinImpact.Service.GearTask;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace BetterGenshinImpact.ViewModel.Pages;
public partial class GearTriggerPageViewModel : ViewModel
{
private readonly ILogger<GearTriggerPageViewModel> _logger;
private readonly GearTriggerStorageService _storageService;
[ObservableProperty]
private ObservableCollection<GearTriggerViewModel> _timedTriggers = new();
@@ -22,29 +30,103 @@ public partial class GearTriggerPageViewModel : ViewModel
[ObservableProperty]
private GearTaskDefinitionViewModel? _selectedTaskDefinition;
public GearTriggerPageViewModel()
public GearTriggerPageViewModel(ILogger<GearTriggerPageViewModel> logger, GearTriggerStorageService storageService)
{
_logger = logger;
_storageService = storageService;
}
public override void OnNavigatedTo()
{
_ = LoadTriggersAsync();
}
/// <summary>
/// 异步加载触发器数据
/// </summary>
private async Task LoadTriggersAsync()
{
try
{
var (timedTriggers, hotkeyTriggers) = await _storageService.LoadTriggersAsync();
TimedTriggers.Clear();
HotkeyTriggers.Clear();
foreach (var trigger in timedTriggers)
{
TimedTriggers.Add(trigger);
}
foreach (var trigger in hotkeyTriggers)
{
HotkeyTriggers.Add(trigger);
}
_logger.LogInformation("已加载 {TimedCount} 个定时触发器和 {HotkeyCount} 个快捷键触发器",
TimedTriggers.Count, HotkeyTriggers.Count);
}
catch (Exception ex)
{
_logger.LogError(ex, "加载触发器数据时发生错误");
}
}
/// <summary>
/// 保存触发器数据
/// </summary>
private async Task SaveTriggersAsync()
{
try
{
await _storageService.SaveTriggersAsync(TimedTriggers, HotkeyTriggers);
_logger.LogInformation("触发器数据已保存");
}
catch (Exception ex)
{
_logger.LogError(ex, "保存触发器数据时发生错误");
}
}
[RelayCommand]
private void AddTimedTrigger()
{
var newTrigger = new GearTriggerViewModel($"定时触发器 {TimedTriggers.Count + 1}", TriggerType.Timed);
TimedTriggers.Add(newTrigger);
SelectedTrigger = newTrigger;
var dialog = AddTriggerDialog.ShowAddTriggerDialog(TriggerType.Timed);
if (dialog != null)
{
var newTrigger = new GearTriggerViewModel(dialog.TriggerName, TriggerType.Timed)
{
CronExpression = dialog.CronExpression,
TaskDefinitionName = dialog.SelectedTaskDefinitionName,
IsEnabled = true
};
TimedTriggers.Add(newTrigger);
SelectedTrigger = newTrigger;
// 保存数据
_ = SaveTriggersAsync();
}
}
[RelayCommand]
private void AddHotkeyTrigger()
{
var newTrigger = new GearTriggerViewModel($"快捷键触发器 {HotkeyTriggers.Count + 1}", TriggerType.Hotkey);
HotkeyTriggers.Add(newTrigger);
SelectedTrigger = newTrigger;
var dialog = AddTriggerDialog.ShowAddTriggerDialog(TriggerType.Hotkey);
if (dialog != null)
{
var newTrigger = new GearTriggerViewModel(dialog.TriggerName, TriggerType.Hotkey)
{
Hotkey = dialog.SelectedHotkey,
TaskDefinitionName = dialog.SelectedTaskDefinitionName,
IsEnabled = true
};
HotkeyTriggers.Add(newTrigger);
SelectedTrigger = newTrigger;
// 保存数据
_ = SaveTriggersAsync();
}
}
[RelayCommand]
@@ -63,5 +145,8 @@ public partial class GearTriggerPageViewModel : ViewModel
}
SelectedTrigger = null;
// 保存数据
_ = SaveTriggersAsync();
}
}