New: On Artist Add connection event

(cherry picked from commit dec6e140365981f0391a759db33f4f5de46adc24)

Closes #3531
This commit is contained in:
Mark McDowall 2023-04-14 16:44:49 -07:00 committed by Bogdan
parent f31ecaf03e
commit 5f9c616bff
43 changed files with 563 additions and 216 deletions

View file

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

View file

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

View file

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

View file

@ -9,8 +9,9 @@ namespace Lidarr.Api.V1.Notifications
public bool OnReleaseImport { get; set; } public bool OnReleaseImport { get; set; }
public bool OnUpgrade { get; set; } public bool OnUpgrade { get; set; }
public bool OnRename { get; set; } public bool OnRename { get; set; }
public bool OnAlbumDelete { get; set; } public bool OnArtistAdd { get; set; }
public bool OnArtistDelete { get; set; } public bool OnArtistDelete { get; set; }
public bool OnAlbumDelete { get; set; }
public bool OnHealthIssue { get; set; } public bool OnHealthIssue { get; set; }
public bool OnHealthRestored { get; set; } public bool OnHealthRestored { get; set; }
public bool OnDownloadFailure { get; set; } public bool OnDownloadFailure { get; set; }
@ -21,8 +22,9 @@ namespace Lidarr.Api.V1.Notifications
public bool SupportsOnReleaseImport { get; set; } public bool SupportsOnReleaseImport { get; set; }
public bool SupportsOnUpgrade { get; set; } public bool SupportsOnUpgrade { get; set; }
public bool SupportsOnRename { get; set; } public bool SupportsOnRename { get; set; }
public bool SupportsOnAlbumDelete { get; set; } public bool SupportsOnArtistAdd { get; set; }
public bool SupportsOnArtistDelete { get; set; } public bool SupportsOnArtistDelete { get; set; }
public bool SupportsOnAlbumDelete { get; set; }
public bool SupportsOnHealthIssue { get; set; } public bool SupportsOnHealthIssue { get; set; }
public bool SupportsOnHealthRestored { get; set; } public bool SupportsOnHealthRestored { get; set; }
public bool IncludeHealthWarnings { get; set; } public bool IncludeHealthWarnings { get; set; }
@ -48,8 +50,9 @@ namespace Lidarr.Api.V1.Notifications
resource.OnReleaseImport = definition.OnReleaseImport; resource.OnReleaseImport = definition.OnReleaseImport;
resource.OnUpgrade = definition.OnUpgrade; resource.OnUpgrade = definition.OnUpgrade;
resource.OnRename = definition.OnRename; resource.OnRename = definition.OnRename;
resource.OnAlbumDelete = definition.OnAlbumDelete; resource.OnArtistAdd = definition.OnArtistAdd;
resource.OnArtistDelete = definition.OnArtistDelete; resource.OnArtistDelete = definition.OnArtistDelete;
resource.OnAlbumDelete = definition.OnAlbumDelete;
resource.OnHealthIssue = definition.OnHealthIssue; resource.OnHealthIssue = definition.OnHealthIssue;
resource.OnHealthRestored = definition.OnHealthRestored; resource.OnHealthRestored = definition.OnHealthRestored;
resource.OnDownloadFailure = definition.OnDownloadFailure; resource.OnDownloadFailure = definition.OnDownloadFailure;
@ -60,8 +63,9 @@ namespace Lidarr.Api.V1.Notifications
resource.SupportsOnReleaseImport = definition.SupportsOnReleaseImport; resource.SupportsOnReleaseImport = definition.SupportsOnReleaseImport;
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade; resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
resource.SupportsOnRename = definition.SupportsOnRename; resource.SupportsOnRename = definition.SupportsOnRename;
resource.SupportsOnAlbumDelete = definition.SupportsOnAlbumDelete; resource.SupportsOnArtistAdd = definition.SupportsOnArtistAdd;
resource.SupportsOnArtistDelete = definition.SupportsOnArtistDelete; resource.SupportsOnArtistDelete = definition.SupportsOnArtistDelete;
resource.SupportsOnAlbumDelete = definition.SupportsOnAlbumDelete;
resource.SupportsOnHealthIssue = definition.SupportsOnHealthIssue; resource.SupportsOnHealthIssue = definition.SupportsOnHealthIssue;
resource.SupportsOnHealthRestored = definition.SupportsOnHealthRestored; resource.SupportsOnHealthRestored = definition.SupportsOnHealthRestored;
resource.IncludeHealthWarnings = definition.IncludeHealthWarnings; resource.IncludeHealthWarnings = definition.IncludeHealthWarnings;
@ -86,8 +90,9 @@ namespace Lidarr.Api.V1.Notifications
definition.OnReleaseImport = resource.OnReleaseImport; definition.OnReleaseImport = resource.OnReleaseImport;
definition.OnUpgrade = resource.OnUpgrade; definition.OnUpgrade = resource.OnUpgrade;
definition.OnRename = resource.OnRename; definition.OnRename = resource.OnRename;
definition.OnAlbumDelete = resource.OnAlbumDelete; definition.OnArtistAdd = resource.OnArtistAdd;
definition.OnArtistDelete = resource.OnArtistDelete; definition.OnArtistDelete = resource.OnArtistDelete;
definition.OnAlbumDelete = resource.OnAlbumDelete;
definition.OnHealthIssue = resource.OnHealthIssue; definition.OnHealthIssue = resource.OnHealthIssue;
definition.OnHealthRestored = resource.OnHealthRestored; definition.OnHealthRestored = resource.OnHealthRestored;
definition.OnDownloadFailure = resource.OnDownloadFailure; definition.OnDownloadFailure = resource.OnDownloadFailure;
@ -98,8 +103,9 @@ namespace Lidarr.Api.V1.Notifications
definition.SupportsOnReleaseImport = resource.SupportsOnReleaseImport; definition.SupportsOnReleaseImport = resource.SupportsOnReleaseImport;
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade; definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
definition.SupportsOnRename = resource.SupportsOnRename; definition.SupportsOnRename = resource.SupportsOnRename;
definition.SupportsOnAlbumDelete = resource.SupportsOnAlbumDelete; definition.SupportsOnArtistAdd = resource.SupportsOnArtistAdd;
definition.SupportsOnArtistDelete = resource.SupportsOnArtistDelete; definition.SupportsOnArtistDelete = resource.SupportsOnArtistDelete;
definition.SupportsOnAlbumDelete = resource.SupportsOnAlbumDelete;
definition.SupportsOnHealthIssue = resource.SupportsOnHealthIssue; definition.SupportsOnHealthIssue = resource.SupportsOnHealthIssue;
definition.SupportsOnHealthRestored = resource.SupportsOnHealthRestored; definition.SupportsOnHealthRestored = resource.SupportsOnHealthRestored;
definition.IncludeHealthWarnings = resource.IncludeHealthWarnings; definition.IncludeHealthWarnings = resource.IncludeHealthWarnings;

