diff --git a/frontend/src/Settings/Notifications/Notifications/Notification.js b/frontend/src/Settings/Notifications/Notifications/Notification.js index 6e9b01f57..21f0e5ca8 100644 --- a/frontend/src/Settings/Notifications/Notifications/Notification.js +++ b/frontend/src/Settings/Notifications/Notifications/Notification.js @@ -60,8 +60,9 @@ class Notification extends Component { onReleaseImport, onUpgrade, onRename, - onAlbumDelete, + onArtistAdd, onArtistDelete, + onAlbumDelete, onHealthIssue, onHealthRestored, onDownloadFailure, @@ -72,8 +73,9 @@ class Notification extends Component { supportsOnReleaseImport, supportsOnUpgrade, supportsOnRename, - supportsOnAlbumDelete, + supportsOnArtistAdd, supportsOnArtistDelete, + supportsOnAlbumDelete, supportsOnHealthIssue, supportsOnHealthRestored, supportsOnDownloadFailure, @@ -95,59 +97,75 @@ class Notification extends Component { { - supportsOnGrab && onGrab && + supportsOnGrab && onGrab ? + : + null } { - supportsOnReleaseImport && onReleaseImport && + supportsOnReleaseImport && onReleaseImport ? + : + null } { - supportsOnUpgrade && onReleaseImport && onUpgrade && + supportsOnUpgrade && onReleaseImport && onUpgrade ? + : + null } { - supportsOnRename && onRename && + supportsOnRename && onRename ? + : + null } { - supportsOnTrackRetag && onTrackRetag && + supportsOnTrackRetag && onTrackRetag ? + : + null } { - supportsOnAlbumDelete && onAlbumDelete && + supportsOnArtistAdd && onArtistAdd ? + {translate('OnArtistAdd')} + : + null } { - supportsOnArtistDelete && onArtistDelete && + supportsOnArtistDelete && onArtistDelete ? + : + null + } + + { + supportsOnAlbumDelete && onAlbumDelete ? + : + null } { - supportsOnHealthIssue && onHealthIssue && + supportsOnHealthIssue && onHealthIssue ? + : + null } { @@ -159,35 +177,38 @@ class Notification extends Component { } { - supportsOnDownloadFailure && onDownloadFailure && + supportsOnDownloadFailure && onDownloadFailure ? + : + null } { - supportsOnImportFailure && onImportFailure && + supportsOnImportFailure && onImportFailure ? + : + null } { - supportsOnApplicationUpdate && onApplicationUpdate && + supportsOnApplicationUpdate && onApplicationUpdate ? + : + null } { - !onGrab && !onReleaseImport && !onRename && !onTrackRetag && !onAlbumDelete && !onArtistDelete && - !onHealthIssue && !onHealthRestored && !onDownloadFailure && !onImportFailure && !onApplicationUpdate && - + !onGrab && !onReleaseImport && !onRename && !onTrackRetag && !onArtistAdd && !onArtistDelete && !onAlbumDelete && !onHealthIssue && !onHealthRestored && !onDownloadFailure && !onImportFailure && !onApplicationUpdate ? + : + null } @@ -148,18 +150,29 @@ function NotificationEventItems(props) { +
+ +
+
i.SupportsOnReleaseImport) .Ignore(i => i.SupportsOnUpgrade) .Ignore(i => i.SupportsOnRename) - .Ignore(i => i.SupportsOnAlbumDelete) + .Ignore(i => i.SupportsOnArtistAdd) .Ignore(i => i.SupportsOnArtistDelete) + .Ignore(i => i.SupportsOnAlbumDelete) .Ignore(i => i.SupportsOnHealthIssue) .Ignore(i => i.SupportsOnHealthRestored) .Ignore(i => i.SupportsOnDownloadFailure) diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 74babb223..8b2eecae4 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -532,7 +532,7 @@ "Importing": "Importing", "Inactive": "Inactive", "IncludeCustomFormatWhenRenamingHelpText": "'Include in {Custom Formats} renaming format'", - "IncludeHealthWarningsHelpText": "Include Health Warnings", + "IncludeHealthWarnings": "Include Health Warnings", "IncludeUnknownArtistItemsHelpText": "Show items without a artist in the queue, this could include removed artists, movies or anything else in {appName}'s category", "IncludeUnmonitored": "Include Unmonitored", "Indexer": "Indexer", @@ -722,29 +722,18 @@ "NotificationTriggers": "Notification Triggers", "Ok": "Ok", "OnAlbumDelete": "On Album Delete", - "OnAlbumDeleteHelpText": "On Album Delete", "OnApplicationUpdate": "On Application Update", - "OnApplicationUpdateHelpText": "On Application Update", + "OnArtistAdd": "On Artist Add", "OnArtistDelete": "On Artist Delete", - "OnArtistDeleteHelpText": "On Artist Delete", "OnDownloadFailure": "On Download Failure", - "OnDownloadFailureHelpText": "On Download Failure", "OnGrab": "On Grab", - "OnGrabHelpText": "On Grab", "OnHealthIssue": "On Health Issue", - "OnHealthIssueHelpText": "On Health Issue", "OnHealthRestored": "On Health Restored", - "OnHealthRestoredHelpText": "On Health Restored", "OnImportFailure": "On Import Failure", - "OnImportFailureHelpText": "On Import Failure", "OnReleaseImport": "On Release Import", - "OnReleaseImportHelpText": "On Release Import", "OnRename": "On Rename", - "OnRenameHelpText": "On Rename", "OnTrackRetag": "On Track Retag", - "OnTrackRetagHelpText": "On Track Retag", "OnUpgrade": "On Upgrade", - "OnUpgradeHelpText": "On Upgrade", "OneAlbum": "1 album", "OnlyTorrent": "Only Torrent", "OnlyUsenet": "Only Usenet", diff --git a/src/NzbDrone.Core/Music/Events/ArtistAddCompletedEvent.cs b/src/NzbDrone.Core/Music/Events/ArtistAddCompletedEvent.cs new file mode 100644 index 000000000..861936676 --- /dev/null +++ b/src/NzbDrone.Core/Music/Events/ArtistAddCompletedEvent.cs @@ -0,0 +1,14 @@ +using NzbDrone.Common.Messaging; + +namespace NzbDrone.Core.Music.Events +{ + public class ArtistAddCompletedEvent : IEvent + { + public Artist Artist { get; private set; } + + public ArtistAddCompletedEvent(Artist artist) + { + Artist = artist; + } + } +} diff --git a/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs b/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs index 7a415e72b..97221d909 100644 --- a/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs +++ b/src/NzbDrone.Core/Music/Handlers/ArtistScannedHandler.cs @@ -3,6 +3,7 @@ using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.Music.Events; namespace NzbDrone.Core.Music { @@ -13,38 +14,46 @@ namespace NzbDrone.Core.Music private readonly IArtistService _artistService; private readonly IManageCommandQueue _commandQueueManager; private readonly IAlbumAddedService _albumAddedService; + private readonly IEventAggregator _eventAggregator; private readonly Logger _logger; public ArtistScannedHandler(IAlbumMonitoredService albumMonitoredService, IArtistService artistService, IManageCommandQueue commandQueueManager, IAlbumAddedService albumAddedService, + IEventAggregator eventAggregator, Logger logger) { _albumMonitoredService = albumMonitoredService; _artistService = artistService; _commandQueueManager = commandQueueManager; _albumAddedService = albumAddedService; + _eventAggregator = eventAggregator; _logger = logger; } private void HandleScanEvents(Artist artist) { - if (artist.AddOptions != null) + var addOptions = artist.AddOptions; + + if (addOptions == null) { - _logger.Info("[{0}] was recently added, performing post-add actions", artist.Name); - _albumMonitoredService.SetAlbumMonitoredStatus(artist, artist.AddOptions); + _albumAddedService.SearchForRecentlyAdded(artist.Id); + return; + } - if (artist.AddOptions.SearchForMissingAlbums) - { - _commandQueueManager.Push(new MissingAlbumSearchCommand(artist.Id)); - } + _logger.Info("[{0}] was recently added, performing post-add actions", artist.Name); + _albumMonitoredService.SetAlbumMonitoredStatus(artist, addOptions); - artist.AddOptions = null; - _artistService.RemoveAddOptions(artist); + _eventAggregator.PublishEvent(new ArtistAddCompletedEvent(artist)); + + if (artist.AddOptions.SearchForMissingAlbums) + { + _commandQueueManager.Push(new MissingAlbumSearchCommand(artist.Id)); } - _albumAddedService.SearchForRecentlyAdded(artist.Id); + artist.AddOptions = null; + _artistService.RemoveAddOptions(artist); } public void Handle(ArtistScannedEvent message) diff --git a/src/NzbDrone.Core/Notifications/Apprise/Apprise.cs b/src/NzbDrone.Core/Notifications/Apprise/Apprise.cs index 59dc96f4f..893686840 100644 --- a/src/NzbDrone.Core/Notifications/Apprise/Apprise.cs +++ b/src/NzbDrone.Core/Notifications/Apprise/Apprise.cs @@ -27,9 +27,9 @@ namespace NzbDrone.Core.Notifications.Apprise _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -37,6 +37,11 @@ namespace NzbDrone.Core.Notifications.Apprise _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/ArtistAddMessage.cs b/src/NzbDrone.Core/Notifications/ArtistAddMessage.cs new file mode 100644 index 000000000..db03c2fac --- /dev/null +++ b/src/NzbDrone.Core/Notifications/ArtistAddMessage.cs @@ -0,0 +1,15 @@ +using NzbDrone.Core.Music; + +namespace NzbDrone.Core.Notifications +{ + public class ArtistAddMessage + { + public string Message { get; set; } + public Artist Artist { get; set; } + + public override string ToString() + { + return Message; + } + } +} diff --git a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs index a3225bf6a..4749a30f6 100644 --- a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs +++ b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs @@ -186,28 +186,21 @@ namespace NzbDrone.Core.Notifications.CustomScript ExecuteScript(environmentVariables); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - var artist = deleteMessage.Album.Artist.Value; - var album = deleteMessage.Album; + var artist = message.Artist; var environmentVariables = new StringDictionary(); - environmentVariables.Add("Lidarr_EventType", "AlbumDeleted"); + environmentVariables.Add("Lidarr_EventType", "ArtistAdd"); environmentVariables.Add("Lidarr_InstanceName", _configFileProvider.InstanceName); environmentVariables.Add("Lidarr_ApplicationUrl", _configService.ApplicationUrl); environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString()); - environmentVariables.Add("Lidarr_Artist_Name", artist.Metadata.Value.Name); + environmentVariables.Add("Lidarr_Artist_Title", artist.Metadata.Value.Name); environmentVariables.Add("Lidarr_Artist_Path", artist.Path); - environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); + environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId.ToString()); environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); - environmentVariables.Add("Lidarr_Album_Id", album.Id.ToString()); - environmentVariables.Add("Lidarr_Album_Title", album.Title); - environmentVariables.Add("Lidarr_Album_Overview", album.Overview); - environmentVariables.Add("Lidarr_Album_MBId", album.ForeignAlbumId); - environmentVariables.Add("Lidarr_Album_ReleaseDate", album.ReleaseDate.ToString()); - environmentVariables.Add("Lidarr_Artist_DeletedFiles", deleteMessage.DeletedFiles.ToString()); ExecuteScript(environmentVariables); } @@ -232,6 +225,32 @@ namespace NzbDrone.Core.Notifications.CustomScript ExecuteScript(environmentVariables); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + var artist = deleteMessage.Album.Artist.Value; + var album = deleteMessage.Album; + var environmentVariables = new StringDictionary(); + + environmentVariables.Add("Lidarr_EventType", "AlbumDeleted"); + environmentVariables.Add("Lidarr_InstanceName", _configFileProvider.InstanceName); + environmentVariables.Add("Lidarr_ApplicationUrl", _configService.ApplicationUrl); + environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString()); + environmentVariables.Add("Lidarr_Artist_Name", artist.Metadata.Value.Name); + environmentVariables.Add("Lidarr_Artist_Path", artist.Path); + environmentVariables.Add("Lidarr_Artist_MBId", artist.Metadata.Value.ForeignArtistId); + environmentVariables.Add("Lidarr_Artist_Type", artist.Metadata.Value.Type); + environmentVariables.Add("Lidarr_Artist_Genres", string.Join("|", artist.Metadata.Value.Genres)); + environmentVariables.Add("Lidarr_Artist_Tags", string.Join("|", artist.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Lidarr_Album_Id", album.Id.ToString()); + environmentVariables.Add("Lidarr_Album_Title", album.Title); + environmentVariables.Add("Lidarr_Album_Overview", album.Overview); + environmentVariables.Add("Lidarr_Album_MBId", album.ForeignAlbumId); + environmentVariables.Add("Lidarr_Album_ReleaseDate", album.ReleaseDate.ToString()); + environmentVariables.Add("Lidarr_Artist_DeletedFiles", deleteMessage.DeletedFiles.ToString()); + + ExecuteScript(environmentVariables); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { var environmentVariables = new StringDictionary(); diff --git a/src/NzbDrone.Core/Notifications/Discord/Discord.cs b/src/NzbDrone.Core/Notifications/Discord/Discord.cs index adf1f29a9..41c0ae0d7 100644 --- a/src/NzbDrone.Core/Notifications/Discord/Discord.cs +++ b/src/NzbDrone.Core/Notifications/Discord/Discord.cs @@ -234,20 +234,20 @@ namespace NzbDrone.Core.Notifications.Discord _proxy.SendPayload(payload, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - var album = deleteMessage.Album; + var artist = message.Artist; var attachments = new List - { - new Embed - { - Title = album.Title, - Description = deleteMessage.DeletedFilesMessage - } - }; + { + new Embed + { + Title = artist.Name, + Description = message.Message + } + }; - var payload = CreatePayload("Album Deleted", attachments); + var payload = CreatePayload("Artist Added", attachments); _proxy.SendPayload(payload, Settings); } @@ -257,19 +257,37 @@ namespace NzbDrone.Core.Notifications.Discord var artist = deleteMessage.Artist; var attachments = new List - { - new Embed - { - Title = artist.Metadata.Value.Name, - Description = deleteMessage.DeletedFilesMessage - } - }; + { + new Embed + { + Title = artist.Name, + Description = deleteMessage.DeletedFilesMessage + } + }; var payload = CreatePayload("Artist Deleted", attachments); _proxy.SendPayload(payload, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + var album = deleteMessage.Album; + + var attachments = new List + { + new Embed + { + Title = album.Title, + Description = deleteMessage.DeletedFilesMessage + } + }; + + var payload = CreatePayload("Album Deleted", attachments); + + _proxy.SendPayload(payload, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { var attachments = new List diff --git a/src/NzbDrone.Core/Notifications/Email/Email.cs b/src/NzbDrone.Core/Notifications/Email/Email.cs index 1155b51f6..c1bde9140 100644 --- a/src/NzbDrone.Core/Notifications/Email/Email.cs +++ b/src/NzbDrone.Core/Notifications/Email/Email.cs @@ -40,11 +40,11 @@ namespace NzbDrone.Core.Notifications.Email SendEmail(Settings, ALBUM_DOWNLOADED_TITLE_BRANDED, body); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - var body = $"{deleteMessage.Message}"; + var body = $"{message.Message}"; - SendEmail(Settings, ALBUM_DELETED_TITLE_BRANDED, body); + SendEmail(Settings, ARTIST_ADDED_TITLE_BRANDED, body); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -54,6 +54,13 @@ namespace NzbDrone.Core.Notifications.Email SendEmail(Settings, ARTIST_DELETED_TITLE_BRANDED, body); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + var body = $"{deleteMessage.Message}"; + + SendEmail(Settings, ALBUM_DELETED_TITLE_BRANDED, body); + } + public override void OnHealthIssue(HealthCheck.HealthCheck message) { SendEmail(Settings, HEALTH_ISSUE_TITLE_BRANDED, message.Message); diff --git a/src/NzbDrone.Core/Notifications/Gotify/Gotify.cs b/src/NzbDrone.Core/Notifications/Gotify/Gotify.cs index 058bd6c4a..a41a78594 100644 --- a/src/NzbDrone.Core/Notifications/Gotify/Gotify.cs +++ b/src/NzbDrone.Core/Notifications/Gotify/Gotify.cs @@ -33,9 +33,9 @@ namespace NzbDrone.Core.Notifications.Gotify SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, message.Artist); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, deleteMessage.Album?.Artist); + SendNotification(ARTIST_ADDED_TITLE, message.Message, message.Artist); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -43,6 +43,11 @@ namespace NzbDrone.Core.Notifications.Gotify SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, deleteMessage.Artist); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, deleteMessage.Album?.Artist); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, null); diff --git a/src/NzbDrone.Core/Notifications/INotification.cs b/src/NzbDrone.Core/Notifications/INotification.cs index 4ede325c2..4187259c3 100644 --- a/src/NzbDrone.Core/Notifications/INotification.cs +++ b/src/NzbDrone.Core/Notifications/INotification.cs @@ -12,8 +12,9 @@ namespace NzbDrone.Core.Notifications void OnGrab(GrabMessage grabMessage); void OnReleaseImport(AlbumDownloadMessage message); void OnRename(Artist artist, List renamedFiles); - void OnAlbumDelete(AlbumDeleteMessage deleteMessage); + void OnArtistAdd(ArtistAddMessage message); void OnArtistDelete(ArtistDeleteMessage deleteMessage); + void OnAlbumDelete(AlbumDeleteMessage deleteMessage); void OnHealthIssue(HealthCheck.HealthCheck healthCheck); void OnHealthRestored(HealthCheck.HealthCheck previousCheck); void OnApplicationUpdate(ApplicationUpdateMessage updateMessage); @@ -25,8 +26,9 @@ namespace NzbDrone.Core.Notifications bool SupportsOnReleaseImport { get; } bool SupportsOnUpgrade { get; } bool SupportsOnRename { get; } - bool SupportsOnAlbumDelete { get; } + bool SupportsOnArtistAdd { get; } bool SupportsOnArtistDelete { get; } + bool SupportsOnAlbumDelete { get; } bool SupportsOnHealthIssue { get; } bool SupportsOnHealthRestored { get; } bool SupportsOnApplicationUpdate { get; } diff --git a/src/NzbDrone.Core/Notifications/Join/Join.cs b/src/NzbDrone.Core/Notifications/Join/Join.cs index ff1102d4b..6ca9b4ca9 100644 --- a/src/NzbDrone.Core/Notifications/Join/Join.cs +++ b/src/NzbDrone.Core/Notifications/Join/Join.cs @@ -27,9 +27,9 @@ namespace NzbDrone.Core.Notifications.Join _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE_BRANDED, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -37,6 +37,11 @@ namespace NzbDrone.Core.Notifications.Join _proxy.SendNotification(ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck message) { _proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, message.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Mailgun/Mailgun.cs b/src/NzbDrone.Core/Notifications/Mailgun/Mailgun.cs index f68fef06f..8647fff32 100644 --- a/src/NzbDrone.Core/Notifications/Mailgun/Mailgun.cs +++ b/src/NzbDrone.Core/Notifications/Mailgun/Mailgun.cs @@ -29,9 +29,11 @@ namespace NzbDrone.Core.Notifications.Mailgun _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, downloadMessage.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + var body = $"{message.Message}"; + + _proxy.SendNotification(ARTIST_ADDED_TITLE, body, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -39,6 +41,11 @@ namespace NzbDrone.Core.Notifications.Mailgun _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheckMessage) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheckMessage.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/MediaBrowser/MediaBrowser.cs b/src/NzbDrone.Core/Notifications/MediaBrowser/MediaBrowser.cs index daa4230f6..db41933ea 100644 --- a/src/NzbDrone.Core/Notifications/MediaBrowser/MediaBrowser.cs +++ b/src/NzbDrone.Core/Notifications/MediaBrowser/MediaBrowser.cs @@ -47,16 +47,16 @@ namespace NzbDrone.Core.Notifications.Emby } } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { if (Settings.Notify) { - _mediaBrowserService.Notify(Settings, ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message); + _mediaBrowserService.Notify(Settings, ARTIST_ADDED_TITLE_BRANDED, message.Message); } if (Settings.UpdateLibrary) { - _mediaBrowserService.Update(Settings, deleteMessage.Album.Artist); + _mediaBrowserService.Update(Settings, message.Artist); } } @@ -73,6 +73,19 @@ namespace NzbDrone.Core.Notifications.Emby } } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + if (Settings.Notify) + { + _mediaBrowserService.Notify(Settings, ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message); + } + + if (Settings.UpdateLibrary) + { + _mediaBrowserService.Update(Settings, deleteMessage.Album.Artist); + } + } + public override void OnHealthIssue(HealthCheck.HealthCheck message) { if (Settings.Notify) diff --git a/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs b/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs index 041d8fdc9..3d5300de8 100644 --- a/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs +++ b/src/NzbDrone.Core/Notifications/Notifiarr/Notifiarr.cs @@ -52,9 +52,9 @@ namespace NzbDrone.Core.Notifications.Notifiarr _proxy.SendNotification(BuildOnTrackRetagPayload(message), Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(BuildOnAlbumDelete(deleteMessage), Settings); + _proxy.SendNotification(BuildOnArtistAdd(message), Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -62,6 +62,11 @@ namespace NzbDrone.Core.Notifications.Notifiarr _proxy.SendNotification(BuildOnArtistDelete(deleteMessage), Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(BuildOnAlbumDelete(deleteMessage), Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(BuildHealthPayload(healthCheck), Settings); diff --git a/src/NzbDrone.Core/Notifications/NotificationBase.cs b/src/NzbDrone.Core/Notifications/NotificationBase.cs index 7b5da7f1d..4110a9fa9 100644 --- a/src/NzbDrone.Core/Notifications/NotificationBase.cs +++ b/src/NzbDrone.Core/Notifications/NotificationBase.cs @@ -12,8 +12,9 @@ namespace NzbDrone.Core.Notifications { protected const string ALBUM_GRABBED_TITLE = "Album Grabbed"; protected const string ALBUM_DOWNLOADED_TITLE = "Album Downloaded"; - protected const string ALBUM_DELETED_TITLE = "Album Deleted"; + protected const string ARTIST_ADDED_TITLE = "Artist Added"; protected const string ARTIST_DELETED_TITLE = "Artist Deleted"; + protected const string ALBUM_DELETED_TITLE = "Album Deleted"; protected const string HEALTH_ISSUE_TITLE = "Health Check Failure"; protected const string HEALTH_RESTORED_TITLE = "Health Check Restored"; protected const string DOWNLOAD_FAILURE_TITLE = "Download Failed"; @@ -23,8 +24,9 @@ namespace NzbDrone.Core.Notifications protected const string ALBUM_GRABBED_TITLE_BRANDED = "Lidarr - " + ALBUM_GRABBED_TITLE; protected const string ALBUM_DOWNLOADED_TITLE_BRANDED = "Lidarr - " + ALBUM_DOWNLOADED_TITLE; - protected const string ALBUM_DELETED_TITLE_BRANDED = "Lidarr - " + ALBUM_DELETED_TITLE; + protected const string ARTIST_ADDED_TITLE_BRANDED = "Lidarr - " + ARTIST_ADDED_TITLE; protected const string ARTIST_DELETED_TITLE_BRANDED = "Lidarr - " + ARTIST_DELETED_TITLE; + protected const string ALBUM_DELETED_TITLE_BRANDED = "Lidarr - " + ALBUM_DELETED_TITLE; protected const string HEALTH_ISSUE_TITLE_BRANDED = "Lidarr - " + HEALTH_ISSUE_TITLE; protected const string HEALTH_RESTORED_TITLE_BRANDED = "Lidarr - " + HEALTH_RESTORED_TITLE; protected const string DOWNLOAD_FAILURE_TITLE_BRANDED = "Lidarr - " + DOWNLOAD_FAILURE_TITLE; @@ -57,7 +59,7 @@ namespace NzbDrone.Core.Notifications { } - public virtual void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public virtual void OnArtistAdd(ArtistAddMessage message) { } @@ -65,6 +67,10 @@ namespace NzbDrone.Core.Notifications { } + public virtual void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + } + public virtual void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { } @@ -97,8 +103,9 @@ namespace NzbDrone.Core.Notifications public bool SupportsOnRename => HasConcreteImplementation("OnRename"); public bool SupportsOnReleaseImport => HasConcreteImplementation("OnReleaseImport"); public bool SupportsOnUpgrade => SupportsOnReleaseImport; - public bool SupportsOnAlbumDelete => HasConcreteImplementation("OnAlbumDelete"); + public bool SupportsOnArtistAdd => HasConcreteImplementation("OnArtistAdd"); public bool SupportsOnArtistDelete => HasConcreteImplementation("OnArtistDelete"); + public bool SupportsOnAlbumDelete => HasConcreteImplementation("OnAlbumDelete"); public bool SupportsOnHealthIssue => HasConcreteImplementation("OnHealthIssue"); public bool SupportsOnHealthRestored => HasConcreteImplementation("OnHealthRestored"); public bool SupportsOnDownloadFailure => HasConcreteImplementation("OnDownloadFailure"); diff --git a/src/NzbDrone.Core/Notifications/NotificationDefinition.cs b/src/NzbDrone.Core/Notifications/NotificationDefinition.cs index 1dc9d8026..f5f4e2f05 100644 --- a/src/NzbDrone.Core/Notifications/NotificationDefinition.cs +++ b/src/NzbDrone.Core/Notifications/NotificationDefinition.cs @@ -8,8 +8,9 @@ namespace NzbDrone.Core.Notifications public bool OnReleaseImport { get; set; } public bool OnUpgrade { get; set; } public bool OnRename { get; set; } - public bool OnAlbumDelete { get; set; } + public bool OnArtistAdd { get; set; } public bool OnArtistDelete { get; set; } + public bool OnAlbumDelete { get; set; } public bool OnHealthIssue { get; set; } public bool OnHealthRestored { get; set; } public bool OnDownloadFailure { get; set; } @@ -20,8 +21,9 @@ namespace NzbDrone.Core.Notifications public bool SupportsOnReleaseImport { get; set; } public bool SupportsOnUpgrade { get; set; } public bool SupportsOnRename { get; set; } - public bool SupportsOnAlbumDelete { get; set; } + public bool SupportsOnArtistAdd { get; set; } public bool SupportsOnArtistDelete { get; set; } + public bool SupportsOnAlbumDelete { get; set; } public bool SupportsOnHealthIssue { get; set; } public bool SupportsOnHealthRestored { get; set; } public bool IncludeHealthWarnings { get; set; } @@ -30,6 +32,6 @@ namespace NzbDrone.Core.Notifications public bool SupportsOnTrackRetag { get; set; } public bool SupportsOnApplicationUpdate { get; set; } - public override bool Enable => OnGrab || OnReleaseImport || (OnReleaseImport && OnUpgrade) || OnAlbumDelete || OnArtistDelete || OnHealthIssue || OnHealthRestored || OnDownloadFailure || OnImportFailure || OnTrackRetag || OnApplicationUpdate; + public override bool Enable => OnGrab || OnReleaseImport || (OnReleaseImport && OnUpgrade) || OnArtistAdd || OnArtistDelete || OnAlbumDelete || OnHealthIssue || OnHealthRestored || OnDownloadFailure || OnImportFailure || OnTrackRetag || OnApplicationUpdate; } } diff --git a/src/NzbDrone.Core/Notifications/NotificationFactory.cs b/src/NzbDrone.Core/Notifications/NotificationFactory.cs index 77548146e..d8217896c 100644 --- a/src/NzbDrone.Core/Notifications/NotificationFactory.cs +++ b/src/NzbDrone.Core/Notifications/NotificationFactory.cs @@ -14,8 +14,9 @@ namespace NzbDrone.Core.Notifications List OnReleaseImportEnabled(bool filterBlockedNotifications = true); List OnUpgradeEnabled(bool filterBlockedNotifications = true); List OnRenameEnabled(bool filterBlockedNotifications = true); - List OnAlbumDeleteEnabled(bool filterBlockedNotifications = true); + List OnArtistAddEnabled(bool filterBlockedNotifications = true); List OnArtistDeleteEnabled(bool filterBlockedNotifications = true); + List OnAlbumDeleteEnabled(bool filterBlockedNotifications = true); List OnHealthIssueEnabled(bool filterBlockedNotifications = true); List OnHealthRestoredEnabled(bool filterBlockedNotifications = true); List OnDownloadFailureEnabled(bool filterBlockedNotifications = true); @@ -81,14 +82,14 @@ namespace NzbDrone.Core.Notifications return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnRename).ToList(); } - public List OnAlbumDeleteEnabled(bool filterBlockedNotifications = true) + public List OnArtistAddEnabled(bool filterBlockedNotifications = true) { if (filterBlockedNotifications) { - return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnAlbumDelete)).ToList(); + return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnArtistAdd)).ToList(); } - return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnAlbumDelete).ToList(); + return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnArtistAdd).ToList(); } public List OnArtistDeleteEnabled(bool filterBlockedNotifications = true) @@ -101,6 +102,16 @@ namespace NzbDrone.Core.Notifications return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnArtistDelete).ToList(); } + public List OnAlbumDeleteEnabled(bool filterBlockedNotifications = true) + { + if (filterBlockedNotifications) + { + return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnAlbumDelete)).ToList(); + } + + return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnAlbumDelete).ToList(); + } + public List OnHealthIssueEnabled(bool filterBlockedNotifications = true) { if (filterBlockedNotifications) @@ -185,8 +196,9 @@ namespace NzbDrone.Core.Notifications definition.SupportsOnReleaseImport = provider.SupportsOnReleaseImport; definition.SupportsOnUpgrade = provider.SupportsOnUpgrade; definition.SupportsOnRename = provider.SupportsOnRename; - definition.SupportsOnAlbumDelete = provider.SupportsOnAlbumDelete; + definition.SupportsOnArtistAdd = provider.SupportsOnArtistAdd; definition.SupportsOnArtistDelete = provider.SupportsOnArtistDelete; + definition.SupportsOnAlbumDelete = provider.SupportsOnAlbumDelete; definition.SupportsOnHealthIssue = provider.SupportsOnHealthIssue; definition.SupportsOnHealthRestored = provider.SupportsOnHealthRestored; definition.SupportsOnDownloadFailure = provider.SupportsOnDownloadFailure; diff --git a/src/NzbDrone.Core/Notifications/NotificationService.cs b/src/NzbDrone.Core/Notifications/NotificationService.cs index 1a5408aee..1dda2c7bd 100644 --- a/src/NzbDrone.Core/Notifications/NotificationService.cs +++ b/src/NzbDrone.Core/Notifications/NotificationService.cs @@ -20,8 +20,9 @@ namespace NzbDrone.Core.Notifications : IHandle, IHandle, IHandle, - IHandle, + IHandle, IHandle, + IHandle, IHandle, IHandle, IHandle, @@ -214,24 +215,29 @@ namespace NzbDrone.Core.Notifications } } - public void Handle(AlbumDeletedEvent message) + public void Handle(ArtistAddCompletedEvent message) { - var deleteMessage = new AlbumDeleteMessage(message.Album, message.DeleteFiles); + var artist = message.Artist; + var addMessage = new ArtistAddMessage + { + Artist = artist, + Message = artist.Name + }; - foreach (var notification in _notificationFactory.OnAlbumDeleteEnabled()) + foreach (var notification in _notificationFactory.OnArtistAddEnabled()) { try { - if (ShouldHandleArtist(notification.Definition, deleteMessage.Album.Artist)) + if (ShouldHandleArtist(notification.Definition, artist)) { - notification.OnAlbumDelete(deleteMessage); + notification.OnArtistAdd(addMessage); _notificationStatusService.RecordSuccess(notification.Definition.Id); } } catch (Exception ex) { _notificationStatusService.RecordFailure(notification.Definition.Id); - _logger.Warn(ex, "Unable to send OnAlbumDelete notification to: " + notification.Definition.Name); + _logger.Warn(ex, "Unable to send OnArtistAdd notification to: " + notification.Definition.Name); } } } @@ -261,6 +267,28 @@ namespace NzbDrone.Core.Notifications } } + public void Handle(AlbumDeletedEvent message) + { + var deleteMessage = new AlbumDeleteMessage(message.Album, message.DeleteFiles); + + foreach (var notification in _notificationFactory.OnAlbumDeleteEnabled()) + { + try + { + if (ShouldHandleArtist(notification.Definition, deleteMessage.Album.Artist)) + { + notification.OnAlbumDelete(deleteMessage); + _notificationStatusService.RecordSuccess(notification.Definition.Id); + } + } + catch (Exception ex) + { + _notificationStatusService.RecordFailure(notification.Definition.Id); + _logger.Warn(ex, "Unable to send OnAlbumDelete notification to: " + notification.Definition.Name); + } + } + } + public void Handle(HealthCheckFailedEvent message) { // Don't send health check notifications during the start up grace period, diff --git a/src/NzbDrone.Core/Notifications/Ntfy/Ntfy.cs b/src/NzbDrone.Core/Notifications/Ntfy/Ntfy.cs index 680338b49..8fefccadb 100644 --- a/src/NzbDrone.Core/Notifications/Ntfy/Ntfy.cs +++ b/src/NzbDrone.Core/Notifications/Ntfy/Ntfy.cs @@ -28,9 +28,9 @@ namespace NzbDrone.Core.Notifications.Ntfy _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE_BRANDED, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -38,6 +38,11 @@ namespace NzbDrone.Core.Notifications.Ntfy _proxy.SendNotification(ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Plex/Server/PlexServer.cs b/src/NzbDrone.Core/Notifications/Plex/Server/PlexServer.cs index a2cc153de..4c78ee37f 100644 --- a/src/NzbDrone.Core/Notifications/Plex/Server/PlexServer.cs +++ b/src/NzbDrone.Core/Notifications/Plex/Server/PlexServer.cs @@ -54,19 +54,24 @@ namespace NzbDrone.Core.Notifications.Plex.Server UpdateIfEnabled(message.Artist); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) + { + UpdateIfEnabled(message.Artist); + } + + public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) { if (deleteMessage.DeletedFiles) { - UpdateIfEnabled(deleteMessage.Album.Artist); + UpdateIfEnabled(deleteMessage.Artist); } } - public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) { if (deleteMessage.DeletedFiles) { - UpdateIfEnabled(deleteMessage.Artist); + UpdateIfEnabled(deleteMessage.Album.Artist); } } diff --git a/src/NzbDrone.Core/Notifications/Prowl/Prowl.cs b/src/NzbDrone.Core/Notifications/Prowl/Prowl.cs index 5560fa27a..513770d73 100644 --- a/src/NzbDrone.Core/Notifications/Prowl/Prowl.cs +++ b/src/NzbDrone.Core/Notifications/Prowl/Prowl.cs @@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Prowl _prowlProxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _prowlProxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _prowlProxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Prowl _prowlProxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _prowlProxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs b/src/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs index b12cf6a95..6ae32d91c 100644 --- a/src/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs +++ b/src/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs @@ -29,9 +29,9 @@ namespace NzbDrone.Core.Notifications.PushBullet _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -39,6 +39,11 @@ namespace NzbDrone.Core.Notifications.PushBullet _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs b/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs index 53f37847f..7488769fc 100644 --- a/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs +++ b/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs @@ -36,9 +36,9 @@ namespace NzbDrone.Core.Notifications.Pushcut _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, $"{message.Artist.Name} added to library", Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -46,6 +46,11 @@ namespace NzbDrone.Core.Notifications.Pushcut _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Pushover/Pushover.cs b/src/NzbDrone.Core/Notifications/Pushover/Pushover.cs index a2e296b23..15880e886 100644 --- a/src/NzbDrone.Core/Notifications/Pushover/Pushover.cs +++ b/src/NzbDrone.Core/Notifications/Pushover/Pushover.cs @@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Pushover _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Pushover _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/SendGrid/SendGrid.cs b/src/NzbDrone.Core/Notifications/SendGrid/SendGrid.cs index c1149b411..6fa6bd7cd 100644 --- a/src/NzbDrone.Core/Notifications/SendGrid/SendGrid.cs +++ b/src/NzbDrone.Core/Notifications/SendGrid/SendGrid.cs @@ -29,9 +29,9 @@ namespace NzbDrone.Core.Notifications.SendGrid _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -39,6 +39,11 @@ namespace NzbDrone.Core.Notifications.SendGrid _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Signal/Signal.cs b/src/NzbDrone.Core/Notifications/Signal/Signal.cs index 3d7efd9ed..e8bf44bb5 100644 --- a/src/NzbDrone.Core/Notifications/Signal/Signal.cs +++ b/src/NzbDrone.Core/Notifications/Signal/Signal.cs @@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Signal _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Signal _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Simplepush/Simplepush.cs b/src/NzbDrone.Core/Notifications/Simplepush/Simplepush.cs index 06ca177d1..e0dbe2b6f 100644 --- a/src/NzbDrone.Core/Notifications/Simplepush/Simplepush.cs +++ b/src/NzbDrone.Core/Notifications/Simplepush/Simplepush.cs @@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Simplepush _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Simplepush _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Slack/Slack.cs b/src/NzbDrone.Core/Notifications/Slack/Slack.cs index 019195710..19994301c 100644 --- a/src/NzbDrone.Core/Notifications/Slack/Slack.cs +++ b/src/NzbDrone.Core/Notifications/Slack/Slack.cs @@ -70,18 +70,17 @@ namespace NzbDrone.Core.Notifications.Slack _proxy.SendPayload(payload, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { var attachments = new List - { - new Attachment - { - Title = deleteMessage.Album.Title, - Text = deleteMessage.DeletedFilesMessage - } - }; + { + new Attachment + { + Title = message.Artist.Metadata.Value.Name, + } + }; - var payload = CreatePayload("Album Deleted", attachments); + var payload = CreatePayload("Artist Added", attachments); _proxy.SendPayload(payload, Settings); } @@ -89,19 +88,35 @@ namespace NzbDrone.Core.Notifications.Slack public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) { var attachments = new List - { - new Attachment - { - Title = deleteMessage.Artist.Metadata.Value.Name, - Text = deleteMessage.DeletedFilesMessage - } - }; + { + new Attachment + { + Title = deleteMessage.Artist.Metadata.Value.Name, + Text = deleteMessage.DeletedFilesMessage + } + }; var payload = CreatePayload("Artist Deleted", attachments); _proxy.SendPayload(payload, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + var attachments = new List + { + new Attachment + { + Title = deleteMessage.Album.Title, + Text = deleteMessage.DeletedFilesMessage + } + }; + + var payload = CreatePayload("Album Deleted", attachments); + + _proxy.SendPayload(payload, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { var attachments = new List diff --git a/src/NzbDrone.Core/Notifications/Subsonic/Subsonic.cs b/src/NzbDrone.Core/Notifications/Subsonic/Subsonic.cs index c8c97a260..85c266fe2 100644 --- a/src/NzbDrone.Core/Notifications/Subsonic/Subsonic.cs +++ b/src/NzbDrone.Core/Notifications/Subsonic/Subsonic.cs @@ -41,9 +41,9 @@ namespace NzbDrone.Core.Notifications.Subsonic Update(); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - Notify(Settings, ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message); + Notify(Settings, ARTIST_ADDED_TITLE_BRANDED, message.Message); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -51,6 +51,11 @@ namespace NzbDrone.Core.Notifications.Subsonic Notify(Settings, ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + Notify(Settings, ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message); diff --git a/src/NzbDrone.Core/Notifications/Synology/SynologyIndexer.cs b/src/NzbDrone.Core/Notifications/Synology/SynologyIndexer.cs index b1e5f0333..4e5b6b4ce 100644 --- a/src/NzbDrone.Core/Notifications/Synology/SynologyIndexer.cs +++ b/src/NzbDrone.Core/Notifications/Synology/SynologyIndexer.cs @@ -55,24 +55,32 @@ namespace NzbDrone.Core.Notifications.Synology } } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) + { + if (Settings.UpdateLibrary) + { + _indexerProxy.UpdateFolder(message.Artist.Path); + } + } + + public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) { if (deleteMessage.DeletedFiles) { if (Settings.UpdateLibrary) { - _indexerProxy.DeleteFolder(deleteMessage.Album.Artist.Value.Path); + _indexerProxy.DeleteFolder(deleteMessage.Artist.Path); } } } - public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) { if (deleteMessage.DeletedFiles) { if (Settings.UpdateLibrary) { - _indexerProxy.DeleteFolder(deleteMessage.Artist.Path); + _indexerProxy.DeleteFolder(deleteMessage.Album.Artist.Value.Path); } } } diff --git a/src/NzbDrone.Core/Notifications/Telegram/Telegram.cs b/src/NzbDrone.Core/Notifications/Telegram/Telegram.cs index f95de3338..96b0d4bb6 100644 --- a/src/NzbDrone.Core/Notifications/Telegram/Telegram.cs +++ b/src/NzbDrone.Core/Notifications/Telegram/Telegram.cs @@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Telegram _proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + _proxy.SendNotification(ARTIST_ADDED_TITLE, message.Message, Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Telegram _proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); diff --git a/src/NzbDrone.Core/Notifications/Twitter/Twitter.cs b/src/NzbDrone.Core/Notifications/Twitter/Twitter.cs index ef423b316..6584fa1da 100644 --- a/src/NzbDrone.Core/Notifications/Twitter/Twitter.cs +++ b/src/NzbDrone.Core/Notifications/Twitter/Twitter.cs @@ -28,9 +28,9 @@ namespace NzbDrone.Core.Notifications.Twitter _twitterService.SendNotification($"Imported: {message.Message}", Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _twitterService.SendNotification($"Album Deleted: {deleteMessage.Message}", Settings); + _twitterService.SendNotification($"Artist Added: {message.Message}", Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -38,6 +38,11 @@ namespace NzbDrone.Core.Notifications.Twitter _twitterService.SendNotification($"Artist Deleted: {deleteMessage.Message}", Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _twitterService.SendNotification($"Album Deleted: {deleteMessage.Message}", Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _twitterService.SendNotification($"Health Issue: {healthCheck.Message}", Settings); diff --git a/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs b/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs index 3bce52990..9c0f1855b 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/Webhook.cs @@ -50,9 +50,9 @@ namespace NzbDrone.Core.Notifications.Webhook _proxy.SendWebhook(BuildOnTrackRetagPayload(message), Settings); } - public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + public override void OnArtistAdd(ArtistAddMessage message) { - _proxy.SendWebhook(BuildOnAlbumDelete(deleteMessage), Settings); + _proxy.SendWebhook(BuildOnArtistAdd(message), Settings); } public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) @@ -60,6 +60,11 @@ namespace NzbDrone.Core.Notifications.Webhook _proxy.SendWebhook(BuildOnArtistDelete(deleteMessage), Settings); } + public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + _proxy.SendWebhook(BuildOnAlbumDelete(deleteMessage), Settings); + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { _proxy.SendWebhook(BuildHealthPayload(healthCheck), Settings); diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookArtistAddPayload.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookArtistAddPayload.cs new file mode 100644 index 000000000..eb8683c15 --- /dev/null +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookArtistAddPayload.cs @@ -0,0 +1,7 @@ +namespace NzbDrone.Core.Notifications.Webhook +{ + public class WebhookArtistAddPayload : WebhookPayload + { + public WebhookArtist Artist { get; set; } + } +} diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs index f4450612f..9504a87a8 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs @@ -130,15 +130,14 @@ namespace NzbDrone.Core.Notifications.Webhook }; } - public WebhookAlbumDeletePayload BuildOnAlbumDelete(AlbumDeleteMessage deleteMessage) + protected WebhookArtistAddPayload BuildOnArtistAdd(ArtistAddMessage addMessage) { - return new WebhookAlbumDeletePayload + return new WebhookArtistAddPayload { - EventType = WebhookEventType.AlbumDelete, + EventType = WebhookEventType.ArtistAdd, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Album = new WebhookAlbum(deleteMessage.Album), - DeletedFiles = deleteMessage.DeletedFiles + Artist = new WebhookArtist(addMessage.Artist), }; } @@ -154,6 +153,18 @@ namespace NzbDrone.Core.Notifications.Webhook }; } + public WebhookAlbumDeletePayload BuildOnAlbumDelete(AlbumDeleteMessage deleteMessage) + { + return new WebhookAlbumDeletePayload + { + EventType = WebhookEventType.AlbumDelete, + InstanceName = _configFileProvider.InstanceName, + ApplicationUrl = _configService.ApplicationUrl, + Album = new WebhookAlbum(deleteMessage.Album), + DeletedFiles = deleteMessage.DeletedFiles + }; + } + protected WebhookHealthPayload BuildHealthPayload(HealthCheck.HealthCheck healthCheck) { return new WebhookHealthPayload diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookEventType.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookEventType.cs index f598d554c..310c8c42d 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookEventType.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookEventType.cs @@ -14,8 +14,9 @@ namespace NzbDrone.Core.Notifications.Webhook DownloadFailure, ImportFailure, Rename, - AlbumDelete, + ArtistAdd, ArtistDelete, + AlbumDelete, Health, Retag, ApplicationUpdate, diff --git a/src/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs b/src/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs index e08ec1b28..95e43ba40 100644 --- a/src/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs +++ b/src/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs @@ -42,6 +42,25 @@ namespace NzbDrone.Core.Notifications.Xbmc UpdateAndClean(artist); } + public override void OnArtistAdd(ArtistAddMessage message) + { + const string header = "Lidarr - Artist Added"; + + Notify(Settings, header, message.Message); + UpdateAndClean(message.Artist, true); + } + + public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) + { + if (deleteMessage.DeletedFiles) + { + const string header = "Lidarr - Artist Deleted"; + + Notify(Settings, header, deleteMessage.Message); + UpdateAndClean(deleteMessage.Artist, true); + } + } + public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) { Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message);