diff --git a/src/Jackett.Common/Definitions/hdonly.yml b/src/Jackett.Common/Definitions/hdonly.yml new file mode 100644 index 000000000..0d458aff3 --- /dev/null +++ b/src/Jackett.Common/Definitions/hdonly.yml @@ -0,0 +1,329 @@ +--- +id: hdonly +name: HD-Only +description: "HD-Only (HD-O) is a FRENCH Private Torrent Tracker for HD MOVIES / TV" +language: fr-fr +type: private +encoding: UTF-8 +links: + - https://hd-only.org/ + +caps: + categorymappings: + - {id: 1, cat: Movies, desc: "Film"} + - {id: 3, cat: TV/Anime, desc: "Dessin animé"} + - {id: 4, cat: Movies, desc: "Concert"} + - {id: 5, cat: TV, desc: "Série"} + - {id: 6, cat: TV/Anime, desc: "Série anim"} + - {id: 7, cat: Movies/Other, desc: "Film d'animation"} + - {id: 7, cat: Audio/Video, desc: "Concert"} + - {id: 11, cat: TV/Documentary, desc: "Documentaire"} + - {id: 13, cat: Movies/Other, desc: "Court-métrage"} + - {id: 14, cat: Movies/Other, desc: "Clip"} + - {id: 15, cat: Movies/Other, desc: "Démonstration"} + - {id: 16, cat: Movies/Other, desc: "Bonus de BD"} + - {id: 21, cat: Other, desc: "Autre"} + + modes: + search: [q] + tv-search: [q] + movie-search: [q] + +settings: + - name: username + type: text + label: Username + - name: password + type: password + label: Password + - name: freeleech + type: checkbox + label: Search freeleech only + default: false + - name: multilang + type: checkbox + label: Replace MULTI by another language in release name + default: false + - name: multilanguage + type: select + label: Replace MULTI by this language + default: FRENCH + options: + FRENCH: "FRENCH" + MULTI.FRENCH: "MULTI.FRENCH" + ENGLISH: "ENGLISH" + MULTI.ENGLISH: "MULTI.ENGLISH" + VOSTFR: "VOSTFR" + MULTI.VOSTFR: "MULTI.VOSTFR" + - name: vostfr + type: checkbox + label: Replace VOSTFR with ENGLISH + default: false + - name: sort + type: select + label: Sort requested from site + default: "time" + options: + "time": "created" + "seeders": "seeders" + "size": "size" + - name: type + type: select + label: Order requested from site + default: "desc" + options: + "desc": "desc" + "asc": "asc" + +login: + path: login.php + method: post + inputs: + username: "{{ .Config.username }}" + password: "{{ .Config.password }}" + keeplogged: 1 + error: + - selector: form#loginform > span.warning + test: + path: torrents.php + selector: a[href^="logout.php?auth="] + +ratio: + path: torrents.php + selector: li#stats_ratio > span + +search: + # https://hd-only.org/torrents.php?groupname=blood&freetorrent=1&order_by=time&order_way=desc&action=advanced&searchsubmit=1 + path: torrents.php + inputs: + # does not support categories, uses releasetype for single filter so we canot do multi releasetype filtering either. + # $raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}" + groupname: "{{ .Keywords }}" + order_by: "{{ .Config.sort }}" + order_way: "{{ .Config.type }}" + action: advanced + searchsubmit: 1 + # 1 freeleech, 2 neutral, 3 both, 0 normal + freetorrent: "{{ if .Config.freeleech }}1{{ else }}{{ end }}" + # site does not support imdbid search or display imdb links in results + + rows: + selector: table#torrent_table > tbody > tr.torrent + + fields: + download: + selector: a[href^="torrents.php?action=download&"] + attribute: href + title_phase1: + selector: div.group_info + remove: span:nth-child(1), div.tags + filters: + - name: replace + args: ["\n", ""] + - name: re_replace + args: ["^(.+) (.+)", "$2-$1"] + - name: replace + args: [" ", " "] + - name: replace + args: ["Blu-Ray Original", "Complete.BluRay"] + - name: replace + args: ["Blu-Ray Remux", "Remux"] + - name: replace + args: ["Blu-Ray Rip", "BluRay.Rip"] + - name: replace + args: ["mHD", "mHD.BluRay.Rip"] + - name: replace + args: ["/ DC", "/ Directors.Cut"] + - name: replace + args: ["/ VL", "/ Extended"] + - name: replace + args: ["/ RM", "/ Remastered"] + - name: replace + args: ["/ UC", "/ Uncut"] + - name: replace + args: ["/ ES", "/ Special.Edition"] + - name: replace + args: [" / Cust_sub", ""] + - name: replace + args: [" / Cust", ""] + - name: replace + args: ["/ UN", "/ Unrated"] + - name: replace + args: [" / Crit", ""] + - name: replace + args: [" / WAC", ""] + - name: replace + args: [" / MoC", ""] + - name: replace + args: [" / BFI", ""] + - name: replace + args: [" / MUET", ""] + - name: replace + args: ["/ Exc NF", "/ NF"] + - name: replace + args: ["/ Exc AMZ", "/ AMZ"] + - name: replace + args: ["/ Exc YOU", "/ YT"] + - name: replace + args: [" / Freeleech!", ""] + - name: replace + args: [" / Complété!", ""] + - name: replace + args: [" / ", "."] + - name: trim + - name: replace + args: [".VFF.VFQ.stFR.MULTI", ".MULTI.VFF.VFQ"] + - name: replace + args: [".VFF.VFQ.VO.stFR.MULTI", ".MULTI.VFF.VFQ"] + - name: replace + args: [".VFF.VFQ.VO.stFR", ".MULTI.VFF.VFQ"] + - name: replace + args: [".VFQ.VO.stFR", ".MULTI.VFQ"] + - name: replace + args: [".VO.VFI.stFR", ".MULTI"] + - name: replace + args: [".VO.VF?.stFR", ".MULTI"] + - name: replace + args: [".VFF.VO.stFR", ".MULTI.VFF"] + - name: replace + args: [".VOF.stFR", ".FRENCH"] + - name: replace + args: [".VFQ.stFR", ".FRENCH"] + - name: replace + args: [".VFF.stFR.MULTI", ".MULTI.VFF"] + - name: replace + args: [".VFF.stFR", ".FRENCH"] + - name: replace + args: [".VFI.MULTI", ".MULTI"] + - name: replace + args: [".VO.stFR", ".VOSTFR"] + - name: replace + args: [".VFQ.VO", ".MULTI.VFQ"] + - name: replace + args: [".VFF.VO", ".MULTI.VFF"] + - name: replace + args: [".VO.VF?.stFR", ".MULTI"] + - name: replace + args: [".VFI.stFR", ".FRENCH"] + - name: replace + args: [".VOF.MULTI", ".MULTI.FRENCH"] + - name: replace + args: [".VOF", ".FRENCH"] + - name: replace + args: [".VFQ.MULTI", ".MULTI.VFQ"] + - name: replace + args: ["[Film]", ""] + - name: replace + args: ["[Dessin animé]", ""] + - name: replace + args: ["[Film d'animation]", ""] + - name: replace + args: ["[Concert]", ""] + - name: replace + args: ["[Documentaire]", ""] + - name: replace + args: ["[Court-métrage]", ""] + - name: replace + args: ["[Clip]", ""] + - name: replace + args: ["[Démonstration]", ""] + - name: replace + args: ["[Bonus de BD]", ""] + - name: replace + args: ["[Autre]", ""] + - name: replace + args: ["[Série Animée]", ""] + - name: replace + args: ["[Série]", ""] + - name: re_replace + args: ["\\[(\\d{4})\\]", "$1"] + title_multilang: + text: "{{ .Result.title_phase1 }}" + filters: + - name: re_replace + args: ["(?i)([\\s|\\.|-]*multi[\\s|\\.|-]*)", ".{{ .Config.multilanguage }}."] + title_phase2: + text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase1 }}{{ end }}" + title_vostfr: + text: "{{ .Result.title_phase2 }}" + filters: + - name: re_replace + args: ["(?i)([\\s|\\.|-]*vostfr[\\s|\\.|-]*)", ".ENGLISH."] + - name: re_replace + args: ["(?i)([\\s|\\.|-]*subfrench[\\s|\\.|-]*)", ".ENGLISH."] + title: + text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}" + description: + selector: div.group_info + banner: + selector: div.group_image img + attribute: src + optional: true + details: + selector: a[href^="torrents.php?id="] + attribute: href + comments: + selector: a[href^="torrents.php?id="] + attribute: href + files: + selector: td:nth-child(3) + date: + selector: td:nth-child(4) + filters: + - name: replace + args: ["heures", "hours"] + - name: replace + args: ["heure", "hour"] + - name: replace + args: ["jours", "days"] + - name: replace + args: ["jour", "day"] + - name: replace + args: ["semaines", "weeks"] + - name: replace + args: ["semaine", "week"] + - name: replace + args: ["mois", "months"] + - name: replace + args: ["ans", "years"] + - name: replace + args: ["an", "year"] + - name: append + args: " ago" + size: + selector: td:nth-child(5) + grabs: + selector: td:nth-child(6) + seeders: + selector: td:nth-child(7) + leechers: + selector: td:nth-child(8) + downloadvolumefactor: + case: + "div.group_info:contains(\"/ Freeleech!\")": 0 + "*": 1 + uploadvolumefactor: + text: 1 + category: + selector: div.group_info + remove: span, div, a + case: + ":contains(\"[Film]\")": 1 + ":contains(\"[Dessin animé]\")": 3 + ":contains(\"[Série]\")": 5 + ":contains(\"[Série Animée]\")": 6 + ":contains(\"[Film d'animation]\")": 7 + ":contains(\"[Concert]\")": 9 + ":contains(\"[Documentaire]\")": 11 + ":contains(\"[Court-métrage]\")": 13 + ":contains(\"[Clip]\")": 14 + ":contains(\"[Démonstration]\")": 15 + ":contains(\"[Bonus de BD]\")": 16 + ":contains(\"[Autre]\")": 21 + "*": 5 + minimumratio: + text: 1.0 + minimumseedtime: + # 3 days (as seconds = 3 x 24 x 60 x 60) + text: 259200 +# Gazelle diff --git a/src/Jackett.Common/Indexers/HDOnly.cs b/src/Jackett.Common/Indexers/HDOnly.cs deleted file mode 100644 index 834adac01..000000000 --- a/src/Jackett.Common/Indexers/HDOnly.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using Jackett.Common.Indexers.Abstract; -using Jackett.Common.Models; -using Jackett.Common.Services.Interfaces; -using Jackett.Common.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; - -namespace Jackett.Common.Indexers -{ - [ExcludeFromCodeCoverage] - public class HDOnly : GazelleTracker - { - public HDOnly(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps) - : base(id: "hdonly", - name: "HD-Only", - description: "HD-Only (HD-O) is a FRENCH Private Torrent Tracker for HD MOVIES / TV", - link: "https://hd-only.org/", - caps: new TorznabCapabilities(), - configService: configService, - client: wc, - logger: l, - p: ps, - supportsFreeleechTokens: false) // ratiofree - { - Language = "fr-fr"; - Type = "private"; - - // a few releases have "category":"S\u00e9ries" set - AddCategoryMapping(null, TorznabCatType.TV, "Séries"); - - // releaseType mappings - AddCategoryMapping(1, TorznabCatType.Movies, "Film"); - AddCategoryMapping(3, TorznabCatType.TVAnime, "Dessin animé"); - AddCategoryMapping(5, TorznabCatType.TV, "Série"); - AddCategoryMapping(6, TorznabCatType.TVAnime, "Série Animée"); - AddCategoryMapping(7, TorznabCatType.MoviesOther, "Film d'animation"); - AddCategoryMapping(9, TorznabCatType.AudioVideo, "Concert"); - AddCategoryMapping(11, TorznabCatType.TVDocumentary, "Documentaire"); - AddCategoryMapping(13, TorznabCatType.MoviesOther, "Court-métrage"); - AddCategoryMapping(14, TorznabCatType.MoviesOther, "Clip"); - AddCategoryMapping(15, TorznabCatType.MoviesOther, "Démonstration"); - AddCategoryMapping(16, TorznabCatType.MoviesOther, "Bonus de BD"); - AddCategoryMapping(21, TorznabCatType.Other, "Autre"); - } - - protected override bool ReleaseInfoPostParse(ReleaseInfo release, JObject torrent, JObject result) - { - // releaseType is used for categories - var category = (string)result["category"]; - if (category == null) - { - var releaseType = (string)result["releaseType"]; - release.Category = MapTrackerCatDescToNewznab(releaseType); - } - return true; - } - - protected override List MapTorznabCapsToTrackers(TorznabQuery query, bool mapChildrenCatsToParent = false) - { - // don't use category filtering - return new List(); - } - } -}