using System; using System.Collections.Generic; using System.Linq; using FluentValidation.Results; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Core.Configuration; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Tv; namespace NzbDrone.Core.NetImport { public abstract class NetImportBase : INetImport where TSettings : IProviderConfig, new() { protected readonly IConfigService _configService; protected readonly IParsingService _parsingService; protected readonly Logger _logger; public abstract string Name { get; } public abstract bool Enabled { get; } public NetImportBase(IConfigService configService, IParsingService parsingService, Logger logger) { _configService = configService; _parsingService = parsingService; _logger = logger; } public Type ConfigContract => typeof(TSettings); public virtual ProviderMessage Message => null; public virtual IEnumerable DefaultDefinitions { get { var config = (IProviderConfig)new TSettings(); yield return new NetImportDefinition { Name = this.Name, Enabled = config.Validate().IsValid && Enabled, Implementation = GetType().Name, Settings = config }; } } public virtual ProviderDefinition Definition { get; set; } public virtual object RequestAction(string action, IDictionary query) { return null; } protected TSettings Settings => (TSettings)Definition.Settings; public abstract IList Fetch(); public ValidationResult Test() { var failures = new List(); try { Test(failures); } catch (Exception ex) { _logger.Error(ex, "Test aborted due to exception"); failures.Add(new ValidationFailure(string.Empty, "Test was aborted due to an error: " + ex.Message)); } return new ValidationResult(failures); } protected abstract void Test(List failures); public override string ToString() { return Definition.Name; } } }