View file

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

View file

@ -86,8 +86,9 @@ namespace NzbDrone.Core.Datastore
.Ignore(i => i.SupportsOnReleaseImport) .Ignore(i => i.SupportsOnReleaseImport)
.Ignore(i => i.SupportsOnUpgrade) .Ignore(i => i.SupportsOnUpgrade)
.Ignore(i => i.SupportsOnRename) .Ignore(i => i.SupportsOnRename)
.Ignore(i => i.SupportsOnAlbumDelete) .Ignore(i => i.SupportsOnArtistAdd)
.Ignore(i => i.SupportsOnArtistDelete) .Ignore(i => i.SupportsOnArtistDelete)
.Ignore(i => i.SupportsOnAlbumDelete)
.Ignore(i => i.SupportsOnHealthIssue) .Ignore(i => i.SupportsOnHealthIssue)
.Ignore(i => i.SupportsOnHealthRestored) .Ignore(i => i.SupportsOnHealthRestored)
.Ignore(i => i.SupportsOnDownloadFailure) .Ignore(i => i.SupportsOnDownloadFailure)

View file

@ -532,7 +532,7 @@
"Importing": "Importing", "Importing": "Importing",
"Inactive": "Inactive", "Inactive": "Inactive",
"IncludeCustomFormatWhenRenamingHelpText": "'Include in {Custom Formats} renaming format'", "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", "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", "IncludeUnmonitored": "Include Unmonitored",
"Indexer": "Indexer", "Indexer": "Indexer",
@ -722,29 +722,18 @@
"NotificationTriggers": "Notification Triggers", "NotificationTriggers": "Notification Triggers",
"Ok": "Ok", "Ok": "Ok",
"OnAlbumDelete": "On Album Delete", "OnAlbumDelete": "On Album Delete",
"OnAlbumDeleteHelpText": "On Album Delete",
"OnApplicationUpdate": "On Application Update", "OnApplicationUpdate": "On Application Update",
"OnApplicationUpdateHelpText": "On Application Update", "OnArtistAdd": "On Artist Add",
"OnArtistDelete": "On Artist Delete", "OnArtistDelete": "On Artist Delete",
"OnArtistDeleteHelpText": "On Artist Delete",
"OnDownloadFailure": "On Download Failure", "OnDownloadFailure": "On Download Failure",
"OnDownloadFailureHelpText": "On Download Failure",
"OnGrab": "On Grab", "OnGrab": "On Grab",
"OnGrabHelpText": "On Grab",
"OnHealthIssue": "On Health Issue", "OnHealthIssue": "On Health Issue",
"OnHealthIssueHelpText": "On Health Issue",
"OnHealthRestored": "On Health Restored", "OnHealthRestored": "On Health Restored",
"OnHealthRestoredHelpText": "On Health Restored",
"OnImportFailure": "On Import Failure", "OnImportFailure": "On Import Failure",
"OnImportFailureHelpText": "On Import Failure",
"OnReleaseImport": "On Release Import", "OnReleaseImport": "On Release Import",
"OnReleaseImportHelpText": "On Release Import",
"OnRename": "On Rename", "OnRename": "On Rename",
"OnRenameHelpText": "On Rename",
"OnTrackRetag": "On Track Retag", "OnTrackRetag": "On Track Retag",
"OnTrackRetagHelpText": "On Track Retag",
"OnUpgrade": "On Upgrade", "OnUpgrade": "On Upgrade",
"OnUpgradeHelpText": "On Upgrade",
"OneAlbum": "1 album", "OneAlbum": "1 album",
"OnlyTorrent": "Only Torrent", "OnlyTorrent": "Only Torrent",
"OnlyUsenet": "Only Usenet", "OnlyUsenet": "Only Usenet",

