diff --git a/src/NzbDrone.Core/Indexers/Definitions/Rarbg/RarbgRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Definitions/Rarbg/RarbgRequestGenerator.cs index 8b03e7620..31eddb7a9 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Rarbg/RarbgRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Rarbg/RarbgRequestGenerator.cs @@ -22,29 +22,43 @@ namespace NzbDrone.Core.Indexers.Definitions.Rarbg _rateLimit = rateLimit; } - private IEnumerable GetRequest(string term, int[] categories, string imdbId = null, int? tmdbId = null, int? tvdbId = null) + private IEnumerable GetRequest(bool isRssSearch, string term, int[] categories, string imdbId = null, int? tmdbId = null, int? tvdbId = null) { var requestBuilder = new HttpRequestBuilder(Settings.BaseUrl.Trim('/')) .Resource("/pubapi_v2.php") - .AddQueryParam("mode", "search") + .AddQueryParam("limit", "100") + .AddQueryParam("token", _tokenProvider.GetToken(Settings, _rateLimit)) + .AddQueryParam("format", "json_extended") + .AddQueryParam("app_id", $"rralworP_{BuildInfo.Version}") .Accept(HttpAccept.Json); - if (imdbId.IsNotNullOrWhiteSpace()) + if (isRssSearch) { - requestBuilder.AddQueryParam("search_imdb", imdbId); + requestBuilder + .AddQueryParam("mode", "list") + .WithRateLimit(31); } - else if (tmdbId.HasValue && tmdbId > 0) + else { - requestBuilder.AddQueryParam("search_themoviedb", tmdbId); - } - else if (tvdbId.HasValue && tvdbId > 0) - { - requestBuilder.AddQueryParam("search_tvdb", tvdbId); - } - - if (term.IsNotNullOrWhiteSpace()) - { - requestBuilder.AddQueryParam("search_string", $"{term}"); + requestBuilder.AddQueryParam("mode", "search"); + + if (imdbId.IsNotNullOrWhiteSpace()) + { + requestBuilder.AddQueryParam("search_imdb", imdbId); + } + else if (tmdbId.HasValue && tmdbId > 0) + { + requestBuilder.AddQueryParam("search_themoviedb", tmdbId); + } + else if (tvdbId.HasValue && tvdbId > 0) + { + requestBuilder.AddQueryParam("search_tvdb", tvdbId); + } + + if (term.IsNotNullOrWhiteSpace()) + { + requestBuilder.AddQueryParam("search_string", $"{term}"); + } } if (!Settings.RankedOnly) @@ -53,17 +67,13 @@ namespace NzbDrone.Core.Indexers.Definitions.Rarbg } var cats = Categories.MapTorznabCapsToTrackers(categories); - - if (cats != null && cats.Count > 0) + if (cats == null || !cats.Any()) { - var categoryParam = string.Join(";", cats.Distinct()); - requestBuilder.AddQueryParam("category", categoryParam); + // default to all, without specifying it some categories are missing (e.g. games), see #4146 + cats = Categories.GetTrackerCategories(); } - requestBuilder.AddQueryParam("limit", "100"); - requestBuilder.AddQueryParam("token", _tokenProvider.GetToken(Settings, _rateLimit)); - requestBuilder.AddQueryParam("format", "json_extended"); - requestBuilder.AddQueryParam("app_id", $"rralworP_{BuildInfo.Version}"); + requestBuilder.AddQueryParam("category", string.Join(";", cats.Distinct())); yield return new IndexerRequest(requestBuilder.Build()); } @@ -71,35 +81,35 @@ namespace NzbDrone.Core.Indexers.Definitions.Rarbg public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria) { var pageableRequests = new IndexerPageableRequestChain(); - pageableRequests.Add(GetRequest(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories, searchCriteria.FullImdbId, searchCriteria.TmdbId)); + pageableRequests.Add(GetRequest(searchCriteria.IsRssSearch, searchCriteria.SanitizedSearchTerm, searchCriteria.Categories, searchCriteria.FullImdbId, searchCriteria.TmdbId)); return pageableRequests; } public IndexerPageableRequestChain GetSearchRequests(MusicSearchCriteria searchCriteria) { var pageableRequests = new IndexerPageableRequestChain(); - pageableRequests.Add(GetRequest(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)); + pageableRequests.Add(GetRequest(searchCriteria.IsRssSearch, searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)); return pageableRequests; } public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria) { var pageableRequests = new IndexerPageableRequestChain(); - pageableRequests.Add(GetRequest(searchCriteria.SanitizedTvSearchString, searchCriteria.Categories, searchCriteria.FullImdbId, tvdbId: searchCriteria.TvdbId)); + pageableRequests.Add(GetRequest(searchCriteria.IsRssSearch, searchCriteria.SanitizedTvSearchString, searchCriteria.Categories, searchCriteria.FullImdbId, tvdbId: searchCriteria.TvdbId)); return pageableRequests; } public IndexerPageableRequestChain GetSearchRequests(BookSearchCriteria searchCriteria) { var pageableRequests = new IndexerPageableRequestChain(); - pageableRequests.Add(GetRequest(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)); + pageableRequests.Add(GetRequest(searchCriteria.IsRssSearch, searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)); return pageableRequests; } public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchCriteria) { var pageableRequests = new IndexerPageableRequestChain(); - pageableRequests.Add(GetRequest(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)); + pageableRequests.Add(GetRequest(searchCriteria.IsRssSearch, searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)); return pageableRequests; }