You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.1 KiB
137 lines
5.1 KiB
using System.Collections.Generic;
|
|
using NzbDrone.Common.Extensions;
|
|
using NzbDrone.Common.Http;
|
|
using NzbDrone.Core.IndexerSearch.Definitions;
|
|
|
|
namespace NzbDrone.Core.Indexers.Rarbg
|
|
{
|
|
public class RarbgRequestGenerator : IIndexerRequestGenerator
|
|
{
|
|
private readonly IRarbgTokenProvider _tokenProvider;
|
|
|
|
public RarbgSettings Settings { get; set; }
|
|
|
|
public RarbgRequestGenerator(IRarbgTokenProvider tokenProvider)
|
|
{
|
|
_tokenProvider = tokenProvider;
|
|
}
|
|
|
|
public virtual IndexerPageableRequestChain GetRecentRequests()
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
pageableRequests.Add(GetPagedRequests("list", null, null));
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
[System.Obsolete("Sonarr TV Stuff -- Shouldn't be needed for Lidarr")]
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
pageableRequests.Add(GetPagedRequests("search", searchCriteria.Series.TvdbId, "S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber));
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
[System.Obsolete("Sonarr TV Stuff -- Shouldn't be needed for Lidarr")]
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(SeasonSearchCriteria searchCriteria)
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
pageableRequests.Add(GetPagedRequests("search", searchCriteria.Series.TvdbId, "S{0:00}", searchCriteria.SeasonNumber));
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
[System.Obsolete("Sonarr TV Stuff -- Shouldn't be needed for Lidarr")]
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(DailyEpisodeSearchCriteria searchCriteria)
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
pageableRequests.Add(GetPagedRequests("search", searchCriteria.Series.TvdbId, "\"{0:yyyy MM dd}\"", searchCriteria.AirDate));
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
[System.Obsolete("Sonarr TV Stuff -- Shouldn't be needed for Lidarr")]
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(AnimeEpisodeSearchCriteria searchCriteria)
|
|
{
|
|
return new IndexerPageableRequestChain();
|
|
}
|
|
|
|
[System.Obsolete("Sonarr TV Stuff -- Shouldn't be needed for Lidarr")]
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(SpecialEpisodeSearchCriteria searchCriteria)
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
foreach (var queryTitle in searchCriteria.EpisodeQueryTitles)
|
|
{
|
|
var query = queryTitle.Replace('+', ' ');
|
|
query = System.Web.HttpUtility.UrlEncode(query);
|
|
|
|
pageableRequests.Add(GetPagedRequests("search", searchCriteria.Series.TvdbId, query));
|
|
}
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(AlbumSearchCriteria searchCriteria)
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
pageableRequests.Add(GetPagedRequests("search", null, "{0}+{1}", searchCriteria.Artist.Name, searchCriteria.Album.Title));
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
public virtual IndexerPageableRequestChain GetSearchRequests(ArtistSearchCriteria searchCriteria)
|
|
{
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
pageableRequests.Add(GetPagedRequests("search", null, "{0}", searchCriteria.Artist.Name));
|
|
|
|
return pageableRequests;
|
|
}
|
|
|
|
private IEnumerable<IndexerRequest> GetPagedRequests(string mode, int? tvdbId, string query, params object[] args)
|
|
{
|
|
var requestBuilder = new HttpRequestBuilder(Settings.BaseUrl)
|
|
.Resource("/pubapi_v2.php")
|
|
.Accept(HttpAccept.Json);
|
|
|
|
if (Settings.CaptchaToken.IsNotNullOrWhiteSpace())
|
|
{
|
|
requestBuilder.UseSimplifiedUserAgent = true;
|
|
requestBuilder.SetCookie("cf_clearance", Settings.CaptchaToken);
|
|
}
|
|
|
|
requestBuilder.AddQueryParam("mode", mode);
|
|
|
|
if (tvdbId.HasValue)
|
|
{
|
|
requestBuilder.AddQueryParam("search_tvdb", tvdbId.Value);
|
|
}
|
|
|
|
if (query.IsNotNullOrWhiteSpace())
|
|
{
|
|
requestBuilder.AddQueryParam("search_string", string.Format(query, args));
|
|
}
|
|
|
|
if (!Settings.RankedOnly)
|
|
{
|
|
requestBuilder.AddQueryParam("ranked", "0");
|
|
}
|
|
|
|
requestBuilder.AddQueryParam("category", "1;23;24;25;26");
|
|
requestBuilder.AddQueryParam("limit", "100");
|
|
requestBuilder.AddQueryParam("token", _tokenProvider.GetToken(Settings));
|
|
requestBuilder.AddQueryParam("format", "json_extended");
|
|
requestBuilder.AddQueryParam("app_id", "Lidarr");
|
|
|
|
yield return new IndexerRequest(requestBuilder.Build());
|
|
}
|
|
}
|
|
}
|