View file

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

View file

@ -3,6 +3,7 @@ using NzbDrone.Core.IndexerSearch;
using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.MediaFiles.Events;
using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Music.Events;
namespace NzbDrone.Core.Music namespace NzbDrone.Core.Music
{ {
@ -13,27 +14,38 @@ namespace NzbDrone.Core.Music
private readonly IArtistService _artistService; private readonly IArtistService _artistService;
private readonly IManageCommandQueue _commandQueueManager; private readonly IManageCommandQueue _commandQueueManager;
private readonly IAlbumAddedService _albumAddedService; private readonly IAlbumAddedService _albumAddedService;
private readonly IEventAggregator _eventAggregator;
private readonly Logger _logger; private readonly Logger _logger;
public ArtistScannedHandler(IAlbumMonitoredService albumMonitoredService, public ArtistScannedHandler(IAlbumMonitoredService albumMonitoredService,
IArtistService artistService, IArtistService artistService,
IManageCommandQueue commandQueueManager, IManageCommandQueue commandQueueManager,
IAlbumAddedService albumAddedService, IAlbumAddedService albumAddedService,
IEventAggregator eventAggregator,
Logger logger) Logger logger)
{ {
_albumMonitoredService = albumMonitoredService; _albumMonitoredService = albumMonitoredService;
_artistService = artistService; _artistService = artistService;
_commandQueueManager = commandQueueManager; _commandQueueManager = commandQueueManager;
_albumAddedService = albumAddedService; _albumAddedService = albumAddedService;
_eventAggregator = eventAggregator;
_logger = logger; _logger = logger;
} }
private void HandleScanEvents(Artist artist) private void HandleScanEvents(Artist artist)
{ {
if (artist.AddOptions != null) var addOptions = artist.AddOptions;
if (addOptions == null)
{ {
_albumAddedService.SearchForRecentlyAdded(artist.Id);
return;
}
_logger.Info("[{0}] was recently added, performing post-add actions", artist.Name); _logger.Info("[{0}] was recently added, performing post-add actions", artist.Name);
_albumMonitoredService.SetAlbumMonitoredStatus(artist, artist.AddOptions); _albumMonitoredService.SetAlbumMonitoredStatus(artist, addOptions);
_eventAggregator.PublishEvent(new ArtistAddCompletedEvent(artist));
if (artist.AddOptions.SearchForMissingAlbums) if (artist.AddOptions.SearchForMissingAlbums)
{ {
@ -44,9 +56,6 @@ namespace NzbDrone.Core.Music
_artistService.RemoveAddOptions(artist); _artistService.RemoveAddOptions(artist);
} }
_albumAddedService.SearchForRecentlyAdded(artist.Id);
}
public void Handle(ArtistScannedEvent message) public void Handle(ArtistScannedEvent message)
{ {
HandleScanEvents(message.Artist); HandleScanEvents(message.Artist);

View file

@ -27,9 +27,9 @@ namespace NzbDrone.Core.Notifications.Apprise
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -37,6 +37,11 @@ namespace NzbDrone.Core.Notifications.Apprise
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

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

View file

@ -186,6 +186,45 @@ namespace NzbDrone.Core.Notifications.CustomScript
ExecuteScript(environmentVariables); ExecuteScript(environmentVariables);
} }
public override void OnArtistAdd(ArtistAddMessage message)
{
var artist = message.Artist;
var environmentVariables = new StringDictionary();
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_Title", artist.Metadata.Value.Name);
environmentVariables.Add("Lidarr_Artist_Path", artist.Path);
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)));
ExecuteScript(environmentVariables);
}
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
{
var artist = deleteMessage.Artist;
var environmentVariables = new StringDictionary();
environmentVariables.Add("Lidarr_EventType", "ArtistDeleted");
environmentVariables.Add("Lidarr_InstanceName", _configFileProvider.InstanceName);
environmentVariables.Add("Lidarr_ApplicationUrl", _configService.ApplicationUrl);
environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString());
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.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_Artist_DeletedFiles", deleteMessage.DeletedFiles.ToString());
ExecuteScript(environmentVariables);
}
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
{ {
var artist = deleteMessage.Album.Artist.Value; var artist = deleteMessage.Album.Artist.Value;
@ -212,26 +251,6 @@ namespace NzbDrone.Core.Notifications.CustomScript
ExecuteScript(environmentVariables); ExecuteScript(environmentVariables);
} }
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
{
var artist = deleteMessage.Artist;
var environmentVariables = new StringDictionary();
environmentVariables.Add("Lidarr_EventType", "ArtistDeleted");
environmentVariables.Add("Lidarr_InstanceName", _configFileProvider.InstanceName);
environmentVariables.Add("Lidarr_ApplicationUrl", _configService.ApplicationUrl);
environmentVariables.Add("Lidarr_Artist_Id", artist.Id.ToString());
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.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_Artist_DeletedFiles", deleteMessage.DeletedFiles.ToString());
ExecuteScript(environmentVariables);
}
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
var environmentVariables = new StringDictionary(); var environmentVariables = new StringDictionary();

View file

@ -234,6 +234,42 @@ namespace NzbDrone.Core.Notifications.Discord
_proxy.SendPayload(payload, Settings); _proxy.SendPayload(payload, Settings);
} }
public override void OnArtistAdd(ArtistAddMessage message)
{
var artist = message.Artist;
var attachments = new List<Embed>
{
new Embed
{
Title = artist.Name,
Description = message.Message
}
};
var payload = CreatePayload("Artist Added", attachments);
_proxy.SendPayload(payload, Settings);
}
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
{
var artist = deleteMessage.Artist;
var attachments = new List<Embed>
{
new Embed
{
Title = artist.Name,
Description = deleteMessage.DeletedFilesMessage
}
};
var payload = CreatePayload("Artist Deleted", attachments);
_proxy.SendPayload(payload, Settings);
}
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
{ {
var album = deleteMessage.Album; var album = deleteMessage.Album;
@ -252,24 +288,6 @@ namespace NzbDrone.Core.Notifications.Discord
_proxy.SendPayload(payload, Settings); _proxy.SendPayload(payload, Settings);
} }
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
{
var artist = deleteMessage.Artist;
var attachments = new List<Embed>
{
new Embed
{
Title = artist.Metadata.Value.Name,
Description = deleteMessage.DeletedFilesMessage
}
};
var payload = CreatePayload("Artist Deleted", attachments);
_proxy.SendPayload(payload, Settings);
}
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
var attachments = new List<Embed> var attachments = new List<Embed>

View file

@ -40,11 +40,11 @@ namespace NzbDrone.Core.Notifications.Email
SendEmail(Settings, ALBUM_DOWNLOADED_TITLE_BRANDED, body); 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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -54,6 +54,13 @@ namespace NzbDrone.Core.Notifications.Email
SendEmail(Settings, ARTIST_DELETED_TITLE_BRANDED, body); 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) public override void OnHealthIssue(HealthCheck.HealthCheck message)
{ {
SendEmail(Settings, HEALTH_ISSUE_TITLE_BRANDED, message.Message); SendEmail(Settings, HEALTH_ISSUE_TITLE_BRANDED, message.Message);

View file

@ -33,9 +33,9 @@ namespace NzbDrone.Core.Notifications.Gotify
SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, message.Artist); 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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -43,6 +43,11 @@ namespace NzbDrone.Core.Notifications.Gotify
SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, deleteMessage.Artist); 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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, null); SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, null);

View file

