New: On Artist Add connection event

(cherry picked from commit dec6e140365981f0391a759db33f4f5de46adc24)

Closes #3531
pull/4529/head
Mark McDowall 1 year ago committed by Bogdan
parent f31ecaf03e
commit 5f9c616bff

@ -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 {
</div>
{
supportsOnGrab && onGrab &&
supportsOnGrab && onGrab ?
<Label kind={kinds.SUCCESS}>
{translate('OnGrab')}
</Label>
</Label> :
null
}
{
supportsOnReleaseImport && onReleaseImport &&
supportsOnReleaseImport && onReleaseImport ?
<Label kind={kinds.SUCCESS}>
{translate('OnReleaseImport')}
</Label>
</Label> :
null
}
{
supportsOnUpgrade && onReleaseImport && onUpgrade &&
supportsOnUpgrade && onReleaseImport && onUpgrade ?
<Label kind={kinds.SUCCESS}>
{translate('OnUpgrade')}
</Label>
</Label> :
null
}
{
supportsOnRename && onRename &&
supportsOnRename && onRename ?
<Label kind={kinds.SUCCESS}>
{translate('OnRename')}
</Label>
</Label> :
null
}
{
supportsOnTrackRetag && onTrackRetag &&
supportsOnTrackRetag && onTrackRetag ?
<Label kind={kinds.SUCCESS}>
{translate('OnTrackRetag')}
</Label>
</Label> :
null
}
{
supportsOnAlbumDelete && onAlbumDelete &&
supportsOnArtistAdd && onArtistAdd ?
<Label kind={kinds.SUCCESS}>
{translate('OnAlbumDelete')}
</Label>
{translate('OnArtistAdd')}
</Label> :
null
}
{
supportsOnArtistDelete && onArtistDelete &&
supportsOnArtistDelete && onArtistDelete ?
<Label kind={kinds.SUCCESS}>
{translate('OnArtistDelete')}
</Label>
</Label> :
null
}
{
supportsOnAlbumDelete && onAlbumDelete ?
<Label kind={kinds.SUCCESS}>
{translate('OnAlbumDelete')}
</Label> :
null
}
{
supportsOnHealthIssue && onHealthIssue &&
supportsOnHealthIssue && onHealthIssue ?
<Label kind={kinds.SUCCESS}>
{translate('OnHealthIssue')}
</Label>
</Label> :
null
}
{
@ -159,35 +177,38 @@ class Notification extends Component {
}
{
supportsOnDownloadFailure && onDownloadFailure &&
supportsOnDownloadFailure && onDownloadFailure ?
<Label kind={kinds.SUCCESS} >
{translate('OnDownloadFailure')}
</Label>
</Label> :
null
}
{
supportsOnImportFailure && onImportFailure &&
supportsOnImportFailure && onImportFailure ?
<Label kind={kinds.SUCCESS} >
{translate('OnImportFailure')}
</Label>
</Label> :
null
}
{
supportsOnApplicationUpdate && onApplicationUpdate &&
supportsOnApplicationUpdate && onApplicationUpdate ?
<Label kind={kinds.SUCCESS} >
{translate('OnApplicationUpdate')}
</Label>
</Label> :
null
}
{
!onGrab && !onReleaseImport && !onRename && !onTrackRetag && !onAlbumDelete && !onArtistDelete &&
!onHealthIssue && !onHealthRestored && !onDownloadFailure && !onImportFailure && !onApplicationUpdate &&
<Label
kind={kinds.DISABLED}
outline={true}
>
{translate('Disabled')}
</Label>
!onGrab && !onReleaseImport && !onRename && !onTrackRetag && !onArtistAdd && !onArtistDelete && !onAlbumDelete && !onHealthIssue && !onHealthRestored && !onDownloadFailure && !onImportFailure && !onApplicationUpdate ?
<Label
kind={kinds.DISABLED}
outline={true}
>
{translate('Disabled')}
</Label> :
null
}
<TagList
@ -223,8 +244,9 @@ Notification.propTypes = {
onReleaseImport: PropTypes.bool.isRequired,
onUpgrade: PropTypes.bool.isRequired,
onRename: PropTypes.bool.isRequired,
onAlbumDelete: PropTypes.bool.isRequired,
onArtistAdd: PropTypes.bool.isRequired,
onArtistDelete: PropTypes.bool.isRequired,
onAlbumDelete: PropTypes.bool.isRequired,
onHealthIssue: PropTypes.bool.isRequired,
onHealthRestored: PropTypes.bool.isRequired,
onDownloadFailure: PropTypes.bool.isRequired,
@ -235,8 +257,9 @@ Notification.propTypes = {
supportsOnReleaseImport: PropTypes.bool.isRequired,
supportsOnUpgrade: PropTypes.bool.isRequired,
supportsOnRename: PropTypes.bool.isRequired,
supportsOnAlbumDelete: PropTypes.bool.isRequired,
supportsOnArtistAdd: PropTypes.bool.isRequired,
supportsOnArtistDelete: PropTypes.bool.isRequired,
supportsOnAlbumDelete: PropTypes.bool.isRequired,
supportsOnHealthIssue: PropTypes.bool.isRequired,
supportsOnHealthRestored: PropTypes.bool.isRequired,
supportsOnDownloadFailure: PropTypes.bool.isRequired,

@ -19,8 +19,9 @@ function NotificationEventItems(props) {
onReleaseImport,
onUpgrade,
onRename,
onAlbumDelete,
onArtistAdd,
onArtistDelete,
onAlbumDelete,
onHealthIssue,
onHealthRestored,
onDownloadFailure,
@ -31,8 +32,9 @@ function NotificationEventItems(props) {
supportsOnReleaseImport,
supportsOnUpgrade,
supportsOnRename,
supportsOnAlbumDelete,
supportsOnArtistAdd,
supportsOnArtistDelete,
supportsOnAlbumDelete,
supportsOnHealthIssue,
supportsOnHealthRestored,
includeHealthWarnings,
@ -57,7 +59,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onGrab"
helpText={translate('OnGrabHelpText')}
helpText={translate('OnGrab')}
isDisabled={!supportsOnGrab.value}
{...onGrab}
onChange={onInputChange}
@ -68,7 +70,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onReleaseImport"
helpText={translate('OnReleaseImportHelpText')}
helpText={translate('OnReleaseImport')}
isDisabled={!supportsOnReleaseImport.value}
{...onReleaseImport}
onChange={onInputChange}
@ -81,7 +83,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onUpgrade"
helpText={translate('OnUpgradeHelpText')}
helpText={translate('OnUpgrade')}
isDisabled={!supportsOnUpgrade.value}
{...onUpgrade}
onChange={onInputChange}
@ -93,7 +95,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onDownloadFailure"
helpText={translate('OnDownloadFailureHelpText')}
helpText={translate('OnDownloadFailure')}
isDisabled={!supportsOnDownloadFailure.value}
{...onDownloadFailure}
onChange={onInputChange}
@ -104,7 +106,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onImportFailure"
helpText={translate('OnImportFailureHelpText')}
helpText={translate('OnImportFailure')}
isDisabled={!supportsOnImportFailure.value}
{...onImportFailure}
onChange={onInputChange}
@ -115,7 +117,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onRename"
helpText={translate('OnRenameHelpText')}
helpText={translate('OnRename')}
isDisabled={!supportsOnRename.value}
{...onRename}
onChange={onInputChange}
@ -126,7 +128,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onTrackRetag"
helpText={translate('OnTrackRetagHelpText')}
helpText={translate('OnTrackRetag')}
isDisabled={!supportsOnTrackRetag.value}
{...onTrackRetag}
onChange={onInputChange}
@ -136,10 +138,10 @@ function NotificationEventItems(props) {
<div>
<FormInputGroup
type={inputTypes.CHECK}
name="onAlbumDelete"
helpText={translate('OnAlbumDeleteHelpText')}
isDisabled={!supportsOnAlbumDelete.value}
{...onAlbumDelete}
name="onArtistAdd"
helpText={translate('OnArtistAdd')}
isDisabled={!supportsOnArtistAdd.value}
{...onArtistAdd}
onChange={onInputChange}
/>
</div>
@ -148,18 +150,29 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onArtistDelete"
helpText={translate('OnArtistDeleteHelpText')}
helpText={translate('OnArtistDelete')}
isDisabled={!supportsOnArtistDelete.value}
{...onArtistDelete}
onChange={onInputChange}
/>
</div>
<div>
<FormInputGroup
type={inputTypes.CHECK}
name="onAlbumDelete"
helpText={translate('OnAlbumDelete')}
isDisabled={!supportsOnAlbumDelete.value}
{...onAlbumDelete}
onChange={onInputChange}
/>
</div>
<div>
<FormInputGroup
type={inputTypes.CHECK}
name="onApplicationUpdate"
helpText={translate('OnApplicationUpdateHelpText')}
helpText={translate('OnApplicationUpdate')}
isDisabled={!supportsOnApplicationUpdate.value}
{...onApplicationUpdate}
onChange={onInputChange}
@ -170,7 +183,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onHealthIssue"
helpText={translate('OnHealthIssueHelpText')}
helpText={translate('OnHealthIssue')}
isDisabled={!supportsOnHealthIssue.value}
{...onHealthIssue}
onChange={onInputChange}
@ -181,7 +194,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="onHealthRestored"
helpText={translate('OnHealthRestoredHelpText')}
helpText={translate('OnHealthRestored')}
isDisabled={!supportsOnHealthRestored.value}
{...onHealthRestored}
onChange={onInputChange}
@ -194,7 +207,7 @@ function NotificationEventItems(props) {
<FormInputGroup
type={inputTypes.CHECK}
name="includeHealthWarnings"
helpText={translate('IncludeHealthWarningsHelpText')}
helpText={translate('IncludeHealthWarnings')}
isDisabled={!supportsOnHealthIssue.value}
{...includeHealthWarnings}
onChange={onInputChange}

@ -107,6 +107,8 @@ export default {
selectedSchema.onReleaseImport = selectedSchema.supportsOnReleaseImport;
selectedSchema.onUpgrade = selectedSchema.supportsOnUpgrade;
selectedSchema.onRename = selectedSchema.supportsOnRename;
selectedSchema.onArtistAdd = selectedSchema.supportsOnArtistAdd;
selectedSchema.onArtistDelete = selectedSchema.supportsOnArtistDelete;
selectedSchema.onHealthIssue = selectedSchema.supportsOnHealthIssue;
selectedSchema.onDownloadFailure = selectedSchema.supportsOnDownloadFailure;
selectedSchema.onImportFailure = selectedSchema.supportsOnImportFailure;

@ -9,8 +9,9 @@ namespace Lidarr.Api.V1.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; }
@ -21,8 +22,9 @@ namespace Lidarr.Api.V1.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; }
@ -48,8 +50,9 @@ namespace Lidarr.Api.V1.Notifications
resource.OnReleaseImport = definition.OnReleaseImport;
resource.OnUpgrade = definition.OnUpgrade;
resource.OnRename = definition.OnRename;
resource.OnAlbumDelete = definition.OnAlbumDelete;
resource.OnArtistAdd = definition.OnArtistAdd;
resource.OnArtistDelete = definition.OnArtistDelete;
resource.OnAlbumDelete = definition.OnAlbumDelete;
resource.OnHealthIssue = definition.OnHealthIssue;
resource.OnHealthRestored = definition.OnHealthRestored;
resource.OnDownloadFailure = definition.OnDownloadFailure;
@ -60,8 +63,9 @@ namespace Lidarr.Api.V1.Notifications
resource.SupportsOnReleaseImport = definition.SupportsOnReleaseImport;
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
resource.SupportsOnRename = definition.SupportsOnRename;
resource.SupportsOnAlbumDelete = definition.SupportsOnAlbumDelete;
resource.SupportsOnArtistAdd = definition.SupportsOnArtistAdd;
resource.SupportsOnArtistDelete = definition.SupportsOnArtistDelete;
resource.SupportsOnAlbumDelete = definition.SupportsOnAlbumDelete;
resource.SupportsOnHealthIssue = definition.SupportsOnHealthIssue;
resource.SupportsOnHealthRestored = definition.SupportsOnHealthRestored;
resource.IncludeHealthWarnings = definition.IncludeHealthWarnings;
@ -86,8 +90,9 @@ namespace Lidarr.Api.V1.Notifications
definition.OnReleaseImport = resource.OnReleaseImport;
definition.OnUpgrade = resource.OnUpgrade;
definition.OnRename = resource.OnRename;
definition.OnAlbumDelete = resource.OnAlbumDelete;
definition.OnArtistAdd = resource.OnArtistAdd;
definition.OnArtistDelete = resource.OnArtistDelete;
definition.OnAlbumDelete = resource.OnAlbumDelete;
definition.OnHealthIssue = resource.OnHealthIssue;
definition.OnHealthRestored = resource.OnHealthRestored;
definition.OnDownloadFailure = resource.OnDownloadFailure;
@ -98,8 +103,9 @@ namespace Lidarr.Api.V1.Notifications
definition.SupportsOnReleaseImport = resource.SupportsOnReleaseImport;
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
definition.SupportsOnRename = resource.SupportsOnRename;
definition.SupportsOnAlbumDelete = resource.SupportsOnAlbumDelete;
definition.SupportsOnArtistAdd = resource.SupportsOnArtistAdd;
definition.SupportsOnArtistDelete = resource.SupportsOnArtistDelete;
definition.SupportsOnAlbumDelete = resource.SupportsOnAlbumDelete;
definition.SupportsOnHealthIssue = resource.SupportsOnHealthIssue;
definition.SupportsOnHealthRestored = resource.SupportsOnHealthRestored;
definition.IncludeHealthWarnings = resource.IncludeHealthWarnings;

@ -0,0 +1,14 @@
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(076)]
public class add_on_artist_add_to_notifications : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Alter.Table("Notifications").AddColumn("OnArtistAdd").AsBoolean().WithDefaultValue(false);
}
}
}

@ -86,8 +86,9 @@ namespace NzbDrone.Core.Datastore
.Ignore(i => 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)

@ -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",

@ -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;
}
}
}

