mirror of
https://github.com/fergalmoran/Readarr.git
synced 2025-12-25 19:09:00 +00:00
New: OnApplicationUpdate Notifications
Fixes #1422 (cherry picked from commit 9e175e28efcfc6ac3e414649b955a10fb0e951e7)
This commit is contained in:
@@ -67,6 +67,7 @@ class Notification extends Component {
|
|||||||
onDownloadFailure,
|
onDownloadFailure,
|
||||||
onImportFailure,
|
onImportFailure,
|
||||||
onBookRetag,
|
onBookRetag,
|
||||||
|
onApplicationUpdate,
|
||||||
supportsOnGrab,
|
supportsOnGrab,
|
||||||
supportsOnReleaseImport,
|
supportsOnReleaseImport,
|
||||||
supportsOnUpgrade,
|
supportsOnUpgrade,
|
||||||
@@ -78,7 +79,8 @@ class Notification extends Component {
|
|||||||
supportsOnHealthIssue,
|
supportsOnHealthIssue,
|
||||||
supportsOnDownloadFailure,
|
supportsOnDownloadFailure,
|
||||||
supportsOnImportFailure,
|
supportsOnImportFailure,
|
||||||
supportsOnBookRetag
|
supportsOnBookRetag,
|
||||||
|
supportsOnApplicationUpdate
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -187,6 +189,14 @@ class Notification extends Component {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
supportsOnApplicationUpdate && onApplicationUpdate ?
|
||||||
|
<Label kind={kinds.SUCCESS} >
|
||||||
|
{translate('OnApplicationUpdate')}
|
||||||
|
</Label> :
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
!onGrab && !onReleaseImport && !onRename && !onBookRetag && !onHealthIssue && !onDownloadFailure && !onImportFailure ?
|
!onGrab && !onReleaseImport && !onRename && !onBookRetag && !onHealthIssue && !onDownloadFailure && !onImportFailure ?
|
||||||
<Label
|
<Label
|
||||||
@@ -234,6 +244,7 @@ Notification.propTypes = {
|
|||||||
onDownloadFailure: PropTypes.bool.isRequired,
|
onDownloadFailure: PropTypes.bool.isRequired,
|
||||||
onImportFailure: PropTypes.bool.isRequired,
|
onImportFailure: PropTypes.bool.isRequired,
|
||||||
onBookRetag: PropTypes.bool.isRequired,
|
onBookRetag: PropTypes.bool.isRequired,
|
||||||
|
onApplicationUpdate: PropTypes.bool.isRequired,
|
||||||
supportsOnGrab: PropTypes.bool.isRequired,
|
supportsOnGrab: PropTypes.bool.isRequired,
|
||||||
supportsOnReleaseImport: PropTypes.bool.isRequired,
|
supportsOnReleaseImport: PropTypes.bool.isRequired,
|
||||||
supportsOnUpgrade: PropTypes.bool.isRequired,
|
supportsOnUpgrade: PropTypes.bool.isRequired,
|
||||||
@@ -246,6 +257,7 @@ Notification.propTypes = {
|
|||||||
supportsOnDownloadFailure: PropTypes.bool.isRequired,
|
supportsOnDownloadFailure: PropTypes.bool.isRequired,
|
||||||
supportsOnImportFailure: PropTypes.bool.isRequired,
|
supportsOnImportFailure: PropTypes.bool.isRequired,
|
||||||
supportsOnBookRetag: PropTypes.bool.isRequired,
|
supportsOnBookRetag: PropTypes.bool.isRequired,
|
||||||
|
supportsOnApplicationUpdate: PropTypes.bool.isRequired,
|
||||||
onConfirmDeleteNotification: PropTypes.func.isRequired
|
onConfirmDeleteNotification: PropTypes.func.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ function NotificationEventItems(props) {
|
|||||||
onDownloadFailure,
|
onDownloadFailure,
|
||||||
onImportFailure,
|
onImportFailure,
|
||||||
onBookRetag,
|
onBookRetag,
|
||||||
|
onApplicationUpdate,
|
||||||
supportsOnGrab,
|
supportsOnGrab,
|
||||||
supportsOnReleaseImport,
|
supportsOnReleaseImport,
|
||||||
supportsOnUpgrade,
|
supportsOnUpgrade,
|
||||||
@@ -38,7 +39,8 @@ function NotificationEventItems(props) {
|
|||||||
includeHealthWarnings,
|
includeHealthWarnings,
|
||||||
supportsOnDownloadFailure,
|
supportsOnDownloadFailure,
|
||||||
supportsOnImportFailure,
|
supportsOnImportFailure,
|
||||||
supportsOnBookRetag
|
supportsOnBookRetag,
|
||||||
|
supportsOnApplicationUpdate
|
||||||
} = item;
|
} = item;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -176,6 +178,17 @@ function NotificationEventItems(props) {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<FormInputGroup
|
||||||
|
type={inputTypes.CHECK}
|
||||||
|
name="onApplicationUpdate"
|
||||||
|
helpText={translate('OnApplicationUpdateHelpText')}
|
||||||
|
isDisabled={!supportsOnApplicationUpdate.value}
|
||||||
|
{...onApplicationUpdate}
|
||||||
|
onChange={onInputChange}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.CHECK}
|
type={inputTypes.CHECK}
|
||||||
@@ -200,6 +213,7 @@ function NotificationEventItems(props) {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ export default {
|
|||||||
selectedSchema.onDownloadFailure = selectedSchema.supportsOnDownloadFailure;
|
selectedSchema.onDownloadFailure = selectedSchema.supportsOnDownloadFailure;
|
||||||
selectedSchema.onImportFailure = selectedSchema.supportsOnImportFailure;
|
selectedSchema.onImportFailure = selectedSchema.supportsOnImportFailure;
|
||||||
selectedSchema.onBookRetag = selectedSchema.supportsOnBookRetag;
|
selectedSchema.onBookRetag = selectedSchema.supportsOnBookRetag;
|
||||||
|
selectedSchema.onApplicationUpdate = selectedSchema.supportsOnApplicationUpdate;
|
||||||
|
|
||||||
return selectedSchema;
|
return selectedSchema;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -96,6 +96,11 @@ namespace NzbDrone.Core.Test.NotificationTests
|
|||||||
{
|
{
|
||||||
TestLogger.Info("OnBookRetag was called");
|
TestLogger.Info("OnBookRetag was called");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
TestLogger.Info("OnApplicationUpdate was called");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestNotificationWithNoEvents : NotificationBase<TestSetting>
|
private class TestNotificationWithNoEvents : NotificationBase<TestSetting>
|
||||||
@@ -138,6 +143,7 @@ namespace NzbDrone.Core.Test.NotificationTests
|
|||||||
notification.SupportsOnDownloadFailure.Should().BeTrue();
|
notification.SupportsOnDownloadFailure.Should().BeTrue();
|
||||||
notification.SupportsOnImportFailure.Should().BeTrue();
|
notification.SupportsOnImportFailure.Should().BeTrue();
|
||||||
notification.SupportsOnBookRetag.Should().BeTrue();
|
notification.SupportsOnBookRetag.Should().BeTrue();
|
||||||
|
notification.SupportsOnApplicationUpdate.Should().BeTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -157,6 +163,7 @@ namespace NzbDrone.Core.Test.NotificationTests
|
|||||||
notification.SupportsOnDownloadFailure.Should().BeFalse();
|
notification.SupportsOnDownloadFailure.Should().BeFalse();
|
||||||
notification.SupportsOnImportFailure.Should().BeFalse();
|
notification.SupportsOnImportFailure.Should().BeFalse();
|
||||||
notification.SupportsOnBookRetag.Should().BeFalse();
|
notification.SupportsOnBookRetag.Should().BeFalse();
|
||||||
|
notification.SupportsOnApplicationUpdate.Should().BeFalse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using FluentMigrator;
|
||||||
|
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migration
|
||||||
|
{
|
||||||
|
[Migration(025)]
|
||||||
|
public class add_on_update_to_notifications : NzbDroneMigrationBase
|
||||||
|
{
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Alter.Table("Notifications").AddColumn("OnApplicationUpdate").AsBoolean().WithDefaultValue(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -90,7 +90,8 @@ namespace NzbDrone.Core.Datastore
|
|||||||
.Ignore(i => i.SupportsOnHealthIssue)
|
.Ignore(i => i.SupportsOnHealthIssue)
|
||||||
.Ignore(i => i.SupportsOnDownloadFailure)
|
.Ignore(i => i.SupportsOnDownloadFailure)
|
||||||
.Ignore(i => i.SupportsOnImportFailure)
|
.Ignore(i => i.SupportsOnImportFailure)
|
||||||
.Ignore(i => i.SupportsOnBookRetag);
|
.Ignore(i => i.SupportsOnBookRetag)
|
||||||
|
.Ignore(i => i.SupportsOnApplicationUpdate);
|
||||||
|
|
||||||
Mapper.Entity<MetadataDefinition>("Metadata").RegisterModel()
|
Mapper.Entity<MetadataDefinition>("Metadata").RegisterModel()
|
||||||
.Ignore(x => x.ImplementationName)
|
.Ignore(x => x.ImplementationName)
|
||||||
|
|||||||
@@ -497,6 +497,8 @@
|
|||||||
"OnBookFileDeleteHelpText": "On Book File Delete",
|
"OnBookFileDeleteHelpText": "On Book File Delete",
|
||||||
"OnBookRetagHelpText": "On Book Retag",
|
"OnBookRetagHelpText": "On Book Retag",
|
||||||
"OnBookTagUpdate": "On Book Tag Update",
|
"OnBookTagUpdate": "On Book Tag Update",
|
||||||
|
"OnApplicationUpdate": "On Application Update",
|
||||||
|
"OnApplicationUpdateHelpText": "On Application Update",
|
||||||
"OnDownloadFailure": "On Download Failure",
|
"OnDownloadFailure": "On Download Failure",
|
||||||
"OnDownloadFailureHelpText": "On Download Failure",
|
"OnDownloadFailureHelpText": "On Download Failure",
|
||||||
"OnGrab": "On Grab",
|
"OnGrab": "On Grab",
|
||||||
|
|||||||
16
src/NzbDrone.Core/Notifications/ApplicationUpdateMessage.cs
Normal file
16
src/NzbDrone.Core/Notifications/ApplicationUpdateMessage.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications
|
||||||
|
{
|
||||||
|
public class ApplicationUpdateMessage
|
||||||
|
{
|
||||||
|
public string Message { get; set; }
|
||||||
|
public Version PreviousVersion { get; set; }
|
||||||
|
public Version NewVersion { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return NewVersion.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,6 +56,11 @@ namespace NzbDrone.Core.Notifications.Boxcar
|
|||||||
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage message)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE, message.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -214,6 +214,18 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
|||||||
ExecuteScript(environmentVariables);
|
ExecuteScript(environmentVariables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
var environmentVariables = new StringDictionary();
|
||||||
|
|
||||||
|
environmentVariables.Add("Readarr_EventType", "ApplicationUpdate");
|
||||||
|
environmentVariables.Add("Readarr_Update_Message", updateMessage.Message);
|
||||||
|
environmentVariables.Add("Readarr_Update_NewVersion", updateMessage.NewVersion.ToString());
|
||||||
|
environmentVariables.Add("Readarr_Update_PreviousVersion", updateMessage.PreviousVersion.ToString());
|
||||||
|
|
||||||
|
ExecuteScript(environmentVariables);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -184,6 +184,41 @@ namespace NzbDrone.Core.Notifications.Discord
|
|||||||
_proxy.SendPayload(payload, Settings);
|
_proxy.SendPayload(payload, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
var attachments = new List<Embed>
|
||||||
|
{
|
||||||
|
new Embed
|
||||||
|
{
|
||||||
|
Author = new DiscordAuthor
|
||||||
|
{
|
||||||
|
Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author,
|
||||||
|
IconUrl = "https://raw.githubusercontent.com/Readarr/Readarr/develop/Logo/256.png"
|
||||||
|
},
|
||||||
|
Title = APPLICATION_UPDATE_TITLE,
|
||||||
|
Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
|
||||||
|
Color = (int)DiscordColors.Standard,
|
||||||
|
Fields = new List<DiscordField>()
|
||||||
|
{
|
||||||
|
new DiscordField()
|
||||||
|
{
|
||||||
|
Name = "Previous Version",
|
||||||
|
Value = updateMessage.PreviousVersion.ToString()
|
||||||
|
},
|
||||||
|
new DiscordField()
|
||||||
|
{
|
||||||
|
Name = "New Version",
|
||||||
|
Value = updateMessage.NewVersion.ToString()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var payload = CreatePayload(null, attachments);
|
||||||
|
|
||||||
|
_proxy.SendPayload(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ namespace NzbDrone.Core.Notifications.Discord
|
|||||||
|
|
||||||
[FieldDefinition(2, Label = "Avatar", HelpText = "Change the avatar that is used for messages from this integration", Type = FieldType.Textbox)]
|
[FieldDefinition(2, Label = "Avatar", HelpText = "Change the avatar that is used for messages from this integration", Type = FieldType.Textbox)]
|
||||||
public string Avatar { get; set; }
|
public string Avatar { get; set; }
|
||||||
|
[FieldDefinition(3, Label = "Host", Advanced = true, HelpText = "Override the Host that shows for this notification, Blank is machine name", Type = FieldType.Textbox)]
|
||||||
|
public string Author { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications.Discord.Payloads
|
||||||
|
{
|
||||||
|
public class DiscordAuthor
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("icon_url")]
|
||||||
|
public string IconUrl { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace NzbDrone.Core.Notifications.Discord.Payloads
|
||||||
|
{
|
||||||
|
public class DiscordField
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Value { get; set; }
|
||||||
|
public bool Inline { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace NzbDrone.Core.Notifications.Discord.Payloads
|
||||||
|
{
|
||||||
|
public class DiscordImage
|
||||||
|
{
|
||||||
|
public string Url { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Notifications.Discord.Payloads
|
namespace NzbDrone.Core.Notifications.Discord.Payloads
|
||||||
{
|
{
|
||||||
public class Embed
|
public class Embed
|
||||||
@@ -6,5 +8,11 @@ namespace NzbDrone.Core.Notifications.Discord.Payloads
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
public int Color { get; set; }
|
public int Color { get; set; }
|
||||||
|
public string Url { get; set; }
|
||||||
|
public DiscordAuthor Author { get; set; }
|
||||||
|
public DiscordImage Thumbnail { get; set; }
|
||||||
|
public DiscordImage Image { get; set; }
|
||||||
|
public string Timestamp { get; set; }
|
||||||
|
public List<DiscordField> Fields { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,6 +80,13 @@ namespace NzbDrone.Core.Notifications.Email
|
|||||||
SendEmail(Settings, IMPORT_FAILURE_TITLE_BRANDED, message.Message);
|
SendEmail(Settings, IMPORT_FAILURE_TITLE_BRANDED, message.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
var body = $"{updateMessage.Message}";
|
||||||
|
|
||||||
|
SendEmail(Settings, APPLICATION_UPDATE_TITLE_BRANDED, body);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ namespace NzbDrone.Core.Notifications.Gotify
|
|||||||
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
void OnBookDelete(BookDeleteMessage deleteMessage);
|
void OnBookDelete(BookDeleteMessage deleteMessage);
|
||||||
void OnBookFileDelete(BookFileDeleteMessage deleteMessage);
|
void OnBookFileDelete(BookFileDeleteMessage deleteMessage);
|
||||||
void OnHealthIssue(HealthCheck.HealthCheck healthCheck);
|
void OnHealthIssue(HealthCheck.HealthCheck healthCheck);
|
||||||
|
void OnApplicationUpdate(ApplicationUpdateMessage updateMessage);
|
||||||
void OnDownloadFailure(DownloadFailedMessage message);
|
void OnDownloadFailure(DownloadFailedMessage message);
|
||||||
void OnImportFailure(BookDownloadMessage message);
|
void OnImportFailure(BookDownloadMessage message);
|
||||||
void OnBookRetag(BookRetagMessage message);
|
void OnBookRetag(BookRetagMessage message);
|
||||||
@@ -27,6 +28,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
bool SupportsOnBookFileDelete { get; }
|
bool SupportsOnBookFileDelete { get; }
|
||||||
bool SupportsOnBookFileDeleteForUpgrade { get; }
|
bool SupportsOnBookFileDeleteForUpgrade { get; }
|
||||||
bool SupportsOnHealthIssue { get; }
|
bool SupportsOnHealthIssue { get; }
|
||||||
|
bool SupportsOnApplicationUpdate { get; }
|
||||||
bool SupportsOnDownloadFailure { get; }
|
bool SupportsOnDownloadFailure { get; }
|
||||||
bool SupportsOnImportFailure { get; }
|
bool SupportsOnImportFailure { get; }
|
||||||
bool SupportsOnBookRetag { get; }
|
bool SupportsOnBookRetag { get; }
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ namespace NzbDrone.Core.Notifications.Join
|
|||||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, message.Message, Settings);
|
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE_BRANDED, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -49,6 +49,11 @@ namespace NzbDrone.Core.Notifications.Mailgun
|
|||||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheckMessage.Message, Settings);
|
_proxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheckMessage.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -159,6 +159,18 @@ namespace NzbDrone.Core.Notifications.Notifiarr
|
|||||||
_proxy.SendNotification(variables, Settings);
|
_proxy.SendNotification(variables, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
var variables = new StringDictionary();
|
||||||
|
|
||||||
|
variables.Add("Readarr_EventType", "ApplicationUpdate");
|
||||||
|
variables.Add("Readarr_Update_Message", updateMessage.Message);
|
||||||
|
variables.Add("Readarr_Update_NewVersion", updateMessage.NewVersion.ToString());
|
||||||
|
variables.Add("Readarr_Update_PreviousVersion", updateMessage.PreviousVersion.ToString());
|
||||||
|
|
||||||
|
_proxy.SendNotification(variables, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
protected const string DOWNLOAD_FAILURE_TITLE = "Download Failed";
|
protected const string DOWNLOAD_FAILURE_TITLE = "Download Failed";
|
||||||
protected const string IMPORT_FAILURE_TITLE = "Import Failed";
|
protected const string IMPORT_FAILURE_TITLE = "Import Failed";
|
||||||
protected const string BOOK_RETAGGED_TITLE = "Book File Tags Updated";
|
protected const string BOOK_RETAGGED_TITLE = "Book File Tags Updated";
|
||||||
|
protected const string APPLICATION_UPDATE_TITLE = "Application Updated";
|
||||||
|
|
||||||
protected const string BOOK_GRABBED_TITLE_BRANDED = "Readarr - " + BOOK_GRABBED_TITLE;
|
protected const string BOOK_GRABBED_TITLE_BRANDED = "Readarr - " + BOOK_GRABBED_TITLE;
|
||||||
protected const string BOOK_DOWNLOADED_TITLE_BRANDED = "Readarr - " + BOOK_DOWNLOADED_TITLE;
|
protected const string BOOK_DOWNLOADED_TITLE_BRANDED = "Readarr - " + BOOK_DOWNLOADED_TITLE;
|
||||||
@@ -28,6 +29,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
protected const string DOWNLOAD_FAILURE_TITLE_BRANDED = "Readarr - " + DOWNLOAD_FAILURE_TITLE;
|
protected const string DOWNLOAD_FAILURE_TITLE_BRANDED = "Readarr - " + DOWNLOAD_FAILURE_TITLE;
|
||||||
protected const string IMPORT_FAILURE_TITLE_BRANDED = "Readarr - " + IMPORT_FAILURE_TITLE;
|
protected const string IMPORT_FAILURE_TITLE_BRANDED = "Readarr - " + IMPORT_FAILURE_TITLE;
|
||||||
protected const string BOOK_RETAGGED_TITLE_BRANDED = "Readarr - " + BOOK_RETAGGED_TITLE;
|
protected const string BOOK_RETAGGED_TITLE_BRANDED = "Readarr - " + BOOK_RETAGGED_TITLE;
|
||||||
|
protected const string APPLICATION_UPDATE_TITLE_BRANDED = "Readarr - " + APPLICATION_UPDATE_TITLE;
|
||||||
|
|
||||||
public abstract string Name { get; }
|
public abstract string Name { get; }
|
||||||
|
|
||||||
@@ -82,6 +84,10 @@ namespace NzbDrone.Core.Notifications
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void ProcessQueue()
|
public virtual void ProcessQueue()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -98,6 +104,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
public bool SupportsOnDownloadFailure => HasConcreteImplementation("OnDownloadFailure");
|
public bool SupportsOnDownloadFailure => HasConcreteImplementation("OnDownloadFailure");
|
||||||
public bool SupportsOnImportFailure => HasConcreteImplementation("OnImportFailure");
|
public bool SupportsOnImportFailure => HasConcreteImplementation("OnImportFailure");
|
||||||
public bool SupportsOnBookRetag => HasConcreteImplementation("OnBookRetag");
|
public bool SupportsOnBookRetag => HasConcreteImplementation("OnBookRetag");
|
||||||
|
public bool SupportsOnApplicationUpdate => HasConcreteImplementation("OnApplicationUpdate");
|
||||||
|
|
||||||
protected TSettings Settings => (TSettings)Definition.Settings;
|
protected TSettings Settings => (TSettings)Definition.Settings;
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
public bool OnDownloadFailure { get; set; }
|
public bool OnDownloadFailure { get; set; }
|
||||||
public bool OnImportFailure { get; set; }
|
public bool OnImportFailure { get; set; }
|
||||||
public bool OnBookRetag { get; set; }
|
public bool OnBookRetag { get; set; }
|
||||||
|
public bool OnApplicationUpdate { get; set; }
|
||||||
public bool SupportsOnGrab { get; set; }
|
public bool SupportsOnGrab { get; set; }
|
||||||
public bool SupportsOnReleaseImport { get; set; }
|
public bool SupportsOnReleaseImport { get; set; }
|
||||||
public bool SupportsOnUpgrade { get; set; }
|
public bool SupportsOnUpgrade { get; set; }
|
||||||
@@ -29,7 +30,8 @@ namespace NzbDrone.Core.Notifications
|
|||||||
public bool SupportsOnDownloadFailure { get; set; }
|
public bool SupportsOnDownloadFailure { get; set; }
|
||||||
public bool SupportsOnImportFailure { get; set; }
|
public bool SupportsOnImportFailure { get; set; }
|
||||||
public bool SupportsOnBookRetag { get; set; }
|
public bool SupportsOnBookRetag { get; set; }
|
||||||
|
public bool SupportsOnApplicationUpdate { get; set; }
|
||||||
|
|
||||||
public override bool Enable => OnGrab || OnReleaseImport || (OnReleaseImport && OnUpgrade) || OnAuthorDelete || OnBookDelete || OnBookFileDelete || OnBookFileDeleteForUpgrade || OnHealthIssue || OnDownloadFailure || OnImportFailure || OnBookRetag;
|
public override bool Enable => OnGrab || OnReleaseImport || (OnReleaseImport && OnUpgrade) || OnAuthorDelete || OnBookDelete || OnBookFileDelete || OnBookFileDeleteForUpgrade || OnHealthIssue || OnDownloadFailure || OnImportFailure || OnBookRetag || OnApplicationUpdate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
List<INotification> OnDownloadFailureEnabled();
|
List<INotification> OnDownloadFailureEnabled();
|
||||||
List<INotification> OnImportFailureEnabled();
|
List<INotification> OnImportFailureEnabled();
|
||||||
List<INotification> OnBookRetagEnabled();
|
List<INotification> OnBookRetagEnabled();
|
||||||
|
List<INotification> OnApplicationUpdateEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NotificationFactory : ProviderFactory<INotification, NotificationDefinition>, INotificationFactory
|
public class NotificationFactory : ProviderFactory<INotification, NotificationDefinition>, INotificationFactory
|
||||||
@@ -91,6 +92,11 @@ namespace NzbDrone.Core.Notifications
|
|||||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnBookRetag).ToList();
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnBookRetag).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<INotification> OnApplicationUpdateEnabled()
|
||||||
|
{
|
||||||
|
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnApplicationUpdate).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);
|
||||||
@@ -107,6 +113,7 @@ namespace NzbDrone.Core.Notifications
|
|||||||
definition.SupportsOnDownloadFailure = provider.SupportsOnDownloadFailure;
|
definition.SupportsOnDownloadFailure = provider.SupportsOnDownloadFailure;
|
||||||
definition.SupportsOnImportFailure = provider.SupportsOnImportFailure;
|
definition.SupportsOnImportFailure = provider.SupportsOnImportFailure;
|
||||||
definition.SupportsOnBookRetag = provider.SupportsOnBookRetag;
|
definition.SupportsOnBookRetag = provider.SupportsOnBookRetag;
|
||||||
|
definition.SupportsOnApplicationUpdate = provider.SupportsOnApplicationUpdate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using NzbDrone.Core.MediaFiles.Events;
|
|||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
using NzbDrone.Core.Qualities;
|
using NzbDrone.Core.Qualities;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
|
using NzbDrone.Core.Update.History.Events;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Notifications
|
namespace NzbDrone.Core.Notifications
|
||||||
{
|
{
|
||||||
@@ -26,7 +27,8 @@ namespace NzbDrone.Core.Notifications
|
|||||||
IHandle<DownloadFailedEvent>,
|
IHandle<DownloadFailedEvent>,
|
||||||
IHandle<BookImportIncompleteEvent>,
|
IHandle<BookImportIncompleteEvent>,
|
||||||
IHandle<BookFileRetaggedEvent>,
|
IHandle<BookFileRetaggedEvent>,
|
||||||
IHandleAsync<DeleteCompletedEvent>
|
IHandleAsync<DeleteCompletedEvent>,
|
||||||
|
IHandle<UpdateInstalledEvent>
|
||||||
{
|
{
|
||||||
private readonly INotificationFactory _notificationFactory;
|
private readonly INotificationFactory _notificationFactory;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
@@ -346,6 +348,26 @@ namespace NzbDrone.Core.Notifications
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Handle(UpdateInstalledEvent message)
|
||||||
|
{
|
||||||
|
var updateMessage = new ApplicationUpdateMessage();
|
||||||
|
updateMessage.Message = $"Readarr updated from {message.PreviousVerison.ToString()} to {message.NewVersion.ToString()}";
|
||||||
|
updateMessage.PreviousVersion = message.PreviousVerison;
|
||||||
|
updateMessage.NewVersion = message.NewVersion;
|
||||||
|
|
||||||
|
foreach (var notification in _notificationFactory.OnApplicationUpdateEnabled())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
notification.OnApplicationUpdate(updateMessage);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Warn(ex, "Unable to send OnApplicationUpdate notification to: " + notification.Definition.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void HandleAsync(DeleteCompletedEvent message)
|
public void HandleAsync(DeleteCompletedEvent message)
|
||||||
{
|
{
|
||||||
ProcessQueue();
|
ProcessQueue();
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ namespace NzbDrone.Core.Notifications.Ntfy
|
|||||||
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings);
|
_proxy.SendNotification(HEALTH_ISSUE_TITLE_BRANDED, healthCheck.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE_BRANDED, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ namespace NzbDrone.Core.Notifications.Prowl
|
|||||||
_prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
_prowlProxy.SendNotification(HEALTH_ISSUE_TITLE, healthCheck.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_prowlProxy.SendNotification(APPLICATION_UPDATE_TITLE, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ namespace NzbDrone.Core.Notifications.PushBullet
|
|||||||
_proxy.SendNotification(IMPORT_FAILURE_TITLE_BRANDED, message.Message, Settings);
|
_proxy.SendNotification(IMPORT_FAILURE_TITLE_BRANDED, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE_BRANDED, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -56,6 +56,11 @@ namespace NzbDrone.Core.Notifications.Pushover
|
|||||||
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ namespace NzbDrone.Core.Notifications.SendGrid
|
|||||||
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -183,6 +183,23 @@ namespace NzbDrone.Core.Notifications.Slack
|
|||||||
_proxy.SendPayload(payload, Settings);
|
_proxy.SendPayload(payload, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
var attachments = new List<Attachment>
|
||||||
|
{
|
||||||
|
new Attachment
|
||||||
|
{
|
||||||
|
Title = Environment.MachineName,
|
||||||
|
Text = updateMessage.Message,
|
||||||
|
Color = "good"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var payload = CreatePayload("Application Updated", attachments);
|
||||||
|
|
||||||
|
_proxy.SendPayload(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -56,6 +56,11 @@ namespace NzbDrone.Core.Notifications.Telegram
|
|||||||
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
_proxy.SendNotification(IMPORT_FAILURE_TITLE, message.Message, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_proxy.SendNotification(APPLICATION_UPDATE_TITLE, updateMessage.Message, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|||||||
@@ -58,6 +58,11 @@ namespace NzbDrone.Core.Notifications.Twitter
|
|||||||
_twitterService.SendNotification($"Import Failed: {message.Message}", Settings);
|
_twitterService.SendNotification($"Import Failed: {message.Message}", Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
_twitterService.SendNotification($"Application Updated: {updateMessage.Message}", Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override object RequestAction(string action, IDictionary<string, string> query)
|
public override object RequestAction(string action, IDictionary<string, string> query)
|
||||||
{
|
{
|
||||||
if (action == "startOAuth")
|
if (action == "startOAuth")
|
||||||
|
|||||||
@@ -133,6 +133,19 @@ namespace NzbDrone.Core.Notifications.Webhook
|
|||||||
_proxy.SendWebhook(payload, Settings);
|
_proxy.SendWebhook(payload, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnApplicationUpdate(ApplicationUpdateMessage updateMessage)
|
||||||
|
{
|
||||||
|
var payload = new WebhookApplicationUpdatePayload
|
||||||
|
{
|
||||||
|
EventType = WebhookEventType.ApplicationUpdate,
|
||||||
|
Message = updateMessage.Message,
|
||||||
|
PreviousVersion = updateMessage.PreviousVersion.ToString(),
|
||||||
|
NewVersion = updateMessage.NewVersion.ToString()
|
||||||
|
};
|
||||||
|
|
||||||
|
_proxy.SendWebhook(payload, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
public override string Name => "Webhook";
|
public override string Name => "Webhook";
|
||||||
|
|
||||||
public override ValidationResult Test()
|
public override ValidationResult Test()
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using NzbDrone.Core.HealthCheck;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Notifications.Webhook
|
||||||
|
{
|
||||||
|
public class WebhookApplicationUpdatePayload : WebhookPayload
|
||||||
|
{
|
||||||
|
public string Message { get; set; }
|
||||||
|
public string PreviousVersion { get; set; }
|
||||||
|
public string NewVersion { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
|||||||
Rename,
|
Rename,
|
||||||
Delete,
|
Delete,
|
||||||
Health,
|
Health,
|
||||||
Retag
|
Retag,
|
||||||
|
ApplicationUpdate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ namespace Readarr.Api.V1.Notifications
|
|||||||
public bool OnDownloadFailure { get; set; }
|
public bool OnDownloadFailure { get; set; }
|
||||||
public bool OnImportFailure { get; set; }
|
public bool OnImportFailure { get; set; }
|
||||||
public bool OnBookRetag { get; set; }
|
public bool OnBookRetag { get; set; }
|
||||||
|
public bool OnApplicationUpdate { get; set; }
|
||||||
public bool SupportsOnGrab { get; set; }
|
public bool SupportsOnGrab { get; set; }
|
||||||
public bool SupportsOnReleaseImport { get; set; }
|
public bool SupportsOnReleaseImport { get; set; }
|
||||||
public bool SupportsOnUpgrade { get; set; }
|
public bool SupportsOnUpgrade { get; set; }
|
||||||
@@ -30,6 +31,7 @@ namespace Readarr.Api.V1.Notifications
|
|||||||
public bool SupportsOnDownloadFailure { get; set; }
|
public bool SupportsOnDownloadFailure { get; set; }
|
||||||
public bool SupportsOnImportFailure { get; set; }
|
public bool SupportsOnImportFailure { get; set; }
|
||||||
public bool SupportsOnBookRetag { get; set; }
|
public bool SupportsOnBookRetag { get; set; }
|
||||||
|
public bool SupportsOnApplicationUpdate { get; set; }
|
||||||
public string TestCommand { get; set; }
|
public string TestCommand { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,6 +58,7 @@ namespace Readarr.Api.V1.Notifications
|
|||||||
resource.OnDownloadFailure = definition.OnDownloadFailure;
|
resource.OnDownloadFailure = definition.OnDownloadFailure;
|
||||||
resource.OnImportFailure = definition.OnImportFailure;
|
resource.OnImportFailure = definition.OnImportFailure;
|
||||||
resource.OnBookRetag = definition.OnBookRetag;
|
resource.OnBookRetag = definition.OnBookRetag;
|
||||||
|
resource.OnApplicationUpdate = definition.OnApplicationUpdate;
|
||||||
resource.SupportsOnGrab = definition.SupportsOnGrab;
|
resource.SupportsOnGrab = definition.SupportsOnGrab;
|
||||||
resource.SupportsOnReleaseImport = definition.SupportsOnReleaseImport;
|
resource.SupportsOnReleaseImport = definition.SupportsOnReleaseImport;
|
||||||
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
resource.SupportsOnUpgrade = definition.SupportsOnUpgrade;
|
||||||
@@ -69,6 +72,7 @@ namespace Readarr.Api.V1.Notifications
|
|||||||
resource.SupportsOnDownloadFailure = definition.SupportsOnDownloadFailure;
|
resource.SupportsOnDownloadFailure = definition.SupportsOnDownloadFailure;
|
||||||
resource.SupportsOnImportFailure = definition.SupportsOnImportFailure;
|
resource.SupportsOnImportFailure = definition.SupportsOnImportFailure;
|
||||||
resource.SupportsOnBookRetag = definition.SupportsOnBookRetag;
|
resource.SupportsOnBookRetag = definition.SupportsOnBookRetag;
|
||||||
|
resource.SupportsOnApplicationUpdate = definition.SupportsOnApplicationUpdate;
|
||||||
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
@@ -94,6 +98,7 @@ namespace Readarr.Api.V1.Notifications
|
|||||||
definition.OnDownloadFailure = resource.OnDownloadFailure;
|
definition.OnDownloadFailure = resource.OnDownloadFailure;
|
||||||
definition.OnImportFailure = resource.OnImportFailure;
|
definition.OnImportFailure = resource.OnImportFailure;
|
||||||
definition.OnBookRetag = resource.OnBookRetag;
|
definition.OnBookRetag = resource.OnBookRetag;
|
||||||
|
definition.OnApplicationUpdate = resource.OnApplicationUpdate;
|
||||||
definition.SupportsOnGrab = resource.SupportsOnGrab;
|
definition.SupportsOnGrab = resource.SupportsOnGrab;
|
||||||
definition.SupportsOnReleaseImport = resource.SupportsOnReleaseImport;
|
definition.SupportsOnReleaseImport = resource.SupportsOnReleaseImport;
|
||||||
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
definition.SupportsOnUpgrade = resource.SupportsOnUpgrade;
|
||||||
@@ -107,6 +112,7 @@ namespace Readarr.Api.V1.Notifications
|
|||||||
definition.SupportsOnDownloadFailure = resource.SupportsOnDownloadFailure;
|
definition.SupportsOnDownloadFailure = resource.SupportsOnDownloadFailure;
|
||||||
definition.SupportsOnImportFailure = resource.SupportsOnImportFailure;
|
definition.SupportsOnImportFailure = resource.SupportsOnImportFailure;
|
||||||
definition.SupportsOnBookRetag = resource.SupportsOnBookRetag;
|
definition.SupportsOnBookRetag = resource.SupportsOnBookRetag;
|
||||||
|
definition.SupportsOnApplicationUpdate = resource.SupportsOnApplicationUpdate;
|
||||||
|
|
||||||
return definition;
|
return definition;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user