@ -12,8 +12,9 @@ namespace NzbDrone.Core.Notifications
void OnGrab(GrabMessage grabMessage); void OnGrab(GrabMessage grabMessage);
void OnReleaseImport(AlbumDownloadMessage message); void OnReleaseImport(AlbumDownloadMessage message);
void OnRename(Artist artist, List<RenamedTrackFile> renamedFiles); void OnRename(Artist artist, List<RenamedTrackFile> renamedFiles);
void OnAlbumDelete(AlbumDeleteMessage deleteMessage); void OnArtistAdd(ArtistAddMessage message);
void OnArtistDelete(ArtistDeleteMessage deleteMessage); void OnArtistDelete(ArtistDeleteMessage deleteMessage);
void OnAlbumDelete(AlbumDeleteMessage deleteMessage);
void OnHealthIssue(HealthCheck.HealthCheck healthCheck); void OnHealthIssue(HealthCheck.HealthCheck healthCheck);
void OnHealthRestored(HealthCheck.HealthCheck previousCheck); void OnHealthRestored(HealthCheck.HealthCheck previousCheck);
void OnApplicationUpdate(ApplicationUpdateMessage updateMessage); void OnApplicationUpdate(ApplicationUpdateMessage updateMessage);
@ -25,8 +26,9 @@ namespace NzbDrone.Core.Notifications
bool SupportsOnReleaseImport { get; } bool SupportsOnReleaseImport { get; }
bool SupportsOnUpgrade { get; } bool SupportsOnUpgrade { get; }
bool SupportsOnRename { get; } bool SupportsOnRename { get; }
bool SupportsOnAlbumDelete { get; } bool SupportsOnArtistAdd { get; }
bool SupportsOnArtistDelete { get; } bool SupportsOnArtistDelete { get; }
bool SupportsOnAlbumDelete { get; }
bool SupportsOnHealthIssue { get; } bool SupportsOnHealthIssue { get; }
bool SupportsOnHealthRestored { get; } bool SupportsOnHealthRestored { get; }
bool SupportsOnApplicationUpdate { get; } bool SupportsOnApplicationUpdate { get; }

View file

@ -27,9 +27,9 @@ namespace NzbDrone.Core.Notifications.Join
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -37,6 +37,11 @@ namespace NzbDrone.Core.Notifications.Join
_proxy.SendNotification(ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck message)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, message.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, message.Message, Settings);

View file

@ -29,9 +29,11 @@ namespace NzbDrone.Core.Notifications.Mailgun
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, downloadMessage.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -39,6 +41,11 @@ namespace NzbDrone.Core.Notifications.Mailgun
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheckMessage)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheckMessage.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheckMessage.Message, Settings);

View file

@ -47,16 +47,16 @@ namespace NzbDrone.Core.Notifications.Emby
} }
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) public override void OnArtistAdd(ArtistAddMessage message)
{ {
if (Settings.Notify) if (Settings.Notify)
{ {
_mediaBrowserService.Notify(Settings, ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message); _mediaBrowserService.Notify(Settings, ARTIST_ADDED_TITLE_BRANDED, message.Message);
} }
if (Settings.UpdateLibrary) 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) public override void OnHealthIssue(HealthCheck.HealthCheck message)
{ {
if (Settings.Notify) if (Settings.Notify)

View file

@ -52,9 +52,9 @@ namespace NzbDrone.Core.Notifications.Notifiarr
_proxy.SendNotification(BuildOnTrackRetagPayload(message), Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -62,6 +62,11 @@ namespace NzbDrone.Core.Notifications.Notifiarr
_proxy.SendNotification(BuildOnArtistDelete(deleteMessage), Settings); _proxy.SendNotification(BuildOnArtistDelete(deleteMessage), Settings);
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
{
_proxy.SendNotification(BuildOnAlbumDelete(deleteMessage), Settings);
}
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(BuildHealthPayload(healthCheck), Settings); _proxy.SendNotification(BuildHealthPayload(healthCheck), Settings);

View file

@ -12,8 +12,9 @@ namespace NzbDrone.Core.Notifications
{ {
protected const string ALBUM_GRABBED_TITLE = "Album Grabbed"; protected const string ALBUM_GRABBED_TITLE = "Album Grabbed";
protected const string ALBUM_DOWNLOADED_TITLE = "Album Downloaded"; 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 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_ISSUE_TITLE = "Health Check Failure";
protected const string HEALTH_RESTORED_TITLE = "Health Check Restored"; protected const string HEALTH_RESTORED_TITLE = "Health Check Restored";
protected const string DOWNLOAD_FAILURE_TITLE = "Download Failed"; 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_GRABBED_TITLE_BRANDED = "Lidarr - " + ALBUM_GRABBED_TITLE;
protected const string ALBUM_DOWNLOADED_TITLE_BRANDED = "Lidarr - " + ALBUM_DOWNLOADED_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 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_ISSUE_TITLE_BRANDED = "Lidarr - " + HEALTH_ISSUE_TITLE;
protected const string HEALTH_RESTORED_TITLE_BRANDED = "Lidarr - " + HEALTH_RESTORED_TITLE; protected const string HEALTH_RESTORED_TITLE_BRANDED = "Lidarr - " + HEALTH_RESTORED_TITLE;
protected const string DOWNLOAD_FAILURE_TITLE_BRANDED = "Lidarr - " + DOWNLOAD_FAILURE_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) public virtual void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
} }
@ -97,8 +103,9 @@ namespace NzbDrone.Core.Notifications
public bool SupportsOnRename => HasConcreteImplementation("OnRename"); public bool SupportsOnRename => HasConcreteImplementation("OnRename");
public bool SupportsOnReleaseImport => HasConcreteImplementation("OnReleaseImport"); public bool SupportsOnReleaseImport => HasConcreteImplementation("OnReleaseImport");
public bool SupportsOnUpgrade => SupportsOnReleaseImport; public bool SupportsOnUpgrade => SupportsOnReleaseImport;
public bool SupportsOnAlbumDelete => HasConcreteImplementation("OnAlbumDelete"); public bool SupportsOnArtistAdd => HasConcreteImplementation("OnArtistAdd");
public bool SupportsOnArtistDelete => HasConcreteImplementation("OnArtistDelete"); public bool SupportsOnArtistDelete => HasConcreteImplementation("OnArtistDelete");
public bool SupportsOnAlbumDelete => HasConcreteImplementation("OnAlbumDelete");
public bool SupportsOnHealthIssue => HasConcreteImplementation("OnHealthIssue"); public bool SupportsOnHealthIssue => HasConcreteImplementation("OnHealthIssue");
public bool SupportsOnHealthRestored => HasConcreteImplementation("OnHealthRestored"); public bool SupportsOnHealthRestored => HasConcreteImplementation("OnHealthRestored");
public bool SupportsOnDownloadFailure => HasConcreteImplementation("OnDownloadFailure"); public bool SupportsOnDownloadFailure => HasConcreteImplementation("OnDownloadFailure");

View file

@ -8,8 +8,9 @@ namespace NzbDrone.Core.Notifications
public bool OnReleaseImport { get; set; } public bool OnReleaseImport { get; set; }
public bool OnUpgrade { get; set; } public bool OnUpgrade { get; set; }
public bool OnRename { get; set; } public bool OnRename { get; set; }
public bool OnAlbumDelete { get; set; } public bool OnArtistAdd { get; set; }
public bool OnArtistDelete { get; set; } public bool OnArtistDelete { get; set; }
public bool OnAlbumDelete { get; set; }
public bool OnHealthIssue { get; set; } public bool OnHealthIssue { get; set; }
public bool OnHealthRestored { get; set; } public bool OnHealthRestored { get; set; }
public bool OnDownloadFailure { get; set; } public bool OnDownloadFailure { get; set; }
@ -20,8 +21,9 @@ namespace NzbDrone.Core.Notifications
public bool SupportsOnReleaseImport { get; set; } public bool SupportsOnReleaseImport { get; set; }
public bool SupportsOnUpgrade { get; set; } public bool SupportsOnUpgrade { get; set; }
public bool SupportsOnRename { get; set; } public bool SupportsOnRename { get; set; }
public bool SupportsOnAlbumDelete { get; set; } public bool SupportsOnArtistAdd { get; set; }
public bool SupportsOnArtistDelete { get; set; } public bool SupportsOnArtistDelete { get; set; }
public bool SupportsOnAlbumDelete { get; set; }
public bool SupportsOnHealthIssue { get; set; } public bool SupportsOnHealthIssue { get; set; }
public bool SupportsOnHealthRestored { get; set; } public bool SupportsOnHealthRestored { get; set; }
public bool IncludeHealthWarnings { get; set; } public bool IncludeHealthWarnings { get; set; }
@ -30,6 +32,6 @@ namespace NzbDrone.Core.Notifications
public bool SupportsOnTrackRetag { get; set; } public bool SupportsOnTrackRetag { get; set; }
public bool SupportsOnApplicationUpdate { 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;
} }
} }

View file

