indexer cleanup.

This commit is contained in:
kay.one 2013-09-22 13:00:29 -07:00 committed by kayone
parent 9dbfc6804f
commit 3e9a6ed0ef
10 changed files with 81 additions and 89 deletions

View File

@ -4,26 +4,16 @@ using NzbDrone.Core.ThingiProvider;
namespace NzbDrone.Core.Indexers.Eztv namespace NzbDrone.Core.Indexers.Eztv
{ {
public class Eztv : IndexerBase<NullSetting> public class Eztv : IndexerBase<NullConfig>
{ {
public override string Name public override DownloadProtocol Protocol
{
get { return "Eztv"; }
}
public override IndexerKind Kind
{ {
get get
{ {
return IndexerKind.Torrent; return DownloadProtocol.Torrent;
} }
} }
public override bool EnableByDefault
{
get { return false; }
}
public override IParseFeed Parser public override IParseFeed Parser
{ {
get get
@ -36,10 +26,7 @@ namespace NzbDrone.Core.Indexers.Eztv
{ {
get get
{ {
return new[] yield return "http://www.ezrss.it/feed/";
{
"http://www.ezrss.it/feed/"
};
} }
} }
@ -56,7 +43,7 @@ namespace NzbDrone.Core.Indexers.Eztv
public override IEnumerable<string> GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date) public override IEnumerable<string> GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date)
{ {
//EZTV doesn't support searching based on actual epidose airdate. they only support release date. //EZTV doesn't support searching based on actual episode airdate. they only support release date.
return new string[0]; return new string[0];
} }
} }

View File

@ -7,7 +7,7 @@ namespace NzbDrone.Core.Indexers
public interface IIndexer : IProvider public interface IIndexer : IProvider
{ {
IParseFeed Parser { get; } IParseFeed Parser { get; }
IndexerKind Kind { get; } DownloadProtocol Protocol { get; }
IEnumerable<string> RecentFeed { get; } IEnumerable<string> RecentFeed { get; }
IEnumerable<string> GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber); IEnumerable<string> GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber);

View File

@ -6,7 +6,13 @@ namespace NzbDrone.Core.Indexers
{ {
public abstract class IndexerBase<TSettings> : IIndexer public abstract class IndexerBase<TSettings> : IIndexer
{ {
public abstract string Name { get; } public Type ConfigContract
{
get
{
return typeof(TSettings);
}
}
public virtual IEnumerable<ProviderDefinition> DefaultDefinitions public virtual IEnumerable<ProviderDefinition> DefaultDefinitions
{ {
@ -14,19 +20,17 @@ namespace NzbDrone.Core.Indexers
{ {
yield return new IndexerDefinition yield return new IndexerDefinition
{ {
Name = Name, Name = this.GetType().Name,
Enable = false, Enable = false,
Implementation = GetType().Name, Implementation = GetType().Name,
Settings = NullSetting.Instance Settings = NullConfig.Instance
}; };
} }
} }
public ProviderDefinition Definition { get; set; } public ProviderDefinition Definition { get; set; }
public abstract IndexerKind Kind { get; } public abstract DownloadProtocol Protocol { get; }
public virtual bool EnableByDefault { get { return true; } }
protected TSettings Settings protected TSettings Settings
{ {
@ -42,9 +46,15 @@ namespace NzbDrone.Core.Indexers
public abstract IEnumerable<string> GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber); public abstract IEnumerable<string> GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber);
public abstract IEnumerable<string> GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date); public abstract IEnumerable<string> GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date);
public abstract IEnumerable<string> GetSeasonSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int offset); public abstract IEnumerable<string> GetSeasonSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int offset);
public override string ToString()
{
return GetType().Name;
}
} }
public enum IndexerKind public enum DownloadProtocol
{ {
Usenet, Usenet,
Torrent Torrent

View File

@ -33,11 +33,11 @@ namespace NzbDrone.Core.Indexers
public virtual IList<ReleaseInfo> FetchRss(IIndexer indexer) public virtual IList<ReleaseInfo> FetchRss(IIndexer indexer)
{ {
_logger.Debug("Fetching feeds from " + indexer.Name); _logger.Debug("Fetching feeds from " + indexer);
var result = Fetch(indexer, indexer.RecentFeed); var result = Fetch(indexer, indexer.RecentFeed);
_logger.Debug("Finished processing feeds from " + indexer.Name); _logger.Debug("Finished processing feeds from " + indexer);
return result; return result;
} }
@ -48,7 +48,7 @@ namespace NzbDrone.Core.Indexers
var result = Fetch(indexer, searchCriteria, 0).DistinctBy(c => c.DownloadUrl).ToList(); var result = Fetch(indexer, searchCriteria, 0).DistinctBy(c => c.DownloadUrl).ToList();
_logger.Info("Finished searching {0} for {1}. Found {2}", indexer.Name, searchCriteria, result.Count); _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count);
return result; return result;
} }
@ -61,7 +61,7 @@ namespace NzbDrone.Core.Indexers
var result = Fetch(indexer, searchUrls); var result = Fetch(indexer, searchUrls);
_logger.Info("{0} offset {1}. Found {2}", indexer.Name, searchCriteria, result.Count); _logger.Info("{0} offset {1}. Found {2}", indexer, searchCriteria, result.Count);
if (result.Count > 90) if (result.Count > 90)
{ {
@ -79,7 +79,7 @@ namespace NzbDrone.Core.Indexers
var result = Fetch(indexer, searchUrls); var result = Fetch(indexer, searchUrls);
_logger.Info("Finished searching {0} for {1}. Found {2}", indexer.Name, searchCriteria, result.Count); _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count);
return result; return result;
} }
@ -90,7 +90,7 @@ namespace NzbDrone.Core.Indexers
var searchUrls = indexer.GetDailyEpisodeSearchUrls(searchCriteria.QueryTitle, searchCriteria.Series.TvRageId, searchCriteria.Airtime); var searchUrls = indexer.GetDailyEpisodeSearchUrls(searchCriteria.QueryTitle, searchCriteria.Series.TvRageId, searchCriteria.Airtime);
var result = Fetch(indexer, searchUrls); var result = Fetch(indexer, searchUrls);
_logger.Info("Finished searching {0} for {1}. Found {2}", indexer.Name, searchCriteria, result.Count); _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count);
return result; return result;
} }
@ -119,12 +119,11 @@ namespace NzbDrone.Core.Indexers
if (webException.Message.Contains("502") || webException.Message.Contains("503") || if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
webException.Message.Contains("timed out")) webException.Message.Contains("timed out"))
{ {
_logger.Warn("{0} server is currently unavailable. {1} {2}", indexer.Name, url, _logger.Warn("{0} server is currently unavailable. {1} {2}", indexer, url, webException.Message);
webException.Message);
} }
else else
{ {
_logger.Warn("{0} {1} {2}", indexer.Name, url, webException.Message); _logger.Warn("{0} {1} {2}", indexer, url, webException.Message);
} }
} }
catch (ApiKeyException) catch (ApiKeyException)
@ -138,7 +137,7 @@ namespace NzbDrone.Core.Indexers
} }
} }
result.ForEach(c => c.Indexer = indexer.Name); result.ForEach(c => c.Indexer = indexer.Definition.Name);
return result; return result;
} }

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using NLog; using NLog;
using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.ThingiProvider;
@ -11,9 +12,29 @@ namespace NzbDrone.Core.Indexers
public class IndexerService : ProviderFactory<IIndexer, IndexerDefinition> public class IndexerService : ProviderFactory<IIndexer, IndexerDefinition>
{ {
private readonly IProviderRepository<IndexerDefinition> _providerRepository;
private readonly IEnumerable<IIndexer> _providers;
public IndexerService(IProviderRepository<IndexerDefinition> providerRepository, IEnumerable<IIndexer> providers, Logger logger) public IndexerService(IProviderRepository<IndexerDefinition> providerRepository, IEnumerable<IIndexer> providers, Logger logger)
: base(providerRepository, providers, logger) : base(providerRepository, providers, logger)
{ {
_providerRepository = providerRepository;
_providers = providers;
}
protected override void InitializeProviders()
{
var definitions = _providers.SelectMany(indexer => indexer.DefaultDefinitions);
var currentProviders = All();
var newProviders = definitions.Where(def => currentProviders.All(c => c.Implementation != def.Implementation)).ToList();
if (newProviders.Any())
{
_providerRepository.InsertMany(newProviders.Cast<IndexerDefinition>().ToList());
}
} }
} }
} }

