Return 429 right away after release search

pull/1926/head
Bogdan 10 months ago
parent cad42fd005
commit 257c9ab248

@ -39,19 +39,14 @@ namespace NzbDrone.Core.IndexerSearch
public Task<NewznabResults> Search(NewznabRequest request, List<int> indexerIds, bool interactiveSearch) public Task<NewznabResults> Search(NewznabRequest request, List<int> indexerIds, bool interactiveSearch)
{ {
switch (request.t) return request.t switch
{ {
case "movie": "movie" => MovieSearch(request, indexerIds, interactiveSearch),
return MovieSearch(request, indexerIds, interactiveSearch); "music" => MusicSearch(request, indexerIds, interactiveSearch),
case "music": "tvsearch" => TvSearch(request, indexerIds, interactiveSearch),
return MusicSearch(request, indexerIds, interactiveSearch); "book" => BookSearch(request, indexerIds, interactiveSearch),
case "tvsearch": _ => BasicSearch(request, indexerIds, interactiveSearch)
return TvSearch(request, indexerIds, interactiveSearch); };
case "book":
return BookSearch(request, indexerIds, interactiveSearch);
default:
return BasicSearch(request, indexerIds, interactiveSearch);
}
} }
private async Task<NewznabResults> MovieSearch(NewznabRequest request, List<int> indexerIds, bool interactiveSearch) private async Task<NewznabResults> MovieSearch(NewznabRequest request, List<int> indexerIds, bool interactiveSearch)

@ -146,14 +146,13 @@ namespace NzbDrone.Api.V1.Indexers
var indexer = _indexerFactory.GetInstance(indexerDef); var indexer = _indexerFactory.GetInstance(indexerDef);
var blockedIndexerStatus = GetBlockedIndexerStatus(indexer); var blockedIndexerStatusPre = GetBlockedIndexerStatus(indexer);
if (blockedIndexerStatus?.DisabledTill != null) if (blockedIndexerStatusPre?.DisabledTill != null)
{ {
var retryAfterDisabledTill = Convert.ToInt32(blockedIndexerStatus.DisabledTill.Value.ToLocalTime().Subtract(DateTime.Now).TotalSeconds); AddRetryAfterHeader(CalculateRetryAfterDisabledTill(blockedIndexerStatusPre.DisabledTill.Value));
AddRetryAfterHeader(retryAfterDisabledTill);
return CreateResponse(CreateErrorXML(429, $"Indexer is disabled till {blockedIndexerStatus.DisabledTill.Value.ToLocalTime()} due to recent failures."), statusCode: StatusCodes.Status429TooManyRequests); return CreateResponse(CreateErrorXML(429, $"Indexer is disabled till {blockedIndexerStatusPre.DisabledTill.Value.ToLocalTime()} due to recent failures."), statusCode: StatusCodes.Status429TooManyRequests);
} }
// TODO Optimize this so it's not called here and in ReleaseSearchService (for manual search) // TODO Optimize this so it's not called here and in ReleaseSearchService (for manual search)
@ -180,6 +179,15 @@ namespace NzbDrone.Api.V1.Indexers
case "movie": case "movie":
var results = await _releaseSearchService.Search(request, new List<int> { indexerDef.Id }, false); var results = await _releaseSearchService.Search(request, new List<int> { indexerDef.Id }, false);
var blockedIndexerStatusPost = GetBlockedIndexerStatus(indexer);
if (blockedIndexerStatusPost?.DisabledTill != null)
{
AddRetryAfterHeader(CalculateRetryAfterDisabledTill(blockedIndexerStatusPost.DisabledTill.Value));
return CreateResponse(CreateErrorXML(429, $"Indexer is disabled till {blockedIndexerStatusPost.DisabledTill.Value.ToLocalTime()} due to recent failures."), statusCode: StatusCodes.Status429TooManyRequests);
}
foreach (var result in results.Releases) foreach (var result in results.Releases)
{ {
result.DownloadUrl = result.DownloadUrl.IsNotNullOrWhiteSpace() ? _downloadMappingService.ConvertToProxyLink(new Uri(result.DownloadUrl), request.server, indexerDef.Id, result.Title).AbsoluteUri : null; result.DownloadUrl = result.DownloadUrl.IsNotNullOrWhiteSpace() ? _downloadMappingService.ConvertToProxyLink(new Uri(result.DownloadUrl), request.server, indexerDef.Id, result.Title).AbsoluteUri : null;
@ -336,5 +344,10 @@ namespace NzbDrone.Api.V1.Indexers
HttpContext.Response.Headers.Add("Retry-After", $"{retryAfterSeconds}"); HttpContext.Response.Headers.Add("Retry-After", $"{retryAfterSeconds}");
} }
} }
private static int CalculateRetryAfterDisabledTill(DateTime disabledTill)
{
return Convert.ToInt32(disabledTill.ToLocalTime().Subtract(DateTime.Now).TotalSeconds);
}
} }
} }

Loading…
Cancel
Save