using System; using System.Collections.Generic; using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { public abstract class IndexerBase : IIndexer where TSettings : IProviderConfig, new() { public Type ConfigContract { get { return typeof(TSettings); } } public virtual IEnumerable DefaultDefinitions { get { var config = (IProviderConfig)new TSettings(); yield return new IndexerDefinition { Name = GetType().Name, Enable = config.Validate().IsValid, Implementation = GetType().Name, Settings = config }; } } public virtual ProviderDefinition Definition { get; set; } public abstract DownloadProtocol Protocol { get; } public abstract bool SupportsPaging { get; } protected TSettings Settings { get { return (TSettings)Definition.Settings; } } public virtual IParseFeed Parser { get; private set; } public abstract IEnumerable RecentFeed { get; } public abstract IEnumerable GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber); public abstract IEnumerable GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date); public abstract IEnumerable GetSeasonSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int offset); public override string ToString() { return GetType().Name; } } public enum DownloadProtocol { Usenet, Torrent } }