mirror of
https://github.com/Radarr/Radarr.git
synced 2024-09-17 15:02:34 +02:00
New: On Movie Delete and On Movie File Delete Notifications
This commit is contained in:
parent
24de3fdee6
commit
5926ca5d8a
@ -59,13 +59,17 @@ class Notification extends Component {
|
|||||||
onDownload,
|
onDownload,
|
||||||
onUpgrade,
|
onUpgrade,
|
||||||
onRename,
|
onRename,
|
||||||
onDelete,
|
onMovieDelete,
|
||||||
|
onMovieFileDelete,
|
||||||
|
onMovieFileDeleteForUpgrade,
|
||||||
onHealthIssue,
|
onHealthIssue,
|
||||||
supportsOnGrab,
|
supportsOnGrab,
|
||||||
supportsOnDownload,
|
supportsOnDownload,
|
||||||
supportsOnUpgrade,
|
supportsOnUpgrade,
|
||||||
supportsOnRename,
|
supportsOnRename,
|
||||||
supportsOnDelete,
|
supportsOnMovieDelete,
|
||||||
|
supportsOnMovieFileDelete,
|
||||||
|
supportsOnMovieFileDeleteForUpgrade,
|
||||||
supportsOnHealthIssue
|
supportsOnHealthIssue
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
@ -80,55 +84,78 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnDelete && onDelete &&
|
supportsOnDownload && onDownload ?
|
||||||
<Label kind={kinds.SUCCESS}>
|
|
||||||
{translate('OnDelete')}
|
|
||||||
</Label>
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
supportsOnDownload && onDownload &&
|
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
{translate('OnImport')}
|
{translate('OnImport')}
|
||||||
</Label>
|
</Label> :
|
||||||
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnUpgrade && onDownload && onUpgrade &&
|
supportsOnUpgrade && onDownload && 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
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
supportsOnHealthIssue && onHealthIssue &&
|
supportsOnHealthIssue && onHealthIssue ?
|
||||||
<Label kind={kinds.SUCCESS}>
|
<Label kind={kinds.SUCCESS}>
|
||||||
{translate('OnHealthIssue')}
|
{translate('OnHealthIssue')}
|
||||||
</Label>
|
</Label> :
|
||||||
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
!onGrab && !onDownload && !onRename && !onHealthIssue && !onDelete &&
|
supportsOnMovieDelete && onMovieDelete ?
|
||||||
|
<Label kind={kinds.SUCCESS}>
|
||||||
|
{translate('OnMovieDelete')}
|
||||||
|
</Label> :
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
supportsOnMovieFileDelete && onMovieFileDelete ?
|
||||||
|
<Label kind={kinds.SUCCESS}>
|
||||||
|
{translate('OnMovieFileDelete')}
|
||||||
|
</Label> :
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
supportsOnMovieFileDeleteForUpgrade && onMovieFileDelete && onMovieFileDeleteForUpgrade ?
|
||||||
|
<Label kind={kinds.SUCCESS}>
|
||||||
|
{translate('OnMovieFileDeleteForUpgrade')}
|
||||||
|
</Label> :
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
!onGrab && !onDownload && !onRename && !onHealthIssue && !onMovieDelete && !onMovieFileDelete ?
|
||||||
<Label
|
<Label
|
||||||
kind={kinds.DISABLED}
|
kind={kinds.DISABLED}
|
||||||
outline={true}
|
outline={true}
|
||||||
>
|
>
|
||||||
{translate('Disabled')}
|
{translate('Disabled')}
|
||||||
</Label>
|
</Label> :
|
||||||
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
<EditNotificationModalConnector
|
<EditNotificationModalConnector
|
||||||
@ -159,11 +186,15 @@ Notification.propTypes = {
|
|||||||
onDownload: PropTypes.bool.isRequired,
|
onDownload: PropTypes.bool.isRequired,
|
||||||
onUpgrade: PropTypes.bool.isRequired,
|
onUpgrade: PropTypes.bool.isRequired,
|
||||||
onRename: PropTypes.bool.isRequired,
|
onRename: PropTypes.bool.isRequired,
|
||||||
onDelete: PropTypes.bool.isRequired,
|
onMovieDelete: PropTypes.bool.isRequired,
|
||||||
|
onMovieFileDelete: PropTypes.bool.isRequired,
|
||||||
|
onMovieFileDeleteForUpgrade: PropTypes.bool.isRequired,
|
||||||
onHealthIssue: PropTypes.bool.isRequired,
|
onHealthIssue: PropTypes.bool.isRequired,
|
||||||
supportsOnGrab: PropTypes.bool.isRequired,
|
supportsOnGrab: PropTypes.bool.isRequired,
|
||||||
supportsOnDownload: PropTypes.bool.isRequired,
|
supportsOnDownload: PropTypes.bool.isRequired,
|
||||||
supportsOnDelete: PropTypes.bool.isRequired,
|
supportsOnMovieDelete: PropTypes.bool.isRequired,
|
||||||
|
supportsOnMovieFileDelete: PropTypes.bool.isRequired,
|
||||||
|
supportsOnMovieFileDeleteForUpgrade: PropTypes.bool.isRequired,
|
||||||
supportsOnUpgrade: PropTypes.bool.isRequired,
|
supportsOnUpgrade: PropTypes.bool.isRequired,
|
||||||
supportsOnRename: PropTypes.bool.isRequired,
|
supportsOnRename: PropTypes.bool.isRequired,
|
||||||
supportsOnHealthIssue: PropTypes.bool.isRequired,
|
supportsOnHealthIssue: PropTypes.bool.isRequired,
|
||||||
|
@ -19,13 +19,17 @@ function NotificationEventItems(props) {
|
|||||||
onDownload,
|
onDownload,
|
||||||
onUpgrade,
|
onUpgrade,
|
||||||
onRename,
|
onRename,
|
||||||
onDelete,
|
onMovieDelete,
|
||||||
|
onMovieFileDelete,
|
||||||
|
onMovieFileDeleteForUpgrade,
|
||||||
onHealthIssue,
|
onHealthIssue,
|
||||||
supportsOnGrab,
|
supportsOnGrab,
|
||||||
supportsOnDownload,
|
supportsOnDownload,
|
||||||
supportsOnUpgrade,
|
supportsOnUpgrade,
|
||||||
supportsOnRename,
|
supportsOnRename,
|
||||||
supportsOnDelete,
|
supportsOnMovieDelete,
|
||||||
|
supportsOnMovieFileDelete,
|
||||||
|
supportsOnMovieFileDeleteForUpgrade,
|
||||||
supportsOnHealthIssue,
|
supportsOnHealthIssue,
|
||||||
includeHealthWarnings
|
includeHealthWarnings
|
||||||
} = item;
|
} = item;
|
||||||
@ -89,14 +93,39 @@ function NotificationEventItems(props) {
|
|||||||
<div>
|
<div>
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.CHECK}
|
type={inputTypes.CHECK}
|
||||||
name="onDelete"
|
name="onMovieDelete"
|
||||||
helpText={translate('OnDeleteHelpText')}
|
helpText={translate('OnMovieDeleteHelpText')}
|
||||||
isDisabled={!supportsOnDelete.value}
|
isDisabled={!supportsOnMovieDelete.value}
|
||||||
{...onDelete}
|
{...onMovieDelete}
|
||||||
onChange={onInputChange}
|
onChange={onInputChange}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<FormInputGroup
|
||||||
|
type={inputTypes.CHECK}
|
||||||
|
name="onMovieFileDelete"
|
||||||
|
helpText={translate('OnMovieFileDeleteHelpText')}
|
||||||
|
isDisabled={!supportsOnMovieFileDelete.value}
|
||||||
|
{...onMovieFileDelete}
|
||||||
|
onChange={onInputChange}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{
|
||||||
|
onMovieFileDelete.value &&
|
||||||
|
<div>
|
||||||
|
<FormInputGroup
|
||||||
|
type={inputTypes.CHECK}
|
||||||
|
name="onMovieFileDeleteForUpgrade"
|
||||||
|
helpText={translate('OnMovieFileDeleteForUpgradeHelpText')}
|
||||||
|
isDisabled={!supportsOnMovieFileDeleteForUpgrade.value}
|
||||||
|
{...onMovieFileDeleteForUpgrade}
|
||||||
|
onChange={onInputChange}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.CHECK}
|
type={inputTypes.CHECK}
|
||||||
|
@ -106,6 +106,9 @@ export default {
|
|||||||
selectedSchema.onDownload = selectedSchema.supportsOnDownload;
|
selectedSchema.onDownload = selectedSchema.supportsOnDownload;
|
||||||
selectedSchema.onUpgrade = selectedSchema.supportsOnUpgrade;
|
selectedSchema.onUpgrade = selectedSchema.supportsOnUpgrade;
|
||||||
selectedSchema.onRename = selectedSchema.supportsOnRename;
|
selectedSchema.onRename = selectedSchema.supportsOnRename;
|
||||||
|
selectedSchema.OnMovieDelete = selectedSchema.supportsOnMovieDelete;
|
||||||
|
selectedSchema.OnMovieFileDelete = selectedSchema.supportsOnMovieFileDelete;
|
||||||
|
selectedSchema.OnMovieFileDeleteForUpgrade = selectedSchema.supportsOnMovieFileDeleteForUpgrade;
|
||||||
|
|
||||||
return selectedSchema;
|
return selectedSchema;
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using NzbDrone.Core.Notifications;
|
using NzbDrone.Core.Notifications;
|
||||||
|
|
||||||
namespace NzbDrone.Api.Notifications
|
namespace NzbDrone.Api.Notifications
|
||||||
{
|
{
|
||||||
@ -17,12 +17,16 @@ protected override void MapToResource(NotificationResource resource, Notificatio
|
|||||||
resource.OnDownload = definition.OnDownload;
|
resource.OnDownload = definition.OnDownload;
|
||||||
resource.OnUpgrade = definition.OnUpgrade;
|
resource.OnUpgrade = definition.OnUpgrade;
|
||||||
resource.OnRename = definition.OnRename;
|
resource.OnRename = definition.OnRename;
|
||||||
resource.OnDelete = definition.OnDelete;
|
resource.OnMovieDelete = definition.OnMovieDelete;
|
||||||
|
resource.OnMovieFileDelete = definition.OnMovieFileDelete;
|
||||||
|
resource.OnMovieFileDeleteForUpgrade = definition.OnMovieFileDeleteForUpgrade;
|
||||||
resource.SupportsOnGrab = definition.SupportsOnGrab;
|
resource.SupportsOnGrab = definition.SupportsOnGrab;
|
||||||
resource.SupportsOnDownload = definition.SupportsOnDownload;
|
resource.SupportsOnDownload = definition.SupportsOnDownload;
|
||||||
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
||||||
resource.SupportsOnRename = definition.SupportsOnRename;
|
resource.SupportsOnRename = definition.SupportsOnRename;
|
||||||
resource.SupportsOnDelete = definition.SupportsOnDelete;
|
resource.SupportsOnMovieDelete = definition.SupportsOnMovieDelete;
|
||||||
|
resource.SupportsOnMovieFileDelete = definition.SupportsOnMovieFileDelete;
|
||||||
|
resource.SupportsOnMovieFileDeleteForUpgrade = definition.SupportsOnMovieFileDeleteForUpgrade;
|
||||||
resource.Tags = definition.Tags;
|
resource.Tags = definition.Tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,12 +38,16 @@ protected override void MapToModel(NotificationDefinition definition, Notificati
|
|||||||
definition.OnDownload = resource.OnDownload;
|
definition.OnDownload = resource.OnDownload;
|
||||||
definition.OnUpgrade = resource.OnUpgrade;
|
definition.OnUpgrade = resource.OnUpgrade;
|
||||||
definition.OnRename = resource.OnRename;
|
definition.OnRename = resource.OnRename;
|
||||||
definition.OnDelete = resource.OnDelete;
|
definition.OnMovieDelete = resource.OnMovieDelete;
|
||||||
|
definition.OnMovieFileDelete = resource.OnMovieFileDelete;
|
||||||
|
definition.OnMovieFileDeleteForUpgrade = resource.OnMovieFileDeleteForUpgrade;
|
||||||
definition.SupportsOnGrab = resource.SupportsOnGrab;
|
definition.SupportsOnGrab = resource.SupportsOnGrab;
|
||||||
definition.SupportsOnDownload = resource.SupportsOnDownload;
|
definition.SupportsOnDownload = resource.SupportsOnDownload;
|
||||||
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
||||||
definition.SupportsOnRename = resource.SupportsOnRename;
|
definition.SupportsOnRename = resource.SupportsOnRename;
|
||||||
definition.SupportsOnDelete = resource.SupportsOnDelete;
|
definition.SupportsOnMovieDelete = resource.SupportsOnMovieDelete;
|
||||||
|
definition.SupportsOnMovieFileDelete = resource.SupportsOnMovieFileDelete;
|
||||||
|
definition.SupportsOnMovieFileDeleteForUpgrade = resource.SupportsOnMovieFileDeleteForUpgrade;
|
||||||
definition.Tags = resource.Tags;
|
definition.Tags = resource.Tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Api.Notifications
|
namespace NzbDrone.Api.Notifications
|
||||||
{
|
{
|
||||||
@ -8,12 +8,16 @@ public class NotificationResource : ProviderResource<NotificationResource>
|
|||||||
public bool OnDownload { get; set; }
|
public bool OnDownload { get; set; }
|
||||||
public bool OnUpgrade { get; set; }
|
public bool OnUpgrade { get; set; }
|
||||||
public bool OnRename { get; set; }
|
public bool OnRename { get; set; }
|
||||||
public bool OnDelete { get; set; }
|
public bool OnMovieDelete { get; set; }
|
||||||
|
public bool OnMovieFileDelete { get; set; }
|
||||||
|
public bool OnMovieFileDeleteForUpgrade { get; set; }
|
||||||
public bool SupportsOnGrab { get; set; }
|
public bool SupportsOnGrab { get; set; }
|
||||||
public bool SupportsOnDownload { get; set; }
|
public bool SupportsOnDownload { get; set; }
|
||||||
public bool SupportsOnUpgrade { get; set; }
|
public bool SupportsOnUpgrade { get; set; }
|
||||||
public bool SupportsOnRename { get; set; }
|
public bool SupportsOnRename { get; set; }
|
||||||
public bool SupportsOnDelete { get; set; }
|
public bool SupportsOnMovieDelete { get; set; }
|
||||||
|
public bool SupportsOnMovieFileDelete { get; set; }
|
||||||
|
public bool SupportsOnMovieFileDeleteForUpgrade { get; set; }
|
||||||
public HashSet<int> Tags { get; set; }
|
public HashSet<int> Tags { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
@ -62,9 +62,14 @@ public override void OnMovieRename(Movie movie)
|
|||||||
TestLogger.Info("OnRename was called");
|
TestLogger.Info("OnRename was called");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDelete(DeleteMessage message)
|
public override void OnMovieFileDelete(MovieFileDeleteMessage message)
|
||||||
{
|
{
|
||||||
TestLogger.Info("OnDelete was called");
|
TestLogger.Info("OnMovieFileDelete was called");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
TestLogger.Info("OnMovieDelete was called");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnHealthIssue(NzbDrone.Core.HealthCheck.HealthCheck artist)
|
public override void OnHealthIssue(NzbDrone.Core.HealthCheck.HealthCheck artist)
|
||||||
@ -105,7 +110,9 @@ public void should_support_all_if_implemented()
|
|||||||
notification.SupportsOnDownload.Should().BeTrue();
|
notification.SupportsOnDownload.Should().BeTrue();
|
||||||
notification.SupportsOnUpgrade.Should().BeTrue();
|
notification.SupportsOnUpgrade.Should().BeTrue();
|
||||||
notification.SupportsOnRename.Should().BeTrue();
|
notification.SupportsOnRename.Should().BeTrue();
|
||||||
notification.SupportsOnDelete.Should().BeTrue();
|
notification.SupportsOnMovieDelete.Should().BeTrue();
|
||||||
|
notification.SupportsOnMovieFileDelete.Should().BeTrue();
|
||||||
|
notification.SupportsOnMovieFileDeleteForUpgrade.Should().BeTrue();
|
||||||
notification.SupportsOnHealthIssue.Should().BeTrue();
|
notification.SupportsOnHealthIssue.Should().BeTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +125,9 @@ public void should_support_none_if_none_are_implemented()
|
|||||||
notification.SupportsOnDownload.Should().BeFalse();
|
notification.SupportsOnDownload.Should().BeFalse();
|
||||||
notification.SupportsOnUpgrade.Should().BeFalse();
|
notification.SupportsOnUpgrade.Should().BeFalse();
|
||||||
notification.SupportsOnRename.Should().BeFalse();
|
notification.SupportsOnRename.Should().BeFalse();
|
||||||
notification.SupportsOnDelete.Should().BeFalse();
|
notification.SupportsOnMovieDelete.Should().BeFalse();
|
||||||
|
notification.SupportsOnMovieFileDelete.Should().BeFalse();
|
||||||
|
notification.SupportsOnMovieFileDeleteForUpgrade.Should().BeFalse();
|
||||||
notification.SupportsOnHealthIssue.Should().BeFalse();
|
notification.SupportsOnHealthIssue.Should().BeFalse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
using FluentMigrator;
|
||||||
|
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migration
|
||||||
|
{
|
||||||
|
[Migration(192)]
|
||||||
|
public class add_on_delete_to_notifications : NzbDroneMigrationBase
|
||||||
|
{
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Rename.Column("OnDelete").OnTable("Notifications").To("OnMovieDelete");
|
||||||
|
Alter.Table("Notifications").AddColumn("OnMovieFileDelete").AsBoolean().WithDefaultValue(0);
|
||||||
|
Alter.Table("Notifications").AddColumn("OnMovieFileDeleteForUpgrade").AsBoolean().WithDefaultValue(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -87,7 +87,9 @@ public static void Map()
|
|||||||
.Ignore(i => i.SupportsOnDownload)
|
.Ignore(i => i.SupportsOnDownload)
|
||||||
.Ignore(i => i.SupportsOnUpgrade)
|
.Ignore(i => i.SupportsOnUpgrade)
|
||||||
.Ignore(i => i.SupportsOnRename)
|
.Ignore(i => i.SupportsOnRename)
|
||||||
.Ignore(i => i.SupportsOnDelete)
|
.Ignore(i => i.SupportsOnMovieDelete)
|
||||||
|
.Ignore(i => i.SupportsOnMovieFileDelete)
|
||||||
|
.Ignore(i => i.SupportsOnMovieFileDeleteForUpgrade)
|
||||||
.Ignore(i => i.SupportsOnHealthIssue);
|
.Ignore(i => i.SupportsOnHealthIssue);
|
||||||
|
|
||||||
Mapper.Entity<MetadataDefinition>("Metadata").RegisterModel()
|
Mapper.Entity<MetadataDefinition>("Metadata").RegisterModel()
|
||||||
|
@ -612,8 +612,6 @@
|
|||||||
"NoVideoFilesFoundSelectedFolder": "No video files were found in the selected folder",
|
"NoVideoFilesFoundSelectedFolder": "No video files were found in the selected folder",
|
||||||
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
|
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
|
||||||
"Ok": "Ok",
|
"Ok": "Ok",
|
||||||
"OnDelete": "On Delete",
|
|
||||||
"OnDeleteHelpText": "On Delete",
|
|
||||||
"OnDownloadHelpText": "On Import",
|
"OnDownloadHelpText": "On Import",
|
||||||
"OnGrab": "On Grab",
|
"OnGrab": "On Grab",
|
||||||
"OnGrabHelpText": "On Grab",
|
"OnGrabHelpText": "On Grab",
|
||||||
@ -623,8 +621,15 @@
|
|||||||
"OnLatestVersion": "The latest version of Radarr is already installed",
|
"OnLatestVersion": "The latest version of Radarr is already installed",
|
||||||
"OnlyTorrent": "Only Torrent",
|
"OnlyTorrent": "Only Torrent",
|
||||||
"OnlyUsenet": "Only Usenet",
|
"OnlyUsenet": "Only Usenet",
|
||||||
|
"OnMovieDelete": "On Movie Delete",
|
||||||
|
"OnMovieDeleteHelpText": "On Movie Delete",
|
||||||
|
"OnMovieFileDelete": "On Movie File Delete",
|
||||||
|
"OnMovieFileDeleteHelpText": "On Movie File Delete",
|
||||||
|
"OnMovieFileDeleteForUpgrade": "On Movie File Delete For Upgrade",
|
||||||
|
"OnMovieFileDeleteForUpgradeHelpText": "On Movie File Delete For Upgrade",
|
||||||
"OnRename": "On Rename",
|
"OnRename": "On Rename",
|
||||||
"OnRenameHelpText": "On Rename",
|
"OnRenameHelpText": "On Rename",
|
||||||
|
"OnUpgrade": "On Upgrade",
|
||||||
"OnUpgradeHelpText": "On Upgrade",
|
"OnUpgradeHelpText": "On Upgrade",
|
||||||
"OpenBrowserOnStart": "Open browser on start",
|
"OpenBrowserOnStart": "Open browser on start",
|
||||||
"OpenThisModal": "Open This Modal",
|
"OpenThisModal": "Open This Modal",
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
using NzbDrone.Common.Messaging;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.MediaFiles.Events
|
||||||
|
{
|
||||||
|
public class DeleteCompletedEvent : IEvent
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -28,6 +28,7 @@ public class MediaFileDeletionService : IDeleteMediaFiles,
|
|||||||
private readonly IMediaFileService _mediaFileService;
|
private readonly IMediaFileService _mediaFileService;
|
||||||
private readonly IMovieService _movieService;
|
private readonly IMovieService _movieService;
|
||||||
private readonly IConfigService _configService;
|
private readonly IConfigService _configService;
|
||||||
|
private readonly IEventAggregator _eventAggregator;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
public MediaFileDeletionService(IDiskProvider diskProvider,
|
public MediaFileDeletionService(IDiskProvider diskProvider,
|
||||||
@ -35,6 +36,7 @@ public MediaFileDeletionService(IDiskProvider diskProvider,
|
|||||||
IMediaFileService mediaFileService,
|
IMediaFileService mediaFileService,
|
||||||
IMovieService movieService,
|
IMovieService movieService,
|
||||||
IConfigService configService,
|
IConfigService configService,
|
||||||
|
IEventAggregator eventAggregator,
|
||||||
Logger logger)
|
Logger logger)
|
||||||
{
|
{
|
||||||
_diskProvider = diskProvider;
|
_diskProvider = diskProvider;
|
||||||
@ -42,6 +44,7 @@ public MediaFileDeletionService(IDiskProvider diskProvider,
|
|||||||
_mediaFileService = mediaFileService;
|
_mediaFileService = mediaFileService;
|
||||||
_movieService = movieService;
|
_movieService = movieService;
|
||||||
_configService = configService;
|
_configService = configService;
|
||||||
|
_eventAggregator = eventAggregator;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,6 +84,8 @@ public void DeleteMovieFile(Movie movie, MovieFile movieFile)
|
|||||||
|
|
||||||
// Delete the movie file from the database to clean it up even if the file was already deleted
|
// Delete the movie file from the database to clean it up even if the file was already deleted
|
||||||
_mediaFileService.Delete(movieFile, DeleteMediaFileReason.Manual);
|
_mediaFileService.Delete(movieFile, DeleteMediaFileReason.Manual);
|
||||||
|
|
||||||
|
_eventAggregator.PublishEvent(new DeleteCompletedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleAsync(MoviesDeletedEvent message)
|
public void HandleAsync(MoviesDeletedEvent message)
|
||||||
@ -116,6 +121,8 @@ public void HandleAsync(MoviesDeletedEvent message)
|
|||||||
_recycleBinProvider.DeleteFolder(movie.Path);
|
_recycleBinProvider.DeleteFolder(movie.Path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_eventAggregator.PublishEvent(new DeleteCompletedEvent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||||
{
|
{
|
||||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, message.Message, Settings);
|
_proxy.SendNotification(HEALTH_ISSUE_TITLE, message.Message, Settings);
|
||||||
|
@ -117,6 +117,55 @@ public override void OnMovieRename(Movie movie)
|
|||||||
ExecuteScript(environmentVariables);
|
ExecuteScript(environmentVariables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var movie = deleteMessage.Movie;
|
||||||
|
var movieFile = deleteMessage.MovieFile;
|
||||||
|
|
||||||
|
var environmentVariables = new StringDictionary();
|
||||||
|
|
||||||
|
environmentVariables.Add("Radarr_EventType", "MovieFileDelete");
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_DeleteReason", deleteMessage.Reason.ToString());
|
||||||
|
environmentVariables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||||
|
environmentVariables.Add("Radarr_Movie_Title", movie.Title);
|
||||||
|
environmentVariables.Add("Radarr_Movie_Year", movie.Year.ToString());
|
||||||
|
environmentVariables.Add("Radarr_Movie_Path", movie.Path);
|
||||||
|
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId ?? string.Empty);
|
||||||
|
environmentVariables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_Id", movieFile.Id.ToString());
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_RelativePath", movieFile.RelativePath);
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_Path", Path.Combine(movie.Path, movieFile.RelativePath));
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_Size", movieFile.Size.ToString());
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_Quality", movieFile.Quality.Quality.Name);
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_QualityVersion", movieFile.Quality.Revision.Version.ToString());
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_ReleaseGroup", movieFile.ReleaseGroup ?? string.Empty);
|
||||||
|
environmentVariables.Add("Radarr_MovieFile_SceneName", movieFile.SceneName ?? string.Empty);
|
||||||
|
|
||||||
|
ExecuteScript(environmentVariables);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var movie = deleteMessage.Movie;
|
||||||
|
var environmentVariables = new StringDictionary();
|
||||||
|
|
||||||
|
environmentVariables.Add("Radarr_EventType", "MovieDelete");
|
||||||
|
environmentVariables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||||
|
environmentVariables.Add("Radarr_Movie_Title", movie.Title);
|
||||||
|
environmentVariables.Add("Radarr_Movie_Year", movie.Year.ToString());
|
||||||
|
environmentVariables.Add("Radarr_Movie_Path", movie.Path);
|
||||||
|
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId ?? string.Empty);
|
||||||
|
environmentVariables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||||
|
environmentVariables.Add("Radarr_Movie_DeletedFiles", deleteMessage.DeletedFiles.ToString());
|
||||||
|
|
||||||
|
if (deleteMessage.DeletedFiles && movie.MovieFile != null)
|
||||||
|
{
|
||||||
|
environmentVariables.Add("Radarr_Movie_Folder_Size", movie.MovieFile.Size.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();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
@ -212,6 +213,43 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendPayload(payload, Settings);
|
_proxy.SendPayload(payload, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var movie = deleteMessage.Movie;
|
||||||
|
|
||||||
|
var attachments = new List<Embed>
|
||||||
|
{
|
||||||
|
new Embed
|
||||||
|
{
|
||||||
|
Title = movie.Title,
|
||||||
|
Description = deleteMessage.DeletedFilesMessage
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var payload = CreatePayload("Movie Deleted", attachments);
|
||||||
|
|
||||||
|
_proxy.SendPayload(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var movie = deleteMessage.Movie;
|
||||||
|
|
||||||
|
var fullPath = Path.Combine(deleteMessage.Movie.Path, deleteMessage.MovieFile.RelativePath);
|
||||||
|
var attachments = new List<Embed>
|
||||||
|
{
|
||||||
|
new Embed
|
||||||
|
{
|
||||||
|
Title = movie.Title,
|
||||||
|
Description = deleteMessage.MovieFile.Path
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var payload = CreatePayload("Movie File 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>
|
||||||
|
@ -86,6 +86,54 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(variables, Settings);
|
_proxy.SendNotification(variables, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var movie = deleteMessage.Movie;
|
||||||
|
var movieFile = deleteMessage.MovieFile;
|
||||||
|
|
||||||
|
var variables = new StringDictionary();
|
||||||
|
|
||||||
|
variables.Add("Radarr_EventType", "MovieFileDelete");
|
||||||
|
variables.Add("Radarr_MovieFile_DeleteReason", deleteMessage.Reason.ToString());
|
||||||
|
variables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||||
|
variables.Add("Radarr_Movie_Title", movie.Title);
|
||||||
|
variables.Add("Radarr_Movie_Year", movie.Year.ToString());
|
||||||
|
variables.Add("Radarr_Movie_Path", movie.Path);
|
||||||
|
variables.Add("Radarr_Movie_ImdbId", movie.ImdbId ?? string.Empty);
|
||||||
|
variables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||||
|
variables.Add("Radarr_MovieFile_Id", movieFile.Id.ToString());
|
||||||
|
variables.Add("Radarr_MovieFile_RelativePath", movieFile.RelativePath);
|
||||||
|
variables.Add("Radarr_MovieFile_Path", Path.Combine(movie.Path, movieFile.RelativePath));
|
||||||
|
variables.Add("Radarr_MovieFile_Size", movieFile.Size.ToString());
|
||||||
|
variables.Add("Radarr_MovieFile_Quality", movieFile.Quality.Quality.Name);
|
||||||
|
variables.Add("Radarr_MovieFile_QualityVersion", movieFile.Quality.Revision.Version.ToString());
|
||||||
|
variables.Add("Radarr_MovieFile_ReleaseGroup", movieFile.ReleaseGroup ?? string.Empty);
|
||||||
|
variables.Add("Radarr_MovieFile_SceneName", movieFile.SceneName ?? string.Empty);
|
||||||
|
|
||||||
|
_proxy.SendNotification(variables, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var movie = deleteMessage.Movie;
|
||||||
|
var variables = new StringDictionary();
|
||||||
|
|
||||||
|
variables.Add("Radarr_EventType", "MovieDelete");
|
||||||
|
variables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||||
|
variables.Add("Radarr_Movie_Title", movie.Title);
|
||||||
|
variables.Add("Radarr_Movie_Year", movie.Year.ToString());
|
||||||
|
variables.Add("Radarr_Movie_Path", movie.Path);
|
||||||
|
variables.Add("Radarr_Movie_ImdbId", movie.ImdbId ?? string.Empty);
|
||||||
|
variables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||||
|
variables.Add("Radarr_Movie_DeletedFiles", deleteMessage.DeletedFiles.ToString());
|
||||||
|
if (deleteMessage.DeletedFiles && movie.MovieFile != null)
|
||||||
|
{
|
||||||
|
variables.Add("Radarr_Movie_Folder_Size", movie.MovieFile.Size.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
_proxy.SendNotification(variables, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||||
{
|
{
|
||||||
var variables = new StringDictionary();
|
var variables = new StringDictionary();
|
||||||
|
@ -31,6 +31,20 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_emailService.SendEmail(Settings, MOVIE_DOWNLOADED_TITLE_BRANDED, body);
|
_emailService.SendEmail(Settings, MOVIE_DOWNLOADED_TITLE_BRANDED, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var body = $"{deleteMessage.Message} deleted.";
|
||||||
|
|
||||||
|
_emailService.SendEmail(Settings, MOVIE_FILE_DELETED_TITLE_BRANDED, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var body = $"{deleteMessage.Message}";
|
||||||
|
|
||||||
|
_emailService.SendEmail(Settings, MOVIE_DELETED_TITLE_BRANDED, body);
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||||
{
|
{
|
||||||
_emailService.SendEmail(Settings, HEALTH_ISSUE_TITLE_BRANDED, message.Message);
|
_emailService.SendEmail(Settings, HEALTH_ISSUE_TITLE_BRANDED, message.Message);
|
||||||
|
@ -29,6 +29,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_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);
|
||||||
|
@ -10,14 +10,17 @@ public interface INotification : IProvider
|
|||||||
void OnGrab(GrabMessage grabMessage);
|
void OnGrab(GrabMessage grabMessage);
|
||||||
void OnDownload(DownloadMessage message);
|
void OnDownload(DownloadMessage message);
|
||||||
void OnMovieRename(Movie movie);
|
void OnMovieRename(Movie movie);
|
||||||
|
void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage);
|
||||||
|
void OnMovieDelete(MovieDeleteMessage deleteMessage);
|
||||||
void OnHealthIssue(HealthCheck.HealthCheck healthCheck);
|
void OnHealthIssue(HealthCheck.HealthCheck healthCheck);
|
||||||
void OnDelete(DeleteMessage deleteMessage);
|
|
||||||
void ProcessQueue();
|
void ProcessQueue();
|
||||||
bool SupportsOnGrab { get; }
|
bool SupportsOnGrab { get; }
|
||||||
bool SupportsOnDownload { get; }
|
bool SupportsOnDownload { get; }
|
||||||
bool SupportsOnUpgrade { get; }
|
bool SupportsOnUpgrade { get; }
|
||||||
bool SupportsOnRename { get; }
|
bool SupportsOnRename { get; }
|
||||||
|
bool SupportsOnMovieDelete { get; }
|
||||||
|
bool SupportsOnMovieFileDelete { get; }
|
||||||
|
bool SupportsOnMovieFileDeleteForUpgrade { get; }
|
||||||
bool SupportsOnHealthIssue { get; }
|
bool SupportsOnHealthIssue { get; }
|
||||||
bool SupportsOnDelete { get; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE_BRANDED, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_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);
|
||||||
|
28
src/NzbDrone.Core/Notifications/MovieDeleteMessage.cs
Normal file
28
src/NzbDrone.Core/Notifications/MovieDeleteMessage.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using NzbDrone.Core.MediaFiles;
|
||||||
|
using NzbDrone.Core.Movies;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications
|
||||||
|
{
|
||||||
|
public class MovieDeleteMessage
|
||||||
|
{
|
||||||
|
public string Message { get; set; }
|
||||||
|
public Movie Movie { get; set; }
|
||||||
|
public bool DeletedFiles { get; set; }
|
||||||
|
public string DeletedFilesMessage { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MovieDeleteMessage(Movie movie, bool deleteFiles)
|
||||||
|
{
|
||||||
|
Movie = movie;
|
||||||
|
DeletedFiles = deleteFiles;
|
||||||
|
DeletedFilesMessage = DeletedFiles ?
|
||||||
|
"Movie removed and all files were deleted" :
|
||||||
|
"Movie removed, files were not deleted";
|
||||||
|
Message = movie.Title + " - " + DeletedFilesMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
src/NzbDrone.Core/Notifications/MovieFileDeleteMessage.cs
Normal file
19
src/NzbDrone.Core/Notifications/MovieFileDeleteMessage.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using NzbDrone.Core.MediaFiles;
|
||||||
|
using NzbDrone.Core.Movies;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications
|
||||||
|
{
|
||||||
|
public class MovieFileDeleteMessage
|
||||||
|
{
|
||||||
|
public string Message { get; set; }
|
||||||
|
public Movie Movie { get; set; }
|
||||||
|
public MovieFile MovieFile { get; set; }
|
||||||
|
|
||||||
|
public DeleteMediaFileReason Reason { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NzbDrone.Core.Movies;
|
using NzbDrone.Core.Movies;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
@ -11,10 +12,14 @@ public abstract class NotificationBase<TSettings> : INotification
|
|||||||
{
|
{
|
||||||
protected const string MOVIE_GRABBED_TITLE = "Movie Grabbed";
|
protected const string MOVIE_GRABBED_TITLE = "Movie Grabbed";
|
||||||
protected const string MOVIE_DOWNLOADED_TITLE = "Movie Downloaded";
|
protected const string MOVIE_DOWNLOADED_TITLE = "Movie Downloaded";
|
||||||
|
protected const string MOVIE_DELETED_TITLE = "Movie Deleted";
|
||||||
|
protected const string MOVIE_FILE_DELETED_TITLE = "Movie File Deleted";
|
||||||
protected const string HEALTH_ISSUE_TITLE = "Health Check Failure";
|
protected const string HEALTH_ISSUE_TITLE = "Health Check Failure";
|
||||||
|
|
||||||
protected const string MOVIE_GRABBED_TITLE_BRANDED = "Radarr - " + MOVIE_GRABBED_TITLE;
|
protected const string MOVIE_GRABBED_TITLE_BRANDED = "Radarr - " + MOVIE_GRABBED_TITLE;
|
||||||
protected const string MOVIE_DOWNLOADED_TITLE_BRANDED = "Radarr - " + MOVIE_DOWNLOADED_TITLE;
|
protected const string MOVIE_DOWNLOADED_TITLE_BRANDED = "Radarr - " + MOVIE_DOWNLOADED_TITLE;
|
||||||
|
protected const string MOVIE_DELETED_TITLE_BRANDED = "Radarr - " + MOVIE_DELETED_TITLE;
|
||||||
|
protected const string MOVIE_FILE_DELETED_TITLE_BRANDED = "Radarr - " + MOVIE_FILE_DELETED_TITLE;
|
||||||
protected const string HEALTH_ISSUE_TITLE_BRANDED = "Radarr - " + HEALTH_ISSUE_TITLE;
|
protected const string HEALTH_ISSUE_TITLE_BRANDED = "Radarr - " + HEALTH_ISSUE_TITLE;
|
||||||
|
|
||||||
public abstract string Name { get; }
|
public abstract string Name { get; }
|
||||||
@ -42,11 +47,15 @@ public virtual void OnMovieRename(Movie movie)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
public virtual void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnDelete(DeleteMessage deleteMessage)
|
public virtual void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,8 +67,10 @@ public virtual void ProcessQueue()
|
|||||||
public bool SupportsOnRename => HasConcreteImplementation("OnMovieRename");
|
public bool SupportsOnRename => HasConcreteImplementation("OnMovieRename");
|
||||||
public bool SupportsOnDownload => HasConcreteImplementation("OnDownload");
|
public bool SupportsOnDownload => HasConcreteImplementation("OnDownload");
|
||||||
public bool SupportsOnUpgrade => SupportsOnDownload;
|
public bool SupportsOnUpgrade => SupportsOnDownload;
|
||||||
|
public bool SupportsOnMovieDelete => HasConcreteImplementation("OnMovieDelete");
|
||||||
|
public bool SupportsOnMovieFileDelete => HasConcreteImplementation("OnMovieFileDelete");
|
||||||
|
public bool SupportsOnMovieFileDeleteForUpgrade => SupportsOnMovieFileDelete;
|
||||||
public bool SupportsOnHealthIssue => HasConcreteImplementation("OnHealthIssue");
|
public bool SupportsOnHealthIssue => HasConcreteImplementation("OnHealthIssue");
|
||||||
public bool SupportsOnDelete => HasConcreteImplementation("OnDelete");
|
|
||||||
|
|
||||||
protected TSettings Settings => (TSettings)Definition.Settings;
|
protected TSettings Settings => (TSettings)Definition.Settings;
|
||||||
|
|
||||||
|
@ -8,16 +8,20 @@ public class NotificationDefinition : ProviderDefinition
|
|||||||
public bool OnDownload { get; set; }
|
public bool OnDownload { get; set; }
|
||||||
public bool OnUpgrade { get; set; }
|
public bool OnUpgrade { get; set; }
|
||||||
public bool OnRename { get; set; }
|
public bool OnRename { get; set; }
|
||||||
|
public bool OnMovieDelete { get; set; }
|
||||||
|
public bool OnMovieFileDelete { get; set; }
|
||||||
|
public bool OnMovieFileDeleteForUpgrade { get; set; }
|
||||||
public bool OnHealthIssue { get; set; }
|
public bool OnHealthIssue { get; set; }
|
||||||
public bool OnDelete { get; set; }
|
|
||||||
public bool SupportsOnGrab { get; set; }
|
public bool SupportsOnGrab { get; set; }
|
||||||
public bool SupportsOnDownload { get; set; }
|
public bool SupportsOnDownload { get; set; }
|
||||||
public bool SupportsOnUpgrade { get; set; }
|
public bool SupportsOnUpgrade { get; set; }
|
||||||
public bool SupportsOnRename { get; set; }
|
public bool SupportsOnRename { get; set; }
|
||||||
|
public bool SupportsOnMovieDelete { get; set; }
|
||||||
|
public bool SupportsOnMovieFileDelete { get; set; }
|
||||||
|
public bool SupportsOnMovieFileDeleteForUpgrade { get; set; }
|
||||||
public bool SupportsOnHealthIssue { get; set; }
|
public bool SupportsOnHealthIssue { get; set; }
|
||||||
public bool SupportsOnDelete { get; set; }
|
|
||||||
public bool IncludeHealthWarnings { get; set; }
|
public bool IncludeHealthWarnings { get; set; }
|
||||||
|
|
||||||
public override bool Enable => OnGrab || OnDownload || (OnDownload && OnUpgrade) || OnHealthIssue || OnDelete;
|
public override bool Enable => OnGrab || OnDownload || (OnDownload && OnUpgrade) || OnMovieDelete || OnMovieFileDelete || OnMovieFileDeleteForUpgrade || OnHealthIssue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Common.Composition;
|
using NzbDrone.Common.Composition;
|
||||||
@ -13,8 +13,9 @@ public interface INotificationFactory : IProviderFactory<INotification, Notifica
|
|||||||
List<INotification> OnDownloadEnabled();
|
List<INotification> OnDownloadEnabled();
|
||||||
List<INotification> OnUpgradeEnabled();
|
List<INotification> OnUpgradeEnabled();
|
||||||
List<INotification> OnRenameEnabled();
|
List<INotification> OnRenameEnabled();
|
||||||
|
List<INotification> OnMovieDeleteEnabled();
|
||||||
|
List<INotification> OnMovieFileDeleteEnabled();
|
||||||
List<INotification> OnHealthIssueEnabled();
|
List<INotification> OnHealthIssueEnabled();
|
||||||
List<INotification> OnDeleteEnabled();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NotificationFactory : ProviderFactory<INotification, NotificationDefinition>, INotificationFactory
|
public class NotificationFactory : ProviderFactory<INotification, NotificationDefinition>, INotificationFactory
|
||||||
@ -44,16 +45,26 @@ public List<INotification> OnRenameEnabled()
|
|||||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnRename).ToList();
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnRename).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<INotification> OnMovieDeleteEnabled()
|
||||||
|
{
|
||||||
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnMovieDelete).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<INotification> OnMovieFileDeleteEnabled()
|
||||||
|
{
|
||||||
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnMovieFileDelete).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<INotification> OnMovieFileDeleteForUpgradeEnabled()
|
||||||
|
{
|
||||||
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnMovieFileDeleteForUpgrade).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
public List<INotification> OnHealthIssueEnabled()
|
public List<INotification> OnHealthIssueEnabled()
|
||||||
{
|
{
|
||||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthIssue).ToList();
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthIssue).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<INotification> OnDeleteEnabled()
|
|
||||||
{
|
|
||||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnDelete).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetProviderCharacteristics(INotification provider, NotificationDefinition definition)
|
public override void SetProviderCharacteristics(INotification provider, NotificationDefinition definition)
|
||||||
{
|
{
|
||||||
base.SetProviderCharacteristics(provider, definition);
|
base.SetProviderCharacteristics(provider, definition);
|
||||||
@ -62,8 +73,10 @@ public override void SetProviderCharacteristics(INotification provider, Notifica
|
|||||||
definition.SupportsOnDownload = provider.SupportsOnDownload;
|
definition.SupportsOnDownload = provider.SupportsOnDownload;
|
||||||
definition.SupportsOnUpgrade = provider.SupportsOnUpgrade;
|
definition.SupportsOnUpgrade = provider.SupportsOnUpgrade;
|
||||||
definition.SupportsOnRename = provider.SupportsOnRename;
|
definition.SupportsOnRename = provider.SupportsOnRename;
|
||||||
|
definition.SupportsOnMovieDelete = provider.SupportsOnMovieDelete;
|
||||||
|
definition.SupportsOnMovieFileDelete = provider.SupportsOnMovieFileDelete;
|
||||||
|
definition.SupportsOnMovieFileDeleteForUpgrade = provider.SupportsOnMovieFileDeleteForUpgrade;
|
||||||
definition.SupportsOnHealthIssue = provider.SupportsOnHealthIssue;
|
definition.SupportsOnHealthIssue = provider.SupportsOnHealthIssue;
|
||||||
definition.SupportsOnDelete = provider.SupportsOnDelete;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
using NzbDrone.Core.MediaFiles.Events;
|
using NzbDrone.Core.MediaFiles.Events;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
using NzbDrone.Core.Movies;
|
using NzbDrone.Core.Movies;
|
||||||
|
using NzbDrone.Core.Movies.Events;
|
||||||
using NzbDrone.Core.Qualities;
|
using NzbDrone.Core.Qualities;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
|
|
||||||
@ -16,8 +17,10 @@ public class NotificationService
|
|||||||
: IHandle<MovieRenamedEvent>,
|
: IHandle<MovieRenamedEvent>,
|
||||||
IHandle<MovieGrabbedEvent>,
|
IHandle<MovieGrabbedEvent>,
|
||||||
IHandle<MovieDownloadedEvent>,
|
IHandle<MovieDownloadedEvent>,
|
||||||
IHandle<HealthCheckFailedEvent>,
|
IHandle<MoviesDeletedEvent>,
|
||||||
IHandle<MovieFileDeletedEvent>,
|
IHandle<MovieFileDeletedEvent>,
|
||||||
|
IHandle<HealthCheckFailedEvent>,
|
||||||
|
IHandleAsync<DeleteCompletedEvent>,
|
||||||
IHandleAsync<DownloadsProcessedEvent>,
|
IHandleAsync<DownloadsProcessedEvent>,
|
||||||
IHandleAsync<RenameCompletedEvent>,
|
IHandleAsync<RenameCompletedEvent>,
|
||||||
IHandleAsync<HealthCheckCompleteEvent>
|
IHandleAsync<HealthCheckCompleteEvent>
|
||||||
@ -159,6 +162,56 @@ public void Handle(MovieRenamedEvent message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Handle(MovieFileDeletedEvent message)
|
||||||
|
{
|
||||||
|
var deleteMessage = new MovieFileDeleteMessage();
|
||||||
|
deleteMessage.Message = GetMessage(message.MovieFile.Movie, message.MovieFile.Quality);
|
||||||
|
deleteMessage.MovieFile = message.MovieFile;
|
||||||
|
deleteMessage.Movie = message.MovieFile.Movie;
|
||||||
|
deleteMessage.Reason = message.Reason;
|
||||||
|
|
||||||
|
foreach (var notification in _notificationFactory.OnMovieFileDeleteEnabled())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (message.Reason != MediaFiles.DeleteMediaFileReason.Upgrade || ((NotificationDefinition)notification.Definition).OnMovieFileDeleteForUpgrade)
|
||||||
|
{
|
||||||
|
if (ShouldHandleMovie(notification.Definition, message.MovieFile.Movie))
|
||||||
|
{
|
||||||
|
notification.OnMovieFileDelete(deleteMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Warn(ex, "Unable to send OnMovieFileDelete notification to: " + notification.Definition.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handle(MoviesDeletedEvent message)
|
||||||
|
{
|
||||||
|
foreach (Movie movie in message.Movies)
|
||||||
|
{
|
||||||
|
var deleteMessage = new MovieDeleteMessage(movie, message.DeleteFiles);
|
||||||
|
|
||||||
|
foreach (var notification in _notificationFactory.OnMovieDeleteEnabled())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (ShouldHandleMovie(notification.Definition, deleteMessage.Movie))
|
||||||
|
{
|
||||||
|
notification.OnMovieDelete(deleteMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Warn(ex, "Unable to send OnMovieDelete notification to: " + notification.Definition.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Handle(HealthCheckFailedEvent message)
|
public void Handle(HealthCheckFailedEvent message)
|
||||||
{
|
{
|
||||||
foreach (var notification in _notificationFactory.OnHealthIssueEnabled())
|
foreach (var notification in _notificationFactory.OnHealthIssueEnabled())
|
||||||
@ -177,28 +230,9 @@ public void Handle(HealthCheckFailedEvent message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(MovieFileDeletedEvent message)
|
public void HandleAsync(DeleteCompletedEvent message)
|
||||||
{
|
{
|
||||||
var deleteMessage = new DeleteMessage();
|
ProcessQueue();
|
||||||
deleteMessage.Message = GetMessage(message.MovieFile.Movie, message.MovieFile.Quality);
|
|
||||||
deleteMessage.MovieFile = message.MovieFile;
|
|
||||||
deleteMessage.Movie = message.MovieFile.Movie;
|
|
||||||
deleteMessage.Reason = message.Reason;
|
|
||||||
|
|
||||||
foreach (var notification in _notificationFactory.OnDeleteEnabled())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (ShouldHandleMovie(notification.Definition, message.MovieFile.Movie))
|
|
||||||
{
|
|
||||||
notification.OnDelete(deleteMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.Warn(ex, "Unable to send OnDelete notification to: " + notification.Definition.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleAsync(DownloadsProcessedEvent message)
|
public void HandleAsync(DownloadsProcessedEvent message)
|
||||||
|
@ -48,6 +48,19 @@ public override void OnMovieRename(Movie movie)
|
|||||||
UpdateIfEnabled(movie);
|
UpdateIfEnabled(movie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
UpdateIfEnabled(deleteMessage.Movie);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
if (deleteMessage.DeletedFiles)
|
||||||
|
{
|
||||||
|
UpdateIfEnabled(deleteMessage.Movie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateIfEnabled(Movie movie)
|
private void UpdateIfEnabled(Movie movie)
|
||||||
{
|
{
|
||||||
if (Settings.UpdateLibrary)
|
if (Settings.UpdateLibrary)
|
||||||
|
@ -26,9 +26,19 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_prowlProxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings.ApiKey, (ProwlPriority)Settings.Priority);
|
_prowlProxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings.ApiKey, (ProwlPriority)Settings.Priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
{
|
{
|
||||||
_prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings.ApiKey, (ProwlPriority)Settings.Priority);
|
_prowlProxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings.ApiKey, (ProwlPriority)Settings.Priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_prowlProxy.SendNotification(MOVIE_DELETED_TITLE, deleteMessage.Message, Settings.ApiKey, (ProwlPriority)Settings.Priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnHealthIssue(HealthCheck.HealthCheck message)
|
||||||
|
{
|
||||||
|
_prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, message.Message, Settings.ApiKey, (ProwlPriority)Settings.Priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
|
@ -29,6 +29,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE_BRANDED, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_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);
|
||||||
|
@ -26,6 +26,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_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);
|
||||||
|
@ -29,6 +29,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_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);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Core.Movies;
|
using NzbDrone.Core.Movies;
|
||||||
@ -69,6 +71,38 @@ public override void OnMovieRename(Movie movie)
|
|||||||
_proxy.SendPayload(payload, Settings);
|
_proxy.SendPayload(payload, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var attachments = new List<Attachment>
|
||||||
|
{
|
||||||
|
new Attachment
|
||||||
|
{
|
||||||
|
Title = deleteMessage.Movie.Title,
|
||||||
|
Text = Path.Combine(deleteMessage.Movie.Path, deleteMessage.MovieFile.RelativePath)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var payload = CreatePayload("Movie File Deleted", attachments);
|
||||||
|
|
||||||
|
_proxy.SendPayload(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var attachments = new List<Attachment>
|
||||||
|
{
|
||||||
|
new Attachment
|
||||||
|
{
|
||||||
|
Title = deleteMessage.Movie.Title,
|
||||||
|
Text = deleteMessage.DeletedFilesMessage
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var payload = CreatePayload("Movie 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>
|
||||||
|
@ -46,6 +46,26 @@ public override void OnMovieRename(Movie movie)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
if (Settings.UpdateLibrary)
|
||||||
|
{
|
||||||
|
var fullPath = Path.Combine(deleteMessage.Movie.Path, deleteMessage.MovieFile.RelativePath);
|
||||||
|
_indexerProxy.DeleteFile(fullPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
if (deleteMessage.DeletedFiles)
|
||||||
|
{
|
||||||
|
if (Settings.UpdateLibrary)
|
||||||
|
{
|
||||||
|
_indexerProxy.DeleteFolder(deleteMessage.Movie.Path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
@ -26,6 +26,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
_proxy.SendNotification(MOVIE_DOWNLOADED_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(MOVIE_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);
|
||||||
|
@ -29,11 +29,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_traktService.AddMovieToCollection(Settings, message.Movie, message.MovieFile);
|
_traktService.AddMovieToCollection(Settings, message.Movie, message.MovieFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDelete(DeleteMessage message)
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
{
|
{
|
||||||
if (message.Reason != MediaFiles.DeleteMediaFileReason.Upgrade)
|
_traktService.RemoveMovieFromCollection(Settings, deleteMessage.Movie);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
{
|
{
|
||||||
_traktService.RemoveMovieFromCollection(Settings, message.Movie, message.MovieFile);
|
if (deleteMessage.DeletedFiles)
|
||||||
|
{
|
||||||
|
_traktService.RemoveMovieFromCollection(Settings, deleteMessage.Movie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ public interface ITraktService
|
|||||||
HttpRequest GetOAuthRequest(string callbackUrl);
|
HttpRequest GetOAuthRequest(string callbackUrl);
|
||||||
TraktAuthRefreshResource RefreshAuthToken(string refreshToken);
|
TraktAuthRefreshResource RefreshAuthToken(string refreshToken);
|
||||||
void AddMovieToCollection(TraktSettings settings, Movie movie, MovieFile movieFile);
|
void AddMovieToCollection(TraktSettings settings, Movie movie, MovieFile movieFile);
|
||||||
void RemoveMovieFromCollection(TraktSettings settings, Movie movie, MovieFile movieFile);
|
void RemoveMovieFromCollection(TraktSettings settings, Movie movie);
|
||||||
string GetUserName(string accessToken);
|
string GetUserName(string accessToken);
|
||||||
ValidationFailure Test(TraktSettings settings);
|
ValidationFailure Test(TraktSettings settings);
|
||||||
}
|
}
|
||||||
@ -76,7 +76,7 @@ public ValidationFailure Test(TraktSettings settings)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveMovieFromCollection(TraktSettings settings, Movie movie, MovieFile movieFile)
|
public void RemoveMovieFromCollection(TraktSettings settings, Movie movie)
|
||||||
{
|
{
|
||||||
var payload = new TraktCollectMoviesResource
|
var payload = new TraktCollectMoviesResource
|
||||||
{
|
{
|
||||||
|
@ -28,6 +28,16 @@ public override void OnDownload(DownloadMessage message)
|
|||||||
_twitterService.SendNotification($"[Radarr] Imported: {message.Message}", Settings);
|
_twitterService.SendNotification($"[Radarr] Imported: {message.Message}", Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_twitterService.SendNotification($"Movie File Deleted: {deleteMessage.Message}", Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
_twitterService.SendNotification($"Movie 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);
|
||||||
|
@ -75,6 +75,31 @@ public override void OnMovieRename(Movie movie)
|
|||||||
_proxy.SendWebhook(payload, Settings);
|
_proxy.SendWebhook(payload, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var payload = new WebhookMovieFileDeletePayload
|
||||||
|
{
|
||||||
|
EventType = WebhookEventType.MovieFileDelete,
|
||||||
|
Movie = new WebhookMovie(deleteMessage.Movie),
|
||||||
|
MovieFile = new WebhookMovieFile(deleteMessage.MovieFile),
|
||||||
|
DeleteReason = deleteMessage.Reason
|
||||||
|
};
|
||||||
|
|
||||||
|
_proxy.SendWebhook(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
var payload = new WebhookMovieDeletePayload
|
||||||
|
{
|
||||||
|
EventType = WebhookEventType.MovieDelete,
|
||||||
|
Movie = new WebhookMovie(deleteMessage.Movie),
|
||||||
|
DeletedFiles = deleteMessage.DeletedFiles
|
||||||
|
};
|
||||||
|
|
||||||
|
_proxy.SendWebhook(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
public override void OnHealthIssue(HealthCheck.HealthCheck healthCheck)
|
||||||
{
|
{
|
||||||
var payload = new WebhookHealthPayload
|
var payload = new WebhookHealthPayload
|
||||||
|
@ -12,6 +12,8 @@ public enum WebhookEventType
|
|||||||
Grab,
|
Grab,
|
||||||
Download,
|
Download,
|
||||||
Rename,
|
Rename,
|
||||||
|
MovieDelete,
|
||||||
|
MovieFileDelete,
|
||||||
Health
|
Health
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications.Webhook
|
||||||
|
{
|
||||||
|
public class WebhookMovieDeletePayload : WebhookPayload
|
||||||
|
{
|
||||||
|
public WebhookMovie Movie { get; set; }
|
||||||
|
public bool DeletedFiles { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using NzbDrone.Core.MediaFiles;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications.Webhook
|
||||||
|
{
|
||||||
|
public class WebhookMovieFileDeletePayload : WebhookPayload
|
||||||
|
{
|
||||||
|
public WebhookMovie Movie { get; set; }
|
||||||
|
public WebhookMovieFile MovieFile { get; set; }
|
||||||
|
public DeleteMediaFileReason DeleteReason { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -41,6 +41,25 @@ public override void OnMovieRename(Movie movie)
|
|||||||
UpdateAndCleanMovie(movie);
|
UpdateAndCleanMovie(movie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
const string header = "Radarr - Deleted";
|
||||||
|
|
||||||
|
Notify(Settings, header, deleteMessage.Message);
|
||||||
|
UpdateAndCleanMovie(deleteMessage.Movie, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||||
|
{
|
||||||
|
if (deleteMessage.DeletedFiles)
|
||||||
|
{
|
||||||
|
const string header = "Radarr - Deleted";
|
||||||
|
|
||||||
|
Notify(Settings, header, deleteMessage.Message);
|
||||||
|
UpdateAndCleanMovie(deleteMessage.Movie, 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);
|
||||||
|
@ -9,13 +9,17 @@ public class NotificationResource : ProviderResource<NotificationResource>
|
|||||||
public bool OnDownload { get; set; }
|
public bool OnDownload { get; set; }
|
||||||
public bool OnUpgrade { get; set; }
|
public bool OnUpgrade { get; set; }
|
||||||
public bool OnRename { get; set; }
|
public bool OnRename { get; set; }
|
||||||
public bool OnDelete { get; set; }
|
public bool OnMovieDelete { get; set; }
|
||||||
|
public bool OnMovieFileDelete { get; set; }
|
||||||
|
public bool OnMovieFileDeleteForUpgrade { get; set; }
|
||||||
public bool OnHealthIssue { get; set; }
|
public bool OnHealthIssue { get; set; }
|
||||||
public bool SupportsOnGrab { get; set; }
|
public bool SupportsOnGrab { get; set; }
|
||||||
public bool SupportsOnDownload { get; set; }
|
public bool SupportsOnDownload { get; set; }
|
||||||
public bool SupportsOnUpgrade { get; set; }
|
public bool SupportsOnUpgrade { get; set; }
|
||||||
public bool SupportsOnRename { get; set; }
|
public bool SupportsOnRename { get; set; }
|
||||||
public bool SupportsOnDelete { get; set; }
|
public bool SupportsOnMovieDelete { get; set; }
|
||||||
|
public bool SupportsOnMovieFileDelete { get; set; }
|
||||||
|
public bool SupportsOnMovieFileDeleteForUpgrade { get; set; }
|
||||||
public bool SupportsOnHealthIssue { get; set; }
|
public bool SupportsOnHealthIssue { get; set; }
|
||||||
public bool IncludeHealthWarnings { get; set; }
|
public bool IncludeHealthWarnings { get; set; }
|
||||||
public string TestCommand { get; set; }
|
public string TestCommand { get; set; }
|
||||||
@ -36,13 +40,17 @@ public override NotificationResource ToResource(NotificationDefinition definitio
|
|||||||
resource.OnDownload = definition.OnDownload;
|
resource.OnDownload = definition.OnDownload;
|
||||||
resource.OnUpgrade = definition.OnUpgrade;
|
resource.OnUpgrade = definition.OnUpgrade;
|
||||||
resource.OnRename = definition.OnRename;
|
resource.OnRename = definition.OnRename;
|
||||||
resource.OnDelete = definition.OnDelete;
|
resource.OnMovieDelete = definition.OnMovieDelete;
|
||||||
|
resource.OnMovieFileDelete = definition.OnMovieFileDelete;
|
||||||
|
resource.OnMovieFileDeleteForUpgrade = definition.OnMovieFileDeleteForUpgrade;
|
||||||
resource.OnHealthIssue = definition.OnHealthIssue;
|
resource.OnHealthIssue = definition.OnHealthIssue;
|
||||||
resource.SupportsOnGrab = definition.SupportsOnGrab;
|
resource.SupportsOnGrab = definition.SupportsOnGrab;
|
||||||
resource.SupportsOnDownload = definition.SupportsOnDownload;
|
resource.SupportsOnDownload = definition.SupportsOnDownload;
|
||||||
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
||||||
resource.SupportsOnRename = definition.SupportsOnRename;
|
resource.SupportsOnRename = definition.SupportsOnRename;
|
||||||
resource.SupportsOnDelete = definition.SupportsOnDelete;
|
resource.SupportsOnMovieDelete = definition.SupportsOnMovieDelete;
|
||||||
|
resource.SupportsOnMovieFileDelete = definition.SupportsOnMovieFileDelete;
|
||||||
|
resource.SupportsOnMovieFileDeleteForUpgrade = definition.SupportsOnMovieFileDeleteForUpgrade;
|
||||||
resource.SupportsOnHealthIssue = definition.SupportsOnHealthIssue;
|
resource.SupportsOnHealthIssue = definition.SupportsOnHealthIssue;
|
||||||
resource.IncludeHealthWarnings = definition.IncludeHealthWarnings;
|
resource.IncludeHealthWarnings = definition.IncludeHealthWarnings;
|
||||||
|
|
||||||
@ -62,13 +70,17 @@ public override NotificationDefinition ToModel(NotificationResource resource)
|
|||||||
definition.OnDownload = resource.OnDownload;
|
definition.OnDownload = resource.OnDownload;
|
||||||
definition.OnUpgrade = resource.OnUpgrade;
|
definition.OnUpgrade = resource.OnUpgrade;
|
||||||
definition.OnRename = resource.OnRename;
|
definition.OnRename = resource.OnRename;
|
||||||
definition.OnDelete = resource.OnDelete;
|
definition.OnMovieDelete = resource.OnMovieDelete;
|
||||||
|
definition.OnMovieFileDelete = resource.OnMovieFileDelete;
|
||||||
|
definition.OnMovieFileDeleteForUpgrade = resource.OnMovieFileDeleteForUpgrade;
|
||||||
definition.OnHealthIssue = resource.OnHealthIssue;
|
definition.OnHealthIssue = resource.OnHealthIssue;
|
||||||
definition.SupportsOnGrab = resource.SupportsOnGrab;
|
definition.SupportsOnGrab = resource.SupportsOnGrab;
|
||||||
definition.SupportsOnDownload = resource.SupportsOnDownload;
|
definition.SupportsOnDownload = resource.SupportsOnDownload;
|
||||||
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
||||||
definition.SupportsOnRename = resource.SupportsOnRename;
|
definition.SupportsOnRename = resource.SupportsOnRename;
|
||||||
definition.SupportsOnDelete = resource.SupportsOnDelete;
|
definition.SupportsOnMovieDelete = resource.SupportsOnMovieDelete;
|
||||||
|
definition.SupportsOnMovieFileDelete = resource.SupportsOnMovieFileDelete;
|
||||||
|
definition.SupportsOnMovieFileDeleteForUpgrade = resource.SupportsOnMovieFileDeleteForUpgrade;
|
||||||
definition.SupportsOnHealthIssue = resource.SupportsOnHealthIssue;
|
definition.SupportsOnHealthIssue = resource.SupportsOnHealthIssue;
|
||||||
definition.IncludeHealthWarnings = resource.IncludeHealthWarnings;
|
definition.IncludeHealthWarnings = resource.IncludeHealthWarnings;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user