mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-25 10:05:49 +08:00
新增触发器与持久化
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user