From 16c03444abbbfc5b4dbf3a89e482878cf4573e5c Mon Sep 17 00:00:00 2001 From: Qstick Date: Wed, 15 Jan 2020 22:39:42 -0500 Subject: [PATCH] Fixed: Removed NotifyMyAndroid and Pushalot Fixes #4033 Tack onto migration 164 --- .../Migration/164_movie_collections_crew.cs | 3 + .../NotifyMyAndroid/NotifyMyAndroid.cs | 48 -------- .../NotifyMyAndroidPriority.cs | 11 -- .../NotifyMyAndroid/NotifyMyAndroidProxy.cs | 85 -------------- .../NotifyMyAndroidSettings.cs | 33 ------ .../Notifications/Pushalot/Pushalot.cs | 48 -------- .../Pushalot/PushalotPriority.cs | 9 -- .../Notifications/Pushalot/PushalotProxy.cs | 106 ------------------ .../Pushalot/PushalotResponse.cs | 9 -- .../Pushalot/PushalotSettings.cs | 41 ------- 10 files changed, 3 insertions(+), 390 deletions(-) delete mode 100644 src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs delete mode 100644 src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs delete mode 100644 src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs delete mode 100644 src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs delete mode 100644 src/NzbDrone.Core/Notifications/Pushalot/Pushalot.cs delete mode 100644 src/NzbDrone.Core/Notifications/Pushalot/PushalotPriority.cs delete mode 100644 src/NzbDrone.Core/Notifications/Pushalot/PushalotProxy.cs delete mode 100644 src/NzbDrone.Core/Notifications/Pushalot/PushalotResponse.cs delete mode 100644 src/NzbDrone.Core/Notifications/Pushalot/PushalotSettings.cs diff --git a/src/NzbDrone.Core/Datastore/Migration/164_movie_collections_crew.cs b/src/NzbDrone.Core/Datastore/Migration/164_movie_collections_crew.cs index a1f4558cc..872e8c765 100644 --- a/src/NzbDrone.Core/Datastore/Migration/164_movie_collections_crew.cs +++ b/src/NzbDrone.Core/Datastore/Migration/164_movie_collections_crew.cs @@ -23,6 +23,9 @@ namespace NzbDrone.Core.Datastore.Migration .WithColumn("Type").AsInt32(); Create.Index().OnTable("Credits").OnColumn("MovieId"); + + Delete.FromTable("Notifications").Row(new { Implementation = "NotifyMyAndroid" }); + Delete.FromTable("Notifications").Row(new { Implementation = "Pushalot" }); } } } diff --git a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs deleted file mode 100644 index a23c83998..000000000 --- a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; -using FluentValidation.Results; -using NzbDrone.Common.Extensions; -using NzbDrone.Core.Movies; - -namespace NzbDrone.Core.Notifications.NotifyMyAndroid -{ - public class NotifyMyAndroid : NotificationBase - { - private readonly INotifyMyAndroidProxy _proxy; - - public NotifyMyAndroid(INotifyMyAndroidProxy proxy) - { - _proxy = proxy; - } - - public override string Link => "http://www.notifymyandroid.com/"; - - public override void OnGrab(GrabMessage grabMessage) - { - const string title = "Movie Grabbed"; - - _proxy.SendNotification(title, grabMessage.Message, Settings.ApiKey, (NotifyMyAndroidPriority)Settings.Priority); - } - - public override void OnDownload(DownloadMessage message) - { - const string title = "Movie Downloaded"; - - _proxy.SendNotification(title, message.Message, Settings.ApiKey, (NotifyMyAndroidPriority)Settings.Priority); - } - - public override void OnMovieRename(Movie movie) - { - } - - public override string Name => "Notify My Android"; - - public override ValidationResult Test() - { - var failures = new List(); - - failures.AddIfNotNull(_proxy.Test(Settings)); - - return new ValidationResult(failures); - } - } -} diff --git a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs deleted file mode 100644 index fd91e91d5..000000000 --- a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace NzbDrone.Core.Notifications.NotifyMyAndroid -{ - public enum NotifyMyAndroidPriority - { - VeryLow = -2, - Moderate = -1, - Normal = 0, - High = 1, - Emergency = 2 - } -} diff --git a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs deleted file mode 100644 index 564d1b1ad..000000000 --- a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Linq; -using System.Net; -using System.Xml.Linq; -using FluentValidation.Results; -using NLog; -using NzbDrone.Core.Exceptions; -using NzbDrone.Core.Rest; -using RestSharp; - -namespace NzbDrone.Core.Notifications.NotifyMyAndroid -{ - public interface INotifyMyAndroidProxy - { - void SendNotification(string title, string message, string apiKye, NotifyMyAndroidPriority priority); - ValidationFailure Test(NotifyMyAndroidSettings settings); - } - - public class NotifyMyAndroidProxy : INotifyMyAndroidProxy - { - private const string URL = "https://www.notifymyandroid.com/publicapi"; - private readonly Logger _logger; - - public NotifyMyAndroidProxy(Logger logger) - { - _logger = logger; - } - - public void SendNotification(string title, string message, string apiKey, NotifyMyAndroidPriority priority) - { - var client = RestClientFactory.BuildClient(URL); - var request = new RestRequest("notify", Method.POST); - request.RequestFormat = DataFormat.Xml; - request.AddParameter("apikey", apiKey); - request.AddParameter("application", "Radarr"); - request.AddParameter("event", title); - request.AddParameter("description", message); - request.AddParameter("priority", (int)priority); - - var response = client.ExecuteAndValidate(request); - ValidateResponse(response); - } - - private void Verify(string apiKey) - { - var client = RestClientFactory.BuildClient(URL); - var request = new RestRequest("verify", Method.GET); - request.RequestFormat = DataFormat.Xml; - request.AddParameter("apikey", apiKey, ParameterType.GetOrPost); - - var response = client.ExecuteAndValidate(request); - ValidateResponse(response); - } - - private void ValidateResponse(IRestResponse response) - { - var xDoc = XDocument.Parse(response.Content); - var nma = xDoc.Descendants("nma").Single(); - var error = nma.Descendants("error").SingleOrDefault(); - - if (error != null) - { - ((HttpStatusCode)Convert.ToInt32(error.Attribute("code").Value)).VerifyStatusCode(error.Value); - } - } - - public ValidationFailure Test(NotifyMyAndroidSettings settings) - { - try - { - const string title = "Test Notification"; - const string body = "This is a test message from Radarr"; - Verify(settings.ApiKey); - SendNotification(title, body, settings.ApiKey, (NotifyMyAndroidPriority)settings.Priority); - } - catch (Exception ex) - { - _logger.Error(ex, "Unable to send test message: " + ex.Message); - return new ValidationFailure("ApiKey", "Unable to send test message"); - } - - return null; - } - } -} diff --git a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs deleted file mode 100644 index 7dd3a96bf..000000000 --- a/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs +++ /dev/null @@ -1,33 +0,0 @@ -using FluentValidation; -using NzbDrone.Core.Annotations; -using NzbDrone.Core.ThingiProvider; -using NzbDrone.Core.Validation; - -namespace NzbDrone.Core.Notifications.NotifyMyAndroid -{ - public class NotifyMyAndroidSettingsValidator : AbstractValidator - { - public NotifyMyAndroidSettingsValidator() - { - RuleFor(c => c.ApiKey).NotEmpty(); - } - } - - public class NotifyMyAndroidSettings : IProviderConfig - { - private static readonly NotifyMyAndroidSettingsValidator Validator = new NotifyMyAndroidSettingsValidator(); - - [FieldDefinition(0, Label = "API Key", HelpLink = "http://www.notifymyandroid.com/")] - public string ApiKey { get; set; } - - [FieldDefinition(1, Label = "Priority", Type = FieldType.Select, SelectOptions = typeof(NotifyMyAndroidPriority))] - public int Priority { get; set; } - - public bool IsValid => !string.IsNullOrWhiteSpace(ApiKey) && Priority >= -1 && Priority <= 2; - - public NzbDroneValidationResult Validate() - { - return new NzbDroneValidationResult(Validator.Validate(this)); - } - } -} diff --git a/src/NzbDrone.Core/Notifications/Pushalot/Pushalot.cs b/src/NzbDrone.Core/Notifications/Pushalot/Pushalot.cs deleted file mode 100644 index 52fd3fe06..000000000 --- a/src/NzbDrone.Core/Notifications/Pushalot/Pushalot.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; -using FluentValidation.Results; -using NzbDrone.Common.Extensions; -using NzbDrone.Core.Movies; - -namespace NzbDrone.Core.Notifications.Pushalot -{ - public class Pushalot : NotificationBase - { - private readonly IPushalotProxy _proxy; - - public Pushalot(IPushalotProxy proxy) - { - _proxy = proxy; - } - - public override string Link => "https://www.Pushalot.com/"; - - public override void OnGrab(GrabMessage grabMessage) - { - const string title = "Movie Grabbed"; - - _proxy.SendNotification(title, grabMessage.Message, Settings); - } - - public override void OnDownload(DownloadMessage message) - { - const string title = "Movie Downloaded"; - - _proxy.SendNotification(title, message.Message, Settings); - } - - public override void OnMovieRename(Movie movie) - { - } - - public override string Name => "Pushalot"; - - public override ValidationResult Test() - { - var failures = new List(); - - failures.AddIfNotNull(_proxy.Test(Settings)); - - return new ValidationResult(failures); - } - } -} diff --git a/src/NzbDrone.Core/Notifications/Pushalot/PushalotPriority.cs b/src/NzbDrone.Core/Notifications/Pushalot/PushalotPriority.cs deleted file mode 100644 index 58effba2f..000000000 --- a/src/NzbDrone.Core/Notifications/Pushalot/PushalotPriority.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace NzbDrone.Core.Notifications.Pushalot -{ - public enum PushalotPriority - { - Silent = -1, - Normal = 0, - Important = 1 - } -} diff --git a/src/NzbDrone.Core/Notifications/Pushalot/PushalotProxy.cs b/src/NzbDrone.Core/Notifications/Pushalot/PushalotProxy.cs deleted file mode 100644 index 02a61b418..000000000 --- a/src/NzbDrone.Core/Notifications/Pushalot/PushalotProxy.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Net; -using FluentValidation.Results; -using NLog; -using NzbDrone.Common.Serializer; -using NzbDrone.Core.Rest; -using RestSharp; - -namespace NzbDrone.Core.Notifications.Pushalot -{ - public interface IPushalotProxy - { - void SendNotification(string title, string message, PushalotSettings settings); - ValidationFailure Test(PushalotSettings settings); - } - - public class PushalotProxy : IPushalotProxy - { - private const string URL = "https://pushalot.com/api/sendmessage"; - private readonly Logger _logger; - - public PushalotProxy(Logger logger) - { - _logger = logger; - } - - public void SendNotification(string title, string message, PushalotSettings settings) - { - var client = RestClientFactory.BuildClient(URL); - var request = BuildRequest(); - - request.AddParameter("Source", "Radarr"); - - if (settings.Image) - { - request.AddParameter("Image", "https://raw.githubusercontent.com/Radarr/Radarr/develop/Logo/128.png"); - } - - request.AddParameter("Title", title); - request.AddParameter("Body", message); - request.AddParameter("AuthorizationToken", settings.AuthToken); - - if ((PushalotPriority)settings.Priority == PushalotPriority.Important) - { - request.AddParameter("IsImportant", true); - } - - if ((PushalotPriority)settings.Priority == PushalotPriority.Silent) - { - request.AddParameter("IsSilent", true); - } - - client.ExecuteAndValidate(request); - } - - public RestRequest BuildRequest() - { - var request = new RestRequest(Method.POST); - - return request; - } - - public ValidationFailure Test(PushalotSettings settings) - { - try - { - const string title = "Test Notification"; - const string body = "This is a test message from Radarr"; - - SendNotification(title, body, settings); - } - catch (RestException ex) - { - if (ex.Response.StatusCode == HttpStatusCode.Unauthorized) - { - _logger.Error(ex, "Authentication Token is invalid: " + ex.Message); - return new ValidationFailure("AuthToken", "Authentication Token is invalid"); - } - - if (ex.Response.StatusCode == HttpStatusCode.NotAcceptable) - { - _logger.Error(ex, "Message limit reached: " + ex.Message); - return new ValidationFailure("AuthToken", "Message limit reached"); - } - - if (ex.Response.StatusCode == HttpStatusCode.Gone) - { - _logger.Error(ex, "Authorization Token is no longer valid: " + ex.Message); - return new ValidationFailure("AuthToken", "Authorization Token is no longer valid, please use a new one."); - } - - var response = Json.Deserialize(ex.Response.Content); - - _logger.Error(ex, "Unable to send test message: " + ex.Message); - return new ValidationFailure("AuthToken", response.Description); - } - catch (Exception ex) - { - _logger.Error(ex, "Unable to send test message: " + ex.Message); - return new ValidationFailure("", "Unable to send test message"); - } - - return null; - } - } -} diff --git a/src/NzbDrone.Core/Notifications/Pushalot/PushalotResponse.cs b/src/NzbDrone.Core/Notifications/Pushalot/PushalotResponse.cs deleted file mode 100644 index 860be65c6..000000000 --- a/src/NzbDrone.Core/Notifications/Pushalot/PushalotResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace NzbDrone.Core.Notifications.Pushalot -{ - public class PushalotResponse - { - public bool Success { get; set; } - public int Status { get; set; } - public string Description { get; set; } - } -} diff --git a/src/NzbDrone.Core/Notifications/Pushalot/PushalotSettings.cs b/src/NzbDrone.Core/Notifications/Pushalot/PushalotSettings.cs deleted file mode 100644 index de3ebb1ff..000000000 --- a/src/NzbDrone.Core/Notifications/Pushalot/PushalotSettings.cs +++ /dev/null @@ -1,41 +0,0 @@ -using FluentValidation; -using NzbDrone.Core.Annotations; -using NzbDrone.Core.ThingiProvider; -using NzbDrone.Core.Validation; - -namespace NzbDrone.Core.Notifications.Pushalot -{ - public class PushalotSettingsValidator : AbstractValidator - { - public PushalotSettingsValidator() - { - RuleFor(c => c.AuthToken).NotEmpty(); - } - } - - public class PushalotSettings : IProviderConfig - { - public PushalotSettings() - { - Image = true; - } - - private static readonly PushalotSettingsValidator Validator = new PushalotSettingsValidator(); - - [FieldDefinition(0, Label = "Authorization Token", HelpLink = "https://pushalot.com/manager/authorizations")] - public string AuthToken { get; set; } - - [FieldDefinition(1, Label = "Priority", Type = FieldType.Select, SelectOptions = typeof(PushalotPriority))] - public int Priority { get; set; } - - [FieldDefinition(2, Label = "Image", Type = FieldType.Checkbox, HelpText = "Include Radarr logo with notifications")] - public bool Image { get; set; } - - public bool IsValid => !string.IsNullOrWhiteSpace(AuthToken); - - public NzbDroneValidationResult Validate() - { - return new NzbDroneValidationResult(Validator.Validate(this)); - } - } -}