mirror of
https://github.com/Sonarr/Sonarr
synced 2026-05-08 21:21:47 +02:00
Prefer season search over per-episode for anime
When searching for anime seasons, try the season pack search first across all indexers. Only fall back to per-episode search if the season search returns zero results. Previously, SearchAnimeSeason always ran both: a season query followed by individual queries for every episode. For a 10-episode season this meant 10+ separate indexer requests on top of the season query. On indexers like Nyaa (via Prowlarr/Torznab), each per-episode request can take 10-15s, so a full season search could exceed 120s and trigger timeout cascades that disable indexers mid-search. The season query alone consistently returns results for actively airing anime on Newznab, Torznab, and Nyaa indexers. Per-episode fallback is still available when the season search genuinely finds nothing (e.g. older or niche titles). Also removes the AnimeStandardFormatSearch gate from NyaaRequestGenerator and NewznabRequestGenerator for season-level searches. The toggle still controls per-episode search format, but season pack queries should always fire regardless of that setting.
This commit is contained in:
parent
5bde924239
commit
a0e0c148f9
3 changed files with 14 additions and 5 deletions
|
|
@ -421,9 +421,18 @@ private async Task<List<DownloadDecision>> SearchAnimeSeason(Series series, List
|
|||
downloadDecisions.AddRange(decisions);
|
||||
}
|
||||
|
||||
foreach (var episode in episodesToSearch)
|
||||
if (downloadDecisions.Any())
|
||||
{
|
||||
downloadDecisions.AddRange(await SearchAnime(series, episode, monitoredOnly, userInvokedSearch, interactiveSearch, true));
|
||||
_logger.Debug("Season search returned results for {0}, skipping per-episode search for {1} episodes", series.Title, episodesToSearch.Count);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("No season results for {0}, falling back to per-episode search for {1} episodes", series.Title, episodesToSearch.Count);
|
||||
|
||||
foreach (var episode in episodesToSearch)
|
||||
{
|
||||
downloadDecisions.AddRange(await SearchAnime(series, episode, monitoredOnly, userInvokedSearch, interactiveSearch, true));
|
||||
}
|
||||
}
|
||||
|
||||
return DeDupeDecisions(downloadDecisions);
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@ public virtual IndexerPageableRequestChain GetSearchRequests(AnimeSeasonSearchCr
|
|||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
if (SupportsSearch && Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0)
|
||||
if (SupportsSearch && searchCriteria.SeasonNumber > 0)
|
||||
{
|
||||
AddTvIdPageableRequests(pageableRequests,
|
||||
Settings.AnimeCategories,
|
||||
|
|
|
|||
|
|
@ -87,9 +87,9 @@ public virtual IndexerPageableRequestChain GetSearchRequests(AnimeSeasonSearchCr
|
|||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
foreach (var searchTitle in searchCriteria.SceneTitles.Select(PrepareQuery))
|
||||
if (searchCriteria.SeasonNumber > 0)
|
||||
{
|
||||
if (Settings.AnimeStandardFormatSearch && searchCriteria.SeasonNumber > 0)
|
||||
foreach (var searchTitle in searchCriteria.SceneTitles.Select(PrepareQuery))
|
||||
{
|
||||
pageableRequests.Add(GetPagedRequests($"{searchTitle}+s{searchCriteria.SeasonNumber:00}"));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue