Compare commits

...

37 Commits

Author SHA1 Message Date
kaso17
82fd53226c Add TranceTraffic tracker 2016-12-27 19:13:01 +01:00
kaso17
77fd3e206b Cardigann: improve exception readability 2016-12-27 19:07:32 +01:00
kaso17
3989f35827 Cardigann: Don't use any default cats 2016-12-27 19:06:37 +01:00
kaso17
82376a508a RapideTracker: add details link 2016-12-27 17:09:05 +01:00
kaso17
4f9ce14e2f TorrentSyndikat: use long title 2016-12-26 15:52:26 +01:00
kaso17
60a2ffbe41 TorrentSyndikat: Add global freeleech check 2016-12-26 15:50:08 +01:00
kaso17
15598e3d66 Andraste: Add global freeleech check 2016-12-24 13:12:36 +01:00
kaso17
357be7dda9 HDClub: fix links+login 2016-12-24 08:17:27 +01:00
kaso17
a0aa77519b Add HDClub tracker 2016-12-23 17:35:30 +01:00
kaso17
f3ef590d3f Cardigann: Add support for image captchas 2016-12-23 17:18:37 +01:00
kaso17
d347ea71b8 Abnormal: attempt to fix parsing 2016-12-23 14:57:00 +01:00
kaso17
62f0bdc19c Add RapideTracker tracker 2016-12-23 14:56:31 +01:00
kaso17
e92b925eab Add FANO.IN tracker 2016-12-21 18:18:25 +01:00
kaso17
e8239f4899 IPTorrents: use encoding during login 2016-12-21 17:32:24 +01:00
kaso17
5c855d3b50 HD-Torrents: Allow alternative URLs 2016-12-20 19:45:57 +01:00
kaso17
6dfaff6aad Torrent.Md: remove description 2016-12-20 19:44:24 +01:00
kaso17
849b9e9765 Add Torrents.Md tracker 2016-12-20 19:43:08 +01:00
kaso17
eacfd53466 Add u-Torrent tracker 2016-12-20 13:20:12 +01:00
kaso17
4459697fe5 Cardigann: Don't use empty banner URLs 2016-12-20 13:18:48 +01:00
kaso17
94872affa9 Add DataScene tracker 2016-12-20 12:39:57 +01:00
kaso17
a29064e7fb Add imdb/banner/description to cached results view 2016-12-20 12:07:43 +01:00
kaso17
679cba4297 Avoid line wraps in the size column 2016-12-20 12:05:53 +01:00
kaso17
f155a21ee8 Add banner/description tooltip 2016-12-20 11:50:04 +01:00
kaso17
0913ee4934 Xtreme Zone: add banner 2016-12-20 11:48:53 +01:00
kaso17
1fa0384eb8 Add IMDB label 2016-12-20 10:01:53 +01:00
kaso17
59727fe8fc Xtreme Zone: Fix description 2016-12-20 09:40:08 +01:00
kaso17
28707fa146 ICE Torrent: fix seedersm, leechers, description imdb and add banner 2016-12-20 09:39:53 +01:00
kaso17
f408abe7a4 Cardigann: Add support for minimumratio/minimumseedtime/rageid/tvdbid/banner fields 2016-12-20 09:38:01 +01:00
kaso17
42434c35a1 Add Xtreme Zone tracker 2016-12-19 20:57:38 +01:00
kaso17
df941c54ce IPTorrents: change default URL 2016-12-19 20:25:18 +01:00
kaso17
f2eb4dacd0 ICE Torrent: Fix timezone and add details link 2016-12-19 20:24:58 +01:00
kaso17
9795587e4d Add ICE Torrent tracker 2016-12-19 19:51:54 +01:00
kaso17
15064810f8 Add TorViet tracker 2016-12-18 15:32:46 +01:00
kaso17
fbfee66c7b Shareisland: replace special characters with wildcards 2016-12-18 12:21:53 +01:00
kaso17
53e2d9e9cd Cardigann: Add support for re_replace template function
Example: {{ re_replace .Query.Keywords "[^a-zA-Z0-9]+" "%" }}
2016-12-18 12:20:33 +01:00
kaso17
49fd078a4c Add nostream tracker 2016-12-18 11:46:29 +01:00
kaso17
3dfba7c204 Add notwhat.cd tracker 2016-12-18 11:36:11 +01:00
24 changed files with 1450 additions and 23 deletions

View File

