From 268f5a8ae5fe326fea2273e1039f9fd30b59340b Mon Sep 17 00:00:00 2001 From: flightlevel Date: Sat, 20 Aug 2016 18:16:59 +1000 Subject: [PATCH] Demonoid: Fix Parsing (#451) Demonoid: Fix Parsing --- src/Jackett/Indexers/Demonoid.cs | 274 +++++++++++++++---------------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/src/Jackett/Indexers/Demonoid.cs b/src/Jackett/Indexers/Demonoid.cs index ead219231..07afe994d 100644 --- a/src/Jackett/Indexers/Demonoid.cs +++ b/src/Jackett/Indexers/Demonoid.cs @@ -1,141 +1,141 @@ -using CsQuery; -using Jackett.Models; -using Jackett.Models.IndexerConfig; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Web; - -namespace Jackett.Indexers -{ - public class Demonoid : BaseIndexer, IIndexer - { - private string LoginUrl { get { return SiteLink + "account_handler.php"; } } - private string SearchUrl { get { return SiteLink + "files/?category={0}&subcategory=All&quality=All&seeded=0&to=1&query={1}"; } } - - new ConfigurationDataBasicLogin configData - { - get { return (ConfigurationDataBasicLogin)base.configData; } - set { base.configData = value; } - } - - public Demonoid(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "Demonoid", - description: "Demonoid", - link: "http://www.demonoid.pw/", - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataBasicLogin()) - { - AddCategoryMapping(3, TorznabCatType.TV); +using CsQuery; +using Jackett.Models; +using Jackett.Models.IndexerConfig; +using Jackett.Services; +using Jackett.Utils; +using Jackett.Utils.Clients; +using Newtonsoft.Json.Linq; +using NLog; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace Jackett.Indexers +{ + public class Demonoid : BaseIndexer, IIndexer + { + private string LoginUrl { get { return SiteLink + "account_handler.php"; } } + private string SearchUrl { get { return SiteLink + "files/?category={0}&subcategory=All&quality=All&seeded=0&to=1&query={1}"; } } + + new ConfigurationDataBasicLogin configData + { + get { return (ConfigurationDataBasicLogin)base.configData; } + set { base.configData = value; } + } + + public Demonoid(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) + : base(name: "Demonoid", + description: "Demonoid", + link: "http://www.demonoid.pw/", + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), + manager: i, + client: wc, + logger: l, + p: ps, + configData: new ConfigurationDataBasicLogin()) + { + AddCategoryMapping(3, TorznabCatType.TV); AddCategoryMapping(3, TorznabCatType.TVSD); AddCategoryMapping(3, TorznabCatType.TVHD); - AddCategoryMapping(1, TorznabCatType.Movies); - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var pairs = new Dictionary { - { "nickname", configData.Username.Value }, - { "password", configData.Password.Value }, - { "returnpath", "/" }, - { "withq", "0" }, - { "Submit", "Submit" } - }; - - var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink); - await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("user_control_panel.php"), () => - { - CQ dom = result.Content; - var errorMessage = dom[".red"].ElementAt(1).Cq().Text().Trim(); - throw new ExceptionWithConfigData(errorMessage, configData); - }); - return IndexerConfigurationStatus.RequiresTesting; - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var trackerCats = MapTorznabCapsToTrackers(query); - var cat = (trackerCats.Count == 1 ? trackerCats.ElementAt(0) : "0"); + AddCategoryMapping(1, TorznabCatType.Movies); + } + + public async Task ApplyConfiguration(JToken configJson) + { + configData.LoadValuesFromJson(configJson); + var pairs = new Dictionary { + { "nickname", configData.Username.Value }, + { "password", configData.Password.Value }, + { "returnpath", "/" }, + { "withq", "0" }, + { "Submit", "Submit" } + }; + + var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink); + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("user_control_panel.php"), () => + { + CQ dom = result.Content; + string errorMessage = dom["form[id='bb_code_form']"].Parent().Find("font[class='red']").Text(); + throw new ExceptionWithConfigData(errorMessage, configData); + }); + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task> PerformQuery(TorznabQuery query) + { + var releases = new List(); + var trackerCats = MapTorznabCapsToTrackers(query); + var cat = (trackerCats.Count == 1 ? trackerCats.ElementAt(0) : "0"); var episodeSearchUrl = string.Format(SearchUrl, cat, HttpUtility.UrlEncode(query.GetQueryString())); - var results = await RequestStringWithCookiesAndRetry(episodeSearchUrl); - + var results = await RequestStringWithCookiesAndRetry(episodeSearchUrl); + - if (results.Content.Contains("No torrents found")) - { - return releases; - } - - try - { - CQ dom = results.Content; - var rows = dom[".ctable_content_no_pad > table > tbody > tr"].ToArray(); - DateTime lastDateTime = default(DateTime); - for (var i = 0; i < rows.Length; i++) - { - var rowA = rows[i]; - var rAlign = rowA.Attributes["align"]; - if (rAlign == "right" || rAlign == "center") - continue; - if (rAlign == "left") - { - // ex: "Monday, Jun 01, 2015", "Monday, Aug 03, 2015" - var dateStr = rowA.Cq().Text().Trim().Replace("Added on ", ""); - if (dateStr.ToLowerInvariant().Contains("today")) - lastDateTime = DateTime.Now; - else - lastDateTime = DateTime.SpecifyKind(DateTime.ParseExact(dateStr, "dddd, MMM dd, yyyy", CultureInfo.InvariantCulture), DateTimeKind.Utc).ToLocalTime(); - continue; - } - if (rowA.ChildElements.Count() < 2) - continue; - - var rowB = rows[++i]; - - var release = new ReleaseInfo(); - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - - release.PublishDate = lastDateTime; - - var qLink = rowA.ChildElements.ElementAt(1).FirstElementChild.Cq(); - release.Title = qLink.Text().Trim(); - release.Description = release.Title; - - release.Comments = new Uri(SiteLink + qLink.Attr("href")); - release.Guid = release.Comments; - - var qDownload = rowB.ChildElements.ElementAt(2).ChildElements.ElementAt(1).Cq(); - release.Link = new Uri(SiteLink + qDownload.Attr("href")); - - var sizeStr = rowB.ChildElements.ElementAt(3).Cq().Text(); - release.Size = ReleaseInfo.GetBytes(sizeStr); - - release.Seeders = ParseUtil.CoerceInt(rowB.ChildElements.ElementAt(6).Cq().Text()); - release.Peers = ParseUtil.CoerceInt(rowB.ChildElements.ElementAt(6).Cq().Text()) + release.Seeders; - - releases.Add(release); - } - - } - catch (Exception ex) - { - OnParseError(results.Content, ex); - } - return releases; - } - } -} + if (results.Content.Contains("No torrents found")) + { + return releases; + } + + try + { + CQ dom = results.Content; + var rows = dom[".ctable_content_no_pad > table > tbody > tr"].ToArray(); + DateTime lastDateTime = default(DateTime); + for (var i = 0; i < rows.Length; i++) + { + var rowA = rows[i]; + var rAlign = rowA.Attributes["align"]; + if (rAlign == "right" || rAlign == "center") + continue; + if (rAlign == "left") + { + // ex: "Monday, Jun 01, 2015", "Monday, Aug 03, 2015" + var dateStr = rowA.Cq().Text().Trim().Replace("Added on ", ""); + if (dateStr.ToLowerInvariant().Contains("today")) + lastDateTime = DateTime.Now; + else + lastDateTime = DateTime.SpecifyKind(DateTime.ParseExact(dateStr, "dddd, MMM dd, yyyy", CultureInfo.InvariantCulture), DateTimeKind.Utc).ToLocalTime(); + continue; + } + if (rowA.ChildElements.Count() < 2) + continue; + + var rowB = rows[++i]; + + var release = new ReleaseInfo(); + release.MinimumRatio = 1; + release.MinimumSeedTime = 172800; + + release.PublishDate = lastDateTime; + + var qLink = rowA.ChildElements.ElementAt(1).FirstElementChild.Cq(); + release.Title = qLink.Text().Trim(); + release.Description = release.Title; + + release.Comments = new Uri(SiteLink + qLink.Attr("href")); + release.Guid = release.Comments; + + var qDownload = rowB.ChildElements.ElementAt(2).ChildElements.ElementAt(0).Cq(); + release.Link = new Uri(SiteLink + qDownload.Attr("href")); + + var sizeStr = rowB.ChildElements.ElementAt(3).Cq().Text(); + release.Size = ReleaseInfo.GetBytes(sizeStr); + + release.Seeders = ParseUtil.CoerceInt(rowB.ChildElements.ElementAt(6).Cq().Text()); + release.Peers = ParseUtil.CoerceInt(rowB.ChildElements.ElementAt(6).Cq().Text()) + release.Seeders; + + releases.Add(release); + } + + } + catch (Exception ex) + { + OnParseError(results.Content, ex); + } + return releases; + } + } +}