using System.Collections.Generic; using FluentValidation.Results; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Music; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Notifications.Webhook { public class Webhook : WebhookBase { private readonly IWebhookProxy _proxy; public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService) : base(configFileProvider, configService) { _proxy = proxy; } public override string Link => "https://wiki.servarr.com/lidarr/settings#connections"; public override void OnGrab(GrabMessage message) { _proxy.SendWebhook(BuildOnGrabPayload(message), Settings); } public override void OnReleaseImport(AlbumDownloadMessage message) { _proxy.SendWebhook(BuildOnReleaseImportPayload(message), Settings); } public override void OnDownloadFailure(DownloadFailedMessage message) { _proxy.SendWebhook(BuildOnDownloadFailurePayload(message), Settings); } public override void OnImportFailure(AlbumDownloadMessage message) { _proxy.SendWebhook(BuildOnImportFailurePayload(message), Settings); } public override void OnRename(Artist artist, List renamedFiles) { _proxy.SendWebhook(BuildOnRenamePayload(artist, renamedFiles), Settings); } public override void OnTrackRetag(TrackRetagMessage message) { _proxy.SendWebhook(BuildOnTrackRetagPayload(message), Settings); } public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) { _proxy.SendWebhook(BuildOnAlbumDelete(deleteMessage), Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) { _proxy.SendWebhook(BuildOnArtistDelete(deleteMessage), Settings); } public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendWebhook(BuildHealthPayload(healthCheck), Settings); } public override void OnHealthRestored(HealthCheck.HealthCheck previousCheck) { _proxy.SendWebhook(BuildHealthRestoredPayload(previousCheck), Settings); } public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage) { _proxy.SendWebhook(BuildApplicationUpdatePayload(updateMessage), Settings); } public override string Name => "Webhook"; public override ValidationResult Test() { var failures = new List(); failures.AddIfNotNull(SendWebhookTest()); return new ValidationResult(failures); } private ValidationFailure SendWebhookTest() { try { _proxy.SendWebhook(BuildTestPayload(), Settings); } catch (WebhookException ex) { return new NzbDroneValidationFailure("Url", ex.Message); } return null; } } }