@@ -34,10 +34,12 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* BTN
* CinemaZ
* DanishBits
* DataScene
* Demonoid
* DigitalHive
* EoT-Forum
* Ethor.net (Thor's Land)
* FANO.IN
* FileList
* Freaks Tracking System
* Freshon
@@ -48,10 +50,12 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* HD4Free
* HD-Space
* HD-Torrents
* HDClub
* Hebits
* New Real World
* Hounddawgs
* House-of-Torrents
* ICE Torrent
* ILoveTorrents
* Immortalseed
* IPTorrents
@@ -63,12 +67,15 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* NetHD
* NextGen
* Norbits
* nostream
* notwhat.cd
* PassTheHeadphones
* PassThePopcorn
* PirateTheNet
* Pretome
* PrivateHD
* QcTorrent
* RapideTracker
* RevolutionTT
* SceneAccess
* SceneFZ
@@ -90,19 +97,23 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* TorrentDay
* TorrentHeaven
* TorrentLeech
* Torrents.Md
* TorrentShack
* Torrent-Syndikat
* ToTheGlory
* TranceTraffic
* TransmitheNet
* Tspate
* TV Chaos UK
* TV-Vault
* u-Torrent
* UHDBits
* World-In-HD
* WorldOfP2P
* x264
* XSpeeds
* Xthor
* Xtreme Zone
#### Installation on Windows

View File

@@ -227,8 +227,20 @@ pre {
display: none;
}
.table td.fit{
table td.fit{
white-space: nowrap;
width: 1%;
}
.label-imdb {
background-color: #d0ab44;
}
.tooltip-inner {
max-width: 500px !important;
}
.tooltip-inner img {
max-width: 250px;
height: auto;
}

View File

@@ -492,11 +492,33 @@ function clearNotifications() {
function updateReleasesRow(row)
{
var labels = $(row).find("span.release-labels");
var TitleLink = $(row).find("td.Title > a");
var IMDBId = $(row).data("imdb");
var Banner = $(row).data("banner");
var Description = $(row).data("description");
var DownloadVolumeFactor = parseFloat($(row).find("td.DownloadVolumeFactor").html());
var UploadVolumeFactor = parseFloat($(row).find("td.UploadVolumeFactor").html());
var TitleTooltip = "";
if (Banner)
TitleTooltip += "<img src='" + Banner + "' /><br />";
if (Description)
TitleTooltip += Description;
if (TitleTooltip) {
TitleLink.data("toggle", "tooltip");
TitleLink.tooltip({
title: TitleTooltip,
html: true
});
}
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>');
}
if (!isNaN(DownloadVolumeFactor)) {
if (DownloadVolumeFactor == 0) {
labels.append('\n<span class="label label-success">FREELEECH</span>');

View File

@@ -287,15 +287,15 @@
</thead>
<tbody>
{{#each releases}}
<tr class="jackett-releases-row">
<tr class="jackett-releases-row" data-imdb="{{Imdb}}" data-banner="{{BannerUrl}}" data-description="{{Description}}">
<td>{{PublishDate}}</td>
<td>{{FirstSeen}}</td>
<td>{{jacketTimespan PublishDate}}</td>
<td>{{jacketTimespan FirstSeen}}</td>
<td>{{Tracker}}</td>
<td><a href="{{Comments}}">{{Title}}</a> <span class="release-labels"></span></td>
<td class="Title"><a href="{{Comments}}">{{Title}}</a> <span class="release-labels"></span></td>
<td>{{Size}}</td>
<td>{{jacketSize Size}}</td>
<td class="fit">{{jacketSize Size}}</td>
<td>{{Files}}</td>
<td>{{CategoryDesc}}</td>
<td>{{Grabs}}</td>
@@ -400,13 +400,13 @@
</thead>
<tbody>
{{#each Results}}
<tr class="jackett-search-results-row">
<tr class="jackett-search-results-row" data-imdb="{{Imdb}}" data-banner="{{BannerUrl}}" data-description="{{Description}}">
<td>{{PublishDate}}</td>
<td>{{jacketTimespan PublishDate}}</td>
<td>{{Tracker}}</td>
<td><a href="{{Comments}}">{{Title}}</a> <span class="release-labels"></span></td>
<td class="Title"><a href="{{Comments}}">{{Title}}</a> <span class="release-labels"></span></td>
<td>{{Size}}</td>
<td>{{jacketSize Size}}</td>
<td class="fit">{{jacketSize Size}}</td>
<td>{{Files}}</td>
<td>{{CategoryDesc}}</td>
<td>{{Grabs}}</td>

View File

@@ -0,0 +1,118 @@
---
site: datascene
name: DataScene
language: ro-ro
encoding: windows-1252
links:
- http://datascene.net/
caps:
categories:
3: TV/Anime # Anime | Cartoon
15: PC/0day # Appz | Win
4: PC/0day # Appz | Linux
6: Books # E-Book
10: PC/Games # Games | PC Iso
9: PC/Games # Games | PC Rips
11: Console # Games | Pack
43: Console # Games | Console
29: Other # Images
2: Other # MiSC
5: PC/Phone-Other # Mobile
27: Movies # Movies | Pack
46: Movies/3D # Movies | 3D
26: Movies/SD # Movies | Cam
25: Movies # Movies | Documentary
24: Movies/DVD # Movies | DVD-R
32: Movies/DVD # Movies | DVD-RO
23: Movies/HD # Movies | HD
31: Movies/HD # Movies | HD-Ro
34: Movies/Foreign # Movies | Hindi
30: Movies/SD # Movies | Xvid
36: Movies/SD # Movies | Xvid-Ro
21: Audio/Video # Music | Video
19: Audio # Music | Mp3/Flac
18: Other # Other
42: Other # Premiera | DsT
14: TV/Sport # Sport
47: TV/SD # Tv | Episodes
28: TV/HD # Tv-HD | Episodes
13: Other # Tutoriale
12: XXX # XxX
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
ratio:
path: /browse.php
selector: font:contains("Ratio:") > span
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: tr:has(a.tname)
fields:
title:
selector: a.tname
attribute: title
details:
selector: a.tname
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="/download.php/"]
attribute: href
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(6)
date:
selector: td:nth-child(2) > right > div:has(font:contains("Uploaded"))
remove: div > font
filters:
- name: trim
args: ":"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
banner:
selector: a.tname
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
"img[src=\"pic/free.gif\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2) > right
remove: div

View File

@@ -0,0 +1,127 @@
---
site: fanoin
name: FANO.IN
language: lv-lv
encoding: UTF-8
links:
- https://www.fano.in
caps:
categories:
20: Movies/SD # Movies/SD
6: TV/SD # TV/SD
7: PC/Games # Games/PC ISO
5: Audio # Music
47: Movies # Packs/Movies
44: Audio/Audiobook # A-Books
27: TV/Anime # Anime
17: Movies/Foreign # Movies/Rus
33: TV/Foreign # TV/Rus
12: PC/Games # Games/PC Rips
31: Audio/Lossless # Music/HQ
49: TV # Packs/TV
41: Books # E-Books
29: Books # Cartoons
24: Movies/Foreign # Movies/Lat
25: TV/Foreign # TV/Lat
34: Console/Xbox # Games/Xbox
19: Audio/Video # Music Videos
46: Console # Packs/Games
42: Other # Study
52: Movies/3D # 3D
37: Movies/HD # Movies/HD
35: TV/HD # TV/HD
43: Console/PS4 # Games/PS
38: PC/Phone-Other # Mobile
48: Audio # Packs/Music
36: Other # X-mas
53: Movies/SD # Movies/CAM
4: Movies/DVD # Movies/DVD-R
32: TV # TV/Facts
40: Console/Wii # Games/Wii
22: PC/0day # Appz/misc
50: XXX/Packs # Packs/XXX
9: XXX # XXX
45: XXX # XXX/HD
54: Movies # Movies/Retro
23: TV/Sport # TV/Sport
51: Console # Games/Misc
1: PC/0day # Appz/PC ISO
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: browse_old.php
ratio:
path: browse_old.php
selector: img[title="Reitings:"]+font
search:
path: browse_old.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: tr.browse_actions
fields:
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse_old.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php", "download.php"]
imdb:
selector: a[href^="http://www.imdb.com/title/"]
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: td:nth-child(2) > small:nth-last-child(2)
filters:
- name: replace
args: ["Šodien", "Today"]
- name: replace
args: ["Vakar", "Yesterday"]
downloadvolumefactor:
case:
img[alt="Free"]: "0"
"*": "1"
uploadvolumefactor:
case:
img[alt="x2"]: "2"
"*": "1"
description:
selector: td:nth-child(2) > small:nth-last-child(1)
remove: a[href^="details.php?id="]

View File

@@ -0,0 +1,97 @@
---
site: hdclub
name: HDClub
language: ru-ru
encoding: windows-1251
links:
- http://hdclub.org
caps:
categories:
70: Movies # Animation
71: Movies # Movie
81: Audio # HD Audio
78: TV/Documentary # Documentary
68: Audio/Video # Music Video
64: TV # TV Show
62: TV/Sport # Sport
82: Other # Demo
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img#captcha
input: imagestring
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded > div.error
test:
path: browse.php
selector: td.main_bottom
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
dsearch: ""
stype: "or"
incldead: "1"
webdl: "0"
3d: "0"
rows:
selector: tbody#highlighted > tr
fields:
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php", "download.php"]
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
date:
selector: div#frame > div#cleft > font
filters:
- name: append
args: " +02:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
grabs:
selector: td:nth-child(7) b
filters:
- name: regexp
args: ([\d,]+)
size:
selector: td:nth-child(7)
remove: a, br, b
downloadvolumefactor:
case:
img[src="pic/freedownload.gif"]: "0"
img[src="pic/silver.gif"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,129 @@
---
site: icetorrent
name: ICE Torrent
language: ro-ro
encoding: UTF-8
links:
- https://www.icetorrent.org
caps:
categories:
1: PC/0day # Appz
85: Audio/Audiobook # AudioBooks
68: Books # Carti/Reviste
23: Books # Cartoons
73: Audio/Video # Concert/Videoclip
75: Other # Diverse
69: Books # Documentare
51: TV/Documentary # Documentaries
43: Books # eBooks
63: Movies/DVD # Filme DVD
65: Movies/HD # Filme HD
64: Movies/SD # Filme Xvid
40: Console # Games/Console
26: PC/Games # Games/PC
38: PC/Phone-Other # Mobile
59: Movies/3D # Movies/3D
92: Movies/HD # Movies/4K-UHD
32: Movies/BluRay # Movies/Blu-Ray
28: Movies/DVD # Movies/DVD
42: Movies/HD # Movies/HD-x264
91: Movies/HD # Movies/HEVC-x265
79: Movies/HD # Movies/microHD
29: Movies/SD # Movies/SD
72: Audio/Lossless # Music/FLAC
6: Audio/MP3 # Music/MP3
37: Audio/Video # Music/Video
70: Audio/Lossless # Muzica FLAC
71: Audio/MP3 # Muzica MP3
74: Other # Other
41: Other # Pictures
67: TV # Seriale TV
48: TV/Sport # Sports
87: Other # TUTS
33: TV/SD # TV Episodes
34: TV/HD # TVHD Episodes
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: font:contains("failed") + table
test:
path: /browse.php
ratio:
text: -1
search:
path: /browse.php
inputs:
cat: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
search_by: "name"
rows:
selector: td.torrenttable > table > tbody > tr:has(a[title][href^="details.php?id="])
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
details:
selector: a[title][href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
imdb:
selector: a[title="IMDB"]
attribute: href
banner:
attribute: rel
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(5) > a
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(5)
remove: a
date:
selector: td:nth-child(2) > div
filters:
- name: replace
args: ["Added on: ", ""]
- name: trim
args: "\xA0"
- name: append
args: " +03:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
grabs:
selector: td:nth-child(6)
downloadvolumefactor:
case:
"*": "0"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2)
remove: a[title][href^="details.php?id="], div
seeders:
text: "9999"
leechers:
text: "9999"

View File

@@ -0,0 +1,167 @@
---
site: rapidetracker
name: RapideTracker
language: fr-fr
encoding: UTF-8
links:
- https://rapidetracker.net
caps:
categories:
218: PC/0day # APPLICATION
219: PC/Phone-Android # ANDROID
221: PC/Phone-IOS # APPLE
220: PC/0day # WINDOWS
233: Movies/SD # CAM/SCREENER
234: Movies/SD # CAM-TS
235: Movies/SD # DVD-SCREENER
222: TV/Anime # DESSINS ANIMES
260: TV/Anime # ANIMATION
225: TV/Anime # JAP-ANIM
226: TV/Anime # SERIE-ANIME
206: Books # E-BOOK
240: Books # AUDIO
239: Books # BD
241: Books # LIVRE
208: Books # MANGA
209: Books # PRESSE
207: XXX # XXX
213: TV # EMISSIONS TV
215: TV/Documentary # DOC
214: TV # EMISSIONS
216: TV # SPECTACLE
217: TV/Sport # SPORT
176: Movies/SD # FILMS
178: Movies/SD # BDRIP
179: Movies/SD # BRRIP
245: Movies/SD # COFFRET FILMS
183: Movies/DVD # DVD-R
182: Movies/DVD # DVDRIP
252: Movies/SD # FILMS-VO
246: Movies/SD # FILMS-X265
184: Movies/SD # HORREUR
199: Movies/SD # RETRO
186: Movies/SD # VOSTFR
198: Movies/SD # WEB-RiP
210: XXX # FILMS ADULTE
212: XXX # HENTAI
211: XXX # FILMS XXX
200: Movies/HD # FILMS HD
201: Movies/HD # 1080p
202: Movies/3D # 3D
203: Movies/HD # 720p
242: Movies/BluRay # BLURAY
204: Movies/HD # HD-RIP
238: Movies/HD # M-HD 1080P
237: Movies/HD # M-HD 720P
255: Movies/HD # REMUX
191: Console # JEUX
192: Console/NDS # DS-3DS
193: PC/Games # PC
194: Console/PS3 # PS3
195: Console/Wii # WII
196: Console/Wii # WIIU
197: Console/XBox360 # XBox360
187: Audio # MUSIQUE
189: Audio # CONCERT
190: Audio/Lossless # FLAC
188: Audio/MP3 # MP3
227: TV # SERIE
254: TV # SERIE-VO
229: TV/HD # TV HD FR
230: TV/HD # TV HD VOSTFR
249: TV/HD # TV HD VOSTFR X265
243: TV # TV PACK FR
244: TV # TV PACK VOSTFR
231: TV/SD # TV VF
232: TV/SD # TV VOSTFR
236: Other # SOURD & MALENTENDANT
253: Other # TEAM-RDT
258: TV/Documentary # DOC RDT
257: Movies # FILMS RDT
256: TV # SERIE RDT
259: XXX # XXX RDT
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:has(td:contains("Une erreur est survenue"))
test:
path: browse.php
search:
path: browse.php
inputs:
do: "chercher"
keywords: "{{ .Query.Keywords }}"
search_type: "t_name"
category: "0" # multi cat search not supported
include_dead_torrents: "yes"
rows:
selector: table#sortabletable > tbody > tr:has(a[href^="https://rapidetracker.net/torrent-details-"])
fields:
download:
selector: a[href^="https://rapidetracker.net/download-torrent-"]
attribute: href
title:
selector: a[href^="https://rapidetracker.net/torrent-details-"]
details:
selector: a[href^="https://rapidetracker.net/torrent-details-"]
attribute: href
category:
selector: a[href^="https://rapidetracker.net/torrent-category-"]
attribute: href
filters:
- name: regexp
args: torrent-category-(\d+)
size:
selector: td:nth-child(4)
date:
selector: td:nth-child(2) > div > font[color="white"]
filters:
- name: replace
args: ["le ", ""]
- name: replace
args: [" à ", " "]
- name: trim
args: "\t"
- name: trim
args: "\n"
- name: append
args: " +01:00"
- name: dateparse
args: "02-01-2006 15:04 -07:00"
grabs:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[alt^="Free Torrent "]: "0"
img[alt^="Silver Torrent "]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -75,7 +75,7 @@
p: "torrents"
pid: "32"
$raw: "{{range .Categories}}cid[]:{{.}}&{{end}}"
keywords: "{{ .Query.Keywords }}"
keywords: "{{ re_replace .Query.Keywords \"[^a-zA-Z0-9]+\" \"%\" }}"
search_type: "name"
searchin: "title"

View File

@@ -0,0 +1,93 @@
---
site: torrentsmd
name: Torrents.Md
language: ru-mo
encoding: UTF-8
links:
- https://torrentsmd.com/
caps:
categories:
1: Movies # Filme
2: Audio # Muzică
3: PC # Software
4: Console # Jocuri
5: TV # Tv
7: Other # Alte
8: Books # Cărţi
9: Audio/Video # Muzică video
10: TV/Anime # Anime
11: Movies # Filme animate
12: Movies/DVD # DVD
13: Movies # Filme documentare
14: Audio/Audiobook # Cărţi audio
15: Other # Lecţii video
16: Other # Fotografii
17: TV/Sport # Sport
18: TV/HD # HDTV
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("eşuată"))
test:
path: browse.php
search:
path: "{{if .Query.Keywords}}search.php{{else}}browse.php{{end}}"
inputs:
search_str: "{{ .Query.Keywords }}"
rows:
selector: table.tableTorrents > tbody > tr:has(a[href^="/details.php?id="])
fields:
title:
selector: a[href^="/details.php?id="]
details:
selector: a[href^="/details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="/details.php?id="]
attribute: href
filters:
- name: replace
args: ["/details.php", "/download.php"]
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(5)
filters:
- name: replace
args: ["ore", "hours ago"]
- name: replace
args: ["minute", "minutes ago"]
- name: dateparse
args: "01-02 2006"
- name: dateparse
args: "01-02"
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,129 @@
---
site: torviet
name: TorViet
language: vi-vn
encoding: UTF-8
links:
- http://torviet.com
caps:
categories:
1: Console # Game
7: PC/Games # PC
133: PC/Phone-Other # Handheld
132: Console # Console
2: Movies # Movie
23: Movies/HD # mHD
24: Movies/SD # SD
124: Movies/HD # 720p
125: Movies/HD # 1080p
127: Movies/BluRay # Blu-ray
3: TV # TV
128: TV/HD # HD
129: TV/SD # SD
4: PC # Software
76: PC/0day # Windows
77: PC/Mac # MAC
78: PC # Linux
79: PC/Phone-Other # Handheld
5: Audio # Music
92: Audio/Video # Music Video
126: Audio/Lossless # Lossless
130: Audio/MP3 # Lossy
131: Audio # Surround
6: Other # Misc
112: Books # Ebook
113: Other # Training Video
117: Audio/Audiobook # Audio book
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
search:
path: /torrents.php
inputs:
search: "{{ .Query.Keywords }}"
sltCategory: 0
sltSubCategory: 0 # can't sepcify multiple categorys so we're useing all always
sltGenre: 0
incldead: 1
spstate: 0
inclbookmarked: 0
search_area: 0
search_mode: 0
rows:
selector: div#idtorrent > table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[class][title]
attribute: title
details:
selector: a[class][title]
attribute: href
description:
selector: td.embedded:has(a[title])
remove: a[title]
category:
selector: a[href^="/torrents.php?sltSubCategory="]
attribute: href
filters:
- name: querystring
args: sltSubCategory
comments:
selector: td:nth-child(3) a
attribute: href
download:
selector: a[href^="/download.php?"]
attribute: href
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: td:nth-child(4)
filters:
- name: append
args: " ago"
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: "0"
img.pro_free2up: "0"
img.pro_50pctdown: "0.5"
img.pro_50pctdown2up: "0.5"
img.pro_30pctdown: "0.3"
"*": "1"
uploadvolumefactor:
case:
img.pro_50pctdown2up: "2"
img.pro_free2up: "2"
img.pro_2up: "2"
"*": "1"

View File

@@ -0,0 +1,70 @@
---
site: trancetraffic
name: TranceTraffic
language: en-us
encoding: UTF-8
links:
- https://www.trancetraffic.com
caps:
categories:
1: Audio
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: browse.php
search:
path: browse.php
inputs:
search: "{{ .Query.Keywords }}"
rows:
selector: table.main + table > tbody > tr:has(a[href^="details.php?id="])
fields:
download:
selector: a[href^="download.php/"]
attribute: href
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
text: 1
date:
selector: td:nth-child(6)
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(7)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,127 @@
---
site: utorrents
name: u-Torrent
language: ro-ro
encoding: windows-1252
links:
- http://www.u-torrents.ro/
caps:
categories:
48: Movies/3D # 3D
1: PC/0day # Appz
3: Other # Cartoons
42: TV/Documentary # Documentaries
6: Books # eBooks
11: PC/Games # Games | PC
12: Console/PS3 # Games | PS2
36: Console/PS3 # Games | PS3
40: Console/PSP # Games | PSP
25: Console/Wii # Games | Wii
16: Console/Xbox # Games | XBOX
19: PC/Phone-Other # Mobile
43: Movies/BluRay # Movies | Blu-Ray
49: Movies/BluRay # Movies | Blu-Ray-RO
7: Movies/DVD # Movies | DVD-R
2: Movies/DVD # Movies | DVD-RO
17: Movies/HD # Movies | HD
45: Movies/HD # Movies | HD-RO
21: Movies # Movies | Oldies
38: Movies # Movies | Packs
8: Movies/SD # Movies | x264
4: Movies/SD # Movies | x264-RO
10: Movies/SD # Movies | XviD
44: Movies/SD # Movies | XviD-RO
5: Audio/MP3 # Music | Mp3
39: Audio # Music | Packs
23: Audio/Video # Music | Videos
18: Other # Pictures
46: XXX/Imageset # Pictures | xxx
22: TV/Sport # Sport
50: TV # STAR
20: TV/SD # TV | Episodes
47: TV/HD # TV | Episodes HD
41: TV # TV | Packs
15: XXX # xXx
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
ratio:
path: /browse.php
selector: font:contains("Ratio:") > span
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: td.outer > table > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="download2.php"]
attribute: href
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: (\d+)
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(6)
date:
selector: td:nth-child(5)
filters:
- name: trim
args: "\xF0"
- name: append
args: " +02:00"
- name: dateparse
args: "02-01-200615:04:05 -07:00"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
banner:
selector: a[onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
button.btnfree: "0"
"*": "1"
uploadvolumefactor:
case:
button.btn2xup: "2"
"*": "1"
description:
selector: td:nth-child(2)
remove: a[href^="details.php?id="]

View File

@@ -0,0 +1,122 @@
---
site: xtremezone
name: Xtreme Zone
language: ro-ro
encoding: UTF-8
links:
- http://myxz.org/
caps:
categories:
3: TV/Anime # Anime/Hentai
1: PC/0day # Appz
9: TV/Documentary # Documentary
6: Books # eBooks
52: Console # Games-Console
11: PC/Games # Games-PC
18: Other # Images
14: PC # Linux
37: PC/Mac # Mac
19: PC/Phone-Other # Mobile
17: Movies/BluRay # Movies-BluRay
24: Movies/BluRay # Movies-BluRayRO
7: Movies/DVD # Movies-DVD
2: Movies/DVD # Movies-DVD-RO
8: Movies/HD # Movies-HD
29: Movies/HD # Movies-HD-RO
38: Movies # Movies-Packs
10: Movies/SD # Movies-SD
35: Movies/SD # Movies-SD-RO
5: Audio # Music
22: TV/Sport # Sport
43: TV/HD # TV-HD
44: TV/HD # TV-HD-RO
41: TV # TV-Packs
45: TV/SD # TV-SD
46: TV/SD # TV-SD-RO
15: XXX # XXX
47: XXX # XXX-DVD
48: XXX # XXX-HD
49: XXX/Imageset # XXX-IMGSet
50: XXX # XXX-Packs
51: XXX # XXX-SD
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(center > h2:contains(failed))
test:
path: /browse.php
ratio:
path: /browse.php
selector: font:contains("Ratio:")+font
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: table.browser > tbody > tr.browse[style]
fields:
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="dwn.php"]
attribute: href
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(6)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "02-01-200615:04:05 -07:00"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
banner:
selector: a[onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
"img[title^=\"FreeLech: \"]": "0"
"img[title^=\"HALF: \"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"img[title^=\"2xUP: \"]": "2"
"*": "1"
description:
selector: td:nth-child(2)
remove: a, img

View File

@@ -311,11 +311,11 @@ namespace Jackett.Indexers
output("Category: " + MapTrackerCatToNewznab(categoryID) + " (" + categoryID + ")");
// Seeders
int seeders = ParseUtil.CoerceInt(Regex.Match(tRow.Find("td:eq(6)").Text(), @"\d+").Value);
int seeders = ParseUtil.CoerceInt(Regex.Match(tRow.Find("td:eq(5)").Text(), @"\d+").Value);
output("Seeders: " + seeders);
// Leechers
int leechers = ParseUtil.CoerceInt(Regex.Match(tRow.Find("td:eq(7)").Text(), @"\d+").Value);
int leechers = ParseUtil.CoerceInt(Regex.Match(tRow.Find("td:eq(6)").Text(), @"\d+").Value);
output("Leechers: " + leechers);
// Completed

View File

@@ -129,6 +129,7 @@ namespace Jackett.Indexers
try
{
CQ dom = results;
var globalFreeleech = dom.Find("div > img[alt=\"Only Upload\"][title^=\"ONLY UPLOAD \"]").Any();
var rows = dom["table.tableinborder > tbody > tr:has(td.tableb)"];
foreach (var row in rows)
@@ -186,7 +187,9 @@ namespace Jackett.Indexers
var grabs = qRow.Find("a[href*=\"&tosnatchers=1\"] ~ font ~ b").Text();
release.Grabs = ParseUtil.CoerceInt(grabs);
if (qRow.Find("img[alt=\"OU\"]").Length >= 1)
if (globalFreeleech)
release.DownloadVolumeFactor = 0;
else if (qRow.Find("img[alt=\"OU\"]").Length >= 1)
release.DownloadVolumeFactor = 0;
else
release.DownloadVolumeFactor = 1;

View File

@@ -66,6 +66,13 @@ namespace Jackett.Indexers
public Dictionary<string, List<string>> Modes { get; set; }
}
public class captchaBlock
{
public string Type { get; set; }
public string Image { get; set; }
public string Input { get; set; }
}
public class loginBlock
{
public string Path { get; set; }
@@ -74,6 +81,7 @@ namespace Jackett.Indexers
public Dictionary<string, string> Inputs { get; set; }
public List<errorBlock> Error { get; set; }
public pageTestBlock Test { get; set; }
public captchaBlock Captcha { get; set; }
}
public class errorBlock
@@ -130,7 +138,7 @@ namespace Jackett.Indexers
public string Selector { get; set; }
}
protected readonly string[] OptionalFileds = new string[] { "imdb" };
protected readonly string[] OptionalFileds = new string[] { "imdb", "rageid", "tvdbid", "banner" };
public CardigannIndexer(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps)
: base(manager: i,
@@ -182,7 +190,7 @@ namespace Jackett.Indexers
if (!SiteLink.EndsWith("/"))
SiteLink += "/";
Language = Definition.Language;
TorznabCaps = TorznabUtil.CreateDefaultTorznabTVCaps(); // TODO implement caps
TorznabCaps = new TorznabCapabilities();
// init config Data
configData = new ConfigurationData();
@@ -224,6 +232,26 @@ namespace Jackett.Indexers
variables = getTemplateVariablesFromConfigData();
}
// handle re_replace expression
// Example: {{ re_replace .Query.Keywords "[^a-zA-Z0-9]+" "%" }}
Regex ReReplaceRegex = new Regex(@"{{\s*re_replace\s+(\..+?)\s+""(.+)""\s+""(.+?)""\s*}}");
var ReReplaceRegexMatches = ReReplaceRegex.Match(template);
while (ReReplaceRegexMatches.Success)
{
string all = ReReplaceRegexMatches.Groups[0].Value;
string variable = ReReplaceRegexMatches.Groups[1].Value;
string regexp = ReReplaceRegexMatches.Groups[2].Value;
string newvalue = ReReplaceRegexMatches.Groups[3].Value;
Regex ReplaceRegex = new Regex(regexp);
var input = (string)variables[variable];
var expanded = ReplaceRegex.Replace(input, newvalue);
template = template.Replace(all, expanded);
ReReplaceRegexMatches = ReReplaceRegexMatches.NextMatch();
}
// handle if ... else ... expression
Regex IfElseRegex = new Regex(@"{{if\s*(.+?)\s*}}(.*?){{\s*else\s*}}(.*?){{\s*end\s*}}");
var IfElseRegexMatches = IfElseRegex.Match(template);
@@ -447,6 +475,17 @@ namespace Jackett.Indexers
pairs["submitme"] = "X";
}
if (Login.Captcha != null)
{
var Captcha = Login.Captcha;
if (Captcha.Type == "image")
{
var CaptchaText = (StringItem)configData.GetDynamic("CaptchaText");
if (CaptchaText != null)
pairs[Captcha.Input] = CaptchaText.Value;
}
}
// clear landingResults/Document, otherwise we might use an old version for a new relogin (if GetConfigurationForSetup() wasn't called before)
landingResult = null;
landingResultDocument = null;
@@ -570,6 +609,34 @@ namespace Jackett.Indexers
configData.AddDynamic("Captcha", CaptchaItem);
}
if (Login.Captcha != null)
{
var Captcha = Login.Captcha;
if (Captcha.Type == "image")
{
var captchaElement = landingResultDocument.QuerySelector(Captcha.Image);
if (captchaElement != null) {
var CaptchaUrl = resolvePath(captchaElement.GetAttribute("src"));
var captchaImageData = await RequestBytesWithCookies(CaptchaUrl.ToString(), landingResult.Cookies);
var CaptchaImage = new ImageItem { Name = "Captcha Image" };
var CaptchaText = new StringItem { Name = "Captcha Text" };
logger.Error("captchaImageData Cookies: " + captchaImageData.Cookies);
CaptchaImage.Value = captchaImageData.Content;
configData.AddDynamic("CaptchaImage", CaptchaImage);
configData.AddDynamic("CaptchaText", CaptchaText);
}
else
{
logger.Debug(string.Format("CardigannIndexer ({0}): No captcha image found", ID));
}
}
else
{
throw new NotImplementedException(string.Format("Captcha type \"{0}\" is not implemented", Captcha.Type));
}
}
return configData;
}
@@ -933,12 +1000,36 @@ namespace Jackett.Indexers
case "uploadvolumefactor":
release.UploadVolumeFactor = ParseUtil.CoerceDouble(value);
break;
case "minimumratio":
release.MinimumRatio = ParseUtil.CoerceDouble(value);
break;
case "minimumseedtime":
release.MinimumSeedTime = ParseUtil.CoerceLong(value);
break;
case "imdb":
Regex IMDBRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
var IMDBMatch = IMDBRegEx.Match(value);
var IMDBId = IMDBMatch.Groups[1].Value;
release.Imdb = ParseUtil.CoerceLong(IMDBId);
break;
case "rageid":
Regex RageIDRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
var RageIDMatch = RageIDRegEx.Match(value);
var RageID = RageIDMatch.Groups[1].Value;
release.RageID = ParseUtil.CoerceLong(RageID);
break;
case "tvdbid":
Regex TVDBIdRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
var TVDBIdMatch = TVDBIdRegEx.Match(value);
var TVDBId = TVDBIdMatch.Groups[1].Value;
release.TVDBId = ParseUtil.CoerceLong(TVDBId);
break;
case "banner":
if(!string.IsNullOrWhiteSpace(value)) {
var bannerurl = resolvePath(value);
release.BannerUrl = bannerurl;
}
break;
default:
break;
}
@@ -981,7 +1072,7 @@ namespace Jackett.Indexers
}
catch (Exception ex)
{
logger.Error(string.Format("CardigannIndexer ({0}): Error while parsing row '{1}': {2}", ID, Row.OuterHtml, ex));
logger.Error(string.Format("CardigannIndexer ({0}): Error while parsing row '{1}':\n\n{2}", ID, Row.OuterHtml, ex));
}
}
}

View File

@@ -21,29 +21,35 @@ namespace Jackett.Indexers
{
public class HDTorrents : BaseIndexer, IIndexer
{
private string SearchUrl { get { return SiteLink + "torrents.php?"; } }
private string LoginUrl { get { return SiteLink + "login.php"; } }
private string UseLink { get { return (!String.IsNullOrEmpty(this.configData.AlternateLink.Value) ? this.configData.AlternateLink.Value : SiteLink); } }
private string SearchUrl { get { return UseLink + "torrents.php?"; } }
private string LoginUrl { get { return UseLink + "login.php"; } }
private const int MAXPAGES = 3;
private List<String> KnownURLs = new List<String> { "https://hdts.ru/", "https://hd-torrents.org/", "https://hd-torrents.net/", "https://hd-torrents.me/" };
new ConfigurationDataBasicLogin configData
new ConfigurationDataBasicLoginWithAlternateLink configData
{
get { return (ConfigurationDataBasicLogin)base.configData; }
get { return (ConfigurationDataBasicLoginWithAlternateLink)base.configData; }
set { base.configData = value; }
}
public HDTorrents(IIndexerManagerService i, Logger l, IWebClient w, IProtectionService ps)
: base(name: "HD-Torrents",
description: "HD-Torrents is a private torrent website with HD torrents and strict rules on their content.",
link: "http://hdts.ru/",// Of the accessible domains the .ru seems the most reliable. https://hdts.ru | https://hd-torrents.org | https://hd-torrents.net | https://hd-torrents.me
link: "https://hdts.ru/",// Of the accessible domains the .ru seems the most reliable. https://hdts.ru | https://hd-torrents.org | https://hd-torrents.net | https://hd-torrents.me
manager: i,
client: w,
logger: l,
p: ps,
configData: new ConfigurationDataBasicLogin())
configData: new ConfigurationDataBasicLoginWithAlternateLink())
{
Encoding = Encoding.GetEncoding("UTF-8");
Language = "en-us";
this.configData.Instructions.Value = this.DisplayName + " has multiple URLs. The default (" + this.SiteLink + ") can be changed by entering a new value in the box below.";
this.configData.Instructions.Value += "The following are some known URLs for " + this.DisplayName;
this.configData.Instructions.Value += "<ul><li>" + String.Join("</li><li>", this.KnownURLs.ToArray()) + "</li></ul>";
TorznabCaps.Categories.Clear();
AddCategoryMapping("1", TorznabCatType.MoviesHD);// Movie/Blu-Ray
@@ -71,6 +77,9 @@ namespace Jackett.Indexers
public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
configData.LoadValuesFromJson(configJson);
if (!string.IsNullOrWhiteSpace(configData.AlternateLink.Value) && !configData.AlternateLink.Value.EndsWith("/"))
configData.AlternateLink.Value += "/";
var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty);
var pairs = new Dictionary<string, string> {

View File

@@ -36,7 +36,7 @@ namespace Jackett.Indexers
public IPTorrents(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps)
: base(name: "IPTorrents",
description: "Always a step ahead.",
link: "https://ipt-update.com/",
link: "https://iptorrents.com/",
caps: new TorznabCapabilities(),
manager: i,
client: wc,
@@ -156,6 +156,7 @@ namespace Jackett.Indexers
Url = TakeLoginUrl,
Type = RequestType.POST,
Referer = UseLink,
Encoding = Encoding,
PostData = pairs
};
var response = await webclient.GetString(request);

View File

@@ -149,6 +149,7 @@ namespace Jackett.Indexers
{
CQ dom = results.Content;
var rows = dom["table.torrent_table > tbody > tr"];
var globalFreeleech = dom.Find("legend:contains(\"Freeleech\")+ul > li > b:contains(\"Freeleech\")").Any();
foreach (var row in rows.Skip(1))
{
var release = new ReleaseInfo();
@@ -168,7 +169,7 @@ namespace Jackett.Indexers
var qCommentLink = descCol.FirstElementChild.Cq();
var torrentTag = descCol.Cq().Find("span.torrent-tag");
var torrentTags = torrentTag.Elements.Select(x => x.InnerHTML).ToList();
release.Title = qCommentLink.Text();
release.Title = qCommentLink.Attr("title");
release.Description = String.Join(", ", torrentTags);
release.Comments = new Uri(SiteLink + "/" + qCommentLink.Attr("href").Replace("&hit=1", ""));
release.Guid = release.Comments;
@@ -195,7 +196,9 @@ namespace Jackett.Indexers
var grabs = qRow.Find("td:nth-child(7)").Text();
release.Grabs = ParseUtil.CoerceInt(grabs);
if (qRow.Find("span.torrent-tag-free").Length >= 1)
if (globalFreeleech)
release.DownloadVolumeFactor = 0;
else if (qRow.Find("span.torrent-tag-free").Length >= 1)
release.DownloadVolumeFactor = 0;
else
release.DownloadVolumeFactor = 1;

View File

@@ -0,0 +1,32 @@
using Jackett.Models;
using NLog;
using Jackett.Services;
using Jackett.Utils.Clients;
using Jackett.Indexers.Abstract;
namespace Jackett.Indexers
{
public class nostream : GazelleTracker, IIndexer
{
public nostream(IIndexerManagerService indexerManager, IWebClient webClient, Logger logger, IProtectionService protectionService)
: base(name: "nostream",
desc: "A music tracker",
link: "https://nostre.am/",
indexerManager: indexerManager,
logger: logger,
protectionService: protectionService,
webClient: webClient
)
{
Language = "en-us";
AddCategoryMapping(1, TorznabCatType.Audio, "Music");
AddCategoryMapping(2, TorznabCatType.PC, "Applications");
AddCategoryMapping(3, TorznabCatType.Books, "E-Books");
AddCategoryMapping(4, TorznabCatType.AudioAudiobook, "Audiobooks");
AddCategoryMapping(5, TorznabCatType.Movies, "E-Learning Videos");
AddCategoryMapping(6, TorznabCatType.TV, "Comedy");
AddCategoryMapping(7, TorznabCatType.Books, "Comics");
}
}
}

View File

@@ -0,0 +1,32 @@
using Jackett.Models;
using NLog;
using Jackett.Services;
using Jackett.Utils.Clients;
using Jackett.Indexers.Abstract;
namespace Jackett.Indexers
{
public class notwhatcd : GazelleTracker, IIndexer
{
public notwhatcd(IIndexerManagerService indexerManager, IWebClient webClient, Logger logger, IProtectionService protectionService)
: base(name: "notwhat.cd",
desc: "A music tracker",
link: "https://notwhat.cd/",
indexerManager: indexerManager,
logger: logger,
protectionService: protectionService,
webClient: webClient
)
{
Language = "en-us";
AddCategoryMapping(1, TorznabCatType.Audio, "Music");
AddCategoryMapping(2, TorznabCatType.PC, "Applications");
AddCategoryMapping(3, TorznabCatType.Books, "E-Books");
AddCategoryMapping(4, TorznabCatType.AudioAudiobook, "Audiobooks");
AddCategoryMapping(5, TorznabCatType.Movies, "E-Learning Videos");
AddCategoryMapping(6, TorznabCatType.TV, "Comedy");
AddCategoryMapping(7, TorznabCatType.Books, "Comics");
}
}
}

View File

@@ -167,6 +167,8 @@
<Compile Include="Engine.cs" />
<Compile Include="Indexers\Abstract\GazelleTracker.cs" />
<Compile Include="Indexers\AnimeTorrents.cs" />
<Compile Include="Indexers\nostream.cs" />
<Compile Include="Indexers\notwhatcd.cs" />
<Compile Include="Indexers\PassTheHeadphones.cs" />
<Compile Include="Indexers\Norbits.cs" />
<Compile Include="Indexers\TVVault.cs" />
@@ -451,6 +453,36 @@
<Content Include="Definitions\qctorrent.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\torviet.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\icetorrent.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\xtremezone.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\datascene.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\utorrents.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\torrentsmd.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\fanoin.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\rapidetracker.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\hdclub.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Definitions\trancetraffic.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="packages.config">
<SubType>Designer</SubType>
</None>