@ -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)

@ -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);

@ -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;
}
}
}

@ -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();

@ -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<Embed>
{
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<Embed>
{
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<Embed>
{
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<Embed>

@ -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);

@ -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);

@ -12,8 +12,9 @@ namespace NzbDrone.Core.Notifications
void OnGrab(GrabMessage grabMessage);
void OnReleaseImport(AlbumDownloadMessage message);
void OnRename(Artist artist, List<RenamedTrackFile> 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; }

@ -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);

@ -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);

@ -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)

@ -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);

@ -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");

@ -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;
}
}

@ -14,8 +14,9 @@ namespace NzbDrone.Core.Notifications
List<INotification> OnReleaseImportEnabled(bool filterBlockedNotifications = true);
List<INotification> OnUpgradeEnabled(bool filterBlockedNotifications = true);
List<INotification> OnRenameEnabled(bool filterBlockedNotifications = true);
List<INotification> OnAlbumDeleteEnabled(bool filterBlockedNotifications = true);
List<INotification> OnArtistAddEnabled(bool filterBlockedNotifications = true);
List<INotification> OnArtistDeleteEnabled(bool filterBlockedNotifications = true);
List<INotification> OnAlbumDeleteEnabled(bool filterBlockedNotifications = true);
List<INotification> OnHealthIssueEnabled(bool filterBlockedNotifications = true);
List<INotification> OnHealthRestoredEnabled(bool filterBlockedNotifications = true);
List<INotification> OnDownloadFailureEnabled(bool filterBlockedNotifications = true);
@ -81,14 +82,14 @@ namespace NzbDrone.Core.Notifications
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnRename).ToList();
}
public List<INotification> OnAlbumDeleteEnabled(bool filterBlockedNotifications = true)
public List<INotification> 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<INotification> OnArtistDeleteEnabled(bool filterBlockedNotifications = true)
@ -101,6 +102,16 @@ namespace NzbDrone.Core.Notifications
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnArtistDelete).ToList();
}
public List<INotification> 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<INotification> 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;

