Skip to content

Commit

Permalink
Minor refactoring in TorrentsCSV
Browse files Browse the repository at this point in the history
  • Loading branch information
mynameisbogdan committed Jul 7, 2023
1 parent ce68fe4 commit e68b456
Showing 1 changed file with 32 additions and 31 deletions.
63 changes: 32 additions & 31 deletions src/NzbDrone.Core/Indexers/Definitions/TorrentsCSV.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Linq;
using NLog;
Expand Down Expand Up @@ -33,7 +34,7 @@ public TorrentsCSV(IIndexerHttpClient httpClient, IEventAggregator eventAggregat

public override IIndexerRequestGenerator GetRequestGenerator()
{
return new TorrentsCSVRequestGenerator() { Settings = Settings, Capabilities = Capabilities };
return new TorrentsCSVRequestGenerator(Settings);
}

public override IParseIndexerResponse GetParser()
Expand All @@ -46,13 +47,13 @@ private IndexerCapabilities SetCapabilities()
var caps = new IndexerCapabilities
{
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
},
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
},
MovieSearchParams = new List<MovieSearchParam>
{
MovieSearchParam.Q
}
{
MovieSearchParam.Q
}
};

caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.Other);
Expand All @@ -63,10 +64,14 @@ private IndexerCapabilities SetCapabilities()

public class TorrentsCSVRequestGenerator : IIndexerRequestGenerator
{
public NoAuthTorrentBaseSettings Settings { get; set; }
public IndexerCapabilities Capabilities { get; set; }
private readonly NoAuthTorrentBaseSettings _settings;

public TorrentsCSVRequestGenerator(NoAuthTorrentBaseSettings settings)
{
_settings = settings;
}

private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categories)
private IEnumerable<IndexerRequest> GetPagedRequests(string term)
{
// search cannot be blank and needs at least 3 characters
if (term.IsNullOrWhiteSpace() || term.Length < 3)
Expand All @@ -80,18 +85,16 @@ private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categori
{ "q", term }
};

var searchUrl = string.Format("{0}/service/search?{1}", Settings.BaseUrl.TrimEnd('/'), qc.GetQueryString());
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/service/search?{qc.GetQueryString()}";

var request = new IndexerRequest(searchUrl, HttpAccept.Html);

yield return request;
yield return new IndexerRequest(searchUrl, HttpAccept.Json);
}

public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedSearchTerm));

return pageableRequests;
}
Expand All @@ -105,7 +108,7 @@ public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCrit
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedTvSearchString), searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedTvSearchString));

return pageableRequests;
}
Expand All @@ -119,7 +122,7 @@ public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchC
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedSearchTerm));

return pageableRequests;
}
Expand All @@ -139,10 +142,9 @@ public TorrentsCSVParser(NoAuthTorrentBaseSettings settings)

public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
{
var torrentInfos = new List<ReleaseInfo>();
var releaseInfos = new List<ReleaseInfo>();

var jsonStart = indexerResponse.Content;
var jsonContent = JArray.Parse(jsonStart);
var jsonContent = JArray.Parse(indexerResponse.Content);

foreach (var torrent in jsonContent)
{
Expand All @@ -151,21 +153,18 @@ public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
continue;
}

var infoHash = torrent.Value<string>("infohash");
var title = torrent.Value<string>("name");
var size = torrent.Value<long>("size_bytes");
var seeders = torrent.Value<int>("seeders");
var leechers = torrent.Value<int>("leechers");
var grabs = ParseUtil.CoerceInt(torrent.Value<string>("completed") ?? "0");
var infoHash = torrent.Value<JToken>("infohash").ToString();

// convert unix timestamp to human readable date
var publishDate = new DateTime(1970, 1, 1, 0, 0, 0, 0);
publishDate = publishDate.AddSeconds(torrent.Value<long>("created_unix"));
var seeders = torrent.Value<int?>("seeders") ?? 0;
var leechers = torrent.Value<int?>("leechers") ?? 0;
var grabs = torrent.Value<int?>("completed") ?? 0;
var publishDate = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(torrent.Value<long>("created_unix"));

var release = new TorrentInfo
{
Title = title,
InfoUrl = _settings.BaseUrl, // there is no details link
InfoUrl = $"{_settings.BaseUrl.TrimEnd('/')}/search/{title}", // there is no details link
Guid = $"magnet:?xt=urn:btih:{infoHash}",
InfoHash = infoHash, // magnet link is auto generated from infohash
Categories = new List<IndexerCategory> { NewznabStandardCategory.Other },
Expand All @@ -178,10 +177,12 @@ public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
UploadVolumeFactor = 1
};

torrentInfos.Add(release);
releaseInfos.Add(release);
}

return torrentInfos.ToArray();
return releaseInfos
.OrderByDescending(o => o.PublishDate)
.ToArray();
}

public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
Expand Down

0 comments on commit e68b456

Please sign in to comment.