From 173e26c05457b04056f6b25723abd33e69fcd4c6 Mon Sep 17 00:00:00 2001 From: Azerelat Date: Sat, 9 Jan 2016 18:45:02 +0000 Subject: [PATCH] SCC queries not uri encoded #170 --- src/Jackett/Indexers/SceneAccess.cs | 329 ++++++++++++++-------------- 1 file changed, 165 insertions(+), 164 deletions(-) diff --git a/src/Jackett/Indexers/SceneAccess.cs b/src/Jackett/Indexers/SceneAccess.cs index 5bc822fc7..83076603d 100644 --- a/src/Jackett/Indexers/SceneAccess.cs +++ b/src/Jackett/Indexers/SceneAccess.cs @@ -1,164 +1,165 @@ -using CsQuery; -using Jackett.Models; -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.Net; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using Jackett.Models.IndexerConfig; - -namespace Jackett.Indexers -{ - class SceneAccess : BaseIndexer, IIndexer - { - private string LoginUrl { get { return SiteLink + "login"; } } - private string SearchUrl { get { return SiteLink + "all?search={0}&method=2"; } } - - new ConfigurationDataBasicLogin configData - { - get { return (ConfigurationDataBasicLogin)base.configData; } - set { base.configData = value; } - } - - public SceneAccess(IIndexerManagerService i, IWebClient c, Logger l, IProtectionService ps) - : base(name: "SceneAccess", - description: "Your gateway to the scene", - link: "https://sceneaccess.eu/", - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: c, - logger: l, - p: ps, - configData: new ConfigurationDataBasicLogin()) - { - - AddCategoryMapping(8, TorznabCatType.MoviesSD); - AddCategoryMapping(22, TorznabCatType.MoviesHD); - AddCategoryMapping(7, TorznabCatType.MoviesSD); - AddCategoryMapping(4, TorznabCatType.Movies); - - AddCategoryMapping(27, TorznabCatType.TVHD); - AddCategoryMapping(17, TorznabCatType.TVSD); - AddCategoryMapping(11, TorznabCatType.MoviesSD); - AddCategoryMapping(26, TorznabCatType.TV); - - AddCategoryMapping(3, TorznabCatType.PCGames); - AddCategoryMapping(5, TorznabCatType.ConsolePS3); - AddCategoryMapping(20, TorznabCatType.ConsolePSP); - AddCategoryMapping(28, TorznabCatType.TV); - AddCategoryMapping(23, TorznabCatType.Console); - AddCategoryMapping(29, TorznabCatType.Console); - - AddCategoryMapping(40, TorznabCatType.AudioLossless); - AddCategoryMapping(13, TorznabCatType.AudioMP3); - AddCategoryMapping(15, TorznabCatType.AudioVideo); - - AddCategoryMapping(1, TorznabCatType.PCISO); - AddCategoryMapping(2, TorznabCatType.PCISO); - AddCategoryMapping(14, TorznabCatType.PCISO); - AddCategoryMapping(21, TorznabCatType.Other); - - AddCategoryMapping(41, TorznabCatType.MoviesHD); - AddCategoryMapping(42, TorznabCatType.MoviesSD); - AddCategoryMapping(43, TorznabCatType.MoviesSD); - AddCategoryMapping(44, TorznabCatType.TVHD); - AddCategoryMapping(45, TorznabCatType.TVSD); - - AddCategoryMapping(12, TorznabCatType.XXXXviD); - AddCategoryMapping(35, TorznabCatType.XXXx264); - AddCategoryMapping(36, TorznabCatType.XXX); - - AddCategoryMapping(30, TorznabCatType.MoviesForeign); - AddCategoryMapping(31, TorznabCatType.MoviesForeign); - AddCategoryMapping(32, TorznabCatType.MoviesForeign); - AddCategoryMapping(33, TorznabCatType.TVFOREIGN); - AddCategoryMapping(34, TorznabCatType.TVFOREIGN); - - AddCategoryMapping(4, TorznabCatType.Movies); - AddCategoryMapping(37, TorznabCatType.XXX); - AddCategoryMapping(38, TorznabCatType.Audio); - - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - - var pairs = new Dictionary { - { "username", configData.Username.Value }, - { "password", configData.Password.Value }, - { "submit", "come on in" } - }; - - var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); - - var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, LoginUrl); - await ConfigureIfOK(result.Cookies + " " + loginPage.Cookies, result.Content != null && result.Content.Contains("nav_profile"), () => - { - CQ dom = result.Content; - var messageEl = dom["#login_box_desc"]; - var errorMessage = messageEl.Text().Trim(); - throw new ExceptionWithConfigData(errorMessage, configData); - }); - - return IndexerConfigurationStatus.RequiresTesting; - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var results = await RequestStringWithCookiesAndRetry(string.Format(SearchUrl, query.GetQueryString())); - - try - { - CQ dom = results.Content; - var rows = dom["#torrents-table > tbody > tr.tt_row"]; - foreach (var row in rows) - { - CQ qRow = row.Cq(); - var release = new ReleaseInfo(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 129600; - release.Title = qRow.Find(".ttr_name > a").Text(); - release.Description = release.Title; - release.Guid = new Uri(SiteLink + qRow.Find(".ttr_name > a").Attr("href")); - release.Comments = release.Guid; - release.Link = new Uri(SiteLink + qRow.Find(".td_dl > a").Attr("href")); - - var sizeStr = qRow.Find(".ttr_size").Contents()[0].NodeValue; - release.Size = ReleaseInfo.GetBytes(sizeStr); - - var timeStr = qRow.Find(".ttr_added").Text(); - DateTime time; - if (DateTime.TryParseExact(timeStr, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out time)) - { - release.PublishDate = time; - } - - release.Seeders = ParseUtil.CoerceInt(qRow.Find(".ttr_seeders").Text()); - release.Peers = ParseUtil.CoerceInt(qRow.Find(".ttr_leechers").Text()) + release.Seeders; - - var cat = qRow.Find(".ttr_type a").Attr("href").Replace("?cat=",string.Empty); - - release.Category = MapTrackerCatToNewznab(cat); - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results.Content, ex); - } - - return releases; - } - } -} +using CsQuery; +using Jackett.Models; +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.Net; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Jackett.Models.IndexerConfig; +using System.Web; + +namespace Jackett.Indexers +{ + class SceneAccess : BaseIndexer, IIndexer + { + private string LoginUrl { get { return SiteLink + "login"; } } + private string SearchUrl { get { return SiteLink + "all?search={0}&method=2"; } } + + new ConfigurationDataBasicLogin configData + { + get { return (ConfigurationDataBasicLogin)base.configData; } + set { base.configData = value; } + } + + public SceneAccess(IIndexerManagerService i, IWebClient c, Logger l, IProtectionService ps) + : base(name: "SceneAccess", + description: "Your gateway to the scene", + link: "https://sceneaccess.eu/", + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), + manager: i, + client: c, + logger: l, + p: ps, + configData: new ConfigurationDataBasicLogin()) + { + + AddCategoryMapping(8, TorznabCatType.MoviesSD); + AddCategoryMapping(22, TorznabCatType.MoviesHD); + AddCategoryMapping(7, TorznabCatType.MoviesSD); + AddCategoryMapping(4, TorznabCatType.Movies); + + AddCategoryMapping(27, TorznabCatType.TVHD); + AddCategoryMapping(17, TorznabCatType.TVSD); + AddCategoryMapping(11, TorznabCatType.MoviesSD); + AddCategoryMapping(26, TorznabCatType.TV); + + AddCategoryMapping(3, TorznabCatType.PCGames); + AddCategoryMapping(5, TorznabCatType.ConsolePS3); + AddCategoryMapping(20, TorznabCatType.ConsolePSP); + AddCategoryMapping(28, TorznabCatType.TV); + AddCategoryMapping(23, TorznabCatType.Console); + AddCategoryMapping(29, TorznabCatType.Console); + + AddCategoryMapping(40, TorznabCatType.AudioLossless); + AddCategoryMapping(13, TorznabCatType.AudioMP3); + AddCategoryMapping(15, TorznabCatType.AudioVideo); + + AddCategoryMapping(1, TorznabCatType.PCISO); + AddCategoryMapping(2, TorznabCatType.PCISO); + AddCategoryMapping(14, TorznabCatType.PCISO); + AddCategoryMapping(21, TorznabCatType.Other); + + AddCategoryMapping(41, TorznabCatType.MoviesHD); + AddCategoryMapping(42, TorznabCatType.MoviesSD); + AddCategoryMapping(43, TorznabCatType.MoviesSD); + AddCategoryMapping(44, TorznabCatType.TVHD); + AddCategoryMapping(45, TorznabCatType.TVSD); + + AddCategoryMapping(12, TorznabCatType.XXXXviD); + AddCategoryMapping(35, TorznabCatType.XXXx264); + AddCategoryMapping(36, TorznabCatType.XXX); + + AddCategoryMapping(30, TorznabCatType.MoviesForeign); + AddCategoryMapping(31, TorznabCatType.MoviesForeign); + AddCategoryMapping(32, TorznabCatType.MoviesForeign); + AddCategoryMapping(33, TorznabCatType.TVFOREIGN); + AddCategoryMapping(34, TorznabCatType.TVFOREIGN); + + AddCategoryMapping(4, TorznabCatType.Movies); + AddCategoryMapping(37, TorznabCatType.XXX); + AddCategoryMapping(38, TorznabCatType.Audio); + + } + + public async Task ApplyConfiguration(JToken configJson) + { + configData.LoadValuesFromJson(configJson); + + var pairs = new Dictionary { + { "username", configData.Username.Value }, + { "password", configData.Password.Value }, + { "submit", "come on in" } + }; + + var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); + + var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, LoginUrl); + await ConfigureIfOK(result.Cookies + " " + loginPage.Cookies, result.Content != null && result.Content.Contains("nav_profile"), () => + { + CQ dom = result.Content; + var messageEl = dom["#login_box_desc"]; + var errorMessage = messageEl.Text().Trim(); + throw new ExceptionWithConfigData(errorMessage, configData); + }); + + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task> PerformQuery(TorznabQuery query) + { + var releases = new List(); + var results = await RequestStringWithCookiesAndRetry(string.Format(SearchUrl, HttpUtility.UrlEncode(query.GetQueryString()))); + + try + { + CQ dom = results.Content; + var rows = dom["#torrents-table > tbody > tr.tt_row"]; + foreach (var row in rows) + { + CQ qRow = row.Cq(); + var release = new ReleaseInfo(); + + release.MinimumRatio = 1; + release.MinimumSeedTime = 129600; + release.Title = qRow.Find(".ttr_name > a").Text(); + release.Description = release.Title; + release.Guid = new Uri(SiteLink + qRow.Find(".ttr_name > a").Attr("href")); + release.Comments = release.Guid; + release.Link = new Uri(SiteLink + qRow.Find(".td_dl > a").Attr("href")); + + var sizeStr = qRow.Find(".ttr_size").Contents()[0].NodeValue; + release.Size = ReleaseInfo.GetBytes(sizeStr); + + var timeStr = qRow.Find(".ttr_added").Text(); + DateTime time; + if (DateTime.TryParseExact(timeStr, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out time)) + { + release.PublishDate = time; + } + + release.Seeders = ParseUtil.CoerceInt(qRow.Find(".ttr_seeders").Text()); + release.Peers = ParseUtil.CoerceInt(qRow.Find(".ttr_leechers").Text()) + release.Seeders; + + var cat = qRow.Find(".ttr_type a").Attr("href").Replace("?cat=",string.Empty); + + release.Category = MapTrackerCatToNewznab(cat); + + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(results.Content, ex); + } + + return releases; + } + } +}