using System.Threading.Tasks; using BetterGenshinImpact.Core.Config; using BetterGenshinImpact.Service.Interface; using BetterGenshinImpact.Service.Notification; using BetterGenshinImpact.Service.Notifier; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Wpf.Ui.Violeta.Controls; namespace BetterGenshinImpact.ViewModel.Pages; public partial class NotificationSettingsPageViewModel : ObservableObject, IViewModel { private readonly NotificationService _notificationService; [ObservableProperty] private string _barkStatus = string.Empty; /// /// 钉钉通知测试状态 /// [ObservableProperty] private string _dingDingStatus = string.Empty; [ObservableProperty] private string _emailStatus = string.Empty; [ObservableProperty] private string _feishuStatus = string.Empty; [ObservableProperty] private string _oneBotStatus = string.Empty; [ObservableProperty] private bool _isLoading; [ObservableProperty] private string _telegramStatus = string.Empty; [ObservableProperty] private string _webhookStatus = string.Empty; [ObservableProperty] private string _webSocketStatus = string.Empty; [ObservableProperty] private string _windowsUwpStatus = string.Empty; [ObservableProperty] private string _workWeixinStatus = string.Empty; [ObservableProperty] private string _xxtuiStatus = string.Empty; [ObservableProperty] private string _discordStatus = string.Empty; [ObservableProperty] private string[] _discordImageEncoderNames = [ nameof(DiscordWebhookNotifier.ImageEncoderEnum.Png), nameof(DiscordWebhookNotifier.ImageEncoderEnum.Jpeg), nameof(DiscordWebhookNotifier.ImageEncoderEnum.WebP) ]; [ObservableProperty] private string _serverChanStatus = string.Empty; public NotificationSettingsPageViewModel(IConfigService configService, NotificationService notificationService) { Config = configService.Get(); _notificationService = notificationService; } public AllConfig Config { get; set; } [RelayCommand] private async Task OnTestWebhook() { IsLoading = true; WebhookStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); WebhookStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestWindowsUwpNotification() { IsLoading = true; WindowsUwpStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); WindowsUwpStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestFeishuNotification() { IsLoading = true; FeishuStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); FeishuStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestOneBotNotification() { IsLoading = true; OneBotStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); OneBotStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestWorkWeixinNotification() { IsLoading = true; WorkWeixinStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); WorkWeixinStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestWebSocketNotification() { IsLoading = true; WebSocketStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); WebSocketStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestEmailNotification() { IsLoading = true; EmailStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); EmailStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestBarkNotification() { IsLoading = true; BarkStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); BarkStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestTelegramNotification() { IsLoading = true; TelegramStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); TelegramStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestXxtuiNotification() { IsLoading = true; XxtuiStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); XxtuiStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestDingDingWebhookNotification() { IsLoading = true; DingDingStatus = string.Empty; // 使用专门的状态变量,与xxtui保持一致 var res = await _notificationService.TestNotifierAsync(); DingDingStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestDiscordWebhookNotification() { IsLoading = true; DiscordStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); DiscordStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } [RelayCommand] private async Task OnTestServerChanNotification() { IsLoading = true; ServerChanStatus = string.Empty; var res = await _notificationService.TestNotifierAsync(); ServerChanStatus = res.Message; // 添加Toast提示 if (res.IsSuccess) Toast.Success(res.Message); else Toast.Error(res.Message); IsLoading = false; } }