|
|
|
@ -35,6 +35,7 @@ public class SpeedCD : TorrentIndexerBase<SpeedCDSettings>
|
|
|
|
|
public override Encoding Encoding => Encoding.UTF8;
|
|
|
|
|
public override DownloadProtocol Protocol => DownloadProtocol.Torrent;
|
|
|
|
|
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
|
|
|
|
|
public override bool SupportsPagination => true;
|
|
|
|
|
public override IndexerCapabilities Capabilities => SetCapabilities();
|
|
|
|
|
|
|
|
|
|
public SpeedCD(IIndexerHttpClient httpClient,
|
|
|
|
@ -190,41 +191,6 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
|
|
|
|
|
_encoding = encoding;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categories, bool deep = false)
|
|
|
|
|
{
|
|
|
|
|
var parameters = new List<string>();
|
|
|
|
|
|
|
|
|
|
var catList = _capabilities.Categories.MapTorznabCapsToTrackers(categories);
|
|
|
|
|
foreach (var cat in catList)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add(cat);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_settings.FreeleechOnly)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("freeleech");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_settings.ExcludeArchives)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("norar");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (deep)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("deep");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parameters.Add("q");
|
|
|
|
|
parameters.Add(term.UrlEncode(_encoding));
|
|
|
|
|
|
|
|
|
|
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/browse/{string.Join("/", parameters)}";
|
|
|
|
|
|
|
|
|
|
var request = new IndexerRequest(searchUrl, HttpAccept.Html);
|
|
|
|
|
|
|
|
|
|
yield return request;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
|
|
|
|
|
{
|
|
|
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
@ -236,7 +202,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
|
|
|
|
|
term = $"{searchCriteria.FullImdbId}";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria.Categories, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
|
|
|
|
|
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
|
|
|
|
|
|
|
|
|
|
return pageableRequests;
|
|
|
|
|
}
|
|
|
|
@ -245,7 +211,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
|
|
|
|
|
{
|
|
|
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
|
|
|
|
|
|
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories));
|
|
|
|
|
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria));
|
|
|
|
|
|
|
|
|
|
return pageableRequests;
|
|
|
|
|
}
|
|
|
|
@ -271,7 +237,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria.Categories, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
|
|
|
|
|
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
|
|
|
|
|
|
|
|
|
|
return pageableRequests;
|
|
|
|
|
}
|
|
|
|
@ -280,7 +246,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
|
|
|
|
|
{
|
|
|
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
|
|
|
|
|
|
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories));
|
|
|
|
|
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria));
|
|
|
|
|
|
|
|
|
|
return pageableRequests;
|
|
|
|
|
}
|
|
|
|
@ -289,11 +255,55 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
|
|
|
|
|
{
|
|
|
|
|
var pageableRequests = new IndexerPageableRequestChain();
|
|
|
|
|
|
|
|
|
|
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories));
|
|
|
|
|
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria));
|
|
|
|
|
|
|
|
|
|
return pageableRequests;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<IndexerRequest> GetPagedRequests(string term, SearchCriteriaBase searchCriteria, bool deep = false)
|
|
|
|
|
{
|
|
|
|
|
var parameters = new List<string>();
|
|
|
|
|
|
|
|
|
|
var catList = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
|
|
|
|
|
foreach (var cat in catList)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add(cat);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_settings.FreeleechOnly)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("freeleech");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_settings.ExcludeArchives)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("norar");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (deep)
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("deep");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (term.IsNotNullOrWhiteSpace())
|
|
|
|
|
{
|
|
|
|
|
parameters.Add("q");
|
|
|
|
|
parameters.Add(term.UrlEncode(_encoding));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (searchCriteria.Limit is > 0 && searchCriteria.Offset is > 0)
|
|
|
|
|
{
|
|
|
|
|
var page = (int)(searchCriteria.Offset / searchCriteria.Limit) + 1;
|
|
|
|
|
|
|
|
|
|
parameters.Add("p");
|
|
|
|
|
parameters.Add(page.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/browse/{string.Join("/", parameters)}";
|
|
|
|
|
|
|
|
|
|
yield return new IndexerRequest(searchUrl, HttpAccept.Html);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Func<IDictionary<string, string>> GetCookies { get; set; }
|
|
|
|
|
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
|
|
|
|
}
|
|
|
|
|