1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-23 22:25:56 -04:00

New: Support in services for multiple scene naming/numbering exceptions

This commit is contained in:
Taloth Saldono
2020-12-25 00:26:22 +01:00
committed by Taloth
parent ed2bb0d73a
commit 772448b41b
34 changed files with 604 additions and 339 deletions
@@ -143,15 +143,31 @@ namespace NzbDrone.Core.Indexers.Newznab
{
var pageableRequests = new IndexerPageableRequestChain();
AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}&ep={1}",
searchCriteria.SeasonNumber,
searchCriteria.EpisodeNumber));
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}&ep={1}",
searchCriteria.SeasonNumber,
searchCriteria.EpisodeNumber));
}
AddSceneTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
m => string.Format("&season={0}&ep={1}",
m.SceneSeasonNumber,
searchCriteria.EpisodeNumber));
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
{
AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}&ep={1}",
searchCriteria.SeasonNumber,
searchCriteria.EpisodeNumber));
}
pageableRequests.AddTier();
if (searchCriteria.SearchMode == SearchMode.Default)
{
AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}&ep={1}",
searchCriteria.SeasonNumber,
searchCriteria.EpisodeNumber));
}
return pageableRequests;
}
@@ -160,13 +176,28 @@ namespace NzbDrone.Core.Indexers.Newznab
{
var pageableRequests = new IndexerPageableRequestChain();
AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}",
searchCriteria.SeasonNumber));
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}",
searchCriteria.SeasonNumber));
}
AddSceneTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
m => string.Format("&season={0}",
m.SceneSeasonNumber));
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
{
AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}",
searchCriteria.SeasonNumber));
}
pageableRequests.AddTier();
if (searchCriteria.SearchMode == SearchMode.Default)
{
AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
string.Format("&season={0}",
searchCriteria.SeasonNumber));
}
return pageableRequests;
}
@@ -287,11 +318,12 @@ namespace NzbDrone.Core.Indexers.Newznab
string.Format("&tvmazeid={0}{1}", searchCriteria.Series.TvMazeId, parameters)));
}
}
}
private void AddTitlePageableRequests(IndexerPageableRequestChain chain, IEnumerable<int> categories, SearchCriteriaBase searchCriteria, string parameters)
{
if (SupportsTvTitleSearch)
{
chain.AddTier();
foreach (var searchTerm in searchCriteria.SceneTitles)
{
chain.Add(GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
@@ -302,7 +334,6 @@ namespace NzbDrone.Core.Indexers.Newznab
}
else if (SupportsTvSearch)
{
chain.AddTier();
foreach (var queryTitle in searchCriteria.QueryTitles)
{
chain.Add(GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
@@ -313,35 +344,6 @@ namespace NzbDrone.Core.Indexers.Newznab
}
}
private void AddSceneTitlePageableRequests(IndexerPageableRequestChain chain, IEnumerable<int> categories, SearchCriteriaBase searchCriteria, Func<SceneMapping, string> parametersFunc)
{
if (searchCriteria.SceneMappings != null)
{
foreach (var sceneMappingGroup in searchCriteria.SceneMappings.GroupBy(v => v.SceneSeasonNumber))
{
var parameters = parametersFunc(sceneMappingGroup.First());
foreach (var searchTerm in sceneMappingGroup.Select(v => v.SearchTerm).Distinct())
{
if (SupportsTvTitleSearch)
{
chain.AddToTier(0, GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
string.Format("&title={0}{1}",
Uri.EscapeDataString(searchTerm),
parameters)));
}
else if (SupportsTvSearch)
{
chain.AddToTier(0, GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
string.Format("&q={0}{1}",
NewsnabifyTitle(searchTerm),
parameters)));
}
}
}
}
}
private IEnumerable<IndexerRequest> GetPagedRequests(int maxPages, IEnumerable<int> categories, string searchType, string parameters)
{
if (categories.Empty())