@ -14,8 +14,9 @@ namespace NzbDrone.Core.Notifications
List<INotification> OnReleaseImportEnabled(bool filterBlockedNotifications = true); List<INotification> OnReleaseImportEnabled(bool filterBlockedNotifications = true);
List<INotification> OnUpgradeEnabled(bool filterBlockedNotifications = true); List<INotification> OnUpgradeEnabled(bool filterBlockedNotifications = true);
List<INotification> OnRenameEnabled(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> OnArtistDeleteEnabled(bool filterBlockedNotifications = true);
List<INotification> OnAlbumDeleteEnabled(bool filterBlockedNotifications = true);
List<INotification> OnHealthIssueEnabled(bool filterBlockedNotifications = true); List<INotification> OnHealthIssueEnabled(bool filterBlockedNotifications = true);
List<INotification> OnHealthRestoredEnabled(bool filterBlockedNotifications = true); List<INotification> OnHealthRestoredEnabled(bool filterBlockedNotifications = true);
List<INotification> OnDownloadFailureEnabled(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(); 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) 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) public List<INotification> OnArtistDeleteEnabled(bool filterBlockedNotifications = true)
@ -101,6 +102,16 @@ namespace NzbDrone.Core.Notifications
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnArtistDelete).ToList(); 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) public List<INotification> OnHealthIssueEnabled(bool filterBlockedNotifications = true)
{ {
if (filterBlockedNotifications) if (filterBlockedNotifications)
@ -185,8 +196,9 @@ namespace NzbDrone.Core.Notifications
definition.SupportsOnReleaseImport = provider.SupportsOnReleaseImport; definition.SupportsOnReleaseImport = provider.SupportsOnReleaseImport;
definition.SupportsOnUpgrade = provider.SupportsOnUpgrade; definition.SupportsOnUpgrade = provider.SupportsOnUpgrade;
definition.SupportsOnRename = provider.SupportsOnRename; definition.SupportsOnRename = provider.SupportsOnRename;
definition.SupportsOnAlbumDelete = provider.SupportsOnAlbumDelete; definition.SupportsOnArtistAdd = provider.SupportsOnArtistAdd;
definition.SupportsOnArtistDelete = provider.SupportsOnArtistDelete; definition.SupportsOnArtistDelete = provider.SupportsOnArtistDelete;
definition.SupportsOnAlbumDelete = provider.SupportsOnAlbumDelete;
definition.SupportsOnHealthIssue = provider.SupportsOnHealthIssue; definition.SupportsOnHealthIssue = provider.SupportsOnHealthIssue;
definition.SupportsOnHealthRestored = provider.SupportsOnHealthRestored; definition.SupportsOnHealthRestored = provider.SupportsOnHealthRestored;
definition.SupportsOnDownloadFailure = provider.SupportsOnDownloadFailure; definition.SupportsOnDownloadFailure = provider.SupportsOnDownloadFailure;

View file

@ -20,8 +20,9 @@ namespace NzbDrone.Core.Notifications
: IHandle<AlbumGrabbedEvent>, : IHandle<AlbumGrabbedEvent>,
IHandle<AlbumImportedEvent>, IHandle<AlbumImportedEvent>,
IHandle<ArtistRenamedEvent>, IHandle<ArtistRenamedEvent>,
IHandle<AlbumDeletedEvent>, IHandle<ArtistAddCompletedEvent>,
IHandle<ArtistsDeletedEvent>, IHandle<ArtistsDeletedEvent>,
IHandle<AlbumDeletedEvent>,
IHandle<HealthCheckFailedEvent>, IHandle<HealthCheckFailedEvent>,
IHandle<HealthCheckRestoredEvent>, IHandle<HealthCheckRestoredEvent>,
IHandle<DownloadFailedEvent>, 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 try
{ {
if (ShouldHandleArtist(notification.Definition, deleteMessage.Album.Artist)) if (ShouldHandleArtist(notification.Definition, artist))
{ {
notification.OnAlbumDelete(deleteMessage); notification.OnArtistAdd(addMessage);
_notificationStatusService.RecordSuccess(notification.Definition.Id); _notificationStatusService.RecordSuccess(notification.Definition.Id);
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
_notificationStatusService.RecordFailure(notification.Definition.Id); _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) public void Handle(HealthCheckFailedEvent message)
{ {
// Don't send health check notifications during the start up grace period, // Don't send health check notifications during the start up grace period,

View file

@ -28,9 +28,9 @@ namespace NzbDrone.Core.Notifications.Ntfy
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -38,6 +38,11 @@ namespace NzbDrone.Core.Notifications.Ntfy
_proxy.SendNotification(ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings);

View file

@ -54,12 +54,9 @@ namespace NzbDrone.Core.Notifications.Plex.Server
UpdateIfEnabled(message.Artist); UpdateIfEnabled(message.Artist);
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) public override void OnArtistAdd(ArtistAddMessage message)
{ {
if (deleteMessage.DeletedFiles) UpdateIfEnabled(message.Artist);
{
UpdateIfEnabled(deleteMessage.Album.Artist);
}
} }
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -70,6 +67,14 @@ namespace NzbDrone.Core.Notifications.Plex.Server
} }
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
{
if (deleteMessage.DeletedFiles)
{
UpdateIfEnabled(deleteMessage.Album.Artist);
}
}
private void UpdateIfEnabled(Artist artist) private void UpdateIfEnabled(Artist artist)
{ {
_plexTvService.Ping(Settings.AuthToken); _plexTvService.Ping(Settings.AuthToken);

View file

@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Prowl
_prowlProxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Prowl
_prowlProxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -29,9 +29,9 @@ namespace NzbDrone.Core.Notifications.PushBullet
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -39,6 +39,11 @@ namespace NzbDrone.Core.Notifications.PushBullet
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings);

View file

@ -36,9 +36,9 @@ namespace NzbDrone.Core.Notifications.Pushcut
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -46,6 +46,11 @@ namespace NzbDrone.Core.Notifications.Pushcut
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Pushover
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Pushover
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -29,9 +29,9 @@ namespace NzbDrone.Core.Notifications.SendGrid
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -39,6 +39,11 @@ namespace NzbDrone.Core.Notifications.SendGrid
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Signal
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Signal
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Simplepush
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Simplepush
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -70,18 +70,17 @@ namespace NzbDrone.Core.Notifications.Slack
_proxy.SendPayload(payload, Settings); _proxy.SendPayload(payload, Settings);
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) public override void OnArtistAdd(ArtistAddMessage message)
{ {
var attachments = new List<Attachment> var attachments = new List<Attachment>
{ {
new Attachment new Attachment
{ {
Title = deleteMessage.Album.Title, Title = message.Artist.Metadata.Value.Name,
Text = deleteMessage.DeletedFilesMessage
} }
}; };
var payload = CreatePayload("Album Deleted", attachments); var payload = CreatePayload("Artist Added", attachments);
_proxy.SendPayload(payload, Settings); _proxy.SendPayload(payload, Settings);
} }
@ -102,6 +101,22 @@ namespace NzbDrone.Core.Notifications.Slack
_proxy.SendPayload(payload, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
var attachments = new List<Attachment> var attachments = new List<Attachment>

View file

@ -41,9 +41,9 @@ namespace NzbDrone.Core.Notifications.Subsonic
Update(); 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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -51,6 +51,11 @@ namespace NzbDrone.Core.Notifications.Subsonic
Notify(Settings, ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message); 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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message); Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message);

View file

@ -55,14 +55,11 @@ namespace NzbDrone.Core.Notifications.Synology
} }
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage) public override void OnArtistAdd(ArtistAddMessage message)
{
if (deleteMessage.DeletedFiles)
{ {
if (Settings.UpdateLibrary) if (Settings.UpdateLibrary)
{ {
_indexerProxy.DeleteFolder(deleteMessage.Album.Artist.Value.Path); _indexerProxy.UpdateFolder(message.Artist.Path);
}
} }
} }
@ -77,6 +74,17 @@ namespace NzbDrone.Core.Notifications.Synology
} }
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
{
if (deleteMessage.DeletedFiles)
{
if (Settings.UpdateLibrary)
{
_indexerProxy.DeleteFolder(deleteMessage.Album.Artist.Value.Path);
}
}
}
public override ValidationResult Test() public override ValidationResult Test()
{ {
var failures = new List<ValidationFailure>(); var failures = new List<ValidationFailure>();

View file

@ -26,9 +26,9 @@ namespace NzbDrone.Core.Notifications.Telegram
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -36,6 +36,11 @@ namespace NzbDrone.Core.Notifications.Telegram
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings); _proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);

