From 5f643b2cedadc5fe25ceb8888dd3af0395bfed55 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 5 Aug 2023 16:33:36 +0300 Subject: [PATCH] Fixed: (Indexers) Don't fetch releases when using unsupported capabilities --- .../IndexerSearch/ReleaseSearchService.cs | 11 +--- src/NzbDrone.Core/Indexers/HttpIndexerBase.cs | 58 +++++++++++++++++++ .../Indexers/IndexerCapabilities.cs | 6 +- 3 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs index 526d69ea0..0a10db176 100644 --- a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs @@ -128,19 +128,12 @@ namespace NzbDrone.Core.IndexerSearch private TSpec Get(NewznabRequest query, List indexerIds, bool interactiveSearch) where TSpec : SearchCriteriaBase, new() { - var spec = new TSpec() + var spec = new TSpec { InteractiveSearch = interactiveSearch }; - if (query.cat != null) - { - spec.Categories = query.cat.Split(',').Where(s => !string.IsNullOrWhiteSpace(s)).Select(s => int.Parse(s)).ToArray(); - } - else - { - spec.Categories = Array.Empty(); - } + spec.Categories = query.cat != null ? query.cat.Split(',').Where(s => !string.IsNullOrWhiteSpace(s)).Select(int.Parse).ToArray() : Array.Empty(); spec.SearchTerm = query.q?.Trim(); spec.SearchType = query.t; diff --git a/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs b/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs index 2a1151a6e..845f08a49 100644 --- a/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs +++ b/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs @@ -66,6 +66,20 @@ namespace NzbDrone.Core.Indexers return Task.FromResult(new IndexerPageableQueryResult()); } + var caps = GetCapabilities(); + + if ((searchCriteria.ImdbId.IsNotNullOrWhiteSpace() && !caps.MovieSearchImdbAvailable) || + (searchCriteria.TmdbId.HasValue && !caps.MovieSearchTmdbAvailable) || + (searchCriteria.TraktId.HasValue && !caps.MovieSearchTraktAvailable) || + (searchCriteria.DoubanId.HasValue && !caps.MovieSearchDoubanAvailable) || + (searchCriteria.Genre.IsNotNullOrWhiteSpace() && !caps.MovieSearchGenreAvailable) || + (searchCriteria.Year.HasValue && !caps.MovieSearchYearAvailable)) + { + _logger.Debug("Movie search skipped due to unsupported capabilities used: {0}", Definition.Name); + + return Task.FromResult(new IndexerPageableQueryResult()); + } + return FetchReleases(g => SetCookieFunctions(g).GetSearchRequests(searchCriteria), searchCriteria); } @@ -81,6 +95,20 @@ namespace NzbDrone.Core.Indexers return Task.FromResult(new IndexerPageableQueryResult()); } + var caps = GetCapabilities(); + + if ((searchCriteria.Album.IsNotNullOrWhiteSpace() && !caps.MusicSearchAlbumAvailable) || + (searchCriteria.Artist.IsNotNullOrWhiteSpace() && !caps.MusicSearchArtistAvailable) || + (searchCriteria.Label.IsNotNullOrWhiteSpace() && !caps.MusicSearchLabelAvailable) || + (searchCriteria.Track.IsNotNullOrWhiteSpace() && !caps.MusicSearchTrackAvailable) || + (searchCriteria.Genre.IsNotNullOrWhiteSpace() && !caps.MusicSearchGenreAvailable) || + (searchCriteria.Year.HasValue && !caps.MusicSearchYearAvailable)) + { + _logger.Debug("Music search skipped due to unsupported capabilities used: {0}", Definition.Name); + + return Task.FromResult(new IndexerPageableQueryResult()); + } + return FetchReleases(g => SetCookieFunctions(g).GetSearchRequests(searchCriteria), searchCriteria); } @@ -96,6 +124,23 @@ namespace NzbDrone.Core.Indexers return Task.FromResult(new IndexerPageableQueryResult()); } + var caps = GetCapabilities(); + + if ((searchCriteria.ImdbId.IsNotNullOrWhiteSpace() && !caps.TvSearchImdbAvailable) || + (searchCriteria.TvdbId.HasValue && !caps.TvSearchTvdbAvailable) || + (searchCriteria.RId.HasValue && !caps.TvSearchTvRageAvailable) || + (searchCriteria.TvMazeId.HasValue && !caps.TvSearchTvMazeAvailable) || + (searchCriteria.TraktId.HasValue && !caps.TvSearchTraktAvailable) || + (searchCriteria.TmdbId.HasValue && !caps.TvSearchTmdbAvailable) || + (searchCriteria.DoubanId.HasValue && !caps.TvSearchDoubanAvailable) || + (searchCriteria.Genre.IsNotNullOrWhiteSpace() && !caps.TvSearchGenreAvailable) || + (searchCriteria.Year.HasValue && !caps.TvSearchYearAvailable)) + { + _logger.Debug("TV search skipped due to unsupported capabilities used: {0}", Definition.Name); + + return Task.FromResult(new IndexerPageableQueryResult()); + } + return FetchReleases(g => SetCookieFunctions(g).GetSearchRequests(searchCriteria), searchCriteria); } @@ -111,6 +156,19 @@ namespace NzbDrone.Core.Indexers return Task.FromResult(new IndexerPageableQueryResult()); } + var caps = GetCapabilities(); + + if ((searchCriteria.Title.IsNotNullOrWhiteSpace() && !caps.BookSearchTitleAvailable) || + (searchCriteria.Author.IsNotNullOrWhiteSpace() && !caps.BookSearchAuthorAvailable) || + (searchCriteria.Publisher.IsNotNullOrWhiteSpace() && !caps.BookSearchPublisherAvailable) || + (searchCriteria.Genre.IsNotNullOrWhiteSpace() && !caps.BookSearchGenreAvailable) || + (searchCriteria.Year.HasValue && !caps.BookSearchYearAvailable)) + { + _logger.Debug("Book search skipped due to unsupported capabilities used: {0}", Definition.Name); + + return Task.FromResult(new IndexerPageableQueryResult()); + } + return FetchReleases(g => SetCookieFunctions(g).GetSearchRequests(searchCriteria), searchCriteria); } diff --git a/src/NzbDrone.Core/Indexers/IndexerCapabilities.cs b/src/NzbDrone.Core/Indexers/IndexerCapabilities.cs index cec80e194..ae8842f39 100644 --- a/src/NzbDrone.Core/Indexers/IndexerCapabilities.cs +++ b/src/NzbDrone.Core/Indexers/IndexerCapabilities.cs @@ -89,9 +89,9 @@ namespace NzbDrone.Core.Indexers public bool MovieSearchImdbAvailable => MovieSearchParams.Contains(MovieSearchParam.ImdbId); public bool MovieSearchTmdbAvailable => MovieSearchParams.Contains(MovieSearchParam.TmdbId); public bool MovieSearchTraktAvailable => MovieSearchParams.Contains(MovieSearchParam.TraktId); + public bool MovieSearchDoubanAvailable => MovieSearchParams.Contains(MovieSearchParam.DoubanId); public bool MovieSearchGenreAvailable => MovieSearchParams.Contains(MovieSearchParam.Genre); public bool MovieSearchYearAvailable => MovieSearchParams.Contains(MovieSearchParam.Year); - public bool MovieSearchDoubanAvailable => MovieSearchParams.Contains(MovieSearchParam.DoubanId); public List MusicSearchParams; public bool MusicSearchAvailable => MusicSearchParams.Count > 0; @@ -99,16 +99,16 @@ namespace NzbDrone.Core.Indexers public bool MusicSearchArtistAvailable => MusicSearchParams.Contains(MusicSearchParam.Artist); public bool MusicSearchLabelAvailable => MusicSearchParams.Contains(MusicSearchParam.Label); public bool MusicSearchTrackAvailable => MusicSearchParams.Contains(MusicSearchParam.Track); - public bool MusicSearchYearAvailable => MusicSearchParams.Contains(MusicSearchParam.Year); public bool MusicSearchGenreAvailable => MusicSearchParams.Contains(MusicSearchParam.Genre); + public bool MusicSearchYearAvailable => MusicSearchParams.Contains(MusicSearchParam.Year); public List BookSearchParams; public bool BookSearchAvailable => BookSearchParams.Count > 0; public bool BookSearchTitleAvailable => BookSearchParams.Contains(BookSearchParam.Title); public bool BookSearchAuthorAvailable => BookSearchParams.Contains(BookSearchParam.Author); public bool BookSearchPublisherAvailable => BookSearchParams.Contains(BookSearchParam.Publisher); - public bool BookSearchYearAvailable => BookSearchParams.Contains(BookSearchParam.Year); public bool BookSearchGenreAvailable => BookSearchParams.Contains(BookSearchParam.Genre); + public bool BookSearchYearAvailable => BookSearchParams.Contains(BookSearchParam.Year); public readonly IndexerCapabilitiesCategories Categories; public List Flags;