View File

@ -69,7 +69,7 @@ namespace NzbDrone.Core.Indexers.Newznab
get get
{ {
//Todo: We should be able to update settings on start //Todo: We should be able to update settings on start
if (Name.Equals("nzbs.org", StringComparison.InvariantCultureIgnoreCase)) if (Settings.Url.Contains("nzbs.org"))
{ {
Settings.Categories = new List<int> { 5000 }; Settings.Categories = new List<int> { 5000 };
} }
@ -115,19 +115,11 @@ namespace NzbDrone.Core.Indexers.Newznab
return RecentFeed.Select(url => String.Format("{0}&limit=100&q={1}&season={2}&offset={3}", url, NewsnabifyTitle(seriesTitle), seasonNumber, offset)); return RecentFeed.Select(url => String.Format("{0}&limit=100&q={1}&season={2}&offset={3}", url, NewsnabifyTitle(seriesTitle), seasonNumber, offset));
} }
public override string Name public override DownloadProtocol Protocol
{ {
get get
{ {
return Definition.Name; return DownloadProtocol.Usenet;
}
}
public override IndexerKind Kind
{
get
{
return IndexerKind.Usenet;
} }
} }

View File

@ -5,16 +5,11 @@ namespace NzbDrone.Core.Indexers.Omgwtfnzbs
{ {
public class Omgwtfnzbs : IndexerBase<OmgwtfnzbsSettings> public class Omgwtfnzbs : IndexerBase<OmgwtfnzbsSettings>
{ {
public override string Name public override DownloadProtocol Protocol
{
get { return "omgwtfnzbs"; }
}
public override IndexerKind Kind
{ {
get get
{ {
return IndexerKind.Usenet; return DownloadProtocol.Usenet;
} }
} }

View File

@ -4,18 +4,13 @@ using NzbDrone.Core.ThingiProvider;
namespace NzbDrone.Core.Indexers.Wombles namespace NzbDrone.Core.Indexers.Wombles
{ {
public class Wombles : IndexerBase<NullSetting> public class Wombles : IndexerBase<NullConfig>
{ {
public override string Name public override DownloadProtocol Protocol
{
get { return "WomblesIndex"; }
}
public override IndexerKind Kind
{ {
get get
{ {
return IndexerKind.Usenet; return DownloadProtocol.Usenet;
} }
} }

View File

@ -30,7 +30,7 @@ namespace NzbDrone.Core.ThingiProvider
public interface IProvider public interface IProvider
{ {
string Name { get; } Type ConfigContract { get; }
IEnumerable<ProviderDefinition> DefaultDefinitions { get; } IEnumerable<ProviderDefinition> DefaultDefinitions { get; }
ProviderDefinition Definition { get; set; } ProviderDefinition Definition { get; set; }
@ -51,7 +51,6 @@ namespace NzbDrone.Core.ThingiProvider
} }
set set
{ {
} }
} }
@ -63,9 +62,9 @@ namespace NzbDrone.Core.ThingiProvider
ValidationResult Validate(); ValidationResult Validate();
} }
public class NullSetting : IProviderConfig public class NullConfig : IProviderConfig
{ {
public static readonly NullSetting Instance = new NullSetting(); public static readonly NullConfig Instance = new NullConfig();
public ValidationResult Validate() public ValidationResult Validate()
{ {

View File

@ -102,17 +102,11 @@ namespace NzbDrone.Core.ThingiProvider
RemoveMissingImplementations(); RemoveMissingImplementations();
var definitions = _providers.SelectMany(indexer => indexer.DefaultDefinitions); InitializeProviders();
var currentProviders = All();
var newProviders = definitions.Where(def => currentProviders.All(c => c.Implementation != def.Implementation)).ToList();
if (newProviders.Any())
{
_providerRepository.InsertMany(newProviders.Cast<TProviderDefinition>().ToList());
} }
protected virtual void InitializeProviders()
{
} }
private void RemoveMissingImplementations() private void RemoveMissingImplementations()