From 03149b1396af84eb5cf4bad2c4d10de06eb24405 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 13 Oct 2013 23:19:30 -0700 Subject: [PATCH] Newznab indexers are tested before creating --- src/NzbDrone.Core/Indexers/IndexerFactory.cs | 15 ++++++++++++++- .../ThingiProvider/ProviderFactory.cs | 10 ++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/IndexerFactory.cs b/src/NzbDrone.Core/Indexers/IndexerFactory.cs index f9e89ab67..6ec09f104 100644 --- a/src/NzbDrone.Core/Indexers/IndexerFactory.cs +++ b/src/NzbDrone.Core/Indexers/IndexerFactory.cs @@ -16,12 +16,14 @@ namespace NzbDrone.Core.Indexers { private readonly IIndexerRepository _providerRepository; private readonly IEnumerable _providers; + private readonly INewznabTestService _newznabTestService; - public IndexerFactory(IIndexerRepository providerRepository, IEnumerable providers, IContainer container, Logger logger) + public IndexerFactory(IIndexerRepository providerRepository, IEnumerable providers, IContainer container, INewznabTestService newznabTestService, Logger logger) : base(providerRepository, providers, container, logger) { _providerRepository = providerRepository; _providers = providers; + _newznabTestService = newznabTestService; } protected override void InitializeProviders() @@ -43,5 +45,16 @@ namespace NzbDrone.Core.Indexers { return base.Active().Where(c => c.Enable).ToList(); } + + public override IndexerDefinition Create(IndexerDefinition definition) + { + if (definition.Implementation == typeof(Newznab.Newznab).Name) + { + var indexer = GetInstance(definition); + _newznabTestService.Test(indexer); + } + + return base.Create(definition); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs b/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs index 5dc21b519..edc273a52 100644 --- a/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs +++ b/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs @@ -54,12 +54,12 @@ namespace NzbDrone.Core.ThingiProvider return _providerRepository.Get(id); } - public TProviderDefinition Create(TProviderDefinition provider) + public virtual TProviderDefinition Create(TProviderDefinition definition) { - return _providerRepository.Insert(provider); + return _providerRepository.Insert(definition); } - public void Update(TProviderDefinition definition) + public virtual void Update(TProviderDefinition definition) { _providerRepository.Update(definition); } @@ -69,11 +69,9 @@ namespace NzbDrone.Core.ThingiProvider _providerRepository.Delete(id); } - private TProvider GetInstance(TProviderDefinition definition) + protected TProvider GetInstance(TProviderDefinition definition) { var type = GetImplementation(definition); - - //TODO: This doesn't work for things that have non-parameterless constructors var instance = (TProvider)_container.Resolve(type); instance.Definition = definition; return instance;