diff --git a/src/NzbDrone.Api/ProviderResource.cs b/src/NzbDrone.Api/ProviderResource.cs index d26320701..9927a09cc 100644 --- a/src/NzbDrone.Api/ProviderResource.cs +++ b/src/NzbDrone.Api/ProviderResource.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using NzbDrone.Api.ClientSchema; using NzbDrone.Api.REST; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Api { @@ -12,6 +13,7 @@ public class ProviderResource : RestResource public string Implementation { get; set; } public string ConfigContract { get; set; } public string InfoLink { get; set; } + public ProviderMessage Message { get; set; } public List Presets { get; set; } } diff --git a/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs b/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs index 4aa491704..3abf50d8c 100644 --- a/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/rTorrent/RTorrent.cs @@ -10,9 +10,9 @@ using NLog; using NzbDrone.Core.Validation; using FluentValidation.Results; -using System.Net; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.RemotePathMappings; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Download.Clients.RTorrent { @@ -92,6 +92,14 @@ public override string Name } } + public override ProviderMessage Message + { + get + { + return new ProviderMessage("Sonarr is unable to remove torrents that have finished seeding when using rTorrent", ProviderMessageType.Warning); + } + } + public override IEnumerable GetItems() { try diff --git a/src/NzbDrone.Core/Download/DownloadClientBase.cs b/src/NzbDrone.Core/Download/DownloadClientBase.cs index f1ca8a6b4..69e93f813 100644 --- a/src/NzbDrone.Core/Download/DownloadClientBase.cs +++ b/src/NzbDrone.Core/Download/DownloadClientBase.cs @@ -32,6 +32,14 @@ public Type ConfigContract } } + public virtual ProviderMessage Message + { + get + { + return null; + } + } + public IEnumerable DefaultDefinitions { get diff --git a/src/NzbDrone.Core/Indexers/IndexerBase.cs b/src/NzbDrone.Core/Indexers/IndexerBase.cs index 036036510..5c6f73cf3 100644 --- a/src/NzbDrone.Core/Indexers/IndexerBase.cs +++ b/src/NzbDrone.Core/Indexers/IndexerBase.cs @@ -37,6 +37,14 @@ public Type ConfigContract get { return typeof(TSettings); } } + public virtual ProviderMessage Message + { + get + { + return null; + } + } + public virtual IEnumerable DefaultDefinitions { get diff --git a/src/NzbDrone.Core/Metadata/MetadataBase.cs b/src/NzbDrone.Core/Metadata/MetadataBase.cs index dae6abfa8..07bbcbce1 100644 --- a/src/NzbDrone.Core/Metadata/MetadataBase.cs +++ b/src/NzbDrone.Core/Metadata/MetadataBase.cs @@ -20,6 +20,14 @@ public Type ConfigContract } } + public virtual ProviderMessage Message + { + get + { + return null; + } + } + public IEnumerable DefaultDefinitions { get diff --git a/src/NzbDrone.Core/Notifications/NotificationBase.cs b/src/NzbDrone.Core/Notifications/NotificationBase.cs index b8d078f67..1306c286c 100644 --- a/src/NzbDrone.Core/Notifications/NotificationBase.cs +++ b/src/NzbDrone.Core/Notifications/NotificationBase.cs @@ -18,6 +18,14 @@ public Type ConfigContract } } + public virtual ProviderMessage Message + { + get + { + return null; + } + } + public IEnumerable DefaultDefinitions { get diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 7ae3aa44d..3a7215a51 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -887,6 +887,7 @@ + diff --git a/src/NzbDrone.Core/ThingiProvider/IProvider.cs b/src/NzbDrone.Core/ThingiProvider/IProvider.cs index 80a27503b..a5bc804c8 100644 --- a/src/NzbDrone.Core/ThingiProvider/IProvider.cs +++ b/src/NzbDrone.Core/ThingiProvider/IProvider.cs @@ -8,7 +8,7 @@ public interface IProvider { string Name { get; } Type ConfigContract { get; } - + ProviderMessage Message { get; } IEnumerable DefaultDefinitions { get; } ProviderDefinition Definition { get; set; } ValidationResult Test(); diff --git a/src/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs b/src/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs index 8e0065ff4..45bd5a25a 100644 --- a/src/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs +++ b/src/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs @@ -11,6 +11,7 @@ public abstract class ProviderDefinition : ModelBase public string Implementation { get; set; } public string ConfigContract { get; set; } public virtual bool Enable { get; set; } + public ProviderMessage Message { get; set; } public IProviderConfig Settings { diff --git a/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs b/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs index d6670619f..8f4776ea6 100644 --- a/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs +++ b/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs @@ -141,6 +141,7 @@ protected virtual List Active() public virtual TProviderDefinition GetProviderCharacteristics(TProvider provider, TProviderDefinition definition) { definition.ImplementationName = provider.Name; + definition.Message = provider.Message; return definition; } diff --git a/src/NzbDrone.Core/ThingiProvider/ProviderMessage.cs b/src/NzbDrone.Core/ThingiProvider/ProviderMessage.cs new file mode 100644 index 000000000..49f99b54f --- /dev/null +++ b/src/NzbDrone.Core/ThingiProvider/ProviderMessage.cs @@ -0,0 +1,21 @@ +namespace NzbDrone.Core.ThingiProvider +{ + public class ProviderMessage + { + public string Message { get; set; } + public ProviderMessageType Type { get; set; } + + public ProviderMessage(string message, ProviderMessageType type) + { + Message = message; + Type = type; + } + } + + public enum ProviderMessageType + { + Info, + Warning, + Error + } +} diff --git a/src/UI/Form/FormBuilder.js b/src/UI/Form/FormBuilder.js index 7ecfb29ec..ce40e655b 100644 --- a/src/UI/Form/FormBuilder.js +++ b/src/UI/Form/FormBuilder.js @@ -1,6 +1,7 @@ var Marionette = require('marionette'); var Handlebars = require('handlebars'); var _ = require('underscore'); +require('./FormMessage'); var _templateRenderer = function(templateName) { var templateFunction = Marionette.TemplateCache.get(templateName); diff --git a/src/UI/Form/FormMessage.js b/src/UI/Form/FormMessage.js new file mode 100644 index 000000000..209bccd42 --- /dev/null +++ b/src/UI/Form/FormMessage.js @@ -0,0 +1,17 @@ +var Handlebars = require('handlebars'); + +Handlebars.registerHelper('formMessage', function(message) { + if (!message) { + return ''; + } + + var level = message.type; + + if (message.type === 'error') { + level = 'danger'; + } + + var messageHtml = ''.format(level, message.message); + + return new Handlebars.SafeString(messageHtml); +}); \ No newline at end of file diff --git a/src/UI/Settings/DownloadClient/Edit/DownloadClientEditViewTemplate.hbs b/src/UI/Settings/DownloadClient/Edit/DownloadClientEditViewTemplate.hbs index 8356f0f9a..e4e576209 100644 --- a/src/UI/Settings/DownloadClient/Edit/DownloadClientEditViewTemplate.hbs +++ b/src/UI/Settings/DownloadClient/Edit/DownloadClientEditViewTemplate.hbs @@ -8,6 +8,8 @@ {{/if}}