using BetterGenshinImpact.Core.Config; using BetterGenshinImpact.GameTask; using BetterGenshinImpact.GameTask.Model.Enum; using BetterGenshinImpact.Service.Interface; using BetterGenshinImpact.View.Pages; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging.Messages; using System.Diagnostics; using System.IO; using System.Threading.Tasks; using BetterGenshinImpact.Service.Notification; using BetterGenshinImpact.Service.Notifier; using Wpf.Ui; using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; public partial class CommonSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } private readonly INavigationService _navigationService; private readonly NotificationService _notificationService; [ObservableProperty] private bool _isLoading; [ObservableProperty] private string _webhookStatus = string.Empty; public CommonSettingsPageViewModel(IConfigService configService, INavigationService navigationService, NotificationService notificationService) { Config = configService.Get(); _navigationService = navigationService; _notificationService = notificationService; } public void OnNavigatedTo() { } public void OnNavigatedFrom() { } [RelayCommand] public void OnRefreshMaskSettings() { WeakReferenceMessenger.Default.Send(new PropertyChangedMessage(this, "RefreshSettings", new object(), "重新计算控件位置")); } [RelayCommand] public void OnGoToHotKeyPage() { _navigationService.Navigate(typeof(HotKeyPage)); } [RelayCommand] public void OnSwitchTakenScreenshotEnabled() { if (Config.CommonConfig.ScreenshotEnabled) { if (TaskTriggerDispatcher.Instance().GetCacheCaptureMode() == DispatcherCaptureModeEnum.NormalTrigger) { TaskTriggerDispatcher.Instance().SetCacheCaptureMode(DispatcherCaptureModeEnum.CacheCaptureWithTrigger); } } } [RelayCommand] public void OnGoToFolder() { var path = Global.Absolute(@"log\screenshot\"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } Process.Start("explorer.exe", path); } [RelayCommand] public void OnGoToLogFolder() { var path = Global.Absolute(@"log"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } Process.Start("explorer.exe", path); } [RelayCommand] private async Task OnTestWebhook() { IsLoading = true; WebhookStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); WebhookStatus = res.Message; IsLoading = false; } }