mirror of https://github.com/Jackett/Jackett
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:
parent
4dd49985c3
commit
251a631523
|
@ -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();
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue