Compare commits

...

44 Commits

Author SHA1 Message Date
Garfield69
f3c6acf634 katcrs: added public tracker KickAssTorrent clone. resolves #2828 2018-09-21 21:47:58 +12:00
Garfield69
ab810a20db torrentgalaxyorg: add this public tracker. resolves #3792 2018-09-21 17:36:40 +12:00
Garfield69
60f1be6f18 hd4free: correct cat7 2018-09-21 16:19:34 +12:00
Jonathan
ab6f7d5218 Update ethor.yml (#3834)
- Fix language vfq (French version with voice in Quebec) in sonarr. Sonarr tell episode is in english but episode is in french
- Fix some tv show have space between season number and episode number
2018-09-19 12:51:47 +12:00
Garfield69
67f50e88a3 IdopeClone: replacement clone of Idope which is gone. Resolves #3832 2018-09-19 12:34:03 +12:00
Garfield69
79a354c6d9 hdhome: standardise link and paths 2018-09-18 15:41:42 +12:00
Garfield69
ee20b141da hd4free: prevent updater blowing away new site indexer 2018-09-18 14:33:45 +12:00
HDVinnie
0c67c6322a (Add) hd4free.yml (#3830)
* (Add) hd4free.yml

* (Update) README
2018-09-18 14:31:32 +12:00
Garfield69
99ed3fbc2c horriblesubs: cosmetic change to description
the n-dash does not decoded
2018-09-18 06:52:50 +12:00
kaso17
ef92bf5342 torznab: add padding to imdb 2018-09-17 19:06:53 +02:00
kaso17
053d2be3f3 HorribleSubs: add legacy URL 2018-09-17 18:48:37 +02:00
kaso17
c155bf8c8c Myanonamouse: reset cookies on login 2018-09-17 17:59:21 +02:00
kaso17
e1232800c6 Merge branch 'master' of https://github.com/Jackett/Jackett 2018-09-17 16:43:24 +02:00
kaso17
7a2c0bf260 HTTPWebClient: improve mono relative redirect bug workaround 2018-09-17 16:43:09 +02:00
kevinpawsey
203b5d1e37 AudioBookBay: add indexer (#3820)
* Create audiobookbay.yml

Basics of scraping AudioBookBay.

Will only scrape the first page at the moment, but seems to work ok.

* Update README.md

Added AudioBookBay in Supported Public Trackers

* Update README.md
2018-09-17 16:29:57 +02:00
kaso17
1325fc6391 TorrentDay: update default URL 2018-09-17 15:50:30 +02:00
kaso17
1c3bc3cbf4 UI: fix imdb link generation 2018-09-17 15:39:42 +02:00
Garfield69
8509276972 arabafenice: they are forcing https 2018-09-17 09:17:34 +12:00
Garfield69
e7710489ca nyaa.si: incomplete CA chain from lets encrypt CA provider. #3730 2018-09-16 08:46:03 +12:00
Garfield69
f6a669ea46 yggtorrent: switch to using id for form 2018-09-16 08:20:24 +12:00
Garfield69
68ad01e346 cpabien: new domain www -> ww1 2018-09-16 07:59:21 +12:00
Garfield69
ffda2c8269 gktorrent: they are forcing https 2018-09-16 07:56:12 +12:00
Garfield69
896b2ab954 Merge branch 'master' of https://github.com/Jackett/Jackett 2018-09-15 21:56:01 +12:00
Garfield69
bbcec8103d HorribleSubs: provide missing data
for apps that use Jackett as a proxy, and rely ion the existence of category, size, etc, I've populated the returned results with the missing anime category, and default values for seeders, leechers, size, downloadvolumefactor, and uploadvolumefactor.
2018-09-15 21:55:54 +12:00
Lucas
8f0ba9cefe Update YGGtorrent url (#3803)
* Update YGGtorrent url

* Update yggtorrent.yml
2018-09-15 21:19:13 +12:00
flightlevel
cc3ebbe1ae Package update 2018-09-15 15:28:50 +10:00
Gerdus van Zyl
d88db81207 Horrible Subs native indexer (#3794)
* Initial Version

* Episode number filtering
2018-09-15 15:25:27 +10:00
flightlevel
9a15f1d1a3 Remove horriblesubs yaml file 2018-09-15 15:22:38 +10:00
flightlevel
4e5f091b6c Check for Mono legacy TLS 2018-09-15 15:20:31 +10:00
Garfield69
517f196d73 torrentkim: readme update 2018-09-15 11:37:35 +12:00
Garfield69
9461d2470a Merge branch 'master' of https://github.com/Jackett/Jackett 2018-09-15 11:33:48 +12:00
Garfield69
c9f874dc93 torrentkim: gone. resolves #3306 2018-09-15 11:33:22 +12:00
hallengreenn
53b6285810 Update Nordicbits - Add support for all themes (#3801)
Last commit of nordicbits.cs only supported the 'old' v2 theme.
With this new update, I have added support for the v3 theme but continue to keep the old support for v2 by looking after the .css file loaded and return the proper _fDom in FindTorrentRows...

I have also added a extended error msg, when torrents can't be found that it could be because of an unsupported theme.
2018-09-15 08:04:13 +12:00
Garfield69
5d4e0c41d6 torrentday: add additional alternate domains. resolves #3796 2018-09-15 07:51:34 +12:00
Garfield69
754337b58f yggtorrent: sort results by publish_date desc. resolves #3775 2018-09-09 11:07:39 +12:00
Garfield69
16f79085ad btdb: load seeders & leechers from popularity field. resolves #3765 2018-09-09 10:43:09 +12:00
hashworks
005539d30d Updated categories for TorrentSyndikat (#3758)
* Updated categories

A lot of categories got dropped, also there are some new categories.
Additionally I updated the namings.

* Fix TV series category names
2018-09-06 04:00:05 +12:00
kaso17
2d5a90ae31 BaseIndexer: add cloudflare ReCaptcha detection 2018-09-04 19:30:48 +02:00
kaso17
fc060d6468 BitHUmen: imporve download link handling 2018-09-04 15:49:12 +02:00
kaso17
d0937d3561 BeyondHD: no longer ratioless 2018-09-04 15:30:16 +02:00
kaso17
7b8de5e28d RuTracker: fix login 2018-09-04 15:25:44 +02:00
HDVinnie
790f5ddfad redtopia: add indexer (#3660) 2018-09-04 14:39:12 +02:00
Garfield69
760231be43 torrentz2: amendment to 9a071a3457
using title: without a query string causes 0 results which meant the
jackett dashboard TEST button failed.
now we only add title: if a query was supplied.
2018-09-04 07:58:34 +12:00
kaso17
837e74a743 Updater: cleanup 2018-09-03 17:23:18 +02:00
37 changed files with 906 additions and 219 deletions

View File

@@ -24,6 +24,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Anidex
* Anime Tosho
* AniRena
* AudioBookBay
* btbit
* BTDB
* BT-Scene
@@ -35,10 +36,11 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Frozen Layer
* GkTorrent
* Horrible Subs
* Idope
* IdopeClone
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Il Corsaro Blu
* Isohunt2
* KATcrs
* KickAssTorrent
* KickAssTorrent (thekat.se clone)
* LimeTorrents
@@ -58,8 +60,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Tokyo Toshokan
* Torlock
* Torrent Downloads
* TorrentGalaxy.org (TGx)
* Torrent9
* TorrentKim
* Torrentz2
* World Wide Torrents
* YTS.ag
@@ -171,6 +173,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Greek Team
* HacheDe
* Hardbay
* HD4Free (HD4)
* HD-Forever
* HD-Only
* HD-Space
@@ -229,6 +232,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Racing4Everyone (R4E)
* Redacted (PassTheHeadphones)
* Red Star Torrent
* Redtopia (RED)
* RetroFlix
* RevolutionTT
* RGU

View File

@@ -731,7 +731,7 @@ function updateReleasesRow(row)
labels.empty();
if (IMDBId) {
labels.append('\n<a href="http://www.imdb.com/title/tt' + IMDBId + '/" class="label label-imdb" alt="IMDB" title="IMDB">IMDB</a>');
labels.append('\n<a href="http://www.imdb.com/title/tt' + ("000000" + IMDBId).slice(-7) + '/" class="label label-imdb" alt="IMDB" title="IMDB">IMDB</a>');
}
if (!isNaN(DownloadVolumeFactor)) {

View File

@@ -663,6 +663,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=20180710"></script>
<script type="text/javascript" src="../custom.js?changed=20180711"></script>
</body>
</html>

View File

@@ -6,6 +6,8 @@
type: private
encoding: UTF-8
links:
- https://www.arabafenice.me/
legacylinks:
- http://www.arabafenice.me/
caps:

View File

@@ -0,0 +1,106 @@
---
site: audiobookbay
name: AudioBookBay
description: "AudioBook Bay (ABB) is a semi-private Torrent Tracker for AUDIOBOOKS"
language: en-us
type: semi-private
encoding: UTF-8
links:
- http://audiobookbay.nl/
- https://audiobookbay.la/
caps:
categorymappings:
- {id: Children, cat: Audio/Audiobook, desc: "Children"}
- {id: Teen & Young Adult, cat: Audio/Audiobook, desc: "Teen & Young Adult"}
- {id: Adults, cat: Audio/Audiobook, desc: "Adults"}
- {id: The Undead, cat: Audio/Audiobook, desc: "The Undead"}
- {id: Action, cat: Audio/Audiobook, desc: "Action"}
- {id: Adventure, cat: Audio/Audiobook, desc: "Adventure"}
- {id: Art, cat: Audio/Audiobook, desc: "Art"}
- {id: Autobiography & Biographies, cat: Audio/Audiobook, desc: "Autobiography & Biographies"}
- {id: Business, cat: Audio/Audiobook, desc: "Business"}
- {id: Computer, cat: Audio/Audiobook, desc: "Computer"}
- {id: Contemporary, cat: Audio/Audiobook, desc: "Contemporary"}
- {id: Crime, cat: Audio/Audiobook, desc: "Crime"}
- {id: Detective, cat: Audio/Audiobook, desc: "Detective"}
- {id: Doctor Who, cat: Audio/Audiobook, desc: "Doctor Who"}
- {id: Education, cat: Audio/Audiobook, desc: "Education"}
- {id: Fantasy, cat: Audio/Audiobook, desc: "Fantasy"}
- {id: General Fiction, cat: Audio/Audiobook, desc: "General Fiction"}
- {id: Historical Fiction, cat: Audio/Audiobook, desc: "Historical Fiction"}
- {id: History, cat: Audio/Audiobook, desc: "History"}
- {id: Horror, cat: Audio/Audiobook, desc: "Horror"}
- {id: Humor, cat: Audio/Audiobook, desc: "Humor"}
- {id: Lecture, cat: Audio/Audiobook, desc: "Lecture"}
- {id: LGBT, cat: Audio/Audiobook, desc: "LGBT"}
- {id: Literature, cat: Audio/Audiobook, desc: "Literature"}
- {id: LitRPG, cat: Audio/Audiobook, desc: "LitRPG"}
- {id: Misc. Non-fiction, cat: Audio/Audiobook, desc: "Misc. Non-fiction"}
- {id: Mystery, cat: Audio/Audiobook, desc: "Mystery"}
- {id: Myth Hunting, cat: Audio/Audiobook, desc: "Myth Hunting"}
- {id: Paranormal, cat: Audio/Audiobook, desc: "Paranormal"}
- {id: Plays & Theater, cat: Audio/Audiobook, desc: "Plays & Theater"}
- {id: Poetry, cat: Audio/Audiobook, desc: "Poetry"}
- {id: Political, cat: Audio/Audiobook, desc: "Political"}
- {id: Postapocalyptic, cat: Audio/Audiobook, desc: "Postapocalyptic"}
- {id: Radio Productions, cat: Audio/Audiobook, desc: "Radio Productions"}
- {id: Romance, cat: Audio/Audiobook, desc: "Romance"}
- {id: Sci-Fi, cat: Audio/Audiobook, desc: "Sci-Fi"}
- {id: Science, cat: Audio/Audiobook, desc: "Science"}
- {id: Self-help, cat: Audio/Audiobook, desc: "Self-help"}
- {id: SHTF, cat: Audio/Audiobook, desc: "SHTF"}
- {id: Spiritual & Religious, cat: Audio/Audiobook, desc: "Spiritual & Religious"}
- {id: Sports, cat: Audio/Audiobook, desc: "Sports"}
- {id: Suspense, cat: Audio/Audiobook, desc: "Suspense"}
- {id: Thriller, cat: Audio/Audiobook, desc: "Thriller"}
- {id: True Crime, cat: Audio/Audiobook, desc: "True Crime"}
- {id: Tutorial, cat: Audio/Audiobook, desc: "Tutorial"}
- {id: Westerns, cat: Audio/Audiobook, desc: "Westerns"}
- {id: Anthology, cat: Audio/Audiobook, desc: "Anthology"}
- {id: Bestsellers, cat: Audio/Audiobook, desc: "Bestsellers"}
- {id: Classic, cat: Audio/Audiobook, desc: "Classic"}
- {id: Documentary, cat: Audio/Audiobook, desc: "Documentary"}
- {id: Full Cast, cat: Audio/Audiobook, desc: "Full Cast"}
- {id: Libertarian, cat: Audio/Audiobook, desc: "Libertarian"}
- {id: Military, cat: Audio/Audiobook, desc: "Military"}
- {id: Novel, cat: Audio/Audiobook, desc: "Novel"}
- {id: Short Story, cat: Audio/Audiobook, desc: "Short Story"}
modes:
search: [s]
login:
path: https://audiobookbay.nl/member/login.php
form: form[action="https://audiobookbay.nl/member/login.php"]
method: post
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
login: "Login"
error:
- selector: td.embedded:has(h2:contains("Invalid"))
test:
path: /member/users/
download:
selector: a[href^="/download?"]
attribute: href
search:
paths:
# show members page if no search parameters
- path: /
inputs:
"s": "{{ .Keywords }}"
rows:
selector: div.post
fields:
title:
selector: div.postTitle
details:
selector: div.postTitle
download:
selector: a[href^="/audio-books/"]
attribute: href

View File

@@ -69,9 +69,18 @@
filters:
- name: andmatch
fields:
# download button can be disbled in the profile, use details link instead
# download:
# selector: a[href^="download.php/"]
# attribute: href
download:
selector: a[href^="download.php/"]
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php/"]
- name: append
args: "/invalid.torrent"
title:
selector: a[href^="details.php?id="]
title:

View File

@@ -63,9 +63,9 @@
grabs:
selector: div[class$="info"] span:nth-of-type(4)
seeders:
text: "999"
selector: div[class$="info"] span:nth-of-type(4)
leechers:
text: "999"
selector: div[class$="info"] span:nth-of-type(4)
downloadvolumefactor:
text: "0"
uploadvolumefactor:

View File

@@ -6,7 +6,7 @@
type: public
encoding: UTF-8
links:
- http://www.cpabien.io/
- https://ww1.cpabien.io/
legacylinks:
- http://www.cpasbiens.cc/
- http://www.cpabien.cm/
@@ -21,6 +21,7 @@
- http://cpabien.co/
- http://cpabien.la/
- http://cpabien.club/
- http://www.cpabien.io/
caps:
categorymappings:

View File

@@ -1,4 +1,4 @@
---
---
site: ethor
name: Ethor.net (Thor's Land)
description: "A French gerneral tracker"
@@ -83,6 +83,15 @@
args: ["/details.php", "/download.php"]
title:
selector: a[href^="/details.php"]:has(b)
filters:
- name: replace
args: ["VFQ", "FRENCH"]
- name: replace
args: ["vfq", "FRENCH"]
- name: re_replace
args: ["S(\\d{2}) E(\\d{2})", "S$1E$2"]
- name: re_replace
args: ["S(\\d{1}) E(\\d{2})", "S0$1E$2"]
category:
selector: a[href^="/browse.php?cat="]
attribute: href

View File

@@ -6,13 +6,14 @@
type: public
encoding: UTF-8
links:
- http://ww2.gktorrent.com/
- https://ww2.gktorrent.com/
legacylinks:
- https://www.gktorrent.org/
- http://www.gktorrent.net/
- https://www.gktorrent.com/ # they're forcing http
- http://www.gktorrent.com/
- http://ww1.gktorrent.com/
- http://ww2.gktorrent.com/ # they're forcing https
caps:
categorymappings:

View File

@@ -0,0 +1,90 @@
---
site: hd4free
name: hd4free
description: "General Tracker Movies/TV/Apps/Games/Music/Books"
language: en-us
type: private
encoding: UTF-8
links:
- https://hd4.xyz/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: Books, desc: "Books"}
- {id: 5, cat: PC/Mac, desc: "Apps"}
- {id: 6, cat: Other, desc: "Other"}
- {id: 7, cat: PC/Games, desc: "Games"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: /login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Login Failed!")
test:
path: /torrents
search:
paths:
- path: /filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: ""
tmdb: ""
mal: ""
sorting: created_at
direction: desc
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(6)
filters:
- name: regexp
args: ([\d\.]+)
date:
selector: time
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0"
"i[data-original-title=\"Global FreeLeech\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double upload\"]": "2"
"*": "1"

View File

@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- https://hdhome.org
- https://hdhome.org/
caps:
categorymappings:
@@ -77,11 +77,11 @@
- selector: td.embedded:has(h2:contains("姿势不正确"))
- selector: td.embedded:has(h2:contains("失败"))
test:
path: /torrents.php
path: torrents.php
search:
paths:
- path: /torrents.php
- path: torrents.php
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"

View File

@@ -1,66 +0,0 @@
---
site: horriblesubs
name: Horrible Subs
description: "Anime Sub Group - \"So bad yet so good\""
language: en-us
type: public
encoding: UTF-8
links:
- http://horriblesubs.info/
legacylinks:
- https://horriblesubs.info/
caps:
categories:
1: TV/Anime # Anime
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: prepend-horriblesubs
type: checkbox
label: Prepend [Horriblesubs] to torrent title
search:
paths:
- path: "lib/{{if .Query.Keywords }}search.php{{else}}latest.php{{end}}"
inputs:
value: "{{ .Query.Keywords }}"
rows:
selector: "div.release-links"
dateheaders:
selector: table.release-info
filters:
- name: split
args: [" ", 0 ]
- name: replace
args: ["(", ""]
- name: replace
args: [")", ""]
- name: replace
args: ["/", "-"]
- name: dateparse
args: "01-02-06"
- name: dateparse
args: "01-02"
fields:
category:
text: "1"
title:
selector: table.release-table > tbody > tr > td.dl-label
filters:
- name: prepend
args: "{{if .Config.prepend-horriblesubs}}[Horriblesubs] {{else}}{{end}}"
details:
attribute: class
filters:
- name: replace
args: ["release-links", ""]
- name: re_replace
args: [" ?(\\S+?)-((?:s\\d-)?(?:\\d+v?\\d?-){0,2}\\d+p)", "http://horriblesubs.info/shows/$1#$2"]
download:
selector: table.release-table > tbody > tr > td.hs-magnet-link > span > a
attribute: href
size:
text: "500 MB"

View File

@@ -1,20 +1,18 @@
---
site: idope
name: Idope
description: "iDope is a Public torrent search engine presenting direct magnet links"
site: idopeclone
name: IdopeClone
description: "This Clone of iDope is a Public torrent search engine"
language: en-us
type: public
encoding: UTF-8
links:
- https://idope.cc/
legacylinks:
- https://idope.se/
- https://idope.top/
caps:
categorymappings:
- {id: 0, cat: Other, desc: "Others"}
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: Other, desc: "Video"}
- {id: 2, cat: Other, desc: "Videos"}
- {id: 3, cat: TV, desc: "TV"}
- {id: 4, cat: TV/Anime, desc: "Anime"}
- {id: 5, cat: XXX, desc: "XXX"}
@@ -39,33 +37,36 @@
search:
paths:
# present trending results if there are no search parms supplied
# sort torrent-list by age in descending order
- path: "{{if .Keywords}}torrent-list/{{ .Keywords}}?&o=-3&c={{range .Categories }}{{.}}{{end}}{{else}}browse.html{{end}}"
- path: "{{if .Keywords}}search/{{ .Keywords}}/{{else}}recent-torrents/{{end}}"
rows:
selector: div[class="resultdiv"]
filters:
- name: andmatch
fields:
title:
selector: div[class="resultdivtop"] a div[class="resultdivtopname"]
selector: div[class="resultdivtop"] div[class="resultdivtopname"]
details:
selector: div[class="resultdivbotton"] div[class="magneticdiv"] a
attribute: href
category:
optional: true
selector: div[class="resultdivbotton"] div[class="resultdivbottoncategory"]
selector: div[class="resultdivbotton"] div[class="resultdivbottoncategory"]
case:
":contains(\"Others\")": 0
":contains(\"Other\")": 0
":contains(\"Movies\")": 1
":contains(\"Video\")": 2
":contains(\"TV\")": 3
":contains(\"Anime\")": 4
":contains(\"xxx\")": 5
":contains(\"XXX\")": 5
":contains(\"Adult\")": 5
":contains(\"Music\")": 6
":contains(\"Games\")": 7
":contains(\"Apps\")": 8
":contains(\"Software\")": 8
":contains(\"Books\")": 9
details:
selector: div[class="resultdivtop"] a
attribute: href
download-itorrents:
selector: div[class="resultdivbotton"] div[id^="hideinfohash"]
selector: div[class="resultdivbotton"] div[class="resultseed"] div[class="resultdivbottonseed"]
filters:
- name: toupper
- name: prepend
@@ -80,7 +81,7 @@
- name: validfilename
- name: urlencode
magnet:
selector: div[class="resultdivbotton"] div[id^="hideinfohash"]
selector: div[class="resultdivbotton"] div[class="resultseed"] div[class="resultdivbottonseed"]
filters:
- name: prepend
args: "magnet:?xt=urn:btih:"
@@ -95,9 +96,9 @@
size:
selector: div[class="resultdivbotton"] div[class="resultlength"] div[class="resultdivbottonlength"]
seeders:
selector: div[class="resultdivbotton"] div[class="resultseed"] div[class="resultdivbottonseed"]
files:
selector: div[class="resultdivbotton"] div[class="resultfile"] div[class="resultdivbottonfiles"]
text: "999"
leechers:
text: "999"
downloadvolumefactor:
text: "0"
uploadvolumefactor:

View File

@@ -0,0 +1,70 @@
---
site: katcrs
name: KATcrs
description: "KATcrs is a Public KickAssTorrent clone for TV / MOVIES / GENERAL"
language: en-us
type: public
encoding: UTF-8
links:
- https://kickasskatcr.website/
caps:
categories:
movies: Movies
TV: TV
Video: TV/WEB-DL
Anime: TV/Anime
Music: Audio
Books: Books
Documentary: TV/Documentary
Games: Console
Apps: PC
Applications: PC
Other: Other
Othero: XXX
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
search:
paths:
- path: "{{ if .Keywords }}search/{{ .Keywords }}/{{else}}new/{{end}}"
rows:
selector: table.data tr.odd
fields:
category:
selector: span.uploader_block strong a
attribute: href
filters:
- name: trim
args: /
title:
selector: td:nth-child(1) div a.cellMainLink
attribute: title
details:
selector: td:nth-child(1) div a.cellMainLink
attribute: href
download:
selector: td:nth-child(1) div div a[data-download=""]
attribute: href
magnet:
selector: td:nth-child(1) div div a[data-nop=""]
attribute: href
size:
selector: td:nth-child(2)
date:
selector: td:nth-child(3)
filters:
- name: timeago
seeders:
selector: td:nth-child(4)
leechers:
selector: td:nth-child(5)
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -7,6 +7,8 @@
encoding: UTF-8
links:
- https://nyaa.si
certificates:
- 3801e330482d4f9baef71ca4e33ba23ede74f59c # incomplete CA chain
settings:
- name: filter-id

View File

@@ -0,0 +1,89 @@
---
site: redtopia
name: Redtopia
description: "Tracker Music/Podcasts/Audiobooks"
language: en-us
type: private
encoding: UTF-8
links:
- https://redtopia.xyz/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Studio Album"}
- {id: 2, cat: Audio, desc: "Studio Single"}
- {id: 3, cat: Audio, desc: "Studio Collection"}
- {id: 4, cat: Audio, desc: "Indie Album"}
- {id: 5, cat: Audio, desc: "Indie Single"}
- {id: 6, cat: Audio, desc: "Indie Collection"}
- {id: 7, cat: Audio, desc: "Live Album"}
- {id: 8, cat: Audio, desc: "OST"}
- {id: 9, cat: Audio, desc: "Podcast"}
- {id: 10, cat: Audio, desc: "Audio Book"}
- {id: 11, cat: Audio, desc: "Audio Drama"}
modes:
search: [q]
music-search: [q]
login:
path: /login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Login Failed!")
test:
path: /torrents
search:
paths:
- path: /filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
uploader: ""
sorting: created_at
direction: desc
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(5)
filters:
- name: regexp
args: ([\d\.]+)
date:
selector: time
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0"
"i[data-original-title=\"Global FreeLeech\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double Upload\"]": "2" # global flag
"i[data-original-title=\"Double upload\"]": "2" # torrent specific flag
"*": "1"

View File

@@ -0,0 +1,108 @@
---
site: torrentgalaxyorg
name: TGx
description: "TorrentGalaxy.org (TGx) is a Public site for TV / MOVIES / GENERAL"
language: en-us
type: public
encoding: UTF-8
links:
- https://torrentgalaxy.org/
caps:
categorymappings:
- {id: 28, cat: TV/Anime, desc: "Anime - All"}
- {id: 20, cat: PC/Phone-Other, desc: "Apps - Mobile"}
- {id: 19, cat: PC/Mac, desc: "Apps - OS"}
- {id: 21, cat: PC, desc: "Apps - Other"}
- {id: 18, cat: PC/0day, desc: "Apps - Windows"}
- {id: 13, cat: Audio/Audiobook, desc: "Books - Audiobooks"}
- {id: 12, cat: Books/Ebook, desc: "Books - Ebooks"}
- {id: 14, cat: Books/Technical, desc: "Books - Education"}
- {id: 15, cat: Books/Magazines, desc: "Books - Magazine"}
- {id: 9, cat: TV/Documentary, desc: "Documentaries - All"}
- {id: 11, cat: Console, desc: "Games - Console"}
- {id: 43, cat: PC/Phone-Other, desc: "Games - Mobile"}
- {id: 17, cat: Console/Other, desc: "Games - Other"}
- {id: 10, cat: PC/Games , desc: "Games - Windows"}
- {id: 3, cat: Movies/UHD, desc: "Movies - 2K/4K UHD"}
- {id: 46, cat: Movies/Foreign, desc: "Movies - Bollywood"}
- {id: 45, cat: Movies/Other, desc: "Movies - CAM/TS"}
- {id: 42, cat: Movies/HD, desc: "Movies - HD"}
- {id: 4, cat: Movies, desc: "Movies - Packs"}
- {id: 1, cat: Movies/SD, desc: "Movies - SD"}
- {id: 22, cat: Audio, desc: "Music - Albums"}
- {id: 26, cat: Audio, desc: "Music - Discography"}
- {id: 23, cat: Audio/Lossless, desc: "Music - Lossless"}
- {id: 25, cat: Audio/Video, desc: "Music - Musicvideo"}
- {id: 24, cat: Audio, desc: "Music - Singles"}
- {id: 40, cat: Audio/Other, desc: "Other - Other"}
- {id: 37, cat: Other, desc: "Other - Pictures"}
- {id: 33, cat: Other, desc: "Other - Training"}
- {id: 41, cat: TV/HD, desc: "TV - Episodes HD"}
- {id: 5, cat: TV/SD, desc: "TV - Episodes SD"}
- {id: 6, cat: TV/OTHER, desc: "TV - Packs"}
- {id: 7, cat: TV/Sport, desc: "TV - Sports"}
- {id: 35, cat: XXX, desc: "XXX - HD"}
- {id: 47, cat: XXX, desc: "XXX - Misc"}
- {id: 34, cat: XXX, desc: "XXX - SD"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
search:
# https://torrentgalaxy.org/torrents.php?c41=1&search=mercedes+s02e04&lang=0&sort=id&order=desc
path: torrents.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{.Keywords}}"
lang: "0"
sort: "id"
order: "desc"
rows:
selector: div[class="tgxtablerow clickable-row click"]
fields:
title:
selector: div.tgxtablecell:nth-child(3) div a
attribute: title
category:
selector: div.tgxtablecell a
attribute: href
filters:
- name: querystring
args: cat
details:
selector: div.tgxtablecell:nth-child(3) div a
attribute: href
download:
selector: div.tgxtablecell:nth-child(4) a
attribute: href
magnet:
selector: div.tgxtablecell:nth-child(4) a:nth-child(2)
attribute: href
size:
selector: div.tgxtablecell:nth-child(7) span
seeders:
selector: div.tgxtablecell:nth-child(10) span font b
leechers:
selector: div.tgxtablecell:nth-child(10) span font:nth-child(2) b
date:
# 20Mins ago
optional: true
selector: div.tgxtablecell:nth-child(11) small:contains("ago")
filters:
- name: timeago
date:
# 24/12/18 13:55
optional: true
selector: div.tgxtablecell:nth-child(11) small:contains(":")
filters:
- name: dateparse
args: "02/01/06 15:04"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -1,66 +0,0 @@
---
site: torrentkim
name: TorrentKim
description: "TorrentKim is a free Korean tracker of pretty much anything Korean."
language: ko-KR
type: public
encoding: UTF-8
links:
- https://torrentkim.pro/
legacylinks:
- https://torrentkim12.com/
- https://torrentkim10.net/
caps:
categorymappings:
- {id: "torrent_variety", cat: TV, desc: "TV - Variety shows"}
- {id: "torrent_tv", cat: TV, desc: "TV - Dramas"}
- {id: "torrent_mid", cat: TV/FOREIGN, desc: "TV - American Series"}
modes:
search: [q]
tv-search: [q]
movie-search: [q]
settings: []
search:
paths:
- path: "{{ if .Keywords }}/bbs/s-1-{{ .Keywords }}{{else}}/bbs/s-1-미운우리새끼{{end}}"
rows:
selector: "table.board_list > tbody > tr.bg1:nth-child(n+3)"
fields:
magnet:
selector: td:nth-child(1) a[href^="javascript:"]
attribute: href
filters:
- name: replace
args: ["javascript:Mag_dn('", ""]
- name: replace
args: ["')", ""]
- name: prepend
args: "magnet:?xt=urn:btih:"
seeders:
selector: "td:nth-child(2) font:nth-child(2)"
leechers:
selector: "td:nth-child(2) font:nth-child(1)"
category:
selector: td:nth-child(3) a[href^="/bbs/bc.php?bo_table="]
attribute: href
filters:
- name: querystring
args: bo_table
title:
selector: td:nth-child(3) a:last-of-type
details:
selector: td:nth-child(3) a:last-of-type
attribute: href
date:
selector: td:nth-child(3) a:last-of-type
filters:
- name: split
args: ['.', 2]
- name: dateparse
args: "060102"
size:
selector: td:nth-child(5)

View File

@@ -69,11 +69,8 @@
paths:
- path: "{{if .Config.filter-verified }}verified{{else}}searchA{{end}}"
inputs:
f: "{{ .Keywords }}"
f: "{{if .Keywords }}title: {{else}}{{end}}{{ .Keywords }}"
safe: "{{if .Config.filter-safe }}1{{else}}0{{end}}"
keywordsfilters:
- name: prepend
args: "title: " # search only in title, https://torrentz2.eu/help
rows:
selector: "html body #wrap .results dl:has(a)"
# andmatch filter removed, see #3737

View File

@@ -6,11 +6,12 @@
type: semi-private
encoding: UTF-8
links:
- https://www.yggtorrent.is/
- https://yggtorrent.to/
legacylinks:
- https://yggtorrent.is/
- https://yggtorrent.com/
- https://ww1.yggtorrent.com/
- https://www.yggtorrent.is/
- https://ww1.yggtorrent.is/
- https://ww2.yggtorrent.is/
- https://ww3.yggtorrent.is/
@@ -116,7 +117,7 @@
login:
method: form
path: /
form: form[action$="/user/login"]
form: "#user-login"
inputs:
id: "{{ .Config.username }}"
pass: "{{ .Config.password }}"
@@ -129,8 +130,8 @@
search:
paths:
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search"
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&page=50"
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
rows:
selector: "table.table > tbody > tr"

View File

@@ -575,6 +575,11 @@ namespace Jackett.Common.Indexers
{
throw new Exception("Request to " + response.Request.Url + " failed (Error " + response.Status + ") - The tracker seems to be down.");
}
if (response.Status == System.Net.HttpStatusCode.Forbidden && response.Content.Contains("<span data-translate=\"complete_sec_check\">Please complete the security check to access</span>"))
{
throw new Exception("Request to " + response.Request.Url + " failed (Error " + response.Status + ") - The page is protected by an Cloudflare reCaptcha. The page is in aggressive DDoS mitigation mode or your IP might be blacklisted (e.g. in case of shared VPN IPs). There's no easy way of making it usable with Jackett.");
}
}
protected async Task FollowIfRedirect(WebClientStringResult response, string referrer = null, string overrideRedirectUrl = null, string overrideCookies = null, bool accumulateCookies = false)

View File

@@ -164,7 +164,7 @@ namespace Jackett.Common.Indexers
var grabs = qRow.Find("td:nth-child(9) > a").Get(0).FirstChild.ToString();
release.Grabs = ParseUtil.CoerceInt(grabs);
release.DownloadVolumeFactor = 0; // ratioless
release.DownloadVolumeFactor = 1;
release.UploadVolumeFactor = 1;
releases.Add(release);

View File

@@ -0,0 +1,268 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
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.Linq;
using NLog;
using System.Text.RegularExpressions;
using AngleSharp.Parser.Html;
namespace Jackett.Common.Indexers
{
class HorribleSubs : BaseWebIndexer
{
private string ApiEndpoint { get { return SiteLink + "api.php"; } }
public override string[] LegacySiteLinks { get; protected set; } = new string[] {
"http://horriblesubs.info/"
};
public HorribleSubs(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
: base(name: "Horrible Subs",
description: "HorribleSubs - So bad yet so good",
link: "https://horriblesubs.info/",
caps: new TorznabCapabilities(TorznabCatType.TVAnime),
configService: configService,
client: wc,
logger: l,
p: ps,
configData: new ConfigurationData())
{
Encoding = Encoding.UTF8;
Language = "en-us";
Type = "public";
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
configData.LoadValuesFromJson(configJson);
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Count() > 0, () =>
{
throw new Exception("Could not find releases from this URL");
});
return IndexerConfigurationStatus.Completed;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, 0);
}
private async Task<IEnumerable<ReleaseInfo>> PerformLatestQuery(TorznabQuery query, int attempts)
{
var ResultParser = new HtmlParser();
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var queryCollection = new NameValueCollection();
queryCollection.Add("method", "getlatest");
var searchUrl = ApiEndpoint + "?" + queryCollection.GetQueryString();
var response = await RequestStringWithCookiesAndRetry(searchUrl, string.Empty);
try
{
if (response.Content.Contains("Nothing was found"))
{
return releases.ToArray();
}
var dom = ResultParser.Parse(response.Content);
var latestresults = dom.QuerySelectorAll("ul > li > a");
foreach (var row in latestresults)
{
var href = SiteLink + row.Attributes["href"].Value.Substring(1);
var showrels = await GetRelease(href);
releases.AddRange(showrels);
}
}
catch (Exception ex)
{
OnParseError(response.Content, ex);
}
return releases;
}
private async Task<IEnumerable<ReleaseInfo>> GetRelease(string ResultURL)
{
var releases = new List<ReleaseInfo>();
var ResultParser = new HtmlParser();
try
{
var episodeno = ResultURL.Substring(ResultURL.LastIndexOf("#") + 1); // = 71
ResultURL = ResultURL.Replace("#" + episodeno, ""); // = https://horriblesubs.info/shows/boruto-naruto-next-generations
var showPageResponse = await RequestStringWithCookiesAndRetry(ResultURL, string.Empty);
await FollowIfRedirect(showPageResponse);
Match match = Regex.Match(showPageResponse.Content, "(var hs_showid = )([0-9]*)(;)", RegexOptions.IgnoreCase);
if (match.Success == false)
{
return releases;
}
int ShowID = int.Parse(match.Groups[2].Value);
string showAPIURL = ApiEndpoint + "?method=getshows&type=show&showid=" + ShowID; //https://horriblesubs.info/api.php?method=getshows&type=show&showid=869
var showAPIResponse = await RequestStringWithCookiesAndRetry(showAPIURL, string.Empty);
var showAPIdom = ResultParser.Parse(showAPIResponse.Content);
var releaserows = showAPIdom.QuerySelectorAll("div.rls-info-container");
foreach (var releaserow in releaserows)
{
string dateStr = releaserow.QuerySelector(".rls-date").TextContent.Trim();
string title = releaserow.FirstChild.TextContent;
title = title.Replace("SD720p1080p", "");
title = title.Replace(dateStr, "");
if (title.Contains(episodeno) == false)
{
continue;
}
DateTime releasedate;
if (dateStr == "Today")
{
releasedate = DateTime.Today;
}
else if (dateStr == "Yesterday")
{
releasedate = DateTime.Today.AddDays(-1);
}
else
{
releasedate = DateTime.SpecifyKind(DateTime.ParseExact(dateStr, "MM/dd/yy", CultureInfo.InvariantCulture), DateTimeKind.Utc).ToLocalTime();
}
var p480 = releaserow.QuerySelector(".link-480p");
if (p480 != null)
{
var release = new ReleaseInfo();
release.Title = string.Format("{0} [480p]", title);
release.PublishDate = releasedate;
release.Link = new Uri(p480.QuerySelector(".hs-torrent-link > a").GetAttribute("href"));
release.MagnetUri = new Uri(p480.QuerySelector(".hs-magnet-link > a").GetAttribute("href"));
release.Files = 1;
release.Category = new List<int> { TorznabCatType.TVAnime.ID };
release.Size = 524288000;
release.Seeders = 999;
release.Peers = 1998;
release.DownloadVolumeFactor = 0;
release.UploadVolumeFactor = 1;
releases.Add(release);
}
var p720 = releaserow.QuerySelector(".link-720p");
if (p720 != null)
{
var release = new ReleaseInfo();
release.Title = string.Format("{0} [720p]", title);
release.PublishDate = releasedate;
release.Link = new Uri(p720.QuerySelector(".hs-torrent-link > a").GetAttribute("href"));
release.MagnetUri = new Uri(p720.QuerySelector(".hs-magnet-link > a").GetAttribute("href"));
release.Files = 1;
release.Category = new List<int> { TorznabCatType.TVAnime.ID };
release.Size = 524288000;
release.Seeders = 999;
release.Peers = 1998;
release.DownloadVolumeFactor = 0;
release.UploadVolumeFactor = 1;
releases.Add(release);
}
var p1080 = releaserow.QuerySelector(".link-1080p");
if (p1080 != null)
{
var release = new ReleaseInfo();
release.Title = string.Format("{0} [1080p]", title);
release.PublishDate = releasedate;
release.Link = new Uri(p1080.QuerySelector(".hs-torrent-link > a").GetAttribute("href"));
release.MagnetUri = new Uri(p1080.QuerySelector(".hs-magnet-link > a").GetAttribute("href"));
release.Files = 1;
release.Category = new List<int> { TorznabCatType.TVAnime.ID };
release.Size = 524288000;
release.Seeders = 999;
release.Peers = 1998;
release.DownloadVolumeFactor = 0;
release.UploadVolumeFactor = 1;
releases.Add(release);
}
}
}
catch (Exception ex)
{
OnParseError("", ex);
}
return releases;
}
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, int attempts)
{
var ResultParser = new HtmlParser();
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var queryCollection = new NameValueCollection();
if (string.IsNullOrWhiteSpace(searchString))
{
return await PerformLatestQuery(query, attempts);
}
else
{
queryCollection.Add("method", "search");
searchString = searchString.Replace("'", ""); // ignore ' (e.g. search for america's Next Top Model)
queryCollection.Add("value", searchString);
}
var searchUrl = ApiEndpoint + "?" + queryCollection.GetQueryString();
var response = await RequestStringWithCookiesAndRetry(searchUrl, string.Empty);
try
{
if (response.Content.Contains("Nothing was found"))
{
return releases.ToArray();
}
var dom = ResultParser.Parse(response.Content);
var showlinks = dom.QuerySelectorAll("ul > li > a");
foreach (var showlink in showlinks)
{
var href = SiteLink + showlink.Attributes["href"].Value.Substring(1); // = https://horriblesubs.info/shows/boruto-naruto-next-generations#71
var showrels = await GetRelease(href);
releases.AddRange(showrels);
}
}
catch (Exception ex)
{
OnParseError(response.Content, ex);
}
return releases;
}
}
}

View File

@@ -133,7 +133,9 @@ namespace Jackett.Common.Indexers
{ "returnto", "/" }
};
var preRequest = await RequestStringWithCookiesAndRetry(LoginUrl, string.Empty);
CookieHeader = ""; // cookie reset needed in order to relogin
var preRequest = await RequestStringWithCookiesAndRetry(LoginUrl);
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, preRequest.Cookies, true, SearchUrl, SiteLink);
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("Search Results"), () =>

View File

@@ -321,7 +321,7 @@ namespace Jackett.Common.Indexers
if (torrentRowList.Count == 0)
{
// No results found
Output("\nNo result found for your query, please try another search term ...\n", "info");
Output("\nNo result found for your query, please try another search term or change the theme you're currently using on the site as this is an unsupported solution...\n", "info");
// No result found for this query
break;
@@ -678,9 +678,23 @@ namespace Jackett.Common.Indexers
/// <returns>JQuery Object</returns>
private CQ FindTorrentRows()
{
// Return all occurencis of torrents found
//return _fDom["#content > table > tr"];
return _fDom["# base_content > table.mainouter > tbody > tr > td.outer > div.article > table > tbody > tr:not(:first)"];
var defaultTheme = new[] { "/templates/1/", "/templates/2/", "/templates/3/", "/templates/4/", "/templates/5/", "/templates/6/", "/templates/11/", "/templates/12/" };
var oldV2 = new[] { "/templates/7/", "/templates/8/", "/templates/9/", "/templates/10/", "/templates/14/" };
if (defaultTheme.Any(_fDom.Document.Body.InnerHTML.Contains))
{
// Return all occurencis of torrents found
// $('#base_content2 > div.article > table > tbody:not(:first) > tr')
return _fDom["# base_content2 > div.article > table > tbody:not(:first) > tr"];
}
if (oldV2.Any(_fDom.Document.Body.InnerHTML.Contains))
{
// Return all occurencis of torrents found
// $('#base_content > table.mainouter > tbody > tr > td.outer > div.article > table > tbody')
return _fDom["# base_content > table.mainouter > tbody > tr > td.outer > div.article > table > tbody > tr:not(:first)"];
}
return _fDom;
}
/// <summary>

View File

@@ -37,6 +37,10 @@ namespace Jackett.Common.Indexers
"https://www.torrentday.ru/",
"https://www.td.af/",
"https://torrentday.it/",
"https://td.findnemo.net",
"https://td.getcrazy.me",
"https://td.venom.global",
"https://td.workisboring.net",
};
private new ConfigurationDataRecaptchaLogin configData
@@ -48,7 +52,7 @@ namespace Jackett.Common.Indexers
public TorrentDay(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
: base(name: "TorrentDay",
description: "TorrentDay (TD) is a Private site for TV / MOVIES / GENERAL",
link: "https://www.torrentday.it/",
link: "https://td.getcrazy.me/",
caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
configService: configService,
client: wc,

View File

@@ -52,40 +52,35 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(2, TorznabCatType.PC, "Apps / Windows");
AddCategoryMapping(13, TorznabCatType.PC, "Apps / Linux");
AddCategoryMapping(4, TorznabCatType.PCMac, "Apps / Mac");
AddCategoryMapping(4, TorznabCatType.PCMac, "Apps / MacOS");
AddCategoryMapping(6, TorznabCatType.PC, "Apps / Misc");
AddCategoryMapping(12, TorznabCatType.PCGames, "Spiele / PC");
AddCategoryMapping(8, TorznabCatType.ConsolePSP, "Spiele / PSX/PSP");
AddCategoryMapping(7, TorznabCatType.ConsoleWii, "Spiele / Wii");
AddCategoryMapping(32, TorznabCatType.ConsoleXbox, "Spiele / XBOX");
AddCategoryMapping(41, TorznabCatType.ConsoleOther, "Spiele / Misc");
AddCategoryMapping(50, TorznabCatType.PCGames, "Spiele / Windows");
AddCategoryMapping(51, TorznabCatType.PCGames, "Spiele / MacOS");
AddCategoryMapping(52, TorznabCatType.PCGames, "Spiele / Linux");
AddCategoryMapping(8, TorznabCatType.ConsoleOther, "Spiele / Playstation");
AddCategoryMapping(7, TorznabCatType.ConsoleOther, "Spiele / Nintendo");
AddCategoryMapping(32, TorznabCatType.ConsoleOther, "Spiele / XBOX");
AddCategoryMapping(22, TorznabCatType.Movies3D, "Filme / 3D");
AddCategoryMapping(3, TorznabCatType.MoviesBluRay, "Filme / BluRay");
AddCategoryMapping(11, TorznabCatType.MoviesOther, "Filme / REMUX");
AddCategoryMapping(42, TorznabCatType.MoviesUHD, "Filme / 2160p");
AddCategoryMapping(9, TorznabCatType.MoviesHD, "Filme / 1080p");
AddCategoryMapping(20, TorznabCatType.MoviesHD, "Filme / 720p");
AddCategoryMapping(21, TorznabCatType.MoviesDVD, "Filme / DVD");
AddCategoryMapping(10, TorznabCatType.MoviesSD, "Filme / SD");
AddCategoryMapping(31, TorznabCatType.MoviesOther, "Filme / Anime");
AddCategoryMapping(43, TorznabCatType.TVUHD, "TV / Serien/UHD");
AddCategoryMapping(16, TorznabCatType.TVHD, "TV / Serien/HD");
AddCategoryMapping(15, TorznabCatType.TVSD, "TV / Serien/SD");
AddCategoryMapping(44, TorznabCatType.TVUHD, "TV / Packs/UHD");
AddCategoryMapping(23, TorznabCatType.TVHD, "TV / Packs/HD");
AddCategoryMapping(27, TorznabCatType.TVSD, "TV / Packs/SD");
AddCategoryMapping(28, TorznabCatType.TVDocumentary, "TV / Dokus/SD");
AddCategoryMapping(29, TorznabCatType.TVDocumentary, "TV / Dokus/HD");
AddCategoryMapping(30, TorznabCatType.TVSport, "TV / Sport");
AddCategoryMapping(40, TorznabCatType.TVAnime, "TV / Anime");
AddCategoryMapping(43, TorznabCatType.TVUHD, "Serien / 2160p");
AddCategoryMapping(53, TorznabCatType.TVHD, "Serien / 1080p");
AddCategoryMapping(54, TorznabCatType.TVHD, "Serien / 720p");
AddCategoryMapping(15, TorznabCatType.TVSD, "Serien / SD");
AddCategoryMapping(30, TorznabCatType.TVSport, "Serien / Sport");
AddCategoryMapping(24, TorznabCatType.AudioLossless, "Audio / FLAC");
AddCategoryMapping(25, TorznabCatType.AudioMP3, "Audio / MP3");
AddCategoryMapping(44, TorznabCatType.TVUHD, "Serienpacks / 2160p");
AddCategoryMapping(55, TorznabCatType.TVHD, "Serienpacks / 1080p");
AddCategoryMapping(56, TorznabCatType.TVHD, "Serienpacks / 720p");
AddCategoryMapping(27, TorznabCatType.TVSD, "Serienpacks / SD");
AddCategoryMapping(24, TorznabCatType.AudioLossless, "Audio / Musik / FLAC");
AddCategoryMapping(25, TorznabCatType.AudioMP3, "Audio / Musik / MP3");
AddCategoryMapping(35, TorznabCatType.AudioOther, "Audio / Other");
AddCategoryMapping(26, TorznabCatType.Audio, "Audio / Packs");
AddCategoryMapping(18, TorznabCatType.AudioAudiobook, "Audio / aBooks");
AddCategoryMapping(33, TorznabCatType.AudioVideo, "Audio / Videos");
@@ -93,7 +88,8 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(5, TorznabCatType.PCPhoneOther, "Misc / Mobile");
AddCategoryMapping(39, TorznabCatType.Other, "Misc / Bildung");
AddCategoryMapping(36, TorznabCatType.TVFOREIGN, "Englisch / TV");
AddCategoryMapping(36, TorznabCatType.TVFOREIGN, "Englisch / Serien");
AddCategoryMapping(57, TorznabCatType.TVFOREIGN, "Englisch / Serienpacks");
AddCategoryMapping(37, TorznabCatType.MoviesForeign, "Englisch / Filme");
AddCategoryMapping(47, TorznabCatType.Books, "Englisch / eBooks");
AddCategoryMapping(48, TorznabCatType.Other, "Englisch / Bildung");

View File

@@ -1470,7 +1470,7 @@ namespace Jackett.Common.Indexers
{
{ "login_username", configData.Username.Value },
{ "login_password", configData.Password.Value },
{ "login", "entry" }
{ "login", "Login" }
};
if (!string.IsNullOrWhiteSpace(cap_sid))
@@ -1483,9 +1483,10 @@ namespace Jackett.Common.Indexers
}
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, CookieHeader, true, null, LoginUrl, true);
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("class=\"logged-in-as-uname\""), () =>
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("id=\"logged-in-username\""), () =>
{
var errorMessage = result.Content;
logger.Debug(result.Content);
var errorMessage = "Unknown error message, please report";
var LoginResultParser = new HtmlParser();
var LoginResultDocument = LoginResultParser.Parse(result.Content);
var errormsg = LoginResultDocument.QuerySelector("h4[class=\"warnColor1 tCenter mrg_16\"]");
@@ -1521,7 +1522,7 @@ namespace Jackett.Common.Indexers
var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();
var results = await RequestStringWithCookies(searchUrl);
if (!results.Content.Contains("class=\"logged-in-as-uname\""))
if (!results.Content.Contains("id=\"logged-in-username\""))
{
// re login
await ApplyConfiguration(null);

View File

@@ -81,7 +81,7 @@ namespace Jackett.Common.Models
getTorznabElement("magneturl", r.MagnetUri),
getTorznabElement("rageid", r.RageID),
getTorznabElement("thetvdb", r.TVDBId),
getTorznabElement("imdb", r.Imdb),
getTorznabElement("imdb", r.Imdb == null ? null : ((long)r.Imdb).ToString("D7")),
getTorznabElement("seeders", r.Seeders),
getTorznabElement("peers", r.Peers),
getTorznabElement("infohash", r.InfoHash),

View File

@@ -261,7 +261,10 @@ namespace Jackett.Common.Utils.Clients
// URL decoding apparently is needed to, without it e.g. Demonoid download is broken
// TODO: is it always needed (not just for relative redirects)?
var newRedirectingTo = WebUtilityHelpers.UrlDecode(result.RedirectingTo, webRequest.Encoding);
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + "://" + request.RequestUri.Host);
if (newRedirectingTo.StartsWith("file:////")) // Location without protocol but with host (only add scheme)
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + ":");
else
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + "://" + request.RequestUri.Host);
logger.Debug("[MONO relative redirect bug] Rewriting relative redirect URL from " + result.RedirectingTo + " to " + newRedirectingTo);
result.RedirectingTo = newRedirectingTo;
}

View File

@@ -281,7 +281,10 @@ namespace Jackett.Common.Utils.Clients
// URL decoding apparently is needed to, without it e.g. Demonoid download is broken
// TODO: is it always needed (not just for relative redirects)?
var newRedirectingTo = WebUtilityHelpers.UrlDecode(result.RedirectingTo, webRequest.Encoding);
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + "://" + request.RequestUri.Host);
if (newRedirectingTo.StartsWith("file:////")) // Location without protocol but with host (only add scheme)
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + ":");
else
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + "://" + request.RequestUri.Host);
logger.Debug("[MONO relative redirect bug] Rewriting relative redirect URL from " + result.RedirectingTo + " to " + newRedirectingTo);
result.RedirectingTo = newRedirectingTo;
}

View File

@@ -258,7 +258,10 @@ namespace Jackett.Common.Utils.Clients
// URL decoding apparently is needed to, without it e.g. Demonoid download is broken
// TODO: is it always needed (not just for relative redirects)?
var newRedirectingTo = WebUtilityHelpers.UrlDecode(result.RedirectingTo, webRequest.Encoding);
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + "://" + request.RequestUri.Host);
if (newRedirectingTo.StartsWith("file:////")) // Location without protocol but with host (only add scheme)
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + ":");
else
newRedirectingTo = newRedirectingTo.Replace("file://", request.RequestUri.Scheme + "://" + request.RequestUri.Host);
logger.Debug("[MONO relative redirect bug] Rewriting relative redirect URL from " + result.RedirectingTo + " to " + newRedirectingTo);
result.RedirectingTo = newRedirectingTo;
}

View File

@@ -153,5 +153,32 @@ namespace Jackett.Server
}
}
}
public static void CheckEnvironmentalVariables(Logger logger)
{
//Check the users environmental variables to ensure they aren't using Mono legacy TLS
var enumerator = Environment.GetEnvironmentVariables().GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Key.ToString().Equals("MONO_TLS_PROVIDER", StringComparison.OrdinalIgnoreCase))
{
logger.Info("MONO_TLS_PROVIDER is present with a value of: " + enumerator.Value.ToString());
if (enumerator.Value.ToString().IndexOf("legacy", StringComparison.OrdinalIgnoreCase) >= 0)
{
logger.Error("The MONO_TLS_PROVIDER=legacy environment variable is not supported, please remove it.");
Environment.Exit(1);
}
}
else
{
if (enumerator.Key.ToString().IndexOf("MONO_", StringComparison.OrdinalIgnoreCase) >= 0)
{
logger.Info($"Environment variable {enumerator.Key} is present");
}
}
}
}
}
}

View File

@@ -82,6 +82,7 @@ namespace Jackett.Server
}
}
Initialisation.CheckEnvironmentalVariables(logger);
Initialisation.ProcessSettings(Settings, logger);
ISerializeService serializeService = new SerializeService();

View File

@@ -22,13 +22,13 @@
<ItemGroup>
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="FluentAssertions" Version="5.4.1" />
<PackageReference Include="FluentAssertions" Version="5.4.2" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
<PackageReference Include="NUnit" Version="3.10.1" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.8.0" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.10.0" />
</ItemGroup>

View File

@@ -96,9 +96,9 @@ namespace Jackett.Updater
{
var startInfo = new ProcessStartInfo();
startInfo.Arguments = "-15 " + pid;
startInfo.FileName = "/bin/kill";
startInfo.FileName = "kill";
Process.Start(startInfo);
System.Threading.Thread.Sleep(1000); // just sleep, WaitForExit() doesn't seem to work on mono/linux (returns immediantly).
System.Threading.Thread.Sleep(1000); // just sleep, WaitForExit() doesn't seem to work on mono/linux (returns immediantly), https://bugzilla.xamarin.com/show_bug.cgi?id=51742
exited = proc.WaitForExit(2000);
}
catch (Exception e)
@@ -247,7 +247,6 @@ namespace Jackett.Updater
"Definitions/ultrahdclub.yml",
"Definitions/infinityt.yml",
"Definitions/hachede-c.yml",
"Definitions/hd4Free.yml",
"Definitions/skytorrents.yml",
"Definitions/gormogon.yml",
"Definitions/czteam.yml",
@@ -273,6 +272,9 @@ namespace Jackett.Updater
"System.Web.Http.dll",
"System.Web.Http.Owin.dll",
"System.Web.Http.Tracing.dll",
"Definitions/torrentkim.yml",
"Definitions/horriblesubs.yml",
"Definitions/idope.yml",
};
foreach (var oldFile in oldFiles)