PassThePopcorn: Fix Freeleech check (#7522) resolves #6951

This commit is contained in:
Cory
2020-03-06 00:03:42 -06:00
committed by GitHub
parent d477f01f84
commit c36e3356e2

View File

@@ -17,10 +17,7 @@ namespace Jackett.Common.Indexers
{ {
public class PassThePopcorn : BaseWebIndexer public class PassThePopcorn : BaseWebIndexer
{ {
private string LoginUrl => "https://passthepopcorn.me/ajax.php?action=login"; private static string SearchUrl => "https://passthepopcorn.me/torrents.php";
private string indexUrl => "https://passthepopcorn.me/ajax.php?action=login";
private string SearchUrl => "https://passthepopcorn.me/torrents.php";
private string DetailURL => "https://passthepopcorn.me/torrents.php?torrentid=";
private string AuthKey { get; set; } private string AuthKey { get; set; }
private new ConfigurationDataAPILoginWithUserAndPasskeyAndFilter configData private new ConfigurationDataAPILoginWithUserAndPasskeyAndFilter configData
@@ -73,7 +70,7 @@ namespace Jackett.Common.Indexers
try try
{ {
var results = await PerformQuery(new TorznabQuery()); var results = await PerformQuery(new TorznabQuery());
if (results.Count() == 0) if (!results.Any())
throw new Exception("Testing returned no results!"); throw new Exception("Testing returned no results!");
IsConfigured = true; IsConfigured = true;
SaveConfig(); SaveConfig();
@@ -96,25 +93,16 @@ namespace Jackett.Common.Indexers
var movieListSearchUrl = SearchUrl; var movieListSearchUrl = SearchUrl;
var queryCollection = new NameValueCollection(); var queryCollection = new NameValueCollection {{"json", "noredirect"}};
queryCollection.Add("json", "noredirect");
if (!string.IsNullOrEmpty(query.ImdbID)) if (!string.IsNullOrEmpty(query.ImdbID))
{
queryCollection.Add("searchstr", query.ImdbID); queryCollection.Add("searchstr", query.ImdbID);
}
else if (!string.IsNullOrEmpty(query.GetQueryString())) else if (!string.IsNullOrEmpty(query.GetQueryString()))
{
queryCollection.Add("searchstr", query.GetQueryString()); queryCollection.Add("searchstr", query.GetQueryString());
}
if (configFreeOnly) if (configFreeOnly)
queryCollection.Add("freetorrent", "1"); queryCollection.Add("freetorrent", "1");
if (queryCollection.Count > 0)
{
movieListSearchUrl += "?" + queryCollection.GetQueryString(); movieListSearchUrl += "?" + queryCollection.GetQueryString();
}
var authHeaders = new Dictionary<string, string>() var authHeaders = new Dictionary<string, string>()
{ {
@@ -122,49 +110,51 @@ namespace Jackett.Common.Indexers
{ "ApiKey", configData.Key.Value } { "ApiKey", configData.Key.Value }
}; };
var results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, null, null, authHeaders); var results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, headers: authHeaders);
if (results.IsRedirect) // untested if (results.IsRedirect) // untested
{ results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, headers: authHeaders);
results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, null, null, authHeaders);
}
try try
{ {
//Iterate over the releases for each movie //Iterate over the releases for each movie
var js_results = JObject.Parse(results.Content); var jsResults = JObject.Parse(results.Content);
foreach (var movie in js_results["Movies"]) foreach (var movie in jsResults["Movies"])
{ {
var movie_title = (string)movie["Title"]; var movieTitle = (string)movie["Title"];
var Year = (string)movie["Year"]; var year = (string)movie["Year"];
var movie_imdbid_str = (string)movie["ImdbId"]; var movieImdbIdStr = (string)movie["ImdbId"];
var coverStr = (string)movie["Cover"]; var coverStr = (string)movie["Cover"];
Uri coverUri = null; var coverUri = !string.IsNullOrEmpty(coverStr) ? new Uri(coverStr) : null;
if (!string.IsNullOrEmpty(coverStr)) var movieImdbId = !string.IsNullOrEmpty(movieImdbIdStr) ? (long?)long.Parse(movieImdbIdStr) : null;
coverUri = new Uri(coverStr); var movieGroupId = (string)movie["GroupId"];
long? movie_imdbid = null;
if (!string.IsNullOrEmpty(movie_imdbid_str))
movie_imdbid = long.Parse(movie_imdbid_str);
var movie_groupid = (string)movie["GroupId"];
foreach (var torrent in movie["Torrents"]) foreach (var torrent in movie["Torrents"])
{ {
var release = new ReleaseInfo(); var release = new ReleaseInfo();
var release_name = (string)torrent["ReleaseName"]; var releaseName = (string)torrent["ReleaseName"];
release.Title = release_name; release.Title = releaseName;
release.Description = string.Format("Title: {0}", movie_title); release.Description = $"Title: {movieTitle}";
release.BannerUrl = coverUri; release.BannerUrl = coverUri;
release.Imdb = movie_imdbid; release.Imdb = movieImdbId;
release.Comments = new Uri(string.Format("{0}?id={1}", SearchUrl, WebUtility.UrlEncode(movie_groupid))); release.Comments = new Uri($"{SearchUrl}?id={WebUtility.UrlEncode(movieGroupId)}");
release.Size = long.Parse((string)torrent["Size"]); release.Size = long.Parse((string)torrent["Size"]);
release.Grabs = long.Parse((string)torrent["Snatched"]); release.Grabs = long.Parse((string)torrent["Snatched"]);
release.Seeders = int.Parse((string)torrent["Seeders"]); release.Seeders = int.Parse((string)torrent["Seeders"]);
release.Peers = release.Seeders + int.Parse((string)torrent["Leechers"]); release.Peers = release.Seeders + int.Parse((string)torrent["Leechers"]);
release.PublishDate = DateTime.ParseExact((string)torrent["UploadTime"], "yyyy-MM-dd HH:mm:ss", release.PublishDate = DateTime.ParseExact((string)torrent["UploadTime"], "yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime(); CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime();
release.Link = new Uri(string.Format("{0}?action=download&id={1}&authkey={2}&torrent_pass={3}",
SearchUrl, WebUtility.UrlEncode((string)torrent["Id"]), WebUtility.UrlEncode(AuthKey), WebUtility.UrlEncode(configData.Passkey.Value))); var releaseLinkQuery = new NameValueCollection
{
{"action", "download"},
{"id", (string)torrent["Id"]},
{"authkey", AuthKey},
{"torrent_pass", configData.Passkey.Value},
};
release.Link = new UriBuilder(SearchUrl) {Query = releaseLinkQuery.GetQueryString()}.Uri;
release.Guid = release.Link; release.Guid = release.Link;
release.MinimumRatio = 1; release.MinimumRatio = 1;
release.MinimumSeedTime = 345600; release.MinimumSeedTime = 345600;
release.DownloadVolumeFactor = 1; var free = !(torrent["FreeleechType"] is null);
release.DownloadVolumeFactor = free ? 0 : 1;
release.UploadVolumeFactor = 1; release.UploadVolumeFactor = 1;
release.Category = new List<int> { 2000 }; release.Category = new List<int> { 2000 };
@@ -173,75 +163,63 @@ namespace Jackett.Common.Indexers
bool.TryParse((string)torrent["Checked"], out var check); bool.TryParse((string)torrent["Checked"], out var check);
if (configGoldenPopcornOnly && !golden) if (configGoldenPopcornOnly && !golden)
{
continue; //Skip release if user only wants GoldenPopcorn continue; //Skip release if user only wants GoldenPopcorn
}
if (configSceneOnly && !scene) if (configSceneOnly && !scene)
{
continue; //Skip release if user only wants Scene continue; //Skip release if user only wants Scene
}
if (configCheckedOnly && !check) if (configCheckedOnly && !check)
{
continue; //Skip release if user only wants Checked continue; //Skip release if user only wants Checked
} if (configFreeOnly && !free)
continue;
var titletags = new List<string>(); var titleTags = new List<string>();
var Quality = (string)torrent["Quality"]; var quality = (string)torrent["Quality"];
var Container = (string)torrent["Container"]; var container = (string)torrent["Container"];
var Codec = (string)torrent["Codec"]; var codec = (string)torrent["Codec"];
var Resolution = (string)torrent["Resolution"]; var resolution = (string)torrent["Resolution"];
var Source = (string)torrent["Source"]; var source = (string)torrent["Source"];
if (Year != null) if (year != null)
release.Description += $"<br>\nYear: {year}";
if (quality != null)
release.Description += $"<br>\nQuality: {quality}";
if (resolution != null)
{ {
release.Description += string.Format("<br>\nYear: {0}", Year); titleTags.Add(resolution);
release.Description += $"<br>\nResolution: {resolution}";
} }
if (Quality != null) if (source != null)
{ {
release.Description += string.Format("<br>\nQuality: {0}", Quality); titleTags.Add(source);
release.Description += $"<br>\nSource: {source}";
} }
if (Resolution != null) if (codec != null)
{ {
titletags.Add(Resolution); titleTags.Add(codec);
release.Description += string.Format("<br>\nResolution: {0}", Resolution); release.Description += $"<br>\nCodec: {codec}";
} }
if (Source != null) if (container != null)
{ {
titletags.Add(Source); titleTags.Add(container);
release.Description += string.Format("<br>\nSource: {0}", Source); release.Description += $"<br>\nContainer: {container}";
}
if (Codec != null)
{
titletags.Add(Codec);
release.Description += string.Format("<br>\nCodec: {0}", Codec);
}
if (Container != null)
{
titletags.Add(Container);
release.Description += string.Format("<br>\nContainer: {0}", Container);
} }
if (scene) if (scene)
{ {
titletags.Add("Scene"); titleTags.Add("Scene");
release.Description += "<br>\nScene"; release.Description += "<br>\nScene";
} }
if (check) if (check)
{ {
titletags.Add("Checked"); titleTags.Add("Checked");
release.Description += "<br>\nChecked"; release.Description += "<br>\nChecked";
} }
if (golden) if (golden)
{ {
titletags.Add("Golden Popcorn"); titleTags.Add("Golden Popcorn");
release.Description += "<br>\nGolden Popcorn"; release.Description += "<br>\nGolden Popcorn";
} }
if (titletags.Count() > 0) if (titleTags.Any())
release.Title += " [" + string.Join(" / ", titletags) + "]"; release.Title += " [" + string.Join(" / ", titleTags) + "]";
bool.TryParse((string)torrent["FreeleechType"], out var freeleech);
if (freeleech)
release.DownloadVolumeFactor = 0;
releases.Add(release); releases.Add(release);
} }