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

New: Don't prevent season searches for Newznab/Torznab if supported by the indexer

Closes #5562
This commit is contained in:
Mark McDowall
2023-04-19 16:12:43 -07:00
parent 764c084987
commit 97cf3cee17
2 changed files with 126 additions and 28 deletions
@@ -28,6 +28,7 @@ namespace NzbDrone.Core.Indexers.Newznab
PageSize = 100;
}
// Used for anime
private bool SupportsSearch
{
get
@@ -39,19 +40,19 @@ namespace NzbDrone.Core.Indexers.Newznab
}
}
private bool SupportsTvSearch
// Used for standard/daily
private bool SupportsTvQuerySearch
{
get
{
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("q") &&
capabilities.SupportedTvSearchParameters.Contains("season") &&
capabilities.SupportedTvSearchParameters.Contains("ep");
capabilities.SupportedTvSearchParameters.Contains("q");
}
}
// Used for standard/daily
private bool SupportsTvTitleSearch
{
get
@@ -59,9 +60,16 @@ namespace NzbDrone.Core.Indexers.Newznab
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("title") &&
capabilities.SupportedTvSearchParameters.Contains("season") &&
capabilities.SupportedTvSearchParameters.Contains("ep");
capabilities.SupportedTvSearchParameters.Contains("title");
}
}
// Combines 'SupportsTvQuerySearch' and 'SupportsTvTitleSearch'
private bool SupportsTvTextSearches
{
get
{
return SupportsTvQuerySearch || SupportsTvTitleSearch;
}
}
@@ -72,9 +80,7 @@ namespace NzbDrone.Core.Indexers.Newznab
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("tvdbid") &&
capabilities.SupportedTvSearchParameters.Contains("season") &&
capabilities.SupportedTvSearchParameters.Contains("ep");
capabilities.SupportedTvSearchParameters.Contains("tvdbid");
}
}
@@ -85,9 +91,7 @@ namespace NzbDrone.Core.Indexers.Newznab
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("imdbid") &&
capabilities.SupportedTvSearchParameters.Contains("season") &&
capabilities.SupportedTvSearchParameters.Contains("ep");
capabilities.SupportedTvSearchParameters.Contains("imdbid");
}
}
@@ -98,9 +102,7 @@ namespace NzbDrone.Core.Indexers.Newznab
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("rid") &&
capabilities.SupportedTvSearchParameters.Contains("season") &&
capabilities.SupportedTvSearchParameters.Contains("ep");
capabilities.SupportedTvSearchParameters.Contains("rid");
}
}
@@ -111,7 +113,37 @@ namespace NzbDrone.Core.Indexers.Newznab
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("tvmazeid") &&
capabilities.SupportedTvSearchParameters.Contains("tvmazeid");
}
}
// Combines all ID based searches
private bool SupportsTvIdSearches
{
get
{
return SupportsTvdbSearch || SupportsImdbSearch || SupportsTvRageSearch || SupportsTvMazeSearch;
}
}
private bool SupportsSeasonSearch
{
get
{
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("season");
}
}
private bool SupportsEpisodeSearch
{
get
{
var capabilities = _capabilitiesProvider.GetCapabilities(Settings);
return capabilities.SupportedTvSearchParameters != null &&
capabilities.SupportedTvSearchParameters.Contains("season") &&
capabilities.SupportedTvSearchParameters.Contains("ep");
}
@@ -167,12 +199,21 @@ namespace NzbDrone.Core.Indexers.Newznab
public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
{
if (!SupportsTvdbSearch && !SupportsTvSearch && !SupportsTvTitleSearch)
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsEpisodeSearch)
{
_logger.Debug("Indexer capabilities lacking season & ep query parameters, no Standard series search possible.");
return pageableRequests;
}
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsTvTextSearches && !SupportsTvIdSearches)
{
_logger.Debug("Indexer capabilities lacking q, title, tvdbid, imdbid, rid and tvmazeid parameters, no Standard series search possible.");
return pageableRequests;
}
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
@@ -205,12 +246,21 @@ namespace NzbDrone.Core.Indexers.Newznab
public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
{
if (!SupportsTvdbSearch && !SupportsTvSearch && !SupportsTvTitleSearch)
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsSeasonSearch)
{
_logger.Debug("Indexer capabilities lacking season & ep query parameters, no Standard series search possible.");
_logger.Debug("Indexer capabilities lacking season query parameter, no Standard series search possible.");
return pageableRequests;
}
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsTvTextSearches && !SupportsTvIdSearches)
{
_logger.Debug("Indexer capabilities lacking q, title, tvdbid, imdbid, rid and tvmazeid parameters, no Standard series search possible.");
return pageableRequests;
}
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
@@ -243,12 +293,21 @@ namespace NzbDrone.Core.Indexers.Newznab
public virtual IndexerPageableRequestChain GetSearchRequests(DailyEpisodeSearchCriteria searchCriteria)
{
if (!SupportsTvdbSearch && !SupportsTvSearch && !SupportsTvTitleSearch)
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsEpisodeSearch)
{
_logger.Debug("Indexer capabilities lacking season & ep query parameters, no Daily series search possible.");
return pageableRequests;
}
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsTvTextSearches && !SupportsTvIdSearches)
{
_logger.Debug("Indexer capabilities lacking q, title, tvdbid, imdbid, rid and tvmazeid parameters, no Daily series search possible.");
return pageableRequests;
}
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
@@ -281,12 +340,21 @@ namespace NzbDrone.Core.Indexers.Newznab
public virtual IndexerPageableRequestChain GetSearchRequests(DailySeasonSearchCriteria searchCriteria)
{
if (!SupportsTvdbSearch && !SupportsTvSearch && !SupportsTvTitleSearch)
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsEpisodeSearch)
{
_logger.Debug("Indexer capabilities lacking season & ep query parameters, no Daily series search possible.");
_logger.Debug("Indexer capabilities lacking season query parameter, no Daily series search possible.");
return pageableRequests;
}
var pageableRequests = new IndexerPageableRequestChain();
if (!SupportsTvTextSearches && !SupportsTvIdSearches)
{
_logger.Debug("Indexer capabilities lacking q, title, tvdbid, imdbid, rid and tvmazeid parameters, no Daily series search possible.");
return pageableRequests;
}
if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
{
@@ -453,7 +521,7 @@ namespace NzbDrone.Core.Indexers.Newznab
$"&title={Uri.EscapeDataString(searchTerm)}{parameters}"));
}
}
else if (SupportsTvSearch)
else if (SupportsTvQuerySearch)
{
var queryTitles = TvTextSearchEngine == "raw" ? searchCriteria.SceneTitles : searchCriteria.CleanSceneTitles;
foreach (var queryTitle in queryTitles)