Bugfix/aggregate indexer radarr compatibility (#1333)

* Improving Torznab compatibility in AggregateIndexer

The indexer was not correctly reporting the Torznab capabilities
it provided. Basically it only reported a default number of
caps instead of combining all the caps of all the configured
indexers. This lead to an issue with external components
(e.g. Radarr) which rendered the Aggregate feed unusable in
certain situations.
- Correctly reports capabilities based on configured indexers

* Fixes incorrect internal state of configured indexers

When adding/deleting configured indexers the aggregate
was never updated leaving out possible search results.
- Introduce reconfiguring of the Aggregate upon addition/deletion
 of an indexer
- Fixing an internal state issue of the indexers reporting
 themselves as unconfigured after addition

* Removing obsolete call (thanks @kaso17)
This commit is contained in:
chibidev 2017-05-07 09:10:57 +02:00 committed by kaso17
parent 4dd49985c3
commit 251a631523
2 changed files with 26 additions and 7 deletions

View File

@ -21,7 +21,20 @@ namespace Jackett.Indexers
public void SetIndexers(IEnumerable<IIndexer> indexers)
{
Indexers = indexers;
Indexers = indexers.Where(i => i.IsConfigured);
var caps = new TorznabCapabilities();
foreach (var indexer in indexers) {
var indexerCaps = indexer.TorznabCaps;
caps.SearchAvailable = caps.SearchAvailable || indexerCaps.SearchAvailable;
caps.TVSearchAvailable = caps.TVSearchAvailable || indexerCaps.TVSearchAvailable;
caps.MovieSearchAvailable = caps.MovieSearchAvailable || indexerCaps.MovieSearchAvailable;
caps.SupportsTVRageSearch = caps.SupportsTVRageSearch || indexerCaps.SupportsTVRageSearch;
caps.SupportsImdbSearch = caps.SupportsImdbSearch || indexerCaps.SupportsImdbSearch;
caps.Categories.AddRange(indexerCaps.Categories.Except (caps.Categories));
}
base.TorznabCaps = caps;
base.IsConfigured = true;
}
@ -33,7 +46,7 @@ namespace Jackett.Indexers
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var tasks = new List<Task<IEnumerable<ReleaseInfo>>>();
foreach (var indexer in Indexers.Where(i => i.IsConfigured))
foreach (var indexer in Indexers)
tasks.Add(indexer.PerformQuery(query));
var t = Task.WhenAll<IEnumerable<ReleaseInfo>>(tasks);
@ -64,7 +77,7 @@ namespace Jackett.Indexers
return base.UncleanLink(link);
}
public Task<byte[]> Download(Uri link)
public override Task<byte[]> Download(Uri link)
{
var indexer = GetOriginalIndexerForLink(link);
if (indexer != null)
@ -76,7 +89,7 @@ namespace Jackett.Indexers
private IIndexer GetOriginalIndexerForLink(Uri link)
{
var prefix = string.Format("{0}://{1}", link.Scheme, link.Host);
var validIndexers = Indexers.Where(i => i.IsConfigured && i.SiteLink.StartsWith(prefix));
var validIndexers = Indexers.Where(i => i.SiteLink.StartsWith(prefix));
if (validIndexers.Count() > 0)
return validIndexers.First();

View File

@ -36,7 +36,7 @@ namespace Jackett.Services
private Logger logger;
private Dictionary<string, IIndexer> indexers = new Dictionary<string, IIndexer>();
private ICacheService cacheService;
private IIndexer aggregateIndexer;
private AggregateIndexer aggregateIndexer;
public IndexerManagerService(IContainer c, IConfigurationService config, Logger l, ICacheService cache)
{
@ -132,9 +132,8 @@ namespace Jackett.Services
{
logger.Info("Adding aggregate indexer");
AggregateIndexer aggregateIndexer = new AggregateIndexer(this, container.Resolve<IWebClient>(), logger, container.Resolve<IProtectionService>());
aggregateIndexer.SetIndexers(indexers.Where(p => p.Value.IsConfigured).Select(p => p.Value));
this.aggregateIndexer = aggregateIndexer;
UpdateAggregateIndexer();
}
public IIndexer GetIndexer(string name)
@ -185,6 +184,7 @@ namespace Jackett.Services
{
indexers[name] = container.ResolveNamed<IIndexer>(indexer.ID);
}
UpdateAggregateIndexer();
}
private string GetIndexerConfigFilePath(IIndexer indexer)
@ -194,6 +194,7 @@ namespace Jackett.Services
public void SaveConfig(IIndexer indexer, JToken obj)
{
UpdateAggregateIndexer();
lock (configWriteLock)
{
var uID = Guid.NewGuid().ToString("N");
@ -262,5 +263,10 @@ namespace Jackett.Services
newIndexers.Add(indexer.Key, indexer.Value);
indexers = newIndexers;
}
private void UpdateAggregateIndexer()
{
aggregateIndexer.SetIndexers(indexers.Where (p => p.Value.IsConfigured).Select(p => p.Value));
}
}
}