using HanaToolbox.Config; using HanaToolbox.Logging; using HanaToolbox.Services.Interfaces; namespace HanaToolbox.Services; /// /// Sends notifications to a ntfy server. /// URL and token are read from (set during onboarding). /// Failures are silently swallowed — notifications must never crash the main flow. /// public sealed class NtfyNotificationService(NtfyConfig config, AppLogger logger) : INotificationService { private static readonly HttpClient Http = new(); public async Task SendAsync(string title, string message, CancellationToken ct = default) { if (string.IsNullOrWhiteSpace(config.Url) || string.IsNullOrWhiteSpace(config.Token)) { logger.Info("Ntfy not configured — skipping notification."); return; } try { using var request = new HttpRequestMessage(HttpMethod.Post, config.Url); request.Headers.Add("Authorization", $"Bearer {config.Token}"); request.Headers.Add("Title", title); request.Content = new StringContent(message); await Http.SendAsync(request, ct); logger.Info($"Notification sent: [{title}] {message}"); } catch (Exception ex) { logger.Warning($"Failed to send ntfy notification: {ex.Message}"); } } }