From c36e3356e2af2472f11bc6387d760572103f9573 Mon Sep 17 00:00:00 2001 From: Cory Date: Fri, 6 Mar 2020 00:03:42 -0600 Subject: [PATCH] PassThePopcorn: Fix Freeleech check (#7522) resolves #6951 --- src/Jackett.Common/Indexers/PassThePopcorn.cs | 140 ++++++++---------- 1 file changed, 59 insertions(+), 81 deletions(-) diff --git a/src/Jackett.Common/Indexers/PassThePopcorn.cs b/src/Jackett.Common/Indexers/PassThePopcorn.cs index 1363b4fde..639990456 100644 --- a/src/Jackett.Common/Indexers/PassThePopcorn.cs +++ b/src/Jackett.Common/Indexers/PassThePopcorn.cs @@ -17,10 +17,7 @@ namespace Jackett.Common.Indexers { public class PassThePopcorn : BaseWebIndexer { - private string LoginUrl => "https://passthepopcorn.me/ajax.php?action=login"; - 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 static string SearchUrl => "https://passthepopcorn.me/torrents.php"; private string AuthKey { get; set; } private new ConfigurationDataAPILoginWithUserAndPasskeyAndFilter configData @@ -73,7 +70,7 @@ namespace Jackett.Common.Indexers try { var results = await PerformQuery(new TorznabQuery()); - if (results.Count() == 0) + if (!results.Any()) throw new Exception("Testing returned no results!"); IsConfigured = true; SaveConfig(); @@ -96,25 +93,16 @@ namespace Jackett.Common.Indexers var movieListSearchUrl = SearchUrl; - var queryCollection = new NameValueCollection(); - queryCollection.Add("json", "noredirect"); + var queryCollection = new NameValueCollection {{"json", "noredirect"}}; if (!string.IsNullOrEmpty(query.ImdbID)) - { queryCollection.Add("searchstr", query.ImdbID); - } else if (!string.IsNullOrEmpty(query.GetQueryString())) - { queryCollection.Add("searchstr", query.GetQueryString()); - } - if (configFreeOnly) queryCollection.Add("freetorrent", "1"); - if (queryCollection.Count > 0) - { - movieListSearchUrl += "?" + queryCollection.GetQueryString(); - } + movieListSearchUrl += "?" + queryCollection.GetQueryString(); var authHeaders = new Dictionary() { @@ -122,49 +110,51 @@ namespace Jackett.Common.Indexers { "ApiKey", configData.Key.Value } }; - var results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, null, null, authHeaders); + var results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, headers: authHeaders); if (results.IsRedirect) // untested - { - results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, null, null, authHeaders); - } + results = await RequestStringWithCookiesAndRetry(movieListSearchUrl, headers: authHeaders); try { //Iterate over the releases for each movie - var js_results = JObject.Parse(results.Content); - foreach (var movie in js_results["Movies"]) + var jsResults = JObject.Parse(results.Content); + foreach (var movie in jsResults["Movies"]) { - var movie_title = (string)movie["Title"]; - var Year = (string)movie["Year"]; - var movie_imdbid_str = (string)movie["ImdbId"]; + var movieTitle = (string)movie["Title"]; + var year = (string)movie["Year"]; + var movieImdbIdStr = (string)movie["ImdbId"]; var coverStr = (string)movie["Cover"]; - Uri coverUri = null; - if (!string.IsNullOrEmpty(coverStr)) - coverUri = new Uri(coverStr); - long? movie_imdbid = null; - if (!string.IsNullOrEmpty(movie_imdbid_str)) - movie_imdbid = long.Parse(movie_imdbid_str); - var movie_groupid = (string)movie["GroupId"]; + var coverUri = !string.IsNullOrEmpty(coverStr) ? new Uri(coverStr) : null; + var movieImdbId = !string.IsNullOrEmpty(movieImdbIdStr) ? (long?)long.Parse(movieImdbIdStr) : null; + var movieGroupId = (string)movie["GroupId"]; foreach (var torrent in movie["Torrents"]) { var release = new ReleaseInfo(); - var release_name = (string)torrent["ReleaseName"]; - release.Title = release_name; - release.Description = string.Format("Title: {0}", movie_title); + var releaseName = (string)torrent["ReleaseName"]; + release.Title = releaseName; + release.Description = $"Title: {movieTitle}"; release.BannerUrl = coverUri; - release.Imdb = movie_imdbid; - release.Comments = new Uri(string.Format("{0}?id={1}", SearchUrl, WebUtility.UrlEncode(movie_groupid))); + release.Imdb = movieImdbId; + release.Comments = new Uri($"{SearchUrl}?id={WebUtility.UrlEncode(movieGroupId)}"); release.Size = long.Parse((string)torrent["Size"]); release.Grabs = long.Parse((string)torrent["Snatched"]); release.Seeders = int.Parse((string)torrent["Seeders"]); release.Peers = release.Seeders + int.Parse((string)torrent["Leechers"]); release.PublishDate = DateTime.ParseExact((string)torrent["UploadTime"], "yyyy-MM-dd HH:mm:ss", 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.MinimumRatio = 1; release.MinimumSeedTime = 345600; - release.DownloadVolumeFactor = 1; + var free = !(torrent["FreeleechType"] is null); + release.DownloadVolumeFactor = free ? 0 : 1; release.UploadVolumeFactor = 1; release.Category = new List { 2000 }; @@ -173,75 +163,63 @@ namespace Jackett.Common.Indexers bool.TryParse((string)torrent["Checked"], out var check); if (configGoldenPopcornOnly && !golden) - { continue; //Skip release if user only wants GoldenPopcorn - } if (configSceneOnly && !scene) - { continue; //Skip release if user only wants Scene - } if (configCheckedOnly && !check) - { continue; //Skip release if user only wants Checked - } + if (configFreeOnly && !free) + continue; - var titletags = new List(); - var Quality = (string)torrent["Quality"]; - var Container = (string)torrent["Container"]; - var Codec = (string)torrent["Codec"]; - var Resolution = (string)torrent["Resolution"]; - var Source = (string)torrent["Source"]; + var titleTags = new List(); + var quality = (string)torrent["Quality"]; + var container = (string)torrent["Container"]; + var codec = (string)torrent["Codec"]; + var resolution = (string)torrent["Resolution"]; + var source = (string)torrent["Source"]; - if (Year != null) + if (year != null) + release.Description += $"
\nYear: {year}"; + if (quality != null) + release.Description += $"
\nQuality: {quality}"; + if (resolution != null) { - release.Description += string.Format("
\nYear: {0}", Year); + titleTags.Add(resolution); + release.Description += $"
\nResolution: {resolution}"; } - if (Quality != null) + if (source != null) { - release.Description += string.Format("
\nQuality: {0}", Quality); + titleTags.Add(source); + release.Description += $"
\nSource: {source}"; } - if (Resolution != null) + if (codec != null) { - titletags.Add(Resolution); - release.Description += string.Format("
\nResolution: {0}", Resolution); + titleTags.Add(codec); + release.Description += $"
\nCodec: {codec}"; } - if (Source != null) + if (container != null) { - titletags.Add(Source); - release.Description += string.Format("
\nSource: {0}", Source); - } - if (Codec != null) - { - titletags.Add(Codec); - release.Description += string.Format("
\nCodec: {0}", Codec); - } - if (Container != null) - { - titletags.Add(Container); - release.Description += string.Format("
\nContainer: {0}", Container); + titleTags.Add(container); + release.Description += $"
\nContainer: {container}"; } if (scene) { - titletags.Add("Scene"); + titleTags.Add("Scene"); release.Description += "
\nScene"; } if (check) { - titletags.Add("Checked"); + titleTags.Add("Checked"); release.Description += "
\nChecked"; } if (golden) { - titletags.Add("Golden Popcorn"); + titleTags.Add("Golden Popcorn"); release.Description += "
\nGolden Popcorn"; } - if (titletags.Count() > 0) - release.Title += " [" + string.Join(" / ", titletags) + "]"; - - bool.TryParse((string)torrent["FreeleechType"], out var freeleech); - if (freeleech) - release.DownloadVolumeFactor = 0; + if (titleTags.Any()) + release.Title += " [" + string.Join(" / ", titleTags) + "]"; releases.Add(release); }