|
|
|
@ -22,29 +22,43 @@ namespace NzbDrone.Core.Indexers.Definitions.Rarbg
|
|
|
|
|
_rateLimit = rateLimit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<IndexerRequest> GetRequest(string term, int[] categories, string imdbId = null, int? tmdbId = null, int? tvdbId = null)
|
|
|
|
|
private IEnumerable<IndexerRequest> 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;
|
|
|
|
|
}
|
|
|
|
|