diff --git a/src/Jackett/Indexers/AggregateIndexer.cs b/src/Jackett/Indexers/AggregateIndexer.cs index 558567963..453caee65 100644 --- a/src/Jackett/Indexers/AggregateIndexer.cs +++ b/src/Jackett/Indexers/AggregateIndexer.cs @@ -37,9 +37,16 @@ namespace Jackett.Indexers tasks.Add(indexer.PerformQuery(query)); var t = Task.WhenAll>(tasks); - t.Wait(); + try + { + t.Wait(); + } + catch (AggregateException exception) + { + logger.Error(exception, "Error during request from Aggregate"); + } - IEnumerable result = t.Result.SelectMany(x => x).OrderByDescending(r => r.PublishDate); + IEnumerable result = tasks.Where(x => x.Status == TaskStatus.RanToCompletion).SelectMany(x => x.Result).OrderByDescending(r => r.PublishDate); // Limiting the response size might be interesting for use-cases where there are // tons of trackers configured in Jackett. For now just use the limit param if // someone wants to do that. @@ -47,5 +54,33 @@ namespace Jackett.Indexers result = result.Take(query.Limit); return result; } + + public override Uri UncleanLink(Uri link) + { + var indexer = GetOriginalIndexerForLink(link); + if (indexer != null) + return indexer.UncleanLink(link); + + return base.UncleanLink(link); + } + + public Task Download(Uri link) + { + var indexer = GetOriginalIndexerForLink(link); + if (indexer != null) + return indexer.Download(link); + + return base.Download(link); + } + + 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)); + if (validIndexers.Count() > 0) + return validIndexers.First(); + + return null; + } } } \ No newline at end of file diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index 3faca56d4..51f04754a 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -105,7 +105,7 @@ namespace Jackett.Indexers return releases; } - public Uri UncleanLink(Uri link) + public virtual Uri UncleanLink(Uri link) { if (string.IsNullOrWhiteSpace(downloadUrlBase)) { diff --git a/src/Jackett/Services/IndexerManagerService.cs b/src/Jackett/Services/IndexerManagerService.cs index e3ffe6231..f8ad1aeb8 100644 --- a/src/Jackett/Services/IndexerManagerService.cs +++ b/src/Jackett/Services/IndexerManagerService.cs @@ -132,7 +132,7 @@ namespace Jackett.Services { logger.Info("Adding aggregate indexer"); AggregateIndexer aggregateIndexer = new AggregateIndexer(this, container.Resolve(), logger, container.Resolve()); - aggregateIndexer.SetIndexers(indexers.Values); + aggregateIndexer.SetIndexers(indexers.Where(p => p.Value.IsConfigured).Select(p => p.Value)); this.aggregateIndexer = aggregateIndexer; }