Fixed: Respect series type in Newznab/Torznab searches for specials

Closes #7783
This commit is contained in:
Bogdan 2025-03-30 13:10:53 +03:00 committed by Mark McDowall
parent d62eea604a
commit 9cb9c711be
2 changed files with 18 additions and 6 deletions

View file

@ -12,10 +12,10 @@ public override string ToString()
if (episodeTitles.Count > 0)
{
return string.Format("[{0}] Specials", Series.Title);
return $"[{Series.Title} ({Series.SeriesType})] Specials";
}
return string.Format("[{0} : {1}]", Series.Title, string.Join(",", EpisodeQueryTitles));
return $"[{Series.Title} ({Series.SeriesType}): {string.Join(",", EpisodeQueryTitles)}]";
}
}
}

View file

@ -8,6 +8,7 @@
using NzbDrone.Core.DataAugmentation.Scene;
using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.Indexers.Newznab
{
@ -228,10 +229,12 @@ public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearch
return pageableRequests;
}
var categories = GetSearchCategories(searchCriteria);
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
AddTvIdPageableRequests(pageableRequests,
Settings.Categories,
categories,
searchCriteria,
$"&season={NewznabifySeasonNumber(searchCriteria.SeasonNumber)}&ep={searchCriteria.EpisodeNumber}");
}
@ -239,7 +242,7 @@ public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearch
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
{
AddTitlePageableRequests(pageableRequests,
Settings.Categories,
categories,
searchCriteria,
$"&season={NewznabifySeasonNumber(searchCriteria.SeasonNumber)}&ep={searchCriteria.EpisodeNumber}");
}
@ -249,7 +252,7 @@ public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearch
if (searchCriteria.SearchMode == SearchMode.Default)
{
AddTitlePageableRequests(pageableRequests,
Settings.Categories,
categories,
searchCriteria,
$"&season={NewznabifySeasonNumber(searchCriteria.SeasonNumber)}&ep={searchCriteria.EpisodeNumber}");
}
@ -474,13 +477,15 @@ public virtual IndexerPageableRequestChain GetSearchRequests(SpecialEpisodeSearc
if (SupportsSearch)
{
var categories = GetSearchCategories(searchCriteria);
foreach (var queryTitle in searchCriteria.EpisodeQueryTitles)
{
var query = queryTitle.Replace('+', ' ');
query = System.Web.HttpUtility.UrlEncode(query);
pageableRequests.Add(GetPagedRequests(MaxPages,
Settings.Categories.Concat(Settings.AnimeCategories),
categories,
"search",
$"&q={query}"));
}
@ -634,5 +639,12 @@ private static string NewznabifySeasonNumber(int seasonNumber)
{
return seasonNumber == 0 ? "00" : seasonNumber.ToString();
}
private IList<int> GetSearchCategories(SearchCriteriaBase searchCriteria)
{
return searchCriteria.Series?.SeriesType is SeriesTypes.Anime
? Settings.AnimeCategories.ToList()
: Settings.Categories.ToList();
}
}
}