Radarr/src/NzbDrone.Core/Indexers/HDBits/HDBitsRequestGenerator.cs

81 lines
2.5 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
2015-05-24 22:47:48 +00:00
using System.Linq;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Common.Serializer;
2015-05-24 22:47:48 +00:00
using NzbDrone.Core.IndexerSearch.Definitions;
namespace NzbDrone.Core.Indexers.HDBits
{
2015-05-24 22:47:48 +00:00
public class HDBitsRequestGenerator : IIndexerRequestGenerator
{
2015-05-24 22:47:48 +00:00
public HDBitsSettings Settings { get; set; }
public virtual IndexerPageableRequestChain GetRecentRequests()
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetRequest(new TorrentQuery()));
return pageableRequests;
}
2017-01-28 21:46:54 +00:00
public virtual IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
var query = new TorrentQuery();
2017-01-28 21:46:54 +00:00
if (TryAddSearchParameters(query, searchCriteria))
2017-01-28 21:46:54 +00:00
{
pageableRequests.Add(GetRequest(query));
}
return pageableRequests;
}
2017-01-28 21:46:54 +00:00
private bool TryAddSearchParameters(TorrentQuery query, SearchCriteriaBase searchCriteria)
{
if (searchCriteria.Movie.ImdbId.IsNullOrWhiteSpace())
{
return false;
}
2017-01-28 21:46:54 +00:00
var imdbId = int.Parse(searchCriteria.Movie.ImdbId.Substring(2));
if (imdbId != 0)
{
query.ImdbInfo = query.ImdbInfo ?? new ImdbInfo();
query.ImdbInfo.Id = imdbId;
return true;
}
2019-12-22 22:08:53 +00:00
2017-01-28 21:46:54 +00:00
return false;
}
2019-12-22 21:24:11 +00:00
public Func<IDictionary<string, string>> GetCookies { get; set; }
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
2017-01-28 21:46:54 +00:00
private IEnumerable<IndexerRequest> GetRequest(TorrentQuery query)
{
var request = new HttpRequestBuilder(Settings.BaseUrl)
.Resource("/api/torrents")
.Build();
request.Method = HttpMethod.POST;
const string appJson = "application/json";
request.Headers.Accept = appJson;
request.Headers.ContentType = appJson;
query.Username = Settings.Username;
query.Passkey = Settings.ApiKey;
query.Category = Settings.Categories.ToArray();
query.Codec = Settings.Codecs.ToArray();
query.Medium = Settings.Mediums.ToArray();
request.SetContent(query.ToJson());
yield return new IndexerRequest(request);
}
}
}