From 79bed349d910e1fb4d723adc5eb2b25e6b75c054 Mon Sep 17 00:00:00 2001 From: jamesb2147 Date: Fri, 27 Jan 2017 01:33:38 -0600 Subject: [PATCH] Removal of ILT (dead) and addition of GimmePeers (#988) * Create gimmepeers.cs Copied settings over from old ILoveTorrents config. As ILT is now defunct, GP is the official replacement, as announced back in fall 2016. * Remove ILT and add GimmePeers Removing defunct ILT and adding its replacement GP * Rename gimmepeers.cs to GimmePeers.cs * Update Jackett.csproj Remove ILT and add GP * Delete ILoveTorrents.cs Removing ILT support as site is dead --- README.md | 4 +- .../{ILoveTorrents.cs => GimmePeers.cs} | 368 +++++++++--------- src/Jackett/Jackett.csproj | 4 +- 3 files changed, 188 insertions(+), 188 deletions(-) rename src/Jackett/Indexers/{ILoveTorrents.cs => GimmePeers.cs} (92%) diff --git a/README.md b/README.md index e6af08f83..66d6d629e 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/ * FunkyTorrents * Fuzer * Ghost City + * GimmePeers * GODS * Gormogon * Hardbay @@ -77,7 +78,6 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/ * House-of-Torrents * Hyperay * ICE Torrent - * ILoveTorrents * Immortalseed * Infinity-T * IPTorrents @@ -87,7 +87,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/ * LinkoManija * M-Team - TP * Magico - * Mononoké-BT + * Mononoké-BT * MoreThanTV * MyAnonamouse * myAmity diff --git a/src/Jackett/Indexers/ILoveTorrents.cs b/src/Jackett/Indexers/GimmePeers.cs similarity index 92% rename from src/Jackett/Indexers/ILoveTorrents.cs rename to src/Jackett/Indexers/GimmePeers.cs index 7089c6aba..aa6610fbd 100644 --- a/src/Jackett/Indexers/ILoveTorrents.cs +++ b/src/Jackett/Indexers/GimmePeers.cs @@ -1,184 +1,184 @@ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CsQuery; -using CsQuery.ExtensionMethods.Internal; -using Jackett.Models; -using Jackett.Models.IndexerConfig; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; - -namespace Jackett.Indexers -{ - // ReSharper disable once InconsistentNaming - public class ILoveTorrents : BaseIndexer, IIndexer - { - private string BrowseUrl => SiteLink + "browse.php"; - private string LoginUrl => SiteLink + "takelogin.php"; - - new ConfigurationDataBasicLogin configData - { - get { return (ConfigurationDataBasicLogin)base.configData; } - set { base.configData = value; } - } - - public ILoveTorrents(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) - : base(name: "ILoveTorrents", - description: "ILT", - link: "https://www.ilovetorrents.me/", - caps: new TorznabCapabilities(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataBasicLogin()) - { - Encoding = Encoding.GetEncoding("iso-8859-1"); - Language = "en-us"; - - AddCategoryMapping(85, TorznabCatType.Movies3D); - AddCategoryMapping(23, TorznabCatType.TVAnime); - AddCategoryMapping(24, TorznabCatType.BooksEbook); - AddCategoryMapping(4, TorznabCatType.PCGames); - AddCategoryMapping(38, TorznabCatType.ConsolePS3); - AddCategoryMapping(38, TorznabCatType.ConsolePS4); - AddCategoryMapping(38, TorznabCatType.ConsolePSP); - AddCategoryMapping(43, TorznabCatType.ConsoleWii); - AddCategoryMapping(43, TorznabCatType.ConsoleWiiU); - AddCategoryMapping(12, TorznabCatType.ConsoleXBOX360DLC); - AddCategoryMapping(12, TorznabCatType.ConsoleXbox); - AddCategoryMapping(12, TorznabCatType.ConsoleXbox360); - AddCategoryMapping(12, TorznabCatType.ConsoleXboxOne); - AddCategoryMapping(6, TorznabCatType.Audio); - - AddCategoryMapping(7, TorznabCatType.TV); - AddCategoryMapping(40, TorznabCatType.TVSD); - AddCategoryMapping(8, TorznabCatType.TVHD); - - AddCategoryMapping(9, TorznabCatType.XXX); - AddCategoryMapping(11, TorznabCatType.XXXDVD); - AddCategoryMapping(10, TorznabCatType.XXXx264); - - AddCategoryMapping(80, TorznabCatType.MoviesBluRay); - AddCategoryMapping(20, TorznabCatType.MoviesDVD); - AddCategoryMapping(41, TorznabCatType.MoviesHD); - AddCategoryMapping(19, TorznabCatType.Movies); - } - - public async Task ApplyConfiguration(JToken configJson) - { - LoadValuesFromJson(configJson); - var pairs = new Dictionary { - { "username", configData.Username.Value }, - { "password", configData.Password.Value }, - { "returnto", "/" }, - { "login", "Log in!" } - }; - - var loginPage = await RequestStringWithCookies(SiteLink, string.Empty); - - var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, SiteLink); - await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => - { - CQ dom = result.Content; - var messageEl = dom["body > div"].First(); - var errorMessage = messageEl.Text().Trim(); - throw new ExceptionWithConfigData(errorMessage, configData); - }); - return IndexerConfigurationStatus.RequiresTesting; - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var searchString = query.GetQueryString(); - var searchUrl = BrowseUrl; - var trackerCats = MapTorznabCapsToTrackers(query); - var queryCollection = new NameValueCollection(); - - // Tracker can only search OR return things in categories - if (!string.IsNullOrWhiteSpace(searchString)) - { - queryCollection.Add("search", searchString); - queryCollection.Add("cat", "0"); - } - else - { - foreach (var cat in MapTorznabCapsToTrackers(query)) - { - queryCollection.Add("c" + cat, "1"); - } - - queryCollection.Add("incldead", "0"); - } - - searchUrl += "?" + queryCollection.GetQueryString(); - - await ProcessPage(releases, searchUrl); - return releases; - } - - private async Task ProcessPage(List releases, string searchUrl) - { - var response = await RequestStringWithCookiesAndRetry(searchUrl, null, BrowseUrl); - var results = response.Content; - try - { - CQ dom = results; - - var rows = dom[".koptekst tr"]; - foreach (var row in rows.Skip(1)) - { - var release = new ReleaseInfo(); - - var link = row.Cq().Find("td:eq(1) a:eq(0)").First(); - release.Guid = new Uri(SiteLink + link.Attr("href")); - release.Comments = release.Guid; - release.Title = link.Text().Trim(); - release.Description = release.Title; - - // If we search an get no results, we still get a table just with no info. - if (string.IsNullOrWhiteSpace(release.Title)) - { - break; - } - - // Check if the release has been assigned a category - if (row.Cq().Find("td:eq(0) a").Length > 0) - { - var cat = row.Cq().Find("td:eq(0) a").First().Attr("href").Substring(15); - release.Category = MapTrackerCatToNewznab(cat); - } - - var qLink = row.Cq().Find("td:eq(2) a").First(); - release.Link = new Uri(SiteLink + qLink.Attr("href")); - - var added = row.Cq().Find("td:eq(7)").First().Text().Trim(); - var date = added.Substring(0, 10); - var time = added.Substring(12, 8); - var dateTime = date + time; - release.PublishDate = DateTime.ParseExact(dateTime, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime(); - - var sizeStr = row.Cq().Find("td:eq(8)").First().Text().Trim(); - release.Size = ReleaseInfo.GetBytes(sizeStr); - - release.Seeders = ParseUtil.CoerceInt(row.Cq().Find("td:eq(10)").First().Text().Trim()); - release.Peers = ParseUtil.CoerceInt(row.Cq().Find("td:eq(11)").First().Text().Trim()) + release.Seeders; - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results, ex); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CsQuery; +using CsQuery.ExtensionMethods.Internal; +using Jackett.Models; +using Jackett.Models.IndexerConfig; +using Jackett.Services; +using Jackett.Utils; +using Jackett.Utils.Clients; +using Newtonsoft.Json.Linq; +using NLog; + +namespace Jackett.Indexers +{ + // ReSharper disable once InconsistentNaming + public class GimmePeers : BaseIndexer, IIndexer + { + private string BrowseUrl => SiteLink + "browse.php"; + private string LoginUrl => SiteLink + "login.php"; + + new ConfigurationDataBasicLogin configData + { + get { return (ConfigurationDataBasicLogin)base.configData; } + set { base.configData = value; } + } + + public GimmePeers(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) + : base(name: "GimmePeers", + description: "Formerly ILT", + link: "https://www.gimmepeers.com/", + caps: new TorznabCapabilities(), + manager: i, + client: wc, + logger: l, + p: ps, + configData: new ConfigurationDataBasicLogin()) + { + Encoding = Encoding.GetEncoding("iso-8859-1"); + Language = "en-us"; + + AddCategoryMapping(85, TorznabCatType.Movies3D); + AddCategoryMapping(23, TorznabCatType.TVAnime); + AddCategoryMapping(24, TorznabCatType.BooksEbook); + AddCategoryMapping(4, TorznabCatType.PCGames); + AddCategoryMapping(38, TorznabCatType.ConsolePS3); + AddCategoryMapping(38, TorznabCatType.ConsolePS4); + AddCategoryMapping(38, TorznabCatType.ConsolePSP); + AddCategoryMapping(43, TorznabCatType.ConsoleWii); + AddCategoryMapping(43, TorznabCatType.ConsoleWiiU); + AddCategoryMapping(12, TorznabCatType.ConsoleXBOX360DLC); + AddCategoryMapping(12, TorznabCatType.ConsoleXbox); + AddCategoryMapping(12, TorznabCatType.ConsoleXbox360); + AddCategoryMapping(12, TorznabCatType.ConsoleXboxOne); + AddCategoryMapping(6, TorznabCatType.Audio); + + AddCategoryMapping(7, TorznabCatType.TV); + AddCategoryMapping(40, TorznabCatType.TVSD); + AddCategoryMapping(8, TorznabCatType.TVHD); + + AddCategoryMapping(9, TorznabCatType.XXX); + AddCategoryMapping(11, TorznabCatType.XXXDVD); + AddCategoryMapping(10, TorznabCatType.XXXx264); + + AddCategoryMapping(80, TorznabCatType.MoviesBluRay); + AddCategoryMapping(20, TorznabCatType.MoviesDVD); + AddCategoryMapping(41, TorznabCatType.MoviesHD); + AddCategoryMapping(19, TorznabCatType.Movies); + } + + public async Task ApplyConfiguration(JToken configJson) + { + LoadValuesFromJson(configJson); + var pairs = new Dictionary { + { "username", configData.Username.Value }, + { "password", configData.Password.Value }, + { "returnto", "/" }, + { "login", "Log in!" } + }; + + var loginPage = await RequestStringWithCookies(SiteLink, string.Empty); + + var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, SiteLink); + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + { + CQ dom = result.Content; + var messageEl = dom["body > div"].First(); + var errorMessage = messageEl.Text().Trim(); + throw new ExceptionWithConfigData(errorMessage, configData); + }); + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task> PerformQuery(TorznabQuery query) + { + var releases = new List(); + var searchString = query.GetQueryString(); + var searchUrl = BrowseUrl; + var trackerCats = MapTorznabCapsToTrackers(query); + var queryCollection = new NameValueCollection(); + + // Tracker can only search OR return things in categories + if (!string.IsNullOrWhiteSpace(searchString)) + { + queryCollection.Add("search", searchString); + queryCollection.Add("cat", "0"); + } + else + { + foreach (var cat in MapTorznabCapsToTrackers(query)) + { + queryCollection.Add("c" + cat, "1"); + } + + queryCollection.Add("incldead", "0"); + } + + searchUrl += "?" + queryCollection.GetQueryString(); + + await ProcessPage(releases, searchUrl); + return releases; + } + + private async Task ProcessPage(List releases, string searchUrl) + { + var response = await RequestStringWithCookiesAndRetry(searchUrl, null, BrowseUrl); + var results = response.Content; + try + { + CQ dom = results; + + var rows = dom[".koptekst tr"]; + foreach (var row in rows.Skip(1)) + { + var release = new ReleaseInfo(); + + var link = row.Cq().Find("td:eq(1) a:eq(0)").First(); + release.Guid = new Uri(SiteLink + link.Attr("href")); + release.Comments = release.Guid; + release.Title = link.Text().Trim(); + release.Description = release.Title; + + // If we search an get no results, we still get a table just with no info. + if (string.IsNullOrWhiteSpace(release.Title)) + { + break; + } + + // Check if the release has been assigned a category + if (row.Cq().Find("td:eq(0) a").Length > 0) + { + var cat = row.Cq().Find("td:eq(0) a").First().Attr("href").Substring(15); + release.Category = MapTrackerCatToNewznab(cat); + } + + var qLink = row.Cq().Find("td:eq(2) a").First(); + release.Link = new Uri(SiteLink + qLink.Attr("href")); + + var added = row.Cq().Find("td:eq(7)").First().Text().Trim(); + var date = added.Substring(0, 10); + var time = added.Substring(12, 8); + var dateTime = date + time; + release.PublishDate = DateTime.ParseExact(dateTime, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime(); + + var sizeStr = row.Cq().Find("td:eq(8)").First().Text().Trim(); + release.Size = ReleaseInfo.GetBytes(sizeStr); + + release.Seeders = ParseUtil.CoerceInt(row.Cq().Find("td:eq(10)").First().Text().Trim()); + release.Peers = ParseUtil.CoerceInt(row.Cq().Find("td:eq(11)").First().Text().Trim()) + release.Seeders; + + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(results, ex); + } + } + } +} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 753d2c235..a52c2a4a0 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -228,7 +228,7 @@ - + @@ -761,4 +761,4 @@ - \ No newline at end of file +