diff --git a/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs b/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs index e56d351ec..969b927db 100644 --- a/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs +++ b/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs @@ -17,6 +17,7 @@ namespace NzbDrone.Core.NetImport.CouchPotato { public override string Name => "CouchPotato"; public override bool Enabled => true; + public override bool EnableAuto => false; public CouchPotatoImport(IHttpClient httpClient, IConfigService configService, IParsingService parsingService, Logger logger) : base(httpClient, configService, parsingService, logger) diff --git a/src/NzbDrone.Core/NetImport/INetImport.cs b/src/NzbDrone.Core/NetImport/INetImport.cs index e32eb2ed9..7f5819fd1 100644 --- a/src/NzbDrone.Core/NetImport/INetImport.cs +++ b/src/NzbDrone.Core/NetImport/INetImport.cs @@ -9,7 +9,8 @@ namespace NzbDrone.Core.NetImport public interface INetImport : IProvider { bool Enabled { get; } - + bool EnableAuto { get; } + IList Fetch(); } } \ No newline at end of file diff --git a/src/NzbDrone.Core/NetImport/NetImportBase.cs b/src/NzbDrone.Core/NetImport/NetImportBase.cs index 68b73e36f..c08aaa3be 100644 --- a/src/NzbDrone.Core/NetImport/NetImportBase.cs +++ b/src/NzbDrone.Core/NetImport/NetImportBase.cs @@ -23,6 +23,7 @@ namespace NzbDrone.Core.NetImport public abstract string Name { get; } public abstract bool Enabled { get; } + public abstract bool EnableAuto { get; } public NetImportBase(IConfigService configService, IParsingService parsingService, Logger logger) { diff --git a/src/NzbDrone.Core/NetImport/NetImportFactory.cs b/src/NzbDrone.Core/NetImport/NetImportFactory.cs index 489d8682e..1e6ebf344 100644 --- a/src/NzbDrone.Core/NetImport/NetImportFactory.cs +++ b/src/NzbDrone.Core/NetImport/NetImportFactory.cs @@ -14,19 +14,16 @@ namespace NzbDrone.Core.NetImport public class NetImportFactory : ProviderFactory, INetImportFactory { - //private readonly IIndexerStatusService _indexerStatusService; private readonly INetImportRepository _providerRepository; private readonly Logger _logger; - public NetImportFactory(//IIndexerStatusService indexerStatusService, - INetImportRepository providerRepository, + public NetImportFactory(INetImportRepository providerRepository, IEnumerable providers, IContainer container, IEventAggregator eventAggregator, Logger logger) : base(providerRepository, providers, container, eventAggregator, logger) { - //_indexerStatusService = indexerStatusService; _providerRepository = providerRepository; _logger = logger; } @@ -43,27 +40,16 @@ namespace NzbDrone.Core.NetImport public List Enabled() { - var enabledIndexers = GetAvailableProviders().Where(n => ((NetImportDefinition)n.Definition).Enabled); - - var indexers = FilterBlockedIndexers(enabledIndexers); - + var enabledImporters = GetAvailableProviders().Where(n => ((NetImportDefinition)n.Definition).Enabled); + var indexers = FilterBlockedIndexers(enabledImporters); return indexers.ToList(); } - private IEnumerable FilterBlockedIndexers(IEnumerable indexers) + private IEnumerable FilterBlockedIndexers(IEnumerable importers) { - //var blockedIndexers = _indexerStatusService.GetBlockedIndexers().ToDictionary(v => v.IndexerId, v => v); - - foreach (var indexer in indexers) + foreach (var importer in importers) { - /*IndexerStatus blockedIndexerStatus; - if (blockedIndexers.TryGetValue(indexer.Definition.Id, out blockedIndexerStatus)) - { - _logger.Debug("Temporarily ignoring indexer {0} till {1} due to recent failures.", indexer.Definition.Name, blockedIndexerStatus.DisabledTill.Value.ToLocalTime()); - continue; - }*/ - - yield return indexer; + yield return importer; } } } diff --git a/src/NzbDrone.Core/NetImport/NetImportSearchService.cs b/src/NzbDrone.Core/NetImport/NetImportSearchService.cs new file mode 100644 index 000000000..6f8c1ca4f --- /dev/null +++ b/src/NzbDrone.Core/NetImport/NetImportSearchService.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NLog; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.NetImport +{ + public interface IFetchNetImport + { + List Fetch(int listId, bool onlyEnableAuto); + List FetchAndFilter(int listId, bool onlyEnableAuto); + } + + public class NetImportSearchService : IFetchNetImport + { + private readonly Logger _logger; + private readonly INetImportFactory _netImportFactory; + private readonly IMovieService _movieService; + + public NetImportSearchService(INetImportFactory netImportFactory, IMovieService movieService, Logger logger) + { + _netImportFactory = netImportFactory; + _movieService = movieService; + _logger = logger; + } + + public List Fetch(int listId, bool onlyEnableAuto) + { + var movies = new List(); + + // Get all the lists + var importLists = _netImportFactory.GetAvailableProviders(); + + // No listId is set return all movies in all lists + var lists = listId == 0 ? importLists.Where(n => ((NetImportDefinition) n.Definition).Enabled == true) : importLists.Where(n => ((NetImportDefinition) n.Definition).Id == listId); + + // Only return lists where enabledAuto is truthy + if (onlyEnableAuto) + { + lists = importLists.Where(a => a.EnableAuto == true); + } + + foreach (var list in lists) + { + movies.AddRange(list.Fetch()); + } + + return movies; + } + + public List FetchAndFilter(int listId, bool onlyEnableAuto) + { + var movies = new List(); + + // Get all the lists + var importLists = _netImportFactory.GetAvailableProviders(); + + // No listId is set return all movies in all lists + var lists = listId == 0 ? importLists.Where(n => ((NetImportDefinition)n.Definition).Enabled == true) : importLists.Where(n => ((NetImportDefinition)n.Definition).Id == listId); + + // Only return lists where enabledAuto is truthy + if (onlyEnableAuto) + { + lists = importLists.Where(a => a.EnableAuto == true); + } + + // Get all existing movies + var existingMovies = _movieService.GetAllMovies(); + + foreach (var list in lists) + { + movies = (List)list.Fetch(); + } + + // remove from movies list where existMovies (choose one) + // movies.RemoveAll(x => existingMovies.Contains(x)); + // return movies; + // movies.RemoveAll(a => existingMovies.Exists(w => w.TmdbId == a.TmdbId)); + // return movies; + + return movies.Where(x => !existingMovies.Contains(x)).ToList(); + } + } +} diff --git a/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs b/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs index 3a1967fd9..a68b4190d 100644 --- a/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs +++ b/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs @@ -17,6 +17,7 @@ namespace NzbDrone.Core.NetImport.RSSImport { public override string Name => "RSSList"; public override bool Enabled => true; + public override bool EnableAuto => true; public RSSImport(IHttpClient httpClient, IConfigService configService, IParsingService parsingService, Logger logger) : base(httpClient, configService, parsingService, logger) diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 6fa53c4a0..120818218 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -130,6 +130,7 @@ +