@ -20,8 +20,9 @@ namespace NzbDrone.Core.Notifications
: IHandle<AlbumGrabbedEvent>,
IHandle<AlbumImportedEvent>,
IHandle<ArtistRenamedEvent>,
IHandle<AlbumDeletedEvent>,
IHandle<ArtistAddCompletedEvent>,
IHandle<ArtistsDeletedEvent>,
IHandle<AlbumDeletedEvent>,
IHandle<HealthCheckFailedEvent>,
IHandle<HealthCheckRestoredEvent>,
IHandle<DownloadFailedEvent>,
@ -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,

@ -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);

@ -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);
}
}

@ -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);

@ -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);

@ -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);

@ -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);

@ -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);

@ -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);

@ -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);

@ -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<Attachment>
{
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<Attachment>
{
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<Attachment>
{
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<Attachment>

@ -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);

@ -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);
}
}
}

@ -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);

@ -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);

@ -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);

@ -0,0 +1,7 @@
namespace NzbDrone.Core.Notifications.Webhook
{
public class WebhookArtistAddPayload : WebhookPayload
{
public WebhookArtist Artist { get; set; }
}
}

@ -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

@ -14,8 +14,9 @@ namespace NzbDrone.Core.Notifications.Webhook
DownloadFailure,
ImportFailure,
Rename,
AlbumDelete,
ArtistAdd,
ArtistDelete,
AlbumDelete,
Health,
Retag,
ApplicationUpdate,

@ -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);

Loading…
Cancel
Save