From 235a2f4f4037d0711734daafd0bdd3a7d0f01b7c Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 25 Jul 2015 21:48:18 -0600 Subject: [PATCH] Implemented HD-Space --- README.md | 1 + src/Jackett/Content/logos/hdspace.png | Bin 0 -> 40443 bytes src/Jackett/Indexers/HDSpace.cs | 185 ++++++++++++++++++++++++++ src/Jackett/Jackett.csproj | 4 + 4 files changed, 190 insertions(+) create mode 100644 src/Jackett/Content/logos/hdspace.png create mode 100644 src/Jackett/Indexers/HDSpace.cs diff --git a/README.md b/README.md index 7b0d97a18..2de027969 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Download in the [Releases page](https://github.com/zone117x/Jackett/releases) * [BitMeTV](http://www.bitmetv.org/) * [FrenchTorrentDb](http://www.frenchtorrentdb.com/) * [Freshon](https://freshon.tv/) + * [HD-Space](https://hd-space.org/) * [HD-Torrents.org](https://hd-torrents.org/) * [IPTorrents](https://iptorrents.com/) * [MoreThan.tv](https://morethan.tv/) diff --git a/src/Jackett/Content/logos/hdspace.png b/src/Jackett/Content/logos/hdspace.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6896f42144bafdf868ac916460f8e853e00c26 GIT binary patch literal 40443 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%0AI;8Ox=qABET!{Oq-xRqF%`qGv}35`T)?Es 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 GetConfigurationForSetup() + { + var config = new ConfigurationDataBasicLogin(); + return Task.FromResult(config); + } + + public async Task ApplyConfiguration(JToken configJson) + { + var config = new ConfigurationDataBasicLogin(); + config.LoadValuesFromJson(configJson); + + var loginPage = await webclient.GetString(new WebRequest() + { + Url = LoginUrl, + Type = RequestType.GET + }); + + var pairs = new Dictionary { + { "uid", config.Username.Value }, + { "pwd", config.Password.Value } + }; + + // Send Post + var loginPost = await webclient.GetString(new WebRequest() + { + Url = LoginUrl, + PostData = pairs, + Referer = LoginUrl, + Type = RequestType.POST, + Cookies = loginPage.Cookies + }); + + if (loginPost.Status == System.Net.HttpStatusCode.OK) + { + var errorStr = "You have {0} remaining login attempts"; + var remainingAttemptSpan = new Regex(string.Format(errorStr, "(.*?)")).Match(loginPage.Content).Groups[1].ToString(); + var attempts = Regex.Replace(remainingAttemptSpan, "<.*?>", String.Empty); + var errorMessage = string.Format(errorStr, attempts); + throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); + } + + // Get result from redirect + var loginResult = await webclient.GetString(new WebRequest() + { + Url = SiteLink + loginPost.RedirectingTo, + Type = RequestType.GET, + Cookies = loginPost.Cookies + }); + + if (!loginResult.Content.Contains("logout.php")) + { + throw new ExceptionWithConfigData("Login failed", (ConfigurationData)config); + } + else + { + cookieHeader = loginPost.Cookies; + var configSaveData = new JObject(); + configSaveData["cookies"] = cookieHeader; + SaveConfig(configSaveData); + IsConfigured = true; + } + + } + + public void LoadFromSavedConfiguration(JToken jsonConfig) + { + cookieHeader = (string)jsonConfig["cookies"]; + IsConfigured = true; + } + + public async Task Download(Uri link) + { + var response = await webclient.GetBytes(new WebRequest() + { + Url = link.ToString(), + Cookies = cookieHeader + }); + return response.Content; + } + + public async Task PerformQuery(TorznabQuery query) + { + List releases = new List(); + + var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString(); + var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString)); + + var response = await webclient.GetString(new WebRequest() + { + Url = episodeSearchUrl, + Referer = SiteLink.ToString(), + Cookies = cookieHeader + }); + var results = response.Content; + + try + { + CQ dom = results; + var rows = dom["table.lista > tbody > tr"]; + foreach (var row in rows) + { + // this tracker has horrible markup, find the result rows by looking for the style tag before each one + var prev = row.PreviousElementSibling; + if (prev == null || prev.NodeName.ToLowerInvariant() != "style") continue; + + CQ qRow = row.Cq(); + var release = new ReleaseInfo(); + + release.MinimumRatio = 1; + release.MinimumSeedTime = 172800; + + var qLink = row.ChildElements.ElementAt(1).FirstElementChild.Cq(); + release.Title = qLink.Text().Trim(); + release.Comments = new Uri(SiteLink + qLink.Attr("href")); + release.Guid = release.Comments; + + var qDownload = row.ChildElements.ElementAt(3).FirstElementChild.Cq(); + release.Link = new Uri(SiteLink + qDownload.Attr("href")); + + //"July 11, 2015, 13:34:09", "Today at 20:04:23" + var dateStr = row.ChildElements.ElementAt(4).Cq().Text().Trim(); + if (dateStr.StartsWith("Today")) + release.PublishDate = DateTime.Today + TimeSpan.ParseExact(dateStr.Replace("Today at ", ""), "hh\\:mm\\:ss", CultureInfo.InvariantCulture); + else if (dateStr.StartsWith("Yesterday")) + release.PublishDate = DateTime.Today - TimeSpan.FromDays(1) + TimeSpan.ParseExact(dateStr.Replace("Yesterday at ", ""), "hh\\:mm\\:ss", CultureInfo.InvariantCulture); + else + release.PublishDate = DateTime.SpecifyKind(DateTime.ParseExact(dateStr, "MMMM dd, yyyy, HH:mm:ss", CultureInfo.InvariantCulture), DateTimeKind.Local); + + var sizeStr = row.ChildElements.ElementAt(5).Cq().Text(); + release.Size = ReleaseInfo.GetBytes(sizeStr); + + release.Seeders = ParseUtil.CoerceInt(row.ChildElements.ElementAt(7).Cq().Text()); + release.Peers = ParseUtil.CoerceInt(row.ChildElements.ElementAt(8).Cq().Text()) + release.Seeders; + + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(results, ex); + } + return releases.ToArray(); + } + } +} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 94e683c77..6c72b4ec5 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -158,6 +158,7 @@ + @@ -290,6 +291,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest