diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/NzbDrone.Api/Indexers/IndexerModule.cs index 531a7dee8..5776a14b0 100644 --- a/NzbDrone.Api/Indexers/IndexerModule.cs +++ b/NzbDrone.Api/Indexers/IndexerModule.cs @@ -63,15 +63,17 @@ namespace NzbDrone.Api.Indexers { var indexer = GetDefinition(indexerResource); - ValidateIndexer(indexer.Settings); + ValidateIndexer(indexer); _indexerService.Update(indexer); } - private static void ValidateIndexer(IProviderConfig config) + private static void ValidateIndexer(ProviderDefinition definition) { - var validationResult = config.Validate(); + if (!definition.Enable) return; + + var validationResult = definition.Settings.Validate(); if (!validationResult.IsValid) { @@ -89,10 +91,7 @@ namespace NzbDrone.Api.Indexers var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract); definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(indexerResource.Fields, configContract); - if (indexerResource.Enable) - { - ValidateIndexer(definition.Settings); - } + ValidateIndexer(definition); return definition; } diff --git a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs index 8d9b09f2a..368af9383 100644 --- a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs +++ b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; +using System.Linq; using NzbDrone.Api.ClientSchema; -using NzbDrone.Api.Mapping; using NzbDrone.Core.Indexers; using Omu.ValueInjecter; @@ -20,24 +20,21 @@ namespace NzbDrone.Api.Indexers private List GetSchema() { - var indexers = _indexerService.All().InjectTo>(); + var indexers = _indexerService.Templates().Where(c => c.Implementation =="Newznab"); - /* var indexers = _indexerService.Schema(); - var result = new List(indexers.Count); + var result = new List(indexers.Count()); - foreach (var indexer in indexers) - { - var indexerResource = new IndexerResource(); - indexerResource.InjectFrom(indexer); - indexerResource.Fields = SchemaBuilder.GenerateSchema(indexer.Settings); + foreach (var indexer in indexers) + { + var indexerResource = new IndexerResource(); + indexerResource.InjectFrom(indexer); + indexerResource.Fields = SchemaBuilder.ToSchema(indexer.Settings); - result.Add(indexerResource); - } + result.Add(indexerResource); + } - return result;*/ - - return indexers; + return result; } } } \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderService.cs index b56f6cac3..9869f9679 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderService.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using NLog; +using NzbDrone.Common.Reflection; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; @@ -17,6 +18,7 @@ namespace NzbDrone.Core.ThingiProvider TProviderDefinition Create(TProviderDefinition indexer); void Update(TProviderDefinition indexer); void Delete(int id); + List Templates(); } public abstract class ProviderFactory : IProviderFactory, IHandle @@ -40,6 +42,16 @@ namespace NzbDrone.Core.ThingiProvider return _providerRepository.All().ToList(); } + public List Templates() + { + return _providers.Select(p => new TProviderDefinition() + { + ConfigContract = p.ConfigContract.Name, + Implementation = p.GetType().Name, + Settings = (IProviderConfig)Activator.CreateInstance(ReflectionExtensions.CoreAssembly.FindTypeByName(p.ConfigContract.Name)) + }).ToList(); + } + public List GetAvailableProviders() { return All().Where(c => c.Enable && c.Settings.Validate().IsValid)