From 8562f19a30c51c68783bbb080353e7ba05b8765e Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Sun, 24 Oct 2021 09:34:21 +1300 Subject: [PATCH] bit-titan: C# -> yaml --- src/Jackett.Common/Definitions/bit-titan.yml | 183 +++++++++++++++ src/Jackett.Common/Indexers/BitTitan.cs | 234 ------------------- 2 files changed, 183 insertions(+), 234 deletions(-) create mode 100644 src/Jackett.Common/Definitions/bit-titan.yml delete mode 100644 src/Jackett.Common/Indexers/BitTitan.cs diff --git a/src/Jackett.Common/Definitions/bit-titan.yml b/src/Jackett.Common/Definitions/bit-titan.yml new file mode 100644 index 000000000..66f00b79c --- /dev/null +++ b/src/Jackett.Common/Definitions/bit-titan.yml @@ -0,0 +1,183 @@ +--- +id: bit-titan +name: BiT-TiTAN +description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL" +language: de-DE +type: private +encoding: UTF-8 +links: + - https://bit-titan.net/ + +caps: + categorymappings: + - {id: 1010, cat: Movies/UHD, desc: "Movies 2160p"} + - {id: 1020, cat: Movies/HD, desc: "Movies 1080p"} + - {id: 1030, cat: Movies/HD, desc: "Movies 720p"} + - {id: 1040, cat: Movies/HD, desc: "Movies x264"} + - {id: 1050, cat: Movies/HD, desc: "Movies x265"} + - {id: 1060, cat: Movies/SD, desc: "Movies XviD"} + - {id: 1070, cat: Movies/3D, desc: "Movies 3D"} + - {id: 1080, cat: Movies/DVD, desc: "Movies DVD"} + - {id: 1090, cat: Movies/BluRay, desc: "Movies BluRay"} + - {id: 1100, cat: Movies/DVD, desc: "Movies HD2DVD"} + - {id: 1110, cat: Movies/Foreign, desc: "Movies International"} + - {id: 1120, cat: Movies/HD, desc: "Movies HD Packs"} + - {id: 1130, cat: Movies/SD, desc: "Movies SD Packs"} + - {id: 2010, cat: TV/UHD, desc: "TV 2160p"} + - {id: 2020, cat: TV/HD, desc: "TV 1080p"} + - {id: 2030, cat: TV/HD, desc: "TV 720p"} + - {id: 2040, cat: TV/HD, desc: "TV x264"} + - {id: 2050, cat: TV/HD, desc: "TV x265"} + - {id: 2060, cat: TV/SD, desc: "TV XviD"} + - {id: 2070, cat: TV/HD, desc: "TV HD Packs"} + - {id: 2080, cat: TV/SD, desc: "TV SD Packs"} + - {id: 2090, cat: TV/Foreign, desc: "TV International"} + - {id: 3010, cat: TV/Documentary, desc: "Docu 2160p"} + - {id: 3020, cat: TV/Documentary, desc: "Docu 1080p"} + - {id: 3030, cat: TV/Documentary, desc: "Docu 720p"} + - {id: 3040, cat: TV/Documentary, desc: "Docu x264"} + - {id: 3050, cat: TV/Documentary, desc: "Docu x265"} + - {id: 3060, cat: TV/Documentary, desc: "Docu XviD"} + - {id: 3070, cat: TV/Documentary, desc: "Docu HD Packs"} + - {id: 3080, cat: TV/Documentary, desc: "Docu SD Packs"} + - {id: 3090, cat: TV/Documentary, desc: "Docu International"} + - {id: 4010, cat: TV/Sport, desc: "Sport 2160p"} + - {id: 4020, cat: TV/Sport, desc: "Sport 1080p"} + - {id: 4030, cat: TV/Sport, desc: "Sport 720p"} + - {id: 4040, cat: TV/Sport, desc: "Sport SD Sport"} + - {id: 4050, cat: TV/Sport, desc: "Sport HD Packs"} + - {id: 4060, cat: TV/Sport, desc: "Sport SD Packs"} + - {id: 5010, cat: XXX, desc: "XXX 2160p"} + - {id: 5020, cat: XXX, desc: "XXX 1080p"} + - {id: 5030, cat: XXX, desc: "XXX 720p"} + - {id: 5040, cat: XXX, desc: "XXX x264"} + - {id: 5050, cat: XXX, desc: "XXX x265"} + - {id: 5060, cat: XXX, desc: "XXX XviD"} + - {id: 5070, cat: XXX, desc: "XXX HD Packs"} + - {id: 5080, cat: XXX, desc: "XXX SD Packs"} + - {id: 5090, cat: XXX, desc: "XXX Sonstiges"} + - {id: 6010, cat: PC/Games, desc: "Games Windows"} + - {id: 6020, cat: Console, desc: "Games Linux"} + - {id: 6030, cat: PC/Mac, desc: "Games MacOS"} + - {id: 6040, cat: PC/Mobile-Android, desc: "Games Android"} + - {id: 6050, cat: Console/XBox, desc: "Games Xbox"} + - {id: 6060, cat: Console/PSP, desc: "Games PlayStation"} + - {id: 6070, cat: Console/NDS, desc: "Games Nintendo"} + - {id: 6080, cat: Console, desc: "Games Sonstige"} + - {id: 7010, cat: PC/0day, desc: "Software Windows"} + - {id: 7020, cat: PC, desc: "Software Linux"} + - {id: 7030, cat: PC/Mac, desc: "Software MacOS"} + - {id: 7040, cat: PC/Mobile-Android, desc: "Software Android"} + - {id: 8010, cat: Audio/MP3, desc: "Music MP3-Album"} + - {id: 8020, cat: Audio/MP3, desc: "Music MP3-Charts"} + - {id: 8030, cat: Audio/MP3, desc: "Music MP3-Sampler"} + - {id: 8040, cat: Audio/MP3, desc: "Music MP3-Single"} + - {id: 8050, cat: Audio/Lossless, desc: "Music FLAC-Album"} + - {id: 8060, cat: Audio/Lossless, desc: "Music FLAC-Charts"} + - {id: 8070, cat: Audio/Lossless, desc: "Music FLAC-Sampler"} + - {id: 8080, cat: Audio/Lossless, desc: "Music FLAC-Single"} + - {id: 8090, cat: Audio/Video, desc: "Music Video"} + - {id: 9010, cat: Audio/Audiobook, desc: "Books A-Book"} + - {id: 9020, cat: Books/EBook, desc: "Books E-Book"} + - {id: 9030, cat: Books, desc: "Books E-Paper"} + - {id: 9040, cat: Books, desc: "Books E-Learning"} + - {id: 9060, cat: TV/Anime, desc: "Anime HD"} + - {id: 9070, cat: TV/Anime, desc: "Anime SD"} + - {id: 9080, cat: TV/Anime, desc: "Anime Pack"} + - {id: 9999, cat: Other, desc: "unsort"} + + modes: + search: [q] + tv-search: [q, season, ep] + movie-search: [q] + music-search: [q] + book-search: [q] + +settings: + - name: apikey + type: text + label: APIKey + - name: info_key + type: info + label: About your API key + default: "Find or Generate a new key here." + - name: freeleech + type: checkbox + label: Search freeleech only + default: false + - name: sort + type: select + label: Sort requested from site + default: 1 + options: + 1: created + 2: seeders + 5: size + 9: title + - name: type + type: select + label: Order requested from site + default: DESC + options: + DESC: desc + ASC: asc + +search: + paths: + - path: api.php + response: + type: json + + inputs: + apiKey: "{{ .Config.apikey }}" + categories: "{{ if .Categories }}{{ join .Categories \",\" }}{{ else }}0{{ end }}" + search: "{{ .Keywords }}" + # searchIn: 0 all, 1 active, 2 dead, 3 highlights, 4 own uploads, 5 uploads bots, 6 onlyupload, 7 multiplier, 8 %download, 9 freeleech + searchIn: "{{ if .Config.freeleech }}9{{ else }}0{{ end }}" + # 1 25, 2 50, 3 75, 4 100 + limit: 2 + downloadLink: 1 + # 1 = Sat, 28 Nov 2020 23:29:38 +0100 (DEFAULT VALUE) , 2 = 1606606178 (UNIX TIMESTAMP) , 3 = 28.11.2020 23:29.38 (German Timestamp) , 4 = 2020-11-28 23:29:38 (Default Datetime) + timeFormat: 2 + orderBy: "{{ .Config.sort }}" + order: "{{ .Config.type }}" + + rows: + selector: results + count: + selector: filesFound + + fields: + id: + selector: id + category: + selector: category + title: + selector: name + details: + text: "details.php?id={{ .Result.id }}" + download: + selector: download + poster: + selector: poster + seeders: + selector: seeds + leechers: + selector: leechers + grabs: + selector: snatchers + date: + # unix + selector: added + size: + selector: size + downloadvolumefactor: + selector: downloadFactor + uploadvolumefactor: + selector: uploadFactor + minimumratio: + text: 1.0 + minimumseedtime: + # 2 day (as seconds = 2 x 24 x 60 x 60) + text: 172800 +# json engine v.2.011.021 diff --git a/src/Jackett.Common/Indexers/BitTitan.cs b/src/Jackett.Common/Indexers/BitTitan.cs deleted file mode 100644 index 7b6cd4ea7..000000000 --- a/src/Jackett.Common/Indexers/BitTitan.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Jackett.Common.Models; -using Jackett.Common.Models.IndexerConfig; -using Jackett.Common.Services.Interfaces; -using Jackett.Common.Utils; -using Jackett.Common.Utils.Clients; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using NLog; -using static Jackett.Common.Models.IndexerConfig.ConfigurationData; - -namespace Jackett.Common.Indexers -{ - [ExcludeFromCodeCoverage] - public class BitTitan : BaseWebIndexer - { - private string APIBASE => SiteLink + "api.php"; - private string DETAILS => SiteLink + "details.php"; - - private new ConfigurationDataAPIKey configData => (ConfigurationDataAPIKey)base.configData; - public BitTitan(IIndexerConfigurationService configService, WebClient wc, Logger l, - IProtectionService ps, ICacheService cs) - : base(id: "bit-titan", - name: "BiT-TiTAN", - description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL", - link: "https://bit-titan.net/", - caps: new TorznabCapabilities - { - TvSearchParams = new List - { - TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep - }, - MovieSearchParams = new List - { - MovieSearchParam.Q - }, - MusicSearchParams = new List - { - MusicSearchParam.Q - }, - BookSearchParams = new List - { - BookSearchParam.Q - } - }, - configService: configService, - client: wc, - logger: l, - p: ps, - cacheService: cs, - configData: new ConfigurationDataAPIKey()) - { - Encoding = Encoding.UTF8; - Language = "de-DE"; - Type = "private"; - - configData.AddDynamic("keyInfo", new DisplayInfoConfigurationItem(String.Empty, "Find or Generate a new key here.")); - configData.AddDynamic("freeleech", new BoolConfigurationItem("Search freeleech only") { Value = false }); - - // Configure the category mappings - AddCategoryMapping(1010, TorznabCatType.MoviesUHD, "Movies 2160p"); - AddCategoryMapping(1020, TorznabCatType.MoviesHD, "Movies 1080p"); - AddCategoryMapping(1030, TorznabCatType.MoviesHD, "Movies 720p"); - AddCategoryMapping(1040, TorznabCatType.MoviesHD, "Movies x264"); - AddCategoryMapping(1050, TorznabCatType.MoviesHD, "Movies x265"); - AddCategoryMapping(1060, TorznabCatType.MoviesSD, "Movies XviD"); - AddCategoryMapping(1070, TorznabCatType.Movies3D, "Movies 3D"); - AddCategoryMapping(1080, TorznabCatType.MoviesDVD, "Movies DVD"); - AddCategoryMapping(1090, TorznabCatType.MoviesBluRay, "Movies BluRay"); - AddCategoryMapping(1100, TorznabCatType.MoviesDVD, "Movies HD2DVD"); - AddCategoryMapping(1110, TorznabCatType.MoviesForeign, "Movies International"); - AddCategoryMapping(1120, TorznabCatType.MoviesHD, "Movies HD Packs"); - AddCategoryMapping(1130, TorznabCatType.MoviesSD, "Movies SD Packs"); - AddCategoryMapping(2010, TorznabCatType.TVUHD, "TV 2160p"); - AddCategoryMapping(2020, TorznabCatType.TVHD, "TV 1080p"); - AddCategoryMapping(2030, TorznabCatType.TVHD, "TV 720p"); - AddCategoryMapping(2040, TorznabCatType.TVHD, "TV x264"); - AddCategoryMapping(2050, TorznabCatType.TVHD, "TV x265"); - AddCategoryMapping(2060, TorznabCatType.TVSD, "TV XviD"); - AddCategoryMapping(2070, TorznabCatType.TVHD, "TV HD Packs"); - AddCategoryMapping(2080, TorznabCatType.TVSD, "TV SD Packs"); - AddCategoryMapping(2090, TorznabCatType.TVForeign, "TV International"); - AddCategoryMapping(3010, TorznabCatType.TVDocumentary, "Docu 2160p"); - AddCategoryMapping(3020, TorznabCatType.TVDocumentary, "Docu 1080p"); - AddCategoryMapping(3030, TorznabCatType.TVDocumentary, "Docu 720p"); - AddCategoryMapping(3040, TorznabCatType.TVDocumentary, "Docu x264"); - AddCategoryMapping(3050, TorznabCatType.TVDocumentary, "Docu x265"); - AddCategoryMapping(3060, TorznabCatType.TVDocumentary, "Docu XviD"); - AddCategoryMapping(3070, TorznabCatType.TVDocumentary, "Docu HD Packs"); - AddCategoryMapping(3080, TorznabCatType.TVDocumentary, "Docu SD Packs"); - AddCategoryMapping(3090, TorznabCatType.TVDocumentary, "Docu International"); - AddCategoryMapping(4010, TorznabCatType.TVSport, "Sport 2160p"); - AddCategoryMapping(4020, TorznabCatType.TVSport, "Sport 1080p"); - AddCategoryMapping(4030, TorznabCatType.TVSport, "Sport 720p"); - AddCategoryMapping(4040, TorznabCatType.TVSport, "Sport SD Sport"); - AddCategoryMapping(4050, TorznabCatType.TVSport, "Sport HD Packs"); - AddCategoryMapping(4060, TorznabCatType.TVSport, "Sport SD Packs"); - AddCategoryMapping(5010, TorznabCatType.XXX, "XXX 2160p"); - AddCategoryMapping(5020, TorznabCatType.XXX, "XXX 1080p"); - AddCategoryMapping(5030, TorznabCatType.XXX, "XXX 720p"); - AddCategoryMapping(5040, TorznabCatType.XXX, "XXX x264"); - AddCategoryMapping(5050, TorznabCatType.XXX, "XXX x265"); - AddCategoryMapping(5060, TorznabCatType.XXX, "XXX XviD"); - AddCategoryMapping(5070, TorznabCatType.XXX, "XXX HD Packs"); - AddCategoryMapping(5080, TorznabCatType.XXX, "XXX SD Packs"); - AddCategoryMapping(5090, TorznabCatType.XXX, "XXX Sonstiges"); - AddCategoryMapping(6010, TorznabCatType.PCGames, "Games Windows"); - AddCategoryMapping(6020, TorznabCatType.Console, "Games Linux"); - AddCategoryMapping(6030, TorznabCatType.PCMac, "Games MacOS"); - AddCategoryMapping(6040, TorznabCatType.PCMobileAndroid, "Games Android"); - AddCategoryMapping(6050, TorznabCatType.ConsoleXBox, "Games Xbox"); - AddCategoryMapping(6060, TorznabCatType.ConsolePSP, "Games PlayStation"); - AddCategoryMapping(6070, TorznabCatType.ConsoleNDS, "Games Nintendo"); - AddCategoryMapping(6080, TorznabCatType.Console, "Games Sonstige"); - AddCategoryMapping(7010, TorznabCatType.PC0day, "Software Windows"); - AddCategoryMapping(7020, TorznabCatType.PC, "Software Linux"); - AddCategoryMapping(7030, TorznabCatType.PCMac, "Software MacOS"); - AddCategoryMapping(7040, TorznabCatType.PCMobileAndroid, "Software Android"); - AddCategoryMapping(8010, TorznabCatType.AudioMP3, "Music MP3-Album"); - AddCategoryMapping(8020, TorznabCatType.AudioMP3, "Music MP3-Charts"); - AddCategoryMapping(8030, TorznabCatType.AudioMP3, "Music MP3-Sampler"); - AddCategoryMapping(8040, TorznabCatType.AudioMP3, "Music MP3-Single"); - AddCategoryMapping(8050, TorznabCatType.AudioLossless, "Music FLAC-Album"); - AddCategoryMapping(8060, TorznabCatType.AudioLossless, "Music FLAC-Charts"); - AddCategoryMapping(8070, TorznabCatType.AudioLossless, "Music FLAC-Sampler"); - AddCategoryMapping(8080, TorznabCatType.AudioLossless, "Music FLAC-Single"); - AddCategoryMapping(8090, TorznabCatType.AudioVideo, "Music Video"); - AddCategoryMapping(9010, TorznabCatType.AudioAudiobook, "Books A-Book"); - AddCategoryMapping(9020, TorznabCatType.BooksEBook, "Books E-Book"); - AddCategoryMapping(9030, TorznabCatType.Books, "Books E-Paper"); - AddCategoryMapping(9040, TorznabCatType.Books, "Books E-Learning"); - AddCategoryMapping(9060, TorznabCatType.TVAnime, "Anime HD"); - AddCategoryMapping(9070, TorznabCatType.TVAnime, "Anime SD"); - AddCategoryMapping(9080, TorznabCatType.TVAnime, "Anime Pack"); - AddCategoryMapping(9999, TorznabCatType.Other, "unsort"); - } - - - public override async Task ApplyConfiguration(JToken configJson) - { - LoadValuesFromJson(configJson); - - IsConfigured = false; - try - { - var results = await PerformQuery(new TorznabQuery()); - if (results.Count() == 0) - throw new Exception("Testing returned no results!"); - IsConfigured = true; - SaveConfig(); - } - catch (Exception e) - { - throw new ExceptionWithConfigData(e.Message, configData); - } - - return IndexerConfigurationStatus.Completed; - } - - protected override async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - - var apiKey = configData.Key.Value; - var searchUrl = $"{APIBASE}?apiKey={apiKey}"; - - var cats = MapTorznabCapsToTrackers(query); - if (cats.Count > 0) - searchUrl += "&categories=" + string.Join(",", cats); - - searchUrl += "&search=" + query.SanitizedSearchTerm; - - searchUrl += "&downloadLink=1"; - - searchUrl += "&limit=2"; - - if (((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value) - searchUrl += "&searchIn=9"; - - var results = await RequestWithCookiesAndRetryAsync(searchUrl); - - try - { - var rows = (JArray)((JObject)JsonConvert.DeserializeObject(results.ContentString))["results"]; - foreach (var row in rows) - { - var title = row["name"].ToString(); - if (!query.MatchQueryStringAND(title)) - continue; - - var torrentId = row["id"].ToString(); - var details = new Uri(DETAILS + "?id=" + torrentId); - var link = new Uri(row["download"].ToString()); - var publishDate = DateTime.Parse(row["added"].ToString()); - var seeders = (int)row["seeds"]; - var cat = MapTrackerCatToNewznab(row["category"].ToString()); - - var release = new ReleaseInfo - { - Title = title, - Details = details, - Guid = details, - Link = link, - PublishDate = publishDate, - Category = cat, - Size = (long)row["size"], - Grabs = (int)row["snatchers"], - Seeders = seeders, - Peers = seeders + (int)row["leechers"], - Imdb = null, - UploadVolumeFactor = (int)row["uploadFactor"], - DownloadVolumeFactor = (int)row["downloadFactor"], - MinimumRatio = 1, - MinimumSeedTime = 172800 // 2 days - }; - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results.ContentString, ex); - } - - return releases; - } - } -}