View file

@ -28,9 +28,9 @@ namespace NzbDrone.Core.Notifications.Twitter
_twitterService.SendNotification($"Imported: {message.Message}", Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -38,6 +38,11 @@ namespace NzbDrone.Core.Notifications.Twitter
_twitterService.SendNotification($"Artist Deleted: {deleteMessage.Message}", Settings); _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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_twitterService.SendNotification($"Health Issue: {healthCheck.Message}", Settings); _twitterService.SendNotification($"Health Issue: {healthCheck.Message}", Settings);

View file

@ -50,9 +50,9 @@ namespace NzbDrone.Core.Notifications.Webhook
_proxy.SendWebhook(BuildOnTrackRetagPayload(message), Settings); _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) public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
@ -60,6 +60,11 @@ namespace NzbDrone.Core.Notifications.Webhook
_proxy.SendWebhook(BuildOnArtistDelete(deleteMessage), Settings); _proxy.SendWebhook(BuildOnArtistDelete(deleteMessage), Settings);
} }
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
{
_proxy.SendWebhook(BuildOnAlbumDelete(deleteMessage), Settings);
}
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
_proxy.SendWebhook(BuildHealthPayload(healthCheck), Settings); _proxy.SendWebhook(BuildHealthPayload(healthCheck), Settings);

View file

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

View file

@ -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, InstanceName = _configFileProvider.InstanceName,
ApplicationUrl = _configService.ApplicationUrl, ApplicationUrl = _configService.ApplicationUrl,
Album = new WebhookAlbum(deleteMessage.Album), Artist = new WebhookArtist(addMessage.Artist),
DeletedFiles = deleteMessage.DeletedFiles
}; };
} }
@ -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) protected WebhookHealthPayload BuildHealthPayload(HealthCheck.HealthCheck healthCheck)
{ {
return new WebhookHealthPayload return new WebhookHealthPayload

View file

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

View file

@ -42,6 +42,25 @@ namespace NzbDrone.Core.Notifications.Xbmc
UpdateAndClean(artist); 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) public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
{ {
Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message); Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message);