From f39e23fbe8f44410021f26c9643cb37b30c997d9 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Aug 2015 16:06:07 -0600 Subject: [PATCH] Implemented BitHDTV categories --- src/Jackett/Indexers/BaseIndexer.cs | 12 ++++++++- src/Jackett/Indexers/BitHdtv.cs | 38 ++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index 1630a3aca..fdc256cc3 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -418,7 +418,7 @@ namespace Jackett.Indexers } } - protected List MapTorznabCapsToTrackers(TorznabQuery query) + protected List MapTorznabCapsToTrackers(TorznabQuery query, bool mapChildrenCatsToParent = false) { var result = new List(); foreach (var cat in query.Categories) @@ -429,6 +429,16 @@ namespace Jackett.Indexers { queryCats.AddRange(newznabCat.SubCategories.Select(c => c.ID)); } + + if (mapChildrenCatsToParent) + { + var parentNewznabCat = TorznabCatType.AllCats.FirstOrDefault(c => c.SubCategories.Contains(newznabCat)); + if (parentNewznabCat != null) + { + queryCats.Add(parentNewznabCat.ID); + } + } + foreach (var mapping in categoryMapping.Where(c => queryCats.Contains(c.NewzNabCategory))) { result.Add(mapping.TrackerCategory); diff --git a/src/Jackett/Indexers/BitHdtv.cs b/src/Jackett/Indexers/BitHdtv.cs index 5f50abcea..363c7b807 100644 --- a/src/Jackett/Indexers/BitHdtv.cs +++ b/src/Jackett/Indexers/BitHdtv.cs @@ -15,13 +15,14 @@ using System.Text; using System.Threading.Tasks; using System.Web; using Jackett.Models.IndexerConfig; +using System.Collections.Specialized; namespace Jackett.Indexers { public class BitHdtv : BaseIndexer, IIndexer { private string LoginUrl { get { return SiteLink + "takelogin.php"; } } - private string SearchUrl { get { return SiteLink + "torrents.php?cat=0&search="; } } + private string SearchUrl { get { return SiteLink + "torrents.php?"; } } private string DownloadUrl { get { return SiteLink + "download.php?/{0}/dl.torrent"; } } new ConfigurationDataBasicLogin configData @@ -41,6 +42,16 @@ namespace Jackett.Indexers p: ps, configData: new ConfigurationDataBasicLogin()) { + AddCategoryMapping(1, TorznabCatType.TVAnime); // Anime + AddCategoryMapping(2, TorznabCatType.MoviesBluRay); // Blu-ray + AddCategoryMapping(4, TorznabCatType.TVDocumentary); // Documentaries + AddCategoryMapping(6, TorznabCatType.AudioLossless); // HQ Audio + AddCategoryMapping(7, TorznabCatType.Movies); // Movies + AddCategoryMapping(8, TorznabCatType.AudioVideo); // Music Videos + AddCategoryMapping(5, TorznabCatType.TVSport); // Sports + AddCategoryMapping(10, TorznabCatType.TV); // TV + AddCategoryMapping(12, TorznabCatType.TV); // TV/Seasonpack + AddCategoryMapping(11, TorznabCatType.XXX); // XXX } public async Task ApplyConfiguration(JToken configJson) @@ -68,8 +79,19 @@ namespace Jackett.Indexers public async Task> PerformQuery(TorznabQuery query) { var releases = new List(); - var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(query.GetQueryString()); - var results = await RequestStringWithCookiesAndRetry(episodeSearchUrl); + var searchString = query.GetQueryString(); + var queryCollection = new NameValueCollection(); + + if (!string.IsNullOrWhiteSpace(searchString)) + { + queryCollection.Add("search", searchString); + } + + var searchUrl = SearchUrl + queryCollection.GetQueryString(); + + var trackerCats = MapTorznabCapsToTrackers(query, mapChildrenCatsToParent: true); + + var results = await RequestStringWithCookiesAndRetry(searchUrl); try { CQ dom = results.Content; @@ -87,10 +109,18 @@ namespace Jackett.Indexers release.MinimumSeedTime = 172800; release.Title = qLink.Attr("title"); release.Description = release.Title; - release.Guid = new Uri(SiteLink + qLink.Attr("href")); + release.Guid = new Uri(SiteLink + qLink.Attr("href").TrimStart('/')); release.Comments = release.Guid; release.Link = new Uri(string.Format(DownloadUrl, qLink.Attr("href").Split('=')[1])); + var catUrl = qRow.Children().ElementAt(1).FirstElementChild.Cq().Attr("href"); + var catNum = catUrl.Split(new char[] { '=', '&' })[1]; + release.Category = MapTrackerCatToNewznab(catNum); + + // This tracker cannot search multiple cats at a time, so search all cats then filter out results from different cats + if (trackerCats.Count > 0 && !trackerCats.Contains(catNum)) + continue; + var dateString = qRow.Children().ElementAt(5).Cq().Text().Trim(); var pubDate = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); release.PublishDate = DateTime.SpecifyKind(pubDate, DateTimeKind.Local);