mirror of https://github.com/lidarr/Lidarr
New: OnDelete Notifications
Closes #1933 Closes #1936 Closes #1937 Closes #1938 Closes #1939 Closes #2189 Closes #2444 Closes #2604 Co-Authored-By: Robin Dadswell <19610103+RobinDadswell@users.noreply.github.com>
This commit is contained in:
parent
e67f0becad
commit
cb34495e0a
|
@ -59,6 +59,8 @@ class Notification extends Component {
|
|||
onReleaseImport,
|
||||
onUpgrade,
|
||||
onRename,
|
||||
onAlbumDelete,
|
||||
onArtistDelete,
|
||||
onHealthIssue,
|
||||
onDownloadFailure,
|
||||
onImportFailure,
|
||||
|
@ -68,6 +70,8 @@ class Notification extends Component {
|
|||
supportsOnReleaseImport,
|
||||
supportsOnUpgrade,
|
||||
supportsOnRename,
|
||||
supportsOnAlbumDelete,
|
||||
supportsOnArtistDelete,
|
||||
supportsOnHealthIssue,
|
||||
supportsOnDownloadFailure,
|
||||
supportsOnImportFailure,
|
||||
|
@ -120,6 +124,20 @@ class Notification extends Component {
|
|||
</Label>
|
||||
}
|
||||
|
||||
{
|
||||
supportsOnAlbumDelete && onAlbumDelete &&
|
||||
<Label kind={kinds.SUCCESS}>
|
||||
{translate('OnAlbumDelete')}
|
||||
</Label>
|
||||
}
|
||||
|
||||
{
|
||||
supportsOnArtistDelete && onArtistDelete &&
|
||||
<Label kind={kinds.SUCCESS}>
|
||||
{translate('OnArtistDelete')}
|
||||
</Label>
|
||||
}
|
||||
|
||||
{
|
||||
supportsOnHealthIssue && onHealthIssue &&
|
||||
<Label kind={kinds.SUCCESS}>
|
||||
|
@ -149,7 +167,7 @@ class Notification extends Component {
|
|||
}
|
||||
|
||||
{
|
||||
!onGrab && !onReleaseImport && !onRename && !onTrackRetag &&
|
||||
!onGrab && !onReleaseImport && !onRename && !onTrackRetag && !onAlbumDelete && !onArtistDelete &&
|
||||
!onHealthIssue && !onDownloadFailure && !onImportFailure && !onApplicationUpdate &&
|
||||
<Label
|
||||
kind={kinds.DISABLED}
|
||||
|
@ -187,6 +205,8 @@ Notification.propTypes = {
|
|||
onReleaseImport: PropTypes.bool.isRequired,
|
||||
onUpgrade: PropTypes.bool.isRequired,
|
||||
onRename: PropTypes.bool.isRequired,
|
||||
onAlbumDelete: PropTypes.bool.isRequired,
|
||||
onArtistDelete: PropTypes.bool.isRequired,
|
||||
onHealthIssue: PropTypes.bool.isRequired,
|
||||
onDownloadFailure: PropTypes.bool.isRequired,
|
||||
onImportFailure: PropTypes.bool.isRequired,
|
||||
|
@ -196,6 +216,8 @@ Notification.propTypes = {
|
|||
supportsOnReleaseImport: PropTypes.bool.isRequired,
|
||||
supportsOnUpgrade: PropTypes.bool.isRequired,
|
||||
supportsOnRename: PropTypes.bool.isRequired,
|
||||
supportsOnAlbumDelete: PropTypes.bool.isRequired,
|
||||
supportsOnArtistDelete: PropTypes.bool.isRequired,
|
||||
supportsOnHealthIssue: PropTypes.bool.isRequired,
|
||||
supportsOnDownloadFailure: PropTypes.bool.isRequired,
|
||||
supportsOnImportFailure: PropTypes.bool.isRequired,
|
||||
|
|
|
@ -19,6 +19,8 @@ function NotificationEventItems(props) {
|
|||
onReleaseImport,
|
||||
onUpgrade,
|
||||
onRename,
|
||||
onAlbumDelete,
|
||||
onArtistDelete,
|
||||
onHealthIssue,
|
||||
onDownloadFailure,
|
||||
onImportFailure,
|
||||
|
@ -28,6 +30,8 @@ function NotificationEventItems(props) {
|
|||
supportsOnReleaseImport,
|
||||
supportsOnUpgrade,
|
||||
supportsOnRename,
|
||||
supportsOnAlbumDelete,
|
||||
supportsOnArtistDelete,
|
||||
supportsOnHealthIssue,
|
||||
includeHealthWarnings,
|
||||
supportsOnDownloadFailure,
|
||||
|
@ -127,6 +131,28 @@ function NotificationEventItems(props) {
|
|||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="onAlbumDelete"
|
||||
helpText={translate('OnAlbumDeleteHelpText')}
|
||||
isDisabled={!supportsOnAlbumDelete.value}
|
||||
{...onAlbumDelete}
|
||||
onChange={onInputChange}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="onArtistDelete"
|
||||
helpText={translate('OnArtistDeleteHelpText')}
|
||||
isDisabled={!supportsOnArtistDelete.value}
|
||||
{...onArtistDelete}
|
||||
onChange={onInputChange}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
|
@ -162,7 +188,6 @@ function NotificationEventItems(props) {
|
|||
/>
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</FormGroup>
|
||||
|
|
|
@ -9,6 +9,8 @@ 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 OnArtistDelete { get; set; }
|
||||
public bool OnHealthIssue { get; set; }
|
||||
public bool OnDownloadFailure { get; set; }
|
||||
public bool OnImportFailure { get; set; }
|
||||
|
@ -18,6 +20,8 @@ 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 SupportsOnArtistDelete { get; set; }
|
||||
public bool SupportsOnHealthIssue { get; set; }
|
||||
public bool IncludeHealthWarnings { get; set; }
|
||||
public bool SupportsOnDownloadFailure { get; set; }
|
||||
|
@ -42,6 +46,8 @@ namespace Lidarr.Api.V1.Notifications
|
|||
resource.OnReleaseImport = definition.OnReleaseImport;
|
||||
resource.OnUpgrade = definition.OnUpgrade;
|
||||
resource.OnRename = definition.OnRename;
|
||||
resource.OnAlbumDelete = definition.OnAlbumDelete;
|
||||
resource.OnArtistDelete = definition.OnArtistDelete;
|
||||
resource.OnHealthIssue = definition.OnHealthIssue;
|
||||
resource.OnDownloadFailure = definition.OnDownloadFailure;
|
||||
resource.OnImportFailure = definition.OnImportFailure;
|
||||
|
@ -51,6 +57,8 @@ namespace Lidarr.Api.V1.Notifications
|
|||
resource.SupportsOnReleaseImport = definition.SupportsOnReleaseImport;
|
||||
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
||||
resource.SupportsOnRename = definition.SupportsOnRename;
|
||||
resource.SupportsOnAlbumDelete = definition.SupportsOnAlbumDelete;
|
||||
resource.SupportsOnArtistDelete = definition.SupportsOnArtistDelete;
|
||||
resource.SupportsOnHealthIssue = definition.SupportsOnHealthIssue;
|
||||
resource.IncludeHealthWarnings = definition.IncludeHealthWarnings;
|
||||
resource.SupportsOnDownloadFailure = definition.SupportsOnDownloadFailure;
|
||||
|
@ -74,6 +82,8 @@ namespace Lidarr.Api.V1.Notifications
|
|||
definition.OnReleaseImport = resource.OnReleaseImport;
|
||||
definition.OnUpgrade = resource.OnUpgrade;
|
||||
definition.OnRename = resource.OnRename;
|
||||
definition.OnAlbumDelete = resource.OnAlbumDelete;
|
||||
definition.OnArtistDelete = resource.OnArtistDelete;
|
||||
definition.OnHealthIssue = resource.OnHealthIssue;
|
||||
definition.OnDownloadFailure = resource.OnDownloadFailure;
|
||||
definition.OnImportFailure = resource.OnImportFailure;
|
||||
|
@ -83,6 +93,8 @@ namespace Lidarr.Api.V1.Notifications
|
|||
definition.SupportsOnReleaseImport = resource.SupportsOnReleaseImport;
|
||||
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
||||
definition.SupportsOnRename = resource.SupportsOnRename;
|
||||
definition.SupportsOnAlbumDelete = resource.SupportsOnAlbumDelete;
|
||||
definition.SupportsOnArtistDelete = resource.SupportsOnArtistDelete;
|
||||
definition.SupportsOnHealthIssue = resource.SupportsOnHealthIssue;
|
||||
definition.IncludeHealthWarnings = resource.IncludeHealthWarnings;
|
||||
definition.SupportsOnDownloadFailure = resource.SupportsOnDownloadFailure;
|
||||
|
|
|
@ -62,6 +62,16 @@ namespace NzbDrone.Core.Test.NotificationTests
|
|||
TestLogger.Info("OnRename was called");
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
TestLogger.Info("Album OnDelete was called");
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
TestLogger.Info("Artist OnDelete was called");
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(NzbDrone.Core.HealthCheck.HealthCheck artist)
|
||||
{
|
||||
TestLogger.Info("OnHealthIssue was called");
|
||||
|
@ -125,6 +135,8 @@ namespace NzbDrone.Core.Test.NotificationTests
|
|||
notification.SupportsOnImportFailure.Should().BeTrue();
|
||||
notification.SupportsOnTrackRetag.Should().BeTrue();
|
||||
notification.SupportsOnApplicationUpdate.Should().BeTrue();
|
||||
notification.SupportsOnAlbumDelete.Should().BeTrue();
|
||||
notification.SupportsOnArtistDelete.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -141,6 +153,8 @@ namespace NzbDrone.Core.Test.NotificationTests
|
|||
notification.SupportsOnImportFailure.Should().BeFalse();
|
||||
notification.SupportsOnTrackRetag.Should().BeFalse();
|
||||
notification.SupportsOnApplicationUpdate.Should().BeFalse();
|
||||
notification.SupportsOnAlbumDelete.Should().BeFalse();
|
||||
notification.SupportsOnArtistDelete.Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(062)]
|
||||
public class add_on_delete_to_notifications : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Alter.Table("Notifications").AddColumn("OnArtistDelete").AsBoolean().WithDefaultValue(false);
|
||||
Alter.Table("Notifications").AddColumn("OnAlbumDelete").AsBoolean().WithDefaultValue(false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -81,6 +81,8 @@ namespace NzbDrone.Core.Datastore
|
|||
.Ignore(i => i.SupportsOnReleaseImport)
|
||||
.Ignore(i => i.SupportsOnUpgrade)
|
||||
.Ignore(i => i.SupportsOnRename)
|
||||
.Ignore(i => i.SupportsOnAlbumDelete)
|
||||
.Ignore(i => i.SupportsOnArtistDelete)
|
||||
.Ignore(i => i.SupportsOnHealthIssue)
|
||||
.Ignore(i => i.SupportsOnDownloadFailure)
|
||||
.Ignore(i => i.SupportsOnImportFailure)
|
||||
|
|
|
@ -497,8 +497,12 @@
|
|||
"NotificationTriggers": "Notification Triggers",
|
||||
"NoUpdatesAreAvailable": "No updates are available",
|
||||
"Ok": "Ok",
|
||||
"OnAlbumDeleteHelpText": "On Album Delete",
|
||||
"OnAlbumDelete": "On Album Delete",
|
||||
"OnArtistDelete": "On Artist Delete",
|
||||
"OnApplicationUpdate": "On Application Update",
|
||||
"OnApplicationUpdateHelpText": "On Application Update",
|
||||
"OnArtistDeleteHelpText": "On Artist Delete",
|
||||
"OnDownloadFailure": "On Download Failure",
|
||||
"OnDownloadFailureHelpText": "On Download Failure",
|
||||
"OnGrab": "On Grab",
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
using NzbDrone.Common.Messaging;
|
||||
|
||||
namespace NzbDrone.Core.MediaFiles.Events
|
||||
{
|
||||
public class DeleteCompletedEvent : IEvent
|
||||
{
|
||||
}
|
||||
}
|
|
@ -30,6 +30,7 @@ namespace NzbDrone.Core.MediaFiles
|
|||
private readonly IMediaFileService _mediaFileService;
|
||||
private readonly IArtistService _artistService;
|
||||
private readonly IConfigService _configService;
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public MediaFileDeletionService(IDiskProvider diskProvider,
|
||||
|
@ -37,6 +38,7 @@ namespace NzbDrone.Core.MediaFiles
|
|||
IMediaFileService mediaFileService,
|
||||
IArtistService artistService,
|
||||
IConfigService configService,
|
||||
IEventAggregator eventAggregator,
|
||||
Logger logger)
|
||||
{
|
||||
_diskProvider = diskProvider;
|
||||
|
@ -44,6 +46,7 @@ namespace NzbDrone.Core.MediaFiles
|
|||
_mediaFileService = mediaFileService;
|
||||
_artistService = artistService;
|
||||
_configService = configService;
|
||||
_eventAggregator = eventAggregator;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
@ -97,6 +100,8 @@ namespace NzbDrone.Core.MediaFiles
|
|||
|
||||
// Delete the track file from the database to clean it up even if the file was already deleted
|
||||
_mediaFileService.Delete(trackFile, DeleteMediaFileReason.Manual);
|
||||
|
||||
_eventAggregator.PublishEvent(new DeleteCompletedEvent());
|
||||
}
|
||||
|
||||
public void HandleAsync(ArtistsDeletedEvent message)
|
||||
|
@ -133,6 +138,8 @@ namespace NzbDrone.Core.MediaFiles
|
|||
_recycleBinProvider.DeleteFolder(artist.Path);
|
||||
}
|
||||
}
|
||||
|
||||
_eventAggregator.PublishEvent(new DeleteCompletedEvent());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -141,10 +148,13 @@ namespace NzbDrone.Core.MediaFiles
|
|||
if (message.DeleteFiles)
|
||||
{
|
||||
var files = _mediaFileService.GetFilesByAlbum(message.Album.Id);
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
_recycleBinProvider.DeleteFile(file.Path);
|
||||
}
|
||||
|
||||
_eventAggregator.PublishEvent(new DeleteCompletedEvent());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
using NzbDrone.Core.Music;
|
||||
|
||||
namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
public class AlbumDeleteMessage
|
||||
{
|
||||
public string Message { get; set; }
|
||||
public Album Album { get; set; }
|
||||
public bool DeletedFiles { get; set; }
|
||||
public string DeletedFilesMessage { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Message;
|
||||
}
|
||||
|
||||
public AlbumDeleteMessage(Album album, bool deleteFiles)
|
||||
{
|
||||
Album = album;
|
||||
DeletedFiles = deleteFiles;
|
||||
DeletedFilesMessage = DeletedFiles ?
|
||||
"Album removed and all files were deleted" :
|
||||
"Album removed, files were not deleted";
|
||||
Message = album.Title + " - " + DeletedFilesMessage;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Music;
|
||||
|
||||
namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
public class ArtistDeleteMessage
|
||||
{
|
||||
public string Message { get; set; }
|
||||
public Artist Artist { get; set; }
|
||||
public bool DeletedFiles { get; set; }
|
||||
public string DeletedFilesMessage { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Message;
|
||||
}
|
||||
|
||||
public ArtistDeleteMessage(Artist artist, bool deleteFiles)
|
||||
{
|
||||
Artist = artist;
|
||||
DeletedFiles = deleteFiles;
|
||||
DeletedFilesMessage = DeletedFiles ?
|
||||
"Artist removed and all files were deleted" :
|
||||
"Artist removed, files were not deleted";
|
||||
Message = artist.Metadata.Value.Name + " - " + DeletedFilesMessage;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -26,6 +26,16 @@ namespace NzbDrone.Core.Notifications.Boxcar
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, message.Message, Settings);
|
||||
|
|
|
@ -145,6 +145,43 @@ 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_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_Album_Id", album.Id.ToString());
|
||||
environmentVariables.Add("Lidarr_Album_Title", album.Title);
|
||||
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 OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
var artist = deleteMessage.Artist;
|
||||
var environmentVariables = new StringDictionary();
|
||||
|
||||
environmentVariables.Add("Lidarr_EventType", "ArtistDeleted");
|
||||
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_DeletedFiles", deleteMessage.DeletedFiles.ToString());
|
||||
|
||||
ExecuteScript(environmentVariables);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
var environmentVariables = new StringDictionary();
|
||||
|
|
|
@ -221,6 +221,42 @@ namespace NzbDrone.Core.Notifications.Discord
|
|||
_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 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)
|
||||
{
|
||||
var attachments = new List<Embed>
|
||||
|
|
|
@ -41,6 +41,20 @@ namespace NzbDrone.Core.Notifications.Email
|
|||
SendEmail(Settings, ALBUM_DOWNLOADED_TITLE_BRANDED, body);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
var body = $"{deleteMessage.Message}";
|
||||
|
||||
SendEmail(Settings, ALBUM_DELETED_TITLE_BRANDED, body);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
var body = $"{deleteMessage.Message}";
|
||||
|
||||
SendEmail(Settings, ARTIST_DELETED_TITLE_BRANDED, body);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||
{
|
||||
SendEmail(Settings, HEALTH_ISSUE_TITLE_BRANDED, message.Message);
|
||||
|
@ -155,7 +169,7 @@ namespace NzbDrone.Core.Notifications.Email
|
|||
|
||||
try
|
||||
{
|
||||
SendEmail(settings, "Sonarr - Test Notification", body);
|
||||
SendEmail(settings, "Lidarr - Test Notification", body);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
|
@ -29,6 +29,16 @@ namespace NzbDrone.Core.Notifications.Gotify
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
||||
|
|
|
@ -10,6 +10,8 @@ namespace NzbDrone.Core.Notifications
|
|||
void OnGrab(GrabMessage grabMessage);
|
||||
void OnReleaseImport(AlbumDownloadMessage message);
|
||||
void OnRename(Artist artist);
|
||||
void OnAlbumDelete(AlbumDeleteMessage deleteMessage);
|
||||
void OnArtistDelete(ArtistDeleteMessage deleteMessage);
|
||||
void OnHealthIssue(HealthCheck.HealthCheck healthCheck);
|
||||
void OnApplicationUpdate(ApplicationUpdateMessage updateMessage);
|
||||
void OnDownloadFailure(DownloadFailedMessage message);
|
||||
|
@ -20,6 +22,8 @@ namespace NzbDrone.Core.Notifications
|
|||
bool SupportsOnReleaseImport { get; }
|
||||
bool SupportsOnUpgrade { get; }
|
||||
bool SupportsOnRename { get; }
|
||||
bool SupportsOnAlbumDelete { get; }
|
||||
bool SupportsOnArtistDelete { get; }
|
||||
bool SupportsOnHealthIssue { get; }
|
||||
bool SupportsOnApplicationUpdate { get; }
|
||||
bool SupportsOnDownloadFailure { get; }
|
||||
|
|
|
@ -27,6 +27,16 @@ namespace NzbDrone.Core.Notifications.Join
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, message.Message, Settings);
|
||||
|
|
|
@ -29,6 +29,16 @@ namespace NzbDrone.Core.Notifications.Mailgun
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, downloadMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheckMessage)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheckMessage.Message, Settings);
|
||||
|
|
|
@ -46,6 +46,32 @@ 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 OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
if (Settings.Notify)
|
||||
{
|
||||
_mediaBrowserService.Notify(Settings, ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message);
|
||||
}
|
||||
|
||||
if (Settings.UpdateLibrary)
|
||||
{
|
||||
_mediaBrowserService.Update(Settings, deleteMessage.Artist);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||
{
|
||||
if (Settings.Notify)
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace NzbDrone.Core.Notifications.Emby
|
|||
[FieldDefinition(4, Label = "Send Notifications", HelpText = "Have MediaBrowser send notifications to configured providers", Type = FieldType.Checkbox)]
|
||||
public bool Notify { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Update Library", HelpText = "Update Library on Import & Rename?", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(5, Label = "Update Library", HelpText = "Update Library on Import, Rename, & Delete?", Type = FieldType.Checkbox)]
|
||||
public bool UpdateLibrary { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
|
|
|
@ -11,6 +11,8 @@ 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_DELETED_TITLE = "Artist Deleted";
|
||||
protected const string HEALTH_ISSUE_TITLE = "Health Check Failure";
|
||||
protected const string DOWNLOAD_FAILURE_TITLE = "Download Failed";
|
||||
protected const string IMPORT_FAILURE_TITLE = "Import Failed";
|
||||
|
@ -19,6 +21,8 @@ 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_DELETED_TITLE_BRANDED = "Lidarr - " + ARTIST_DELETED_TITLE;
|
||||
protected const string HEALTH_ISSUE_TITLE_BRANDED = "Lidarr - " + HEALTH_ISSUE_TITLE;
|
||||
protected const string DOWNLOAD_FAILURE_TITLE_BRANDED = "Lidarr - " + DOWNLOAD_FAILURE_TITLE;
|
||||
protected const string IMPORT_FAILURE_TITLE_BRANDED = "Lidarr - " + IMPORT_FAILURE_TITLE;
|
||||
|
@ -50,6 +54,14 @@ namespace NzbDrone.Core.Notifications
|
|||
{
|
||||
}
|
||||
|
||||
public virtual void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
}
|
||||
|
@ -78,6 +90,8 @@ 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 SupportsOnArtistDelete => HasConcreteImplementation("OnArtistDelete");
|
||||
public bool SupportsOnHealthIssue => HasConcreteImplementation("OnHealthIssue");
|
||||
public bool SupportsOnDownloadFailure => HasConcreteImplementation("OnDownloadFailure");
|
||||
public bool SupportsOnImportFailure => HasConcreteImplementation("OnImportFailure");
|
||||
|
|
|
@ -8,6 +8,8 @@ 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 OnArtistDelete { get; set; }
|
||||
public bool OnHealthIssue { get; set; }
|
||||
public bool OnDownloadFailure { get; set; }
|
||||
public bool OnImportFailure { get; set; }
|
||||
|
@ -17,6 +19,8 @@ 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 SupportsOnArtistDelete { get; set; }
|
||||
public bool SupportsOnHealthIssue { get; set; }
|
||||
public bool IncludeHealthWarnings { get; set; }
|
||||
public bool SupportsOnDownloadFailure { get; set; }
|
||||
|
@ -24,6 +28,6 @@ namespace NzbDrone.Core.Notifications
|
|||
public bool SupportsOnTrackRetag { get; set; }
|
||||
public bool SupportsOnApplicationUpdate { get; set; }
|
||||
|
||||
public override bool Enable => OnGrab || OnReleaseImport || (OnReleaseImport && OnUpgrade) || OnHealthIssue || OnDownloadFailure || OnImportFailure || OnTrackRetag || OnApplicationUpdate;
|
||||
public override bool Enable => OnGrab || OnReleaseImport || (OnReleaseImport && OnUpgrade) || OnAlbumDelete || OnArtistDelete || OnHealthIssue || OnDownloadFailure || OnImportFailure || OnTrackRetag || OnApplicationUpdate;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@ namespace NzbDrone.Core.Notifications
|
|||
List<INotification> OnReleaseImportEnabled();
|
||||
List<INotification> OnUpgradeEnabled();
|
||||
List<INotification> OnRenameEnabled();
|
||||
List<INotification> OnAlbumDeleteEnabled();
|
||||
List<INotification> OnArtistDeleteEnabled();
|
||||
List<INotification> OnHealthIssueEnabled();
|
||||
List<INotification> OnDownloadFailureEnabled();
|
||||
List<INotification> OnImportFailureEnabled();
|
||||
|
@ -48,6 +50,16 @@ namespace NzbDrone.Core.Notifications
|
|||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnRename).ToList();
|
||||
}
|
||||
|
||||
public List<INotification> OnAlbumDeleteEnabled()
|
||||
{
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnAlbumDelete).ToList();
|
||||
}
|
||||
|
||||
public List<INotification> OnArtistDeleteEnabled()
|
||||
{
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnArtistDelete).ToList();
|
||||
}
|
||||
|
||||
public List<INotification> OnHealthIssueEnabled()
|
||||
{
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthIssue).ToList();
|
||||
|
@ -81,6 +93,8 @@ namespace NzbDrone.Core.Notifications
|
|||
definition.SupportsOnReleaseImport = provider.SupportsOnReleaseImport;
|
||||
definition.SupportsOnUpgrade = provider.SupportsOnUpgrade;
|
||||
definition.SupportsOnRename = provider.SupportsOnRename;
|
||||
definition.SupportsOnAlbumDelete = provider.SupportsOnAlbumDelete;
|
||||
definition.SupportsOnArtistDelete = provider.SupportsOnArtistDelete;
|
||||
definition.SupportsOnHealthIssue = provider.SupportsOnHealthIssue;
|
||||
definition.SupportsOnDownloadFailure = provider.SupportsOnDownloadFailure;
|
||||
definition.SupportsOnImportFailure = provider.SupportsOnImportFailure;
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace NzbDrone.Core.Notifications
|
|||
{
|
||||
public interface INotificationRepository : IProviderRepository<NotificationDefinition>
|
||||
{
|
||||
void UpdateSettings(NotificationDefinition model);
|
||||
}
|
||||
|
||||
public class NotificationRepository : ProviderRepository<NotificationDefinition>, INotificationRepository
|
||||
|
@ -14,5 +15,10 @@ namespace NzbDrone.Core.Notifications
|
|||
: base(database, eventAggregator)
|
||||
{
|
||||
}
|
||||
|
||||
public void UpdateSettings(NotificationDefinition model)
|
||||
{
|
||||
SetFields(model, m => m.Settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ using NzbDrone.Core.MediaFiles;
|
|||
using NzbDrone.Core.MediaFiles.Events;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Music.Events;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Update.History.Events;
|
||||
|
@ -19,13 +20,16 @@ namespace NzbDrone.Core.Notifications
|
|||
: IHandle<AlbumGrabbedEvent>,
|
||||
IHandle<AlbumImportedEvent>,
|
||||
IHandle<ArtistRenamedEvent>,
|
||||
IHandle<AlbumDeletedEvent>,
|
||||
IHandle<ArtistsDeletedEvent>,
|
||||
IHandle<HealthCheckFailedEvent>,
|
||||
IHandle<DownloadFailedEvent>,
|
||||
IHandle<AlbumImportIncompleteEvent>,
|
||||
IHandle<TrackFileRetaggedEvent>,
|
||||
IHandle<UpdateInstalledEvent>,
|
||||
IHandleAsync<RenameCompletedEvent>,
|
||||
IHandleAsync<HealthCheckCompleteEvent>,
|
||||
IHandle<UpdateInstalledEvent>
|
||||
IHandleAsync<DeleteCompletedEvent>,
|
||||
IHandleAsync<HealthCheckCompleteEvent>
|
||||
{
|
||||
private readonly INotificationFactory _notificationFactory;
|
||||
private readonly Logger _logger;
|
||||
|
@ -200,6 +204,49 @@ 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);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Warn(ex, "Unable to send OnDelete notification to: " + notification.Definition.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Handle(ArtistsDeletedEvent message)
|
||||
{
|
||||
foreach (var artist in message.Artists)
|
||||
{
|
||||
var deleteMessage = new ArtistDeleteMessage(artist, message.DeleteFiles);
|
||||
|
||||
foreach (var notification in _notificationFactory.OnArtistDeleteEnabled())
|
||||
{
|
||||
try
|
||||
{
|
||||
if (ShouldHandleArtist(notification.Definition, deleteMessage.Artist))
|
||||
{
|
||||
notification.OnArtistDelete(deleteMessage);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Warn(ex, "Unable to send OnDelete notification to: " + notification.Definition.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Handle(HealthCheckFailedEvent message)
|
||||
{
|
||||
// Don't send health check notifications during the start up grace period,
|
||||
|
@ -314,6 +361,11 @@ namespace NzbDrone.Core.Notifications
|
|||
ProcessQueue();
|
||||
}
|
||||
|
||||
public void HandleAsync(DeleteCompletedEvent message)
|
||||
{
|
||||
ProcessQueue();
|
||||
}
|
||||
|
||||
private void ProcessQueue()
|
||||
{
|
||||
foreach (var notification in _notificationFactory.GetAvailableProviders())
|
||||
|
|
|
@ -28,6 +28,16 @@ namespace NzbDrone.Core.Notifications.Ntfy
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings);
|
||||
|
|
|
@ -53,6 +53,22 @@ namespace NzbDrone.Core.Notifications.Plex.Server
|
|||
UpdateIfEnabled(message.Artist);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
if (deleteMessage.DeletedFiles)
|
||||
{
|
||||
UpdateIfEnabled(deleteMessage.Album.Artist);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
if (deleteMessage.DeletedFiles)
|
||||
{
|
||||
UpdateIfEnabled(deleteMessage.Artist);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateIfEnabled(Artist artist)
|
||||
{
|
||||
_plexTvService.Ping(Settings.AuthToken);
|
||||
|
|
|
@ -26,6 +26,16 @@ namespace NzbDrone.Core.Notifications.Prowl
|
|||
_prowlProxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_prowlProxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_prowlProxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
||||
|
|
|
@ -29,6 +29,16 @@ namespace NzbDrone.Core.Notifications.PushBullet
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings);
|
||||
|
|
|
@ -26,6 +26,16 @@ namespace NzbDrone.Core.Notifications.Pushover
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
||||
|
|
|
@ -29,6 +29,16 @@ namespace NzbDrone.Core.Notifications.SendGrid
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
||||
|
|
|
@ -69,6 +69,38 @@ namespace NzbDrone.Core.Notifications.Slack
|
|||
_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 OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
var attachments = new List<Attachment>
|
||||
{
|
||||
new Attachment
|
||||
{
|
||||
Title = deleteMessage.Artist.Metadata.Value.Name,
|
||||
Text = deleteMessage.DeletedFilesMessage
|
||||
}
|
||||
};
|
||||
|
||||
var payload = CreatePayload("Artist Deleted", attachments);
|
||||
|
||||
_proxy.SendPayload(payload, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
var attachments = new List<Attachment>
|
||||
|
|
|
@ -40,6 +40,16 @@ namespace NzbDrone.Core.Notifications.Subsonic
|
|||
Update();
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
Notify(Settings, ALBUM_DELETED_TITLE_BRANDED, deleteMessage.Message);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
Notify(Settings, ARTIST_DELETED_TITLE_BRANDED, deleteMessage.Message);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
Notify(Settings, HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message);
|
||||
|
|
|
@ -54,6 +54,28 @@ 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 void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
if (deleteMessage.DeletedFiles)
|
||||
{
|
||||
if (Settings.UpdateLibrary)
|
||||
{
|
||||
_indexerProxy.DeleteFolder(deleteMessage.Artist.Path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override ValidationResult Test()
|
||||
{
|
||||
var failures = new List<ValidationFailure>();
|
||||
|
|
|
@ -26,6 +26,16 @@ namespace NzbDrone.Core.Notifications.Telegram
|
|||
_proxy.SendNotification(ALBUM_DOWNLOADED_TITLE, message.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ALBUM_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_proxy.SendNotification(ARTIST_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
||||
|
|
|
@ -28,6 +28,16 @@ namespace NzbDrone.Core.Notifications.Twitter
|
|||
_twitterService.SendNotification($"Imported: {message.Message}", Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
_twitterService.SendNotification($"Album Deleted: {deleteMessage.Message}", Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
_twitterService.SendNotification($"Artist Deleted: {deleteMessage.Message}", Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
_twitterService.SendNotification($"Health Issue: {healthCheck.Message}", Settings);
|
||||
|
|
|
@ -94,6 +94,30 @@ namespace NzbDrone.Core.Notifications.Webhook
|
|||
_proxy.SendWebhook(payload, Settings);
|
||||
}
|
||||
|
||||
public override void OnAlbumDelete(AlbumDeleteMessage deleteMessage)
|
||||
{
|
||||
var payload = new WebhookAlbumDeletePayload
|
||||
{
|
||||
EventType = WebhookEventType.AlbumDelete,
|
||||
Album = new WebhookAlbum(deleteMessage.Album),
|
||||
DeletedFiles = deleteMessage.DeletedFiles
|
||||
};
|
||||
|
||||
_proxy.SendWebhook(payload, Settings);
|
||||
}
|
||||
|
||||
public override void OnArtistDelete(ArtistDeleteMessage deleteMessage)
|
||||
{
|
||||
var payload = new WebhookArtistDeletePayload
|
||||
{
|
||||
EventType = WebhookEventType.ArtistDelete,
|
||||
Artist = new WebhookArtist(deleteMessage.Artist),
|
||||
DeletedFiles = deleteMessage.DeletedFiles
|
||||
};
|
||||
|
||||
_proxy.SendWebhook(payload, Settings);
|
||||
}
|
||||
|
||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||
{
|
||||
var payload = new WebhookHealthPayload
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
namespace NzbDrone.Core.Notifications.Webhook
|
||||
{
|
||||
public class WebhookAlbumDeletePayload : WebhookPayload
|
||||
{
|
||||
public WebhookAlbum Album { get; set; }
|
||||
public bool DeletedFiles { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
namespace NzbDrone.Core.Notifications.Webhook
|
||||
{
|
||||
public class WebhookArtistDeletePayload : WebhookPayload
|
||||
{
|
||||
public WebhookArtist Artist { get; set; }
|
||||
public bool DeletedFiles { get; set; }
|
||||
}
|
||||
}
|
|
@ -12,8 +12,10 @@ namespace NzbDrone.Core.Notifications.Webhook
|
|||
Grab,
|
||||
Download,
|
||||
Rename,
|
||||
AlbumDelete,
|
||||
ArtistDelete,
|
||||
Health,
|
||||
Retag,
|
||||
ApplicationUpdate
|
||||
ApplicationUpdate,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue