Return 429 right away after release search

pull/1926/head
Bogdan 7 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)
{
switch (request.t)
return request.t switch
{
case "movie":
return MovieSearch(request, indexerIds, interactiveSearch);
case "music":
return MusicSearch(request, indexerIds, interactiveSearch);
case "tvsearch":
return TvSearch(request, indexerIds, interactiveSearch);
case "book":
return BookSearch(request, indexerIds, interactiveSearch);
default:
return BasicSearch(request, indexerIds, interactiveSearch);
}
"movie" => MovieSearch(request, indexerIds, interactiveSearch),
"music" => MusicSearch(request, indexerIds, interactiveSearch),
"tvsearch" => TvSearch(request, indexerIds, interactiveSearch),
"book" => BookSearch(request, indexerIds, interactiveSearch),
_ => BasicSearch(request, indexerIds, 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 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(retryAfterDisabledTill);
AddRetryAfterHeader(CalculateRetryAfterDisabledTill(blockedIndexerStatusPre.DisabledTill.Value));
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)
@ -180,6 +179,15 @@ namespace NzbDrone.Api.V1.Indexers
case "movie":
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)
{
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}");
}
}
private static int CalculateRetryAfterDisabledTill(DateTime disabledTill)
{
return Convert.ToInt32(disabledTill.ToLocalTime().Subtract(DateTime.Now).TotalSeconds);
}
}
}

Loading…
Cancel
Save