refactor: improve readability, use UTC in request instead New York

This commit is contained in:
Yukine
2021-07-11 22:50:01 +02:00
committed by Qstick
parent b62ae41de8
commit fc65a89fbc

View File

@@ -5,6 +5,7 @@ using System.Net;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using FluentValidation; using FluentValidation;
using Newtonsoft.Json;
using NLog; using NLog;
using NzbDrone.Common.Http; using NzbDrone.Common.Http;
using NzbDrone.Core.Annotations; using NzbDrone.Core.Annotations;
@@ -21,7 +22,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubsPlease : TorrentIndexerBase<SubsPleaseSettings> public class SubsPlease : TorrentIndexerBase<SubsPleaseSettings>
{ {
public override string Name => "SubsPlease"; public override string Name => "SubsPlease";
public override string[] IndexerUrls => new string[] public override string[] IndexerUrls => new[]
{ {
"https://subsplease.org/", "https://subsplease.org/",
"https://subsplease.nocensor.space/" "https://subsplease.nocensor.space/"
@@ -69,18 +70,14 @@ namespace NzbDrone.Core.Indexers.Definitions
public SubsPleaseSettings Settings { get; set; } public SubsPleaseSettings Settings { get; set; }
public IndexerCapabilities Capabilities { get; set; } public IndexerCapabilities Capabilities { get; set; }
public SubsPleaseRequestGenerator()
{
}
private IEnumerable<IndexerRequest> GetSearchRequests(string term) private IEnumerable<IndexerRequest> GetSearchRequests(string term)
{ {
var searchUrl = string.Format("{0}/api/?", Settings.BaseUrl.TrimEnd('/')); var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
string searchTerm = Regex.Replace(term, "\\[?SubsPlease\\]?\\s*", string.Empty, RegexOptions.IgnoreCase).Trim(); var searchTerm = Regex.Replace(term, "\\[?SubsPlease\\]?\\s*", string.Empty, RegexOptions.IgnoreCase).Trim();
// If the search terms contain a resolution, remove it from the query sent to the API // If the search terms contain a resolution, remove it from the query sent to the API
Match resMatch = Regex.Match(searchTerm, "\\d{3,4}[p|P]"); var resMatch = Regex.Match(searchTerm, "\\d{3,4}[p|P]");
if (resMatch.Success) if (resMatch.Success)
{ {
searchTerm = searchTerm.Replace(resMatch.Value, string.Empty); searchTerm = searchTerm.Replace(resMatch.Value, string.Empty);
@@ -89,7 +86,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var queryParameters = new NameValueCollection var queryParameters = new NameValueCollection
{ {
{ "f", "search" }, { "f", "search" },
{ "tz", "America/New_York" }, { "tz", "UTC" },
{ "s", searchTerm } { "s", searchTerm }
}; };
@@ -100,12 +97,12 @@ namespace NzbDrone.Core.Indexers.Definitions
private IEnumerable<IndexerRequest> GetRssRequest() private IEnumerable<IndexerRequest> GetRssRequest()
{ {
var searchUrl = string.Format("{0}/api/?", Settings.BaseUrl.TrimEnd('/')); var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
var queryParameters = new NameValueCollection var queryParameters = new NameValueCollection
{ {
{ "f", "latest" }, { "f", "latest" },
{ "tz", "America/New_York" } { "tz", "UTC" }
}; };
var request = new IndexerRequest(searchUrl + queryParameters.GetQueryString(), HttpAccept.Json); var request = new IndexerRequest(searchUrl + queryParameters.GetQueryString(), HttpAccept.Json);
@@ -131,14 +128,9 @@ namespace NzbDrone.Core.Indexers.Definitions
{ {
var pageableRequests = new IndexerPageableRequestChain(); var pageableRequests = new IndexerPageableRequestChain();
if (searchCriteria.RssSearch) pageableRequests.Add(searchCriteria.RssSearch
{ ? GetRssRequest()
pageableRequests.Add(GetRssRequest()); : GetSearchRequests(searchCriteria.SanitizedTvSearchString));
}
else
{
pageableRequests.Add(GetSearchRequests(string.Format("{0}", searchCriteria.SanitizedTvSearchString)));
}
return pageableRequests; return pageableRequests;
} }
@@ -154,14 +146,9 @@ namespace NzbDrone.Core.Indexers.Definitions
{ {
var pageableRequests = new IndexerPageableRequestChain(); var pageableRequests = new IndexerPageableRequestChain();
if (searchCriteria.RssSearch) pageableRequests.Add(searchCriteria.RssSearch
{ ? GetRssRequest()
pageableRequests.Add(GetRssRequest()); : GetSearchRequests(searchCriteria.SanitizedSearchTerm));
}
else
{
pageableRequests.Add(GetSearchRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm)));
}
return pageableRequests; return pageableRequests;
} }
@@ -198,16 +185,14 @@ namespace NzbDrone.Core.Indexers.Definitions
var jsonResponse = new HttpResponse<Dictionary<string, SubPleaseRelease>>(indexerResponse.HttpResponse); var jsonResponse = new HttpResponse<Dictionary<string, SubPleaseRelease>>(indexerResponse.HttpResponse);
foreach (var keyValue in jsonResponse.Resource) foreach (var value in jsonResponse.Resource.Values)
{ {
SubPleaseRelease r = keyValue.Value; foreach (var d in value.Downloads)
foreach (var d in r.Downloads)
{ {
var release = new TorrentInfo var release = new TorrentInfo
{ {
InfoUrl = _settings.BaseUrl + $"shows/{r.Page}/", InfoUrl = _settings.BaseUrl + $"shows/{value.Page}/",
PublishDate = r.Release_Date.DateTime, PublishDate = value.ReleaseDate.DateTime,
Files = 1, Files = 1,
Categories = new List<IndexerCategory> { NewznabStandardCategory.TVAnime }, Categories = new List<IndexerCategory> { NewznabStandardCategory.TVAnime },
Seeders = 1, Seeders = 1,
@@ -219,7 +204,7 @@ namespace NzbDrone.Core.Indexers.Definitions
}; };
// Ex: [SubsPlease] Shingeki no Kyojin (The Final Season) - 64 (1080p) // Ex: [SubsPlease] Shingeki no Kyojin (The Final Season) - 64 (1080p)
release.Title += $"[SubsPlease] {r.Show} - {r.Episode} ({d.Res}p)"; release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Res}p)";
release.MagnetUrl = d.Magnet; release.MagnetUrl = d.Magnet;
release.DownloadUrl = null; release.DownloadUrl = null;
release.Guid = d.Magnet; release.Guid = d.Magnet;
@@ -272,7 +257,9 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SubPleaseRelease public class SubPleaseRelease
{ {
public string Time { get; set; } public string Time { get; set; }
public DateTimeOffset Release_Date { get; set; }
[JsonProperty("release_date")]
public DateTimeOffset ReleaseDate { get; set; }
public string Show { get; set; } public string Show { get; set; }
public string Episode { get; set; } public string Episode { get; set; }
public SubPleaseDownloadInfo[] Downloads { get; set; } public SubPleaseDownloadInfo[] Downloads { get; set; }