mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-04-24 22:07:32 -04:00
Return 429 right away after release search
This commit is contained in:
parent
cad42fd005
commit
257c9ab248
2 changed files with 25 additions and 17 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue