mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-11 14:19:17 +02:00
Compare commits
59 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c8466298c0 | ||
![]() |
34d6933302 | ||
![]() |
f4fc81e38b | ||
![]() |
5d4a4c05d7 | ||
![]() |
3d9225be07 | ||
![]() |
f2722789d8 | ||
![]() |
4bd9372a09 | ||
![]() |
bdc54a2c03 | ||
![]() |
78034f77b6 | ||
![]() |
df5a5d4fff | ||
![]() |
ccb1604296 | ||
![]() |
a799f640da | ||
![]() |
d43ac08372 | ||
![]() |
cfff7e4c1d | ||
![]() |
22ebc5170c | ||
![]() |
76c8dd45e3 | ||
![]() |
c8dfa99b28 | ||
![]() |
67e054468d | ||
![]() |
3afd31ea1c | ||
![]() |
ec8e141ac9 | ||
![]() |
0cd4eb2b69 | ||
![]() |
c9b4c988d7 | ||
![]() |
be4cf5e2c9 | ||
![]() |
c46cb2d8bb | ||
![]() |
d34f1558b7 | ||
![]() |
2936a1c824 | ||
![]() |
8ecace57e8 | ||
![]() |
baddd7bcff | ||
![]() |
9fa99e6ac4 | ||
![]() |
98374d4055 | ||
![]() |
d99fd72269 | ||
![]() |
cd2198bfe1 | ||
![]() |
96fef53dae | ||
![]() |
5b4df4a6d9 | ||
![]() |
5b962958ff | ||
![]() |
3c4a2adbae | ||
![]() |
af6f85fc81 | ||
![]() |
cb7a4861a0 | ||
![]() |
28db1b63f2 | ||
![]() |
928864afb2 | ||
![]() |
f19f753dd1 | ||
![]() |
2a0eb6fac7 | ||
![]() |
d0413d4acc | ||
![]() |
1a9d0fc206 | ||
![]() |
2a23f98682 | ||
![]() |
a5b7e58d26 | ||
![]() |
f2d21899e6 | ||
![]() |
60d2c425e1 | ||
![]() |
02e43bd6a9 | ||
![]() |
4a6d630076 | ||
![]() |
f11bea6429 | ||
![]() |
09e81da34c | ||
![]() |
42ca019942 | ||
![]() |
d457cd336d | ||
![]() |
c254acfc46 | ||
![]() |
6c5a005e27 | ||
![]() |
a2b1604052 | ||
![]() |
562c826cfa | ||
![]() |
af1002d57e |
2
.github/workflows/codeql-analysis.yml
vendored
2
.github/workflows/codeql-analysis.yml
vendored
@@ -35,7 +35,7 @@ on:
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: windows-latest
|
||||
runs-on: windows-2019
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
|
@@ -30,6 +30,7 @@ UninstallDisplayName={#MyAppName}
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
DisableDirPage=yes
|
||||
WizardStyle=modern
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
@@ -38,8 +39,11 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
Name: "windowsService"; Description: "Install as a Windows Service"
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
|
||||
[Dirs]
|
||||
Name: "{commonappdata}\Jackett"; Permissions: everyone-modify
|
||||
|
||||
[Files]
|
||||
Source: "{#MySourceFolder}\*"; DestDir: "{commonappdata}\Jackett"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
Source: "{#MySourceFolder}\*"; DestDir: "{commonappdata}\Jackett"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-modify
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
@@ -47,6 +51,15 @@ Name: "{group}\{#MyAppName}"; Filename: "{commonappdata}\Jackett\{#MyAppExeName}
|
||||
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
|
||||
Name: "{commondesktop}\{#MyAppName}"; Filename: "{commonappdata}\Jackett\{#MyAppExeName}"; Tasks: desktopicon
|
||||
|
||||
[Code]
|
||||
function PrepareToInstall(var NeedsRestart: Boolean): String;
|
||||
var
|
||||
ErrorCode: Integer;
|
||||
begin
|
||||
ShellExec('open', 'taskkill.exe', '/f /im {#MyAppExeName}', '', SW_HIDE, ewNoWait, ErrorCode);
|
||||
ShellExec('open', 'taskkill.exe', '/f /im JackettConsole.exe', '', SW_HIDE, ewNoWait, ErrorCode);
|
||||
end;
|
||||
|
||||
[Run]
|
||||
Filename: "{commonappdata}\Jackett\JackettConsole.exe"; Parameters: "--Uninstall"; Flags: waituntilterminated runhidden;
|
||||
Filename: "{commonappdata}\Jackett\JackettConsole.exe"; Parameters: "--ReserveUrls"; Flags: waituntilterminated runhidden;
|
||||
|
@@ -56,6 +56,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Demonoid
|
||||
* DivxTotal
|
||||
* dmhy
|
||||
* DonTorrent
|
||||
* E-Hentai
|
||||
* elitetorrent
|
||||
* EpubLibre
|
||||
@@ -136,7 +137,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* sosulki
|
||||
* SubsPlease
|
||||
* sukebei.Nyaa.si
|
||||
* TodoTorrents
|
||||
* The Pirate Bay (TPB)
|
||||
* Tokyo Tosho
|
||||
* Torlock
|
||||
@@ -581,6 +581,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Twilights Zoom
|
||||
* U2 (U2分享園@動漫花園) [![(invite needed)][inviteneeded]](#)
|
||||
* UHDBits
|
||||
* UHD-HEAVEN
|
||||
* UnionGang [![(invite needed)][inviteneeded]](#)
|
||||
* UnlimitZ
|
||||
* Vizuk
|
||||
|
@@ -288,6 +288,12 @@ function displayConfiguredIndexersList(indexers) {
|
||||
"visible": true,
|
||||
"searchable": true,
|
||||
"orderable": true
|
||||
},
|
||||
{
|
||||
"targets": 2,
|
||||
"visible": false,
|
||||
"searchable": true,
|
||||
"orderable": false
|
||||
}
|
||||
]
|
||||
});
|
||||
@@ -430,6 +436,13 @@ function displayUnconfiguredIndexersList() {
|
||||
"visible": true,
|
||||
"searchable": false,
|
||||
"orderable": false
|
||||
},
|
||||
{
|
||||
"name": "url",
|
||||
"targets": 7,
|
||||
"visible": false,
|
||||
"searchable": true,
|
||||
"orderable": false
|
||||
}
|
||||
]
|
||||
});
|
||||
|
@@ -306,11 +306,12 @@
|
||||
|
||||
<script id="configured-indexer-table" type="text/x-handlebars-template">
|
||||
<div class="tab-content configured-indexer-div">
|
||||
<table id="configured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive">
|
||||
<table id="configured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Indexer</th>
|
||||
<th>Actions</th>
|
||||
<th data-type="hiddendata">URL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -338,12 +339,15 @@
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td data-type="hiddendata">{{site_link}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="2"></td>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th data-type="hiddendata"></th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
@@ -352,7 +356,7 @@
|
||||
|
||||
<script id="unconfigured-indexer-table" type="text/x-handlebars-template">
|
||||
<div class="unconfigured-indexer-div">
|
||||
<table id="unconfigured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive">
|
||||
<table id="unconfigured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
@@ -362,6 +366,7 @@
|
||||
<th data-type="hiddendata">Type string</th>
|
||||
<th>Language</th>
|
||||
<th></th>
|
||||
<th data-type="hiddendata">URL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -389,6 +394,7 @@
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
</td>
|
||||
<td data-type="hiddendata">{{site_link}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
@@ -401,6 +407,7 @@
|
||||
<th data-type="hiddendata">Type string</th>
|
||||
<th>Language</th>
|
||||
<th></th>
|
||||
<th data-type="hiddendata">URL</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
@@ -736,6 +743,6 @@
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=2022010901"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=2022011001"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://aither.cc/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 9, cat: TV/Sport, desc: "Sport"}
|
||||
@@ -58,6 +57,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -73,19 +82,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Movie": 1
|
||||
"Sport": 9
|
||||
"TV": 2
|
||||
"Music": 3
|
||||
"Games": 4
|
||||
"Software & Apps": 10
|
||||
"Ebooks & Magazines": 11
|
||||
"Audiobooks": 14
|
||||
"Education": 15
|
||||
"XXX": 6
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -97,8 +95,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://animeworld.cx/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/Other, desc: "Anime Filme"}
|
||||
- {id: 2, cat: TV/Anime, desc: "Anime Serien"}
|
||||
@@ -63,6 +62,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -78,24 +87,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Anime Filme": 1
|
||||
"Anime Serien": 2
|
||||
"Anime Musik / OSTs": 3
|
||||
"Anime Spiele": 4
|
||||
"Anime Hentai": 5
|
||||
"Software": 6
|
||||
"Sonstiges": 7
|
||||
"Serien": 9
|
||||
"Spiele": 10
|
||||
"Musik": 11
|
||||
"Manga": 12
|
||||
"Cartoon Filme": 13
|
||||
"Cartoon Serie": 14
|
||||
"H-Manga / Doujinshi": 15
|
||||
"Filme": 8
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -107,8 +100,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://blutopia.xyz/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV Show"}
|
||||
@@ -50,14 +49,33 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
|
||||
- path: "/api/torrents/filter"
|
||||
response:
|
||||
type: json
|
||||
attribute: attributes
|
||||
inputs:
|
||||
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
name: "{{ .Keywords }}"
|
||||
$raw: "{{ if .Query.Season }}&seasonNumber={{ .Query.Season }}{{ else }}{{ end }}{{ if .Query.Ep }}&episodeNumber={{ .Query.Ep }}{{ else }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -69,13 +87,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
Movie: 1
|
||||
TV Show: 2
|
||||
FANRES: 3
|
||||
Trailer: 5
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -87,8 +100,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
@@ -130,4 +141,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 7 day (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 5.3.1b
|
||||
# json UNIT3D 6.0.0 beta
|
||||
|
@@ -9,13 +9,12 @@ links:
|
||||
- https://brsociety.club/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: TV, desc: "Cursos (courses)"}
|
||||
- {id: 1, cat: TV, desc: "Cursos"}
|
||||
- {id: 2, cat: Books/EBook, desc: "eBooks"}
|
||||
- {id: 5, cat: Books/Mags, desc: "Revistas (Magazines)"}
|
||||
- {id: 5, cat: Books/Mags, desc: "Revistas"}
|
||||
- {id: 3, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
- {id: 4, cat: Other, desc: "Arquivos de Auxilio (Help Files)"}
|
||||
- {id: 4, cat: Other, desc: "Arquivos de Auxilio"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -51,6 +50,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -66,14 +75,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Cursos": 1
|
||||
"eBooks": 2
|
||||
"Revistas": 5
|
||||
"Audiobooks": 3
|
||||
"Arquivos de Auxilio": 4
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -90,8 +93,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -7,7 +7,7 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://cpasbien.to/
|
||||
- https://www.cpasbien.gg/
|
||||
legacylinks:
|
||||
- https://www1.cpasbiens.ws/
|
||||
- https://www2.cpasbiens.ws/
|
||||
@@ -19,6 +19,7 @@ legacylinks:
|
||||
- https://cpasbiens.proxyportal.fun/
|
||||
- https://cpasbiens.uk-unblock.xyz/
|
||||
- https://cpasbiens.ind-unblock.xyz/
|
||||
- https://cpasbien.to/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -12,9 +12,8 @@ legacylinks:
|
||||
- https://datascene.net/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: PC/Games, desc: "Game"}
|
||||
@@ -59,6 +58,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -74,17 +83,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Movie": 1
|
||||
"TV": 2
|
||||
"Music": 3
|
||||
"Game": 4
|
||||
"Application": 5
|
||||
"XXX": 6
|
||||
"Mobile": 7
|
||||
"E-Book": 8
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -96,8 +96,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -10,7 +10,6 @@ links:
|
||||
- https://desitorrents.rocks/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
@@ -51,6 +50,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -70,12 +79,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
Movies: 1
|
||||
TV: 2
|
||||
Music: 3
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -87,8 +92,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -15,6 +15,7 @@ caps:
|
||||
- {id: 64, cat: Books/EBook, desc: "Books"}
|
||||
- {id: 66, cat: Books, desc: "Business"}
|
||||
- {id: 68, cat: Books/Comics, desc: "Comics"}
|
||||
- {id: 80, cat: Books, desc: "Coooking"}
|
||||
- {id: 59, cat: TV/Documentary, desc: "Docs/Movies"}
|
||||
- {id: 60, cat: TV/Documentary, desc: "Docs/TV"}
|
||||
- {id: 79, cat: TV, desc: "Educational"}
|
||||
|
@@ -242,8 +242,8 @@ caps:
|
||||
- {id: 307, cat: Books/Other, desc: "VIP: Thriller"}
|
||||
- {id: 306, cat: Books/Other, desc: "VIP: Mystery"}
|
||||
- {id: 308, cat: Books/Other, desc: "VIP: Crime"}
|
||||
- {id: 309, cat: Books/Other, desc: "VIP: Fantasy "}
|
||||
- {id: 204, cat: Books/Other, desc: "VIP: Collections "}
|
||||
- {id: 309, cat: Books/Other, desc: "VIP: Fantasy"}
|
||||
- {id: 204, cat: Books/Other, desc: "VIP: Collections"}
|
||||
- {id: 205, cat: Books/Other, desc: "VIP: Audiobooks"}
|
||||
- {id: 206, cat: Books/Other, desc: "VIP: Comics"}
|
||||
- {id: 207, cat: Books/Other, desc: "VIP: Computers"}
|
||||
@@ -274,6 +274,10 @@ settings:
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: vip
|
||||
type: checkbox
|
||||
label: Include VIP results
|
||||
default: true
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -316,10 +320,9 @@ search:
|
||||
paths:
|
||||
- path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ if .Keywords }}\"{{ .Keywords }}\"{{ else }}{{ end }}"
|
||||
# 0 only active 1 incl dead 2 only dead
|
||||
incldead: 0
|
||||
incldead: 1
|
||||
# 0 all 1 not freeleech 2 only freeleech
|
||||
freeleech: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 all 1 english 2 french 3 german 4 italian 5 japanese 6 spanish 7 russian 8 other
|
||||
@@ -328,7 +331,7 @@ search:
|
||||
order: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: tr.t-row
|
||||
selector: "tr.t-row{{ if .Config.vip }}{{ else }}:not(:has(a[href^=\"torrents.php?cat=\"]):contains(\"VIP\")){{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -18,10 +18,11 @@ caps:
|
||||
- {id: 20, cat: TV/SD, desc: "Lasten DVD (kids)"}
|
||||
- {id: 33, cat: TV/SD, desc: "Lasten XviD (kids)"}
|
||||
- {id: 11, cat: Movies/DVD, desc: "Leffat DVD (movies)"}
|
||||
- {id: 13, cat: Movies/SD, desc: "Leffat XviD (movies)"}
|
||||
- {id: 21, cat: Movies/HD, desc: "Leffat HD (movies)"}
|
||||
- {id: 32, cat: Movies/DVD, desc: "Custom DVD (movies)"}
|
||||
- {id: 13, cat: Movies/SD, desc: "Leffat XviD (movies)"}
|
||||
- {id: 21, cat: Movies/HD, desc: "Leffat HD (movies)"}
|
||||
- {id: 32, cat: Movies/DVD, desc: "Custom DVD (movies)"}
|
||||
- {id: 42, cat: Movies, desc: "FVC"}
|
||||
- {id: 48, cat: Movies/UHD, desc: "Leffat 4K (movies)"}
|
||||
- {id: 15, cat: Audio, desc: "Musiikki (music)"}
|
||||
- {id: 12, cat: Audio/Video, desc: "Musavideot (clips)"}
|
||||
- {id: 7, cat: PC/0day, desc: "Ohjelmat Windows (apps)"}
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://www.hawke.uno/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
@@ -48,6 +47,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -63,11 +72,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
Movie: 1
|
||||
TV: 2
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -76,11 +82,11 @@ search:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: poster
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
|
175
src/Jackett.Common/Definitions/hdolimpo-api.yml
Normal file
175
src/Jackett.Common/Definitions/hdolimpo-api.yml
Normal file
@@ -0,0 +1,175 @@
|
||||
---
|
||||
id: hdolimpo-api
|
||||
name: HD-Olimpo (API)
|
||||
description: "HD-Olimpo is a SPANISH site for HD content"
|
||||
language: es-ES
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hd-olimpo.club/
|
||||
legacylinks:
|
||||
- https://hdolimpo.co/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Películas"}
|
||||
- {id: 2, cat: TV, desc: "Series"}
|
||||
- {id: 3, cat: Audio, desc: "Música"}
|
||||
- {id: 4, cat: TV/Documentary, desc: "Documentales"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your account <i>My configuration / Mi configuración => Secutiy / Seguridad</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: created_at
|
||||
options:
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
|
||||
response:
|
||||
type: json
|
||||
attribute: attributes
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: category
|
||||
title:
|
||||
selector: name
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["\\[", " "]
|
||||
- name: re_replace
|
||||
args: ["\\]", " "]
|
||||
- name: re_replace
|
||||
args: ["(?i)(full(bluray)?)", "BRDISK"] # FULL(BR/UHD) -> BRDISK
|
||||
- name: replace
|
||||
args: ["HDOlimpo", ""] # Delete HDOlimpo
|
||||
- name: replace
|
||||
args: ["HD-Olimpo", ""] # Delete HD-Olimpo
|
||||
- name: replace
|
||||
args: ["E-AC-3", "EAC3"]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)español[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)castellano[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)spa[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)esp[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)ingl[eé]s[ -]", " English "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)[ei]ng[ -]", " English "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)cat[ -]", " Catalan "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)vas[ -]", " Basque "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)fr[ae][ -]", " French "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)jap[ -]", " Japanese "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)ita[ -]", " Italian "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)rus[ -]", " Russian "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)ger[ -]", " German "]
|
||||
- name: re_replace
|
||||
args: ["(?i)(triaudio)", "MULTi/SPANiSH/English"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(dual)", " MULTi/SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["\\.+", "."] # More than 1 dot -> .
|
||||
- name: re_replace
|
||||
args: ["^\\.", ""] # Delete first dot
|
||||
- name: re_replace
|
||||
args: ["\\s+", " "] # More than 1 space to 1 space
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# 2021-10-18T00:34:50.000000Z"
|
||||
selector: created_at
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: freeleech
|
||||
case:
|
||||
0: 1 # not free
|
||||
1: 0 # freeleech
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
minimumseedtime:
|
||||
# 4 days (as seconds = 4 x 24 x 60 x 60)
|
||||
text: 345600
|
||||
# json UNIT3D ???
|
@@ -1,244 +0,0 @@
|
||||
---
|
||||
id: hdolimpo
|
||||
name: HD-Olimpo
|
||||
description: "HD-Olimpo is a SPANISH site for HD content"
|
||||
language: es-ES
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hd-olimpo.club/
|
||||
legacylinks:
|
||||
- https://hdolimpo.co/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: TV/Documentary, desc: "Documentaries"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: created_at
|
||||
options:
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: div#ERROR_COPY
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents/filter
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
|
||||
description: ""
|
||||
keywords: ""
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
tvdb: "{{ .Query.TVDBID }}"
|
||||
tmdb: "{{ .Query.TMDBID }}"
|
||||
mal: ""
|
||||
igdb: ""
|
||||
sorting: "{{ .Config.sort }}"
|
||||
direction: "{{ .Config.type }}"
|
||||
qty: 100
|
||||
page: 0
|
||||
view: list
|
||||
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="/categories/"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "/categories/(\\d+)"
|
||||
|
||||
title:
|
||||
selector: a.view-torrent
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["\\[", " "]
|
||||
- name: re_replace
|
||||
args: ["\\]", " "]
|
||||
- name: re_replace
|
||||
args: ["(?i)(full(bluray)?)", "BRDISK"] # FULL(BR/UHD) -> BRDISK
|
||||
- name: replace
|
||||
args: ["HDOlimpo", ""] # Delete HDOlimpo
|
||||
- name: replace
|
||||
args: ["HD-Olimpo", ""] # Delete HD-Olimpo
|
||||
- name: replace
|
||||
args: ["E-AC-3", "EAC3"]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)español[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)castellano[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)spa[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)esp[ -]", " SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)ingl[eé]s[ -]", " English "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)[ei]ng[ -]", " English "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)cat[ -]", " Catalan "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)vas[ -]", " Basque "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)fr[ae][ -]", " French "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)jap[ -]", " Japanese "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)ita[ -]", " Italian "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)rus[ -]", " Russian "]
|
||||
- name: re_replace
|
||||
args: ["[ -](?i)ger[ -]", " German "]
|
||||
- name: re_replace
|
||||
args: ["(?i)(triaudio)", "MULTi/SPANiSH/English"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(dual)", " MULTi/SPANiSH "]
|
||||
- name: re_replace
|
||||
args: ["\\.+", "."] # More than 1 dot -> .
|
||||
- name: re_replace
|
||||
args: ["^\\.", ""] # Delete first dot
|
||||
- name: re_replace
|
||||
args: ["\\s+", " "] # More than 1 space to 1 space
|
||||
|
||||
download:
|
||||
selector: a[href*="/download/"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
poster:
|
||||
selector: div.torrent-poster img
|
||||
attribute: src
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "https://images.weserv.nl/?url=" # for display on dashboard
|
||||
- name: append
|
||||
args: "&w=180&h=270" # for display on dashboard
|
||||
- name: replace
|
||||
args: ["https://images.weserv.nl/?url=https://via.placeholder.com/600x900&w=180&h=270", ""]
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
grabs:
|
||||
selector: td:nth-last-child(1)
|
||||
imdbid:
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
tmdbid:
|
||||
selector: a[href*="themoviedb.org/movie/"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: time
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
|
||||
- name: re_replace
|
||||
args: ["(?i) (ay)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
|
||||
- name: re_replace
|
||||
args: ["(?i) (an)", "year"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(För |und)", ""] # Misc removals
|
||||
- name: timeago
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
|
||||
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
|
||||
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
|
||||
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
|
||||
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
|
||||
i[class*="fas fa-star text-gold"]: 0 # Freeleech
|
||||
i[class*="fal fa-star text-gold"]: 0.5 # 50% Freeleech
|
||||
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
|
||||
i[class*="fa-globe text-green"]: 2 # Global Double Upload
|
||||
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 4 days (as seconds = 4 x 24 x 60 x 60)
|
||||
text: 345600
|
||||
# UNIT3D 2.4.0
|
@@ -12,32 +12,34 @@ caps:
|
||||
categorymappings:
|
||||
- {id: 8, cat: TV/SD, desc: "Sorozat/Hun"}
|
||||
- {id: 40, cat: TV/HD, desc: "Sorozat/Hun/HD"}
|
||||
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
|
||||
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
|
||||
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
|
||||
- {id: 44, cat: Movies/UHD, desc: "Film/Hun/UHD"}
|
||||
- {id: 2, cat: Books, desc: "eBook/Hun"}
|
||||
- {id: 47, cat: TV/UHD, desc: "Sorozat/Hun/UHD"}
|
||||
- {id: 7, cat: TV/SD, desc: "Sorozat/Eng"}
|
||||
- {id: 39, cat: TV/HD, desc: "Sorozat/Eng/HD"}
|
||||
- {id: 46, cat: TV/UHD, desc: "Sorozat/Eng/UHD"}
|
||||
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
|
||||
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
|
||||
- {id: 44, cat: Movies/UHD, desc: "Film/Hun/UHD"}
|
||||
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
|
||||
- {id: 42, cat: Movies/SD, desc: "Film/Eng/SD"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
|
||||
- {id: 25, cat: Movies/HD, desc: "Film/Eng/HD"}
|
||||
- {id: 45, cat: Movies/UHD, desc: "Film/Eng/UHD"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
|
||||
- {id: 2, cat: Books, desc: "eBook/Hun"}
|
||||
- {id: 1, cat: Books, desc: "eBook/Eng"}
|
||||
- {id: 38, cat: Audio/Audiobook, desc: "Hangoskönyv"}
|
||||
- {id: 21, cat: XXX, desc: "XXX"}
|
||||
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
|
||||
- {id: 19, cat: Audio/MP3, desc: "Zene/Hun"}
|
||||
- {id: 37, cat: Audio/Lossless, desc: "Lossless/Hun"}
|
||||
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 43, cat: Console, desc: "Játék/Konzol"}
|
||||
- {id: 29, cat: Other, desc: "Képek"}
|
||||
- {id: 28, cat: XXX/ImageSet, desc: "XXX Képek"}
|
||||
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
|
||||
- {id: 18, cat: Audio/MP3, desc: "Zene/Eng"}
|
||||
- {id: 26, cat: Audio/Lossless, desc: "Lossless/Eng"}
|
||||
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
|
||||
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
|
||||
- {id: 11, cat: PC/Games, desc: "Játék/Rip"}
|
||||
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 43, cat: Console, desc: "Játék/Konzol"}
|
||||
- {id: 13, cat: PC/Mobile-Other, desc: "Mobil"}
|
||||
- {id: 21, cat: XXX, desc: "XXX"}
|
||||
- {id: 28, cat: XXX/ImageSet, desc: "XXX Képek"}
|
||||
- {id: 29, cat: Other, desc: "Képek"}
|
||||
|
||||
|
||||
modes:
|
||||
|
@@ -39,7 +39,7 @@ caps:
|
||||
- {id: 124, cat: Movies, desc: " |- Зарубежные фильмы"}
|
||||
- {id: 123, cat: Movies, desc: " |- Отечественные фильмы (Новинки)"}
|
||||
- {id: 122, cat: Movies, desc: " |- Отечественные фильмы"}
|
||||
- {id: 689, cat: Movies/WEB-DL, desc: " |- Фильмы WEB-DLRip, HDTVRip "}
|
||||
- {id: 689, cat: Movies/WEB-DL, desc: " |- Фильмы WEB-DLRip, HDTVRip"}
|
||||
- {id: 121, cat: Movies, desc: " |- Классика зарубежного кино (фильмы вышедшие до 1980 года)"}
|
||||
- {id: 120, cat: Movies, desc: " |- Классика отечественного кино (фильмы вышедшие до ..."}
|
||||
- {id: 126, cat: Movies, desc: " |- Антологии"}
|
||||
@@ -48,7 +48,7 @@ caps:
|
||||
- {id: 117, cat: Movies, desc: " |- Зарубежные фильмы (новинки)"}
|
||||
- {id: 116, cat: Movies, desc: " |- Отечественные фильмы (новинки)"}
|
||||
- {id: 415, cat: Movies, desc: " |- Разное"}
|
||||
- {id: 19, cat: Movies/HD, desc: "HD "}
|
||||
- {id: 19, cat: Movies/HD, desc: "HD"}
|
||||
- {id: 48, cat: Movies/HD, desc: " |- Новые релизы"}
|
||||
- {id: 735, cat: Movies/HD, desc: " |- 60fps"}
|
||||
- {id: 50, cat: Movies/HD, desc: " |- Зарубежные фильмы HD (Новинки)"}
|
||||
@@ -63,13 +63,13 @@ caps:
|
||||
- {id: 681, cat: Movies/HD, desc: " |- Классика зарубежного кино (фильмы вышедшие до 1980 года)"}
|
||||
- {id: 682, cat: Movies/HD, desc: " |- Классика отечественного кино (фильмы вышедшие до ..."}
|
||||
- {id: 683, cat: Movies/HD, desc: " |- Временные HD фильмы"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "DVD "}
|
||||
- {id: 20, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 49, cat: Movies/DVD, desc: " |- Новые релизы"}
|
||||
- {id: 56, cat: Movies/DVD, desc: " |- Зарубежные фильмы DVD "}
|
||||
- {id: 57, cat: Movies/DVD, desc: " |- Наши фильмы DVD "}
|
||||
- {id: 58, cat: Movies/DVD, desc: " |- Зарубежные мультфильмы DVD "}
|
||||
- {id: 59, cat: Movies/DVD, desc: " |- Наши мультфильмы DVD "}
|
||||
- {id: 338, cat: Movies/3D, desc: "3D "}
|
||||
- {id: 56, cat: Movies/DVD, desc: " |- Зарубежные фильмы DVD"}
|
||||
- {id: 57, cat: Movies/DVD, desc: " |- Наши фильмы DVD"}
|
||||
- {id: 58, cat: Movies/DVD, desc: " |- Зарубежные мультфильмы DVD"}
|
||||
- {id: 59, cat: Movies/DVD, desc: " |- Наши мультфильмы DVD"}
|
||||
- {id: 338, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 346, cat: Movies/3D, desc: " |- F.A.Q."}
|
||||
- {id: 339, cat: Movies/3D, desc: " |- Новые релизы"}
|
||||
- {id: 340, cat: Movies/3D, desc: " |- 3D Зарубежные фильмы"}
|
||||
@@ -80,7 +80,7 @@ caps:
|
||||
- {id: 345, cat: Movies/3D, desc: " |- 3D Спорт"}
|
||||
- {id: 400, cat: TV/Documentary, desc: "Документальные фильмы, Научно-познавательные фильмы"}
|
||||
- {id: 401, cat: TV/Documentary, desc: " |- Новые релизы"}
|
||||
- {id: 405, cat: TV/Documentary, desc: " |- BBC / Discovery / National Geographic "}
|
||||
- {id: 405, cat: TV/Documentary, desc: " |- BBC / Discovery / National Geographic"}
|
||||
- {id: 410, cat: TV/Documentary, desc: " |- О рыбалке и охоте"}
|
||||
- {id: 408, cat: TV/Documentary, desc: " |- Криминальные документальные фильмы"}
|
||||
- {id: 402, cat: TV/Documentary, desc: " |- Документальные научно-познавательные"}
|
||||
@@ -105,7 +105,7 @@ caps:
|
||||
- {id: 563, cat: XXX, desc: " |- Pron (DVDRip & others)"}
|
||||
- {id: 564, cat: XXX, desc: " |- Pron DVD (DVD5/DVD9)"}
|
||||
- {id: 565, cat: XXX, desc: " |- Pron HD (720p/1080p/1080i)"}
|
||||
- {id: 566, cat: XXX, desc: " |- Паки Pron "}
|
||||
- {id: 566, cat: XXX, desc: " |- Паки Pron"}
|
||||
- {id: 567, cat: XXX, desc: " |- Эротика"}
|
||||
- {id: 568, cat: XXX, desc: " |- Эротика HD (720p/1080p/1080i)"}
|
||||
- {id: 569, cat: XXX, desc: " |- Мульты"}
|
||||
@@ -145,15 +145,15 @@ caps:
|
||||
- {id: 474, cat: Other, desc: " |- Компьютерные сети и безопасность"}
|
||||
# Игры Games
|
||||
- {id: 97, cat: Console, desc: " |- Новые релизы"}
|
||||
- {id: 287, cat: Console, desc: " |- MMORPG "}
|
||||
- {id: 287, cat: Console, desc: " |- MMORPG"}
|
||||
- {id: 286, cat: Console, desc: " |- Online / Онлайн Игры"}
|
||||
- {id: 111, cat: Console, desc: " |- Аркады"}
|
||||
- {id: 96, cat: Console, desc: " |- Горячие новинки"}
|
||||
- {id: 90, cat: Console, desc: " |- Гонки"}
|
||||
- {id: 95, cat: Console, desc: " |- Action / Shooter / FPS "}
|
||||
- {id: 94, cat: Console, desc: " |- Action / Shooter / TPS "}
|
||||
- {id: 95, cat: Console, desc: " |- Action / Shooter / FPS"}
|
||||
- {id: 94, cat: Console, desc: " |- Action / Shooter / TPS"}
|
||||
- {id: 285, cat: Console, desc: " |- Детские игры"}
|
||||
- {id: 93, cat: Console, desc: " |- RPG "}
|
||||
- {id: 93, cat: Console, desc: " |- RPG"}
|
||||
- {id: 92, cat: Console, desc: " |- RTS (стратегии в реальном времени)"}
|
||||
- {id: 91, cat: Console, desc: " |- TBS (пошаговые стратегии)"}
|
||||
- {id: 88, cat: Console, desc: " |- Многопользовательские игры"}
|
||||
@@ -164,11 +164,11 @@ caps:
|
||||
- {id: 553, cat: Console, desc: " |- Эротические игры"}
|
||||
- {id: 12, cat: PC/Games, desc: "Игры для PC (Repack)"}
|
||||
- {id: 109, cat: PC/Games, desc: " |- Новые релизы"}
|
||||
- {id: 107, cat: PC/Games, desc: " |- Action / Shooter / FPS "}
|
||||
- {id: 107, cat: PC/Games, desc: " |- Action / Shooter / FPS"}
|
||||
- {id: 463, cat: PC/Games, desc: " |- Горячие новинки"}
|
||||
- {id: 102, cat: PC/Games, desc: " |- Аркады"}
|
||||
- {id: 106, cat: PC/Games, desc: " |- Action / Shooter / TPS "}
|
||||
- {id: 105, cat: PC/Games, desc: " |- RPG "}
|
||||
- {id: 106, cat: PC/Games, desc: " |- Action / Shooter / TPS"}
|
||||
- {id: 105, cat: PC/Games, desc: " |- RPG"}
|
||||
- {id: 104, cat: PC/Games, desc: " |- RTS (стратегии в реальном времени)"}
|
||||
- {id: 103, cat: PC/Games, desc: " |- TBS (пошаговые стратегии)"}
|
||||
- {id: 530, cat: PC/Games, desc: " |- Детские игры"}
|
||||
@@ -180,22 +180,22 @@ caps:
|
||||
- {id: 554, cat: PC/Games, desc: " |- Эротические игры"}
|
||||
- {id: 14, cat: Console, desc: "Игры для Консолей"}
|
||||
- {id: 115, cat: Console, desc: " |- Новые релизы"}
|
||||
- {id: 114, cat: Console/XBox 360, desc: " |- XBox360 "}
|
||||
- {id: 674, cat: Console/XBox 360, desc: " |- XBox360 | Kinect "}
|
||||
- {id: 113, cat: Console/NDS, desc: " |- NDS "}
|
||||
- {id: 288, cat: Console/PS3, desc: " |- Playstation 2 "}
|
||||
- {id: 290, cat: Console/PS3, desc: " |- Playstation 3 "}
|
||||
- {id: 114, cat: Console/XBox 360, desc: " |- XBox360"}
|
||||
- {id: 674, cat: Console/XBox 360, desc: " |- XBox360 | Kinect"}
|
||||
- {id: 113, cat: Console/NDS, desc: " |- NDS"}
|
||||
- {id: 288, cat: Console/PS3, desc: " |- Playstation 2"}
|
||||
- {id: 290, cat: Console/PS3, desc: " |- Playstation 3"}
|
||||
- {id: 531, cat: Console, desc: "Программы / Прошивки"}
|
||||
- {id: 532, cat: Console, desc: " |- Новые релизы"}
|
||||
- {id: 533, cat: Console/PS3, desc: " |- Playstation 3 "}
|
||||
- {id: 535, cat: Console/XBox 360, desc: " |- XBox360 "}
|
||||
- {id: 534, cat: Console/PSP, desc: " |- PSP "}
|
||||
- {id: 533, cat: Console/PS3, desc: " |- Playstation 3"}
|
||||
- {id: 535, cat: Console/XBox 360, desc: " |- XBox360"}
|
||||
- {id: 534, cat: Console/PSP, desc: " |- PSP"}
|
||||
- {id: 277, cat: Console, desc: "Всё для игр"}
|
||||
- {id: 291, cat: Console, desc: " |- Новые релизы"}
|
||||
- {id: 284, cat: Console, desc: " |- Трейлеры/Геймплей видео"}
|
||||
- {id: 283, cat: Console, desc: " |- Различные моды и дополнения к играм"}
|
||||
- {id: 281, cat: Console, desc: " |- Софт для игр"}
|
||||
- {id: 280, cat: Console, desc: " |- NoCD/NoDVD "}
|
||||
- {id: 280, cat: Console, desc: " |- NoCD/NoDVD"}
|
||||
- {id: 279, cat: Console, desc: " |- Патчи"}
|
||||
- {id: 278, cat: Console, desc: " |- Русификаторы"}
|
||||
# Мультипликация TV
|
||||
@@ -215,10 +215,10 @@ caps:
|
||||
- {id: 159, cat: TV, desc: " |- Сборники отечественных мультфильмов и сиквелы"}
|
||||
- {id: 23, cat: TV, desc: "Зарубежные мультсериалы"}
|
||||
- {id: 158, cat: TV, desc: " |- Новые релизы"}
|
||||
- {id: 157, cat: TV, desc: " |- Disney "}
|
||||
- {id: 157, cat: TV, desc: " |- Disney"}
|
||||
- {id: 156, cat: TV, desc: " |- Гриффины"}
|
||||
- {id: 155, cat: TV, desc: " |- Симпсоны"}
|
||||
- {id: 154, cat: TV, desc: " |- Южный Парк / South Park "}
|
||||
- {id: 154, cat: TV, desc: " |- Южный Парк / South Park"}
|
||||
- {id: 153, cat: TV, desc: " |- Звездные войны"}
|
||||
- {id: 152, cat: TV, desc: " |- Том и Джерри"}
|
||||
- {id: 151, cat: TV, desc: " |- Футурама"}
|
||||
@@ -240,7 +240,7 @@ caps:
|
||||
- {id: 250, cat: TV, desc: " |- Воронины / Папины дочки"}
|
||||
- {id: 245, cat: TV, desc: " |- Детективы"}
|
||||
- {id: 550, cat: TV, desc: " |- Деффчонки"}
|
||||
- {id: 242, cat: TV, desc: " |- Зайцев +1 "}
|
||||
- {id: 242, cat: TV, desc: " |- Зайцев +1"}
|
||||
- {id: 546, cat: TV, desc: " |- Закрытая школа"}
|
||||
- {id: 249, cat: TV, desc: " |- Ментовские войны"}
|
||||
- {id: 247, cat: TV, desc: " |- Кадетство / Кремлёвские курсанты"}
|
||||
@@ -259,19 +259,19 @@ caps:
|
||||
- {id: 238, cat: TV, desc: " |- Другие российские сериалы"}
|
||||
- {id: 26, cat: TV, desc: "Зарубежные сериалы"}
|
||||
- {id: 237, cat: TV, desc: " |- Новые релизы"}
|
||||
- {id: 544, cat: TV, desc: " |- Анатомия страсти / Grey's anatomy "}
|
||||
- {id: 544, cat: TV, desc: " |- Анатомия страсти / Grey's anatomy"}
|
||||
- {id: 236, cat: TV, desc: " |- Доктор Хаус / House M.D."}
|
||||
- {id: 545, cat: TV, desc: " |- Друзья / Friends "}
|
||||
- {id: 537, cat: TV, desc: " |- Звёздные врата / Stargate "}
|
||||
- {id: 536, cat: TV, desc: " |- Игра престолов / Game of Thrones "}
|
||||
- {id: 235, cat: TV, desc: " |- Остаться в живых / Lost "}
|
||||
- {id: 234, cat: TV, desc: " |- Сверхъестественное / Supernatural "}
|
||||
- {id: 538, cat: TV, desc: " |- Секретные материалы / The X-Files "}
|
||||
- {id: 539, cat: TV, desc: " |- Спартак / Spartacus "}
|
||||
- {id: 540, cat: TV, desc: " |- Тайны Смолвиля / Smallville "}
|
||||
- {id: 541, cat: TV, desc: " |- Теория Большого Взрыва / The Big Bang Theory "}
|
||||
- {id: 542, cat: TV, desc: " |- Холм одного дерева / One tree hill "}
|
||||
- {id: 543, cat: TV, desc: " |- Ходячие мертвецы / The Walking Dead "}
|
||||
- {id: 545, cat: TV, desc: " |- Друзья / Friends"}
|
||||
- {id: 537, cat: TV, desc: " |- Звёздные врата / Stargate"}
|
||||
- {id: 536, cat: TV, desc: " |- Игра престолов / Game of Thrones"}
|
||||
- {id: 235, cat: TV, desc: " |- Остаться в живых / Lost"}
|
||||
- {id: 234, cat: TV, desc: " |- Сверхъестественное / Supernatural"}
|
||||
- {id: 538, cat: TV, desc: " |- Секретные материалы / The X-Files"}
|
||||
- {id: 539, cat: TV, desc: " |- Спартак / Spartacus"}
|
||||
- {id: 540, cat: TV, desc: " |- Тайны Смолвиля / Smallville"}
|
||||
- {id: 541, cat: TV, desc: " |- Теория Большого Взрыва / The Big Bang Theory"}
|
||||
- {id: 542, cat: TV, desc: " |- Холм одного дерева / One tree hill"}
|
||||
- {id: 543, cat: TV, desc: " |- Ходячие мертвецы / The Walking Dead"}
|
||||
- {id: 233, cat: TV, desc: " |- Другие зарубежные сериалы"}
|
||||
# Мир Аниме Anime
|
||||
- {id: 32, cat: TV/Anime, desc: "Аниме (общение)"}
|
||||
@@ -301,18 +301,19 @@ caps:
|
||||
# Программное обеспечение Software
|
||||
- {id: 185, cat: PC, desc: " |- Новые релизы"}
|
||||
- {id: 184, cat: PC, desc: " |- Настольные OS, выпущенные до 2001 года (Microsoft Windows..."}
|
||||
- {id: 183, cat: PC, desc: " |- Windows XP "}
|
||||
- {id: 182, cat: PC, desc: " |- Windows Vista "}
|
||||
- {id: 181, cat: PC, desc: " |- Windows 7 "}
|
||||
- {id: 180, cat: PC, desc: " |- Windows 8, 8.1 "}
|
||||
- {id: 702, cat: PC, desc: " |- Windows 10 "}
|
||||
- {id: 708, cat: PC, desc: " |- Мультисборки Windows OS "}
|
||||
- {id: 183, cat: PC, desc: " |- Windows XP"}
|
||||
- {id: 182, cat: PC, desc: " |- Windows Vista"}
|
||||
- {id: 181, cat: PC, desc: " |- Windows 7"}
|
||||
- {id: 180, cat: PC, desc: " |- Windows 8, 8.1"}
|
||||
- {id: 702, cat: PC, desc: " |- Windows 10"}
|
||||
- {id: 770, cat: PC, desc: " |- Windows 11"}
|
||||
- {id: 708, cat: PC, desc: " |- Мультисборки Windows OS"}
|
||||
- {id: 179, cat: PC, desc: " |- Серверные (Microsoft Windows OS)"}
|
||||
- {id: 34, cat: PC, desc: "Mac OS. Программное обеспечение под них"}
|
||||
- {id: 189, cat: PC, desc: " |- Новые релизы"}
|
||||
- {id: 188, cat: PC/Mac, desc: " |- Mac OS (для Apple Macintosh)"}
|
||||
- {id: 187, cat: PC/Mac, desc: " |- Mac OS (для РС-Hackintosh)"}
|
||||
- {id: 186, cat: PC/Mac, desc: " |- Системные программы для Mac OS "}
|
||||
- {id: 186, cat: PC/Mac, desc: " |- Системные программы для Mac OS"}
|
||||
- {id: 35, cat: PC, desc: "Linux, Unix и другие ОС"}
|
||||
- {id: 194, cat: PC, desc: " |- Новые релизы"}
|
||||
- {id: 193, cat: PC, desc: " |- ОС (Linux, Unix)"}
|
||||
@@ -331,7 +332,7 @@ caps:
|
||||
- {id: 211, cat: PC, desc: " |- Работа с носителями информации"}
|
||||
- {id: 210, cat: PC, desc: " |- Резервное копирование и программы для защиты информации"}
|
||||
- {id: 209, cat: PC, desc: " |- Разное"}
|
||||
- {id: 37, cat: PC, desc: "Программы для работы с мультимедиа и 3D "}
|
||||
- {id: 37, cat: PC, desc: "Программы для работы с мультимедиа и 3D"}
|
||||
- {id: 731, cat: PC, desc: " |- 3D моделирование, рендеринг и плагины для них"}
|
||||
- {id: 208, cat: PC, desc: " |- Новые релизы"}
|
||||
- {id: 207, cat: PC, desc: " |- Графические редакторы"}
|
||||
@@ -353,7 +354,7 @@ caps:
|
||||
- {id: 230, cat: PC, desc: " |- Новые релизы"}
|
||||
- {id: 228, cat: PC, desc: " |- Системы для офиса, бизнеса и научной работы"}
|
||||
- {id: 227, cat: PC, desc: " |- Распознавание текста, звука и синтез речи"}
|
||||
- {id: 226, cat: PC, desc: " |- Работа с PDF и DjVu "}
|
||||
- {id: 226, cat: PC, desc: " |- Работа с PDF и DjVu"}
|
||||
- {id: 225, cat: PC, desc: " |- Словари, переводчики"}
|
||||
- {id: 695, cat: PC, desc: " |- Текстовые редакторы"}
|
||||
- {id: 223, cat: PC, desc: " |- САПР"}
|
||||
@@ -373,10 +374,10 @@ caps:
|
||||
- {id: 765, cat: Audio, desc: " |- Отечественная поп-музыка (lossless)"}
|
||||
- {id: 764, cat: Audio, desc: " |- Отечественная поп-музыка (сборники) (lossy)"}
|
||||
- {id: 272, cat: Audio, desc: " |- Электронная музыка"}
|
||||
- {id: 271, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B "}
|
||||
- {id: 271, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B"}
|
||||
- {id: 270, cat: Audio, desc: " |- Поп музыка"}
|
||||
- {id: 269, cat: Audio, desc: " |- Рок"}
|
||||
- {id: 268, cat: Audio, desc: " |- Metal "}
|
||||
- {id: 268, cat: Audio, desc: " |- Metal"}
|
||||
- {id: 267, cat: Audio, desc: " |- Шансон"}
|
||||
- {id: 678, cat: Audio, desc: " |- Джаз / блюз"}
|
||||
- {id: 266, cat: Audio, desc: " |- Классика и Инструментал"}
|
||||
@@ -384,22 +385,22 @@ caps:
|
||||
- {id: 40, cat: Audio, desc: "Зарубежная музыка"}
|
||||
- {id: 265, cat: Audio, desc: " |- Новые релизы"}
|
||||
- {id: 264, cat: Audio, desc: " |- Электронная музыка"}
|
||||
- {id: 505, cat: Audio, desc: " |- Trance "}
|
||||
- {id: 263, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B "}
|
||||
- {id: 501, cat: Audio, desc: " |- Drum & Bass "}
|
||||
- {id: 503, cat: Audio, desc: " |- House "}
|
||||
- {id: 504, cat: Audio, desc: " |- Dubstep "}
|
||||
- {id: 412, cat: Audio, desc: " |- Soundtrack / OST "}
|
||||
- {id: 502, cat: Audio, desc: " |- Hardcore, Hardstyle, Jumpstyle "}
|
||||
- {id: 505, cat: Audio, desc: " |- Trance"}
|
||||
- {id: 263, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B"}
|
||||
- {id: 501, cat: Audio, desc: " |- Drum & Bass"}
|
||||
- {id: 503, cat: Audio, desc: " |- House"}
|
||||
- {id: 504, cat: Audio, desc: " |- Dubstep"}
|
||||
- {id: 412, cat: Audio, desc: " |- Soundtrack / OST"}
|
||||
- {id: 502, cat: Audio, desc: " |- Hardcore, Hardstyle, Jumpstyle"}
|
||||
- {id: 262, cat: Audio, desc: " |- Поп музыка"}
|
||||
- {id: 261, cat: Audio, desc: " |- Рок"}
|
||||
- {id: 260, cat: Audio, desc: " |- Metal "}
|
||||
- {id: 260, cat: Audio, desc: " |- Metal"}
|
||||
- {id: 259, cat: Audio, desc: " |- Шансон"}
|
||||
- {id: 679, cat: Audio, desc: " |- Джаз / блюз"}
|
||||
- {id: 42, cat: Audio/Video, desc: "Музыкальное видео"}
|
||||
- {id: 256, cat: Audio/Video, desc: " |- Новые релизы"}
|
||||
- {id: 255, cat: Audio/Video, desc: " |- Музыкальные DVD "}
|
||||
- {id: 254, cat: Audio/Video, desc: " |- Музыкальные HD "}
|
||||
- {id: 255, cat: Audio/Video, desc: " |- Музыкальные DVD"}
|
||||
- {id: 254, cat: Audio/Video, desc: " |- Музыкальные HD"}
|
||||
- {id: 253, cat: Audio/Video, desc: " |- Клипы (видео)"}
|
||||
- {id: 252, cat: Audio/Video, desc: " |- Концерты (видео)"}
|
||||
# Спорт Sport
|
||||
@@ -412,7 +413,7 @@ caps:
|
||||
- {id: 691, cat: TV/Sport, desc: " |- Рестлинг"}
|
||||
- {id: 513, cat: TV/Sport, desc: " |- Теннис"}
|
||||
- {id: 507, cat: TV/Sport, desc: " |- Хоккей"}
|
||||
- {id: 690, cat: TV/Sport, desc: " |- Формула 1 "}
|
||||
- {id: 690, cat: TV/Sport, desc: " |- Формула 1"}
|
||||
- {id: 506, cat: TV/Sport, desc: " |- Футбол"}
|
||||
- {id: 514, cat: TV/Sport, desc: " |- Другие виды спорта"}
|
||||
# Все по авто и мото Other
|
||||
@@ -462,27 +463,27 @@ caps:
|
||||
# Мобильные устройства Mobile
|
||||
- {id: 433, cat: PC/Mobile-Other, desc: "Приложения для мобильных телефонов и КПК, КМК"}
|
||||
- {id: 436, cat: PC/Mobile-Other, desc: " |- Новые релизы"}
|
||||
- {id: 437, cat: PC/Mobile-Android, desc: " |- Android OS "}
|
||||
- {id: 435, cat: PC/Mobile-Other, desc: " |- Windows Mobile "}
|
||||
- {id: 439, cat: PC/Mobile-Other, desc: " |- Symbian "}
|
||||
- {id: 438, cat: PC/Mobile-iOS, desc: " |- iOS "}
|
||||
- {id: 440, cat: PC/Mobile-Other, desc: " |- Java "}
|
||||
- {id: 437, cat: PC/Mobile-Android, desc: " |- Android OS"}
|
||||
- {id: 435, cat: PC/Mobile-Other, desc: " |- Windows Mobile"}
|
||||
- {id: 439, cat: PC/Mobile-Other, desc: " |- Symbian"}
|
||||
- {id: 438, cat: PC/Mobile-iOS, desc: " |- iOS"}
|
||||
- {id: 440, cat: PC/Mobile-Other, desc: " |- Java"}
|
||||
- {id: 434, cat: PC/Mobile-Other, desc: "Игры"}
|
||||
- {id: 441, cat: PC/Mobile-Other, desc: " |- Новые релизы"}
|
||||
- {id: 442, cat: PC/Mobile-Android, desc: " |- Android OS "}
|
||||
- {id: 443, cat: PC/Mobile-Other, desc: " |- Symbian "}
|
||||
- {id: 444, cat: PC/Mobile-iOS, desc: " |- iOS "}
|
||||
- {id: 446, cat: PC/Mobile-Other, desc: " |- Java "}
|
||||
- {id: 445, cat: PC/Mobile-Other, desc: " |- Windows Mobile "}
|
||||
- {id: 575, cat: PC/Mobile-Other, desc: " |- Игры для Windows Phone 7,8 "}
|
||||
- {id: 442, cat: PC/Mobile-Android, desc: " |- Android OS"}
|
||||
- {id: 443, cat: PC/Mobile-Other, desc: " |- Symbian"}
|
||||
- {id: 444, cat: PC/Mobile-iOS, desc: " |- iOS"}
|
||||
- {id: 446, cat: PC/Mobile-Other, desc: " |- Java"}
|
||||
- {id: 445, cat: PC/Mobile-Other, desc: " |- Windows Mobile"}
|
||||
- {id: 575, cat: PC/Mobile-Other, desc: " |- Игры для Windows Phone 7,8"}
|
||||
- {id: 447, cat: PC/Mobile-Other, desc: "Софт для работы с телефоном"}
|
||||
- {id: 448, cat: PC/Mobile-Other, desc: "Прошивки"}
|
||||
- {id: 449, cat: PC/Mobile-Other, desc: " |- Новые релизы"}
|
||||
- {id: 450, cat: PC/Mobile-Android, desc: " |- Android OS "}
|
||||
- {id: 451, cat: PC/Mobile-Other, desc: " |- Windows Mobile "}
|
||||
- {id: 452, cat: PC/Mobile-Other, desc: " |- Symbian "}
|
||||
- {id: 454, cat: PC/Mobile-iOS, desc: " |- iOS "}
|
||||
- {id: 455, cat: PC/Mobile-Other, desc: " |- Java "}
|
||||
- {id: 450, cat: PC/Mobile-Android, desc: " |- Android OS"}
|
||||
- {id: 451, cat: PC/Mobile-Other, desc: " |- Windows Mobile"}
|
||||
- {id: 452, cat: PC/Mobile-Other, desc: " |- Symbian"}
|
||||
- {id: 454, cat: PC/Mobile-iOS, desc: " |- iOS"}
|
||||
- {id: 455, cat: PC/Mobile-Other, desc: " |- Java"}
|
||||
# Книги и журналы Books
|
||||
- {id: 610, cat: Books, desc: " |- Новые релизы"}
|
||||
- {id: 611, cat: Books, desc: " |- Кино, театр, ТВ, мультипликация"}
|
||||
|
@@ -138,16 +138,18 @@ search:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
selector: a[onmouseover]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
selector: a[onmouseover]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: a[href^="details.php?id="]
|
||||
selector: a[onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=\\'(.+?)\\'
|
||||
- name: replace
|
||||
args: ["./pic/noposter.png", ""]
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
|
@@ -30,12 +30,13 @@ caps:
|
||||
music-search: [q, artist]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -62,23 +63,9 @@ settings:
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
method: cookie
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
logout: ""
|
||||
securelogin: ""
|
||||
ssl: yes
|
||||
trackerssl: yes
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("失敗"))
|
||||
- selector: td.embedded:has(h2:contains("failed!"))
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
@@ -15,6 +15,7 @@ caps:
|
||||
- {id: 6, cat: TV/Documentary, desc: "Documentales"}
|
||||
- {id: 7, cat: TV/Sport, desc: "Deportes"}
|
||||
- {id: 8, cat: Movies, desc: "Hagbard"}
|
||||
- {id: 9, cat: Movies, desc: "Studio Ghibli"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
@@ -11,9 +11,8 @@ legacylinks:
|
||||
- https://legacyhd.org/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -51,6 +50,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -66,10 +75,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
Movie: 1
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -78,13 +85,11 @@ search:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: poster
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://www.rintor.net/
|
||||
|
||||
caps:
|
||||
# dont forget to update the search fields category case block
|
||||
categorymappings:
|
||||
- {id: 27, cat: XXX, desc: "Фильмы 2160 4K | Movies 2160p 4K"}
|
||||
- {id: 20, cat: XXX, desc: "Сайтрипы 2160 4K | Porn Video 2160p 4K"}
|
||||
@@ -20,8 +19,8 @@ caps:
|
||||
- {id: 24, cat: XXX, desc: "Инцест (Инсценировка) | Incest (Simulation)"}
|
||||
- {id: 22, cat: XXX, desc: "Лесбиянки | Lesbians"}
|
||||
- {id: 26, cat: XXX, desc: "Порно Кастинг | Porno Casting"}
|
||||
- {id: 29, cat: XXX, desc: "Японское Порно | Japanese Porn (Uncen)"}
|
||||
- {id: 23, cat: XXX, desc: "Ретро Порно, Классика | Classic Porn, Retro"}
|
||||
- {id: 29, cat: XXX, desc: "Японское (Без Цензуры) | Japanese Porn (Uncen)"}
|
||||
- {id: 23, cat: XXX, desc: "Ретро Порно, Классика | Retro Porn, Classic"}
|
||||
- {id: 21, cat: XXX, desc: "Женское Доминирование, Страпон | Femdom, StrapOn"}
|
||||
- {id: 17, cat: XXX, desc: "БДСМ, Фистинг, Дилдо | BDSM, Fisting, Dildo"}
|
||||
- {id: 19, cat: XXX, desc: "Беременные | Pregnant"}
|
||||
@@ -60,30 +59,8 @@ search:
|
||||
selector: div.entry:has(div.entry__title)
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: div.entry__info
|
||||
case:
|
||||
"a:last-of-type:contains(\"Movies 2160p\")": 27
|
||||
"a:last-of-type:contains(\"Video 2160p\")": 20
|
||||
"a:last-of-type:contains(\"Movies HD\")": 1
|
||||
"a:last-of-type:contains(\"SiteRips\")": 9
|
||||
"a:last-of-type:contains(\"WEBRip\")": 12
|
||||
"a:last-of-type:contains(\"Amateur\")": 10
|
||||
"a:last-of-type:contains(\"Incest\")": 24
|
||||
"a:last-of-type:contains(\"Lesbians\")": 22
|
||||
"a:last-of-type:contains(\"Casting\")": 26
|
||||
"a:last-of-type:contains(\"Japanese\")": 29
|
||||
"a:last-of-type:contains(\"Classic\")": 23
|
||||
"a:last-of-type:contains(\"Femdom\")": 21
|
||||
"a:last-of-type:contains(\"BDSM\")": 17
|
||||
"a:last-of-type:contains(\"Pregnant\")": 19
|
||||
"a:last-of-type:contains(\"Bukkake\")": 28
|
||||
"a:last-of-type:contains(\"Peeing\")": 25
|
||||
"a:last-of-type:contains(\"Shemale\")": 16
|
||||
"a:last-of-type:contains(\"Picture\")": 11
|
||||
"a:last-of-type:contains(\"Cartoons\")": 14
|
||||
"a:last-of-type:contains(\"Games\")": 13
|
||||
"a:last-of-type:contains(\"Gay\")": 15
|
||||
categorydesc:
|
||||
selector: div.entry__info > span > a
|
||||
title:
|
||||
selector: div.entry__title > h3 > a
|
||||
details:
|
||||
|
@@ -11,6 +11,12 @@ links:
|
||||
caps:
|
||||
categorymappings:
|
||||
# Кинематограф movies
|
||||
- {id: 1677, cat: Movies, desc: "Кинематограф Зарубежные новинки (2022)"}
|
||||
- {id: 1676, cat: Movies, desc: "Кинематограф Российские новинки (2022)"}
|
||||
- {id: 1675, cat: Movies/HD, desc: "Кинематограф Зарубежные новинки в 720p (2022)"}
|
||||
- {id: 1674, cat: Movies/HD, desc: "Кинематограф Российские новинки в 720p (2022)"}
|
||||
- {id: 1673, cat: Movies/HD, desc: "Кинематограф Зарубежные новинки в 1080p (2022)"}
|
||||
- {id: 1672, cat: Movies/HD, desc: "Кинематограф Российские новинки в 1080р (2022)"}
|
||||
- {id: 1656, cat: Movies, desc: "Новинки (2021)"}
|
||||
- {id: 1662, cat: Movies, desc: " |- Зарубежные новинки (2021)"}
|
||||
- {id: 1661, cat: Movies, desc: " |- Российские новинки (2021)"}
|
||||
|
@@ -12,7 +12,6 @@ legacylinks:
|
||||
- http://www.shareisland.org/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "Serie TV"}
|
||||
@@ -59,6 +58,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -82,17 +91,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Movie": 1
|
||||
"Serie TV": 2
|
||||
"Ebook": 15
|
||||
"Riviste e Giornali": 17
|
||||
"XXX": 19
|
||||
"Music": 3
|
||||
"Games": 7
|
||||
"Software": 23
|
||||
title:
|
||||
selector: name
|
||||
filters:
|
||||
@@ -128,8 +128,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
60
src/Jackett.Common/Definitions/showrss.yml
Normal file
60
src/Jackett.Common/Definitions/showrss.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
id: showrss
|
||||
name: showRSS
|
||||
description: "showRSS is a service that allows you to keep track of your favorite TV shows"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://showrss.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: TV/SD}
|
||||
- {id: 2, cat: TV/HD}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings: []
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /other/all.rss
|
||||
response:
|
||||
type: xml
|
||||
attribute: attributes
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: raw_title
|
||||
filters:
|
||||
case:
|
||||
":contains(\"720p\")": 2
|
||||
":contains(\"1080p\")": 2
|
||||
"*": 1
|
||||
title:
|
||||
selector: raw_title
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}"
|
||||
date:
|
||||
selector: pubDate
|
||||
download:
|
||||
selector: link
|
||||
size:
|
||||
text: "512 MB"
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://skipthecommericals.xyz/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 2, cat: TV, desc: "TV Show"}
|
||||
|
||||
@@ -25,7 +24,7 @@ settings:
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://datascene.xyz/\" target =_blank>DataScene</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://skipthecommericals.xyz/\" target =_blank>SkipTheCommercials</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -47,6 +46,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -66,10 +75,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"TV Show": 2
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -81,8 +88,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -71,13 +71,19 @@ caps:
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
- name: username
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: 2facode
|
||||
type: text
|
||||
label: 2FA code
|
||||
- name: info_2fa
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
label: "About 2FA code"
|
||||
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the SpiderTK Web Site. Otherwise just leave it empty."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -104,9 +110,26 @@ settings:
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
two_step_code: "{{ .Config.2facode }}"
|
||||
logout: ""
|
||||
securelogin: ""
|
||||
ssl: yes
|
||||
trackerssl: ""
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("Echoué")) # invalid captcha
|
||||
- selector: td.embedded:has(h2:contains("Échec")) # invalid uid or pwd
|
||||
message:
|
||||
selector: td.text
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://swarmazon.club/
|
||||
|
||||
caps:
|
||||
# dont forget to update the search fields category case block
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "Television"}
|
||||
@@ -56,7 +55,7 @@ login:
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{ if .Keywords }}en/search/search.php?category=all&query={{ .Keywords }}&limit=50{{ else }}index.php?date_range=14{{ end }}"
|
||||
- path: "{{ if .Keywords }}en/search/search.php?category=all&query={{ .Keywords }}{{ else }}latest.php?date_range=14{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: table.table-striped > tbody > tr
|
||||
@@ -64,19 +63,14 @@ search:
|
||||
- name: andmatch
|
||||
|
||||
fields: # some users (rank specific?) have an extra column (td:nth-child(4)) with bookmark features
|
||||
category:
|
||||
selector: td.Name
|
||||
case:
|
||||
"small:contains(\"in Movies\")": 1
|
||||
"small:contains(\"in Television\")": 2
|
||||
"small:contains(\"in Video Courses\")": 3
|
||||
"small:contains(\"in Music\")": 4
|
||||
"small:contains(\"in Games\")": 5
|
||||
"small:contains(\"in Software\")": 6
|
||||
"small:contains(\"in Anime\")": 7
|
||||
"small:contains(\"in E-Books\")": 8
|
||||
"small:contains(\"in Audio Books\")": 9
|
||||
"small:contains(\"in Comics\")": 10
|
||||
categorydesc:
|
||||
selector: td.Name small
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(.+?)in\\s(.+?)", "$2"]
|
||||
- name: replace
|
||||
args: ["Freeleech", ""]
|
||||
- name: trim
|
||||
title:
|
||||
selector: a[href*="/view/torrent.php?hash="]
|
||||
details:
|
||||
|
@@ -13,7 +13,6 @@ legacylinks:
|
||||
- https://telly.to/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
@@ -59,6 +58,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -74,17 +83,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Movie": 1
|
||||
"TV": 2
|
||||
"Music": 3
|
||||
"Web Originals": 4
|
||||
"Games": 5
|
||||
"Application": 6
|
||||
"Mobile App": 7
|
||||
"Movies": 8
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -96,8 +96,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -5,6 +5,8 @@ description: "The Horror Charnel (THC) is a Private Torrent Tracker for HORROR /
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
certificates:
|
||||
- ffcfcef31cc501c935dedfeae5be2aff9ebcd19f # expired 23 Jan 2022
|
||||
links:
|
||||
- https://horrorcharnel.org/
|
||||
|
||||
|
@@ -35,10 +35,10 @@ caps:
|
||||
- {id: 169, cat: TV/Other, desc: "TV/Boxset"}
|
||||
- {id: 191, cat: TV, desc: "TV/BluTv"}
|
||||
- {id: 192, cat: TV, desc: "TV/BluTv Series"}
|
||||
- {id: 193, cat: Movies, desc: "TV/BluTv Film"}
|
||||
- {id: 193, cat: Movies, desc: "Movies/BluTv Film"}
|
||||
- {id: 188, cat: TV, desc: "TV/Netflix"}
|
||||
- {id: 189, cat: TV, desc: "TV/Netflix Series"}
|
||||
- {id: 190, cat: Movies, desc: "TV/Netflix Film"}
|
||||
- {id: 190, cat: Movies, desc: "Movies/Netflix Film"}
|
||||
- {id: 195, cat: TV, desc: "TV/Exxen"}
|
||||
- {id: 171, cat: Audio, desc: "Music"}
|
||||
- {id: 172, cat: Audio, desc: "Music/Turkish"}
|
||||
@@ -53,6 +53,7 @@ caps:
|
||||
- {id: 179, cat: PC, desc: "OS"}
|
||||
- {id: 180, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: 181, cat: Console, desc: "Playstation"}
|
||||
- {id: 198, cat: Movies, desc: "Movies/Amazon Prime"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
@@ -59,7 +59,7 @@ settings: []
|
||||
search:
|
||||
paths:
|
||||
# https://www.torrentfunk.com/all/torrents/morty-402-castellano.html
|
||||
- path: "all/torrents/{{ .Keywords }}.html"
|
||||
- path: "all/torrents/{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}.html"
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[\\s]+", "-"]
|
||||
|
@@ -87,13 +87,12 @@ caps:
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
- name: username
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -119,15 +118,20 @@ settings:
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
path: lt/account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.klaida
|
||||
- selector: p.error_text
|
||||
test:
|
||||
path: lt/torrents.php
|
||||
path: lt/torrents
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: lt/torrents.php
|
||||
- path: lt/torrents
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cats[]={{.}}&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
|
@@ -7,9 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentqq125.com/
|
||||
- https://torrentqq127.com/
|
||||
legacylinks:
|
||||
- https://torrentqq104.com/
|
||||
- https://torrentqq105.com/
|
||||
- https://torrentqq106.com/
|
||||
- https://torrentqq107.com/
|
||||
@@ -28,6 +27,8 @@ legacylinks:
|
||||
- https://torrentqq121.com/
|
||||
- https://torrentqq122.com/
|
||||
- https://torrentqq123.com/
|
||||
- https://torrentqq125.com/
|
||||
- https://torrentqq126.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://torrentseeds.org/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: PC/0day, desc: "Apps"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Anime"}
|
||||
@@ -22,12 +21,14 @@ caps:
|
||||
- {id: 8, cat: TV, desc: "Packs"}
|
||||
- {id: 3206, cat: TV/Foreign, desc: "TV/Foreign"}
|
||||
- {id: 3207, cat: Movies/Foreign, desc: "Movies/Foreign"}
|
||||
- {id: 3208, cat: Books/EBook, desc: "E-Books"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
@@ -58,6 +59,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -73,20 +84,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
"Apps": 1
|
||||
"Games": 2
|
||||
"Movies": 3
|
||||
"Music": 4
|
||||
"Anime": 5
|
||||
"Porn": 6
|
||||
"Sport": 7
|
||||
"Packs": 8
|
||||
"TV": 3205
|
||||
"TV/Foreign": 3206
|
||||
"Movies/Foreign": 3207
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -98,8 +97,6 @@ search:
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/400x600", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
|
@@ -7,7 +7,7 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentsir46.com/
|
||||
- https://torrentsir47.com/
|
||||
legacylinks:
|
||||
- https://torrentsir31.com/
|
||||
- https://torrentsir33.com/
|
||||
@@ -23,6 +23,7 @@ legacylinks:
|
||||
- https://torrentsir43.com/
|
||||
- https://torrentsir44.com/
|
||||
- https://torrentsir45.com/
|
||||
- https://torrentsir46.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -7,10 +7,9 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentview49.com/
|
||||
- https://torrentview50.com/
|
||||
legacylinks:
|
||||
- https://torrentview.net/
|
||||
- https://torrentview27.com/
|
||||
- https://torrentview28.com/
|
||||
- https://torrentview29.com/
|
||||
- https://torrentview30.com/
|
||||
@@ -30,6 +29,7 @@ legacylinks:
|
||||
- https://torrentview45.com/
|
||||
- https://torrentview46.com/
|
||||
- https://torrentview47.com/
|
||||
- https://torrentview49.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -7,7 +7,7 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentwiz36.com/
|
||||
- https://torrentwiz37.com/
|
||||
legacylinks:
|
||||
- https://torrentwiz22.me/
|
||||
- https://torrentwiz23.me/
|
||||
@@ -23,6 +23,7 @@ legacylinks:
|
||||
- https://torrentwiz33.com/
|
||||
- https://torrentwiz34.com/
|
||||
- https://torrentwiz35.com/
|
||||
- https://torrentwiz36.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -9,7 +9,6 @@ links:
|
||||
- https://trackeros.tk/
|
||||
|
||||
caps:
|
||||
# dont forget to update the case block in the search fields category
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Películas"}
|
||||
- {id: 2, cat: TV, desc: "Series"}
|
||||
@@ -54,6 +53,16 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
@@ -69,15 +78,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
categorydesc:
|
||||
selector: category
|
||||
case:
|
||||
Películas: 1
|
||||
Series: 2
|
||||
Musica: 3
|
||||
Espectáculos: 7
|
||||
Documentales: 8
|
||||
Consolas: 4
|
||||
title:
|
||||
selector: name
|
||||
filters:
|
||||
@@ -131,11 +133,11 @@ search:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: poster
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
|
125
src/Jackett.Common/Definitions/uhd-heaven.yml
Normal file
125
src/Jackett.Common/Definitions/uhd-heaven.yml
Normal file
@@ -0,0 +1,125 @@
|
||||
---
|
||||
id: uhd-heaven
|
||||
name: UHD-HEAVEN
|
||||
description: "UHD-HEAVEN is a Private Torrent Tracker for UHD MOVIES / TV"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://uhd-heaven.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://uhd-heaven.xyz/\" target =_blank>UHD-HEAVEN</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: created_at
|
||||
options:
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
|
||||
response:
|
||||
type: json
|
||||
attribute: attributes
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: category
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# 2021-10-18T00:34:50.000000Z"
|
||||
selector: created_at
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: freeleech
|
||||
case:
|
||||
0: 1 # not free
|
||||
1: 0 # freeleech
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
# global MR is 0.4 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 5.3.0
|
@@ -6,7 +6,7 @@ language: fr-FR
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.zetorrents.tv/
|
||||
- https://www.zetorrents.bz/
|
||||
legacylinks:
|
||||
- https://www.zetorrents.co/
|
||||
- https://www.zetorrents.io/
|
||||
@@ -17,6 +17,7 @@ legacylinks:
|
||||
- https://www.zetorrents.org/
|
||||
- https://wvw.zetorrents.org/
|
||||
- https://www.zetorrents.cc/
|
||||
- https://www.zetorrents.tv/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -132,8 +132,10 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
foreach (var searchString in searchStrings)
|
||||
{
|
||||
var queryCollection = new NameValueCollection();
|
||||
queryCollection.Add("action", "basic");
|
||||
var queryCollection = new NameValueCollection
|
||||
{
|
||||
{ "action", "basic" }
|
||||
};
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
@@ -169,10 +171,11 @@ namespace Jackett.Common.Indexers
|
||||
var rows = dom.QuerySelectorAll("#torrent_table > tbody > tr.torrent");
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var release = new ReleaseInfo();
|
||||
|
||||
release.MinimumRatio = 1;
|
||||
release.MinimumSeedTime = 172800; // 48 hours
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 172800 // 48 hours
|
||||
};
|
||||
|
||||
var catStr = row.Children[0].FirstElementChild.GetAttribute("href").Split(new[] { '[', ']' })[1];
|
||||
release.Category = MapTrackerCatToNewznab(catStr);
|
||||
|
@@ -173,9 +173,10 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
foreach (var name in titles)
|
||||
{
|
||||
var release = new ReleaseInfo();
|
||||
|
||||
release.Title = (name + releaseInfo).Trim();
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
Title = (name + releaseInfo).Trim()
|
||||
};
|
||||
// Ensure the season is defined as this tracker only deals with full seasons
|
||||
if (release.Title.IndexOf("Season") == -1 && AppendSeason)
|
||||
{
|
||||
|
@@ -558,6 +558,19 @@ namespace Jackett.Common.Indexers
|
||||
return response.ContentBytes;
|
||||
}
|
||||
|
||||
public virtual async Task<WebResult> DownloadImage(Uri link)
|
||||
{
|
||||
var uncleanLink = UncleanLink(link);
|
||||
var requestLink = uncleanLink.ToString();
|
||||
var referer = SiteLink;
|
||||
|
||||
var response = await RequestWithCookiesAsync(requestLink, null, RequestType.GET, referer);
|
||||
if (response.IsRedirect)
|
||||
await FollowIfRedirect(response);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
protected async Task<WebResult> RequestWithCookiesAndRetryAsync(
|
||||
string url, string cookieOverride = null, RequestType method = RequestType.GET,
|
||||
string referer = null, IEnumerable<KeyValuePair<string, string>> data = null,
|
||||
|
@@ -130,13 +130,15 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
var searchString = query.GetQueryString();
|
||||
var searchUrl = BrowseUrl;
|
||||
var queryCollection = new NameValueCollection();
|
||||
queryCollection.Add("showsearch", "0");
|
||||
queryCollection.Add("incldead", "1");
|
||||
queryCollection.Add("blah", "0");
|
||||
queryCollection.Add("team", "0");
|
||||
queryCollection.Add("orderby", "added");
|
||||
queryCollection.Add("sort", "desc");
|
||||
var queryCollection = new NameValueCollection
|
||||
{
|
||||
{ "showsearch", "0" },
|
||||
{ "incldead", "1" },
|
||||
{ "blah", "0" },
|
||||
{ "team", "0" },
|
||||
{ "orderby", "added" },
|
||||
{ "sort", "desc" }
|
||||
};
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
queryCollection.Add("search", searchString);
|
||||
@@ -156,11 +158,13 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var release = new ReleaseInfo();
|
||||
release.MinimumRatio = 0.7;
|
||||
release.MinimumSeedTime = 172800; // 48 hours
|
||||
release.DownloadVolumeFactor = 1;
|
||||
release.UploadVolumeFactor = 1;
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
MinimumRatio = 0.7,
|
||||
MinimumSeedTime = 172800, // 48 hours
|
||||
DownloadVolumeFactor = 1,
|
||||
UploadVolumeFactor = 1
|
||||
};
|
||||
|
||||
var flagImgs = row.QuerySelectorAll("table tbody tr:nth-of-type(1) td > img");
|
||||
var flags = new List<string>();
|
||||
|
@@ -10,6 +10,7 @@ using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Html.Dom;
|
||||
using AngleSharp.Html.Parser;
|
||||
using AngleSharp.Xml.Parser;
|
||||
using Jackett.Common.Helpers;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
@@ -1258,19 +1259,19 @@ namespace Jackett.Common.Indexers
|
||||
variables[".Query.Q"] = query.SearchTerm;
|
||||
variables[".Query.Series"] = null;
|
||||
variables[".Query.Ep"] = query.Episode;
|
||||
variables[".Query.Season"] = query.Season;
|
||||
variables[".Query.Season"] = query.Season > 0 ? query.Season.ToString() : null;
|
||||
variables[".Query.Movie"] = null;
|
||||
variables[".Query.Year"] = query.Year.ToString();
|
||||
variables[".Query.Limit"] = query.Limit.ToString();
|
||||
variables[".Query.Offset"] = query.Offset.ToString();
|
||||
variables[".Query.Year"] = query.Year?.ToString() ?? null;
|
||||
variables[".Query.Limit"] = query.Limit.ToString() ?? null;
|
||||
variables[".Query.Offset"] = query.Offset.ToString() ?? null;
|
||||
variables[".Query.Extended"] = query.Extended.ToString();
|
||||
variables[".Query.Categories"] = query.Categories;
|
||||
variables[".Query.APIKey"] = query.ApiKey;
|
||||
variables[".Query.TVDBID"] = query.TvdbID.ToString();
|
||||
variables[".Query.TVRageID"] = query.RageID;
|
||||
variables[".Query.TVDBID"] = query.TvdbID?.ToString() ?? null;
|
||||
variables[".Query.TVRageID"] = query.RageID?.ToString() ?? null;
|
||||
variables[".Query.IMDBID"] = query.ImdbID;
|
||||
variables[".Query.IMDBIDShort"] = query.ImdbIDShort;
|
||||
variables[".Query.TMDBID"] = query.TmdbID.ToString();
|
||||
variables[".Query.TMDBID"] = query.TmdbID?.ToString() ?? null;
|
||||
variables[".Query.TVMazeID"] = null;
|
||||
variables[".Query.TraktID"] = null;
|
||||
variables[".Query.Album"] = query.Album;
|
||||
@@ -1463,39 +1464,61 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
try
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
IHtmlCollection<IElement> rowsDom;
|
||||
|
||||
// check if we need to login again
|
||||
var loginNeeded = CheckIfLoginIsNeeded(response, SearchResultDocument);
|
||||
if (loginNeeded)
|
||||
if (SearchPath.Response != null && SearchPath.Response.Type.Equals("xml"))
|
||||
{
|
||||
logger.Info(string.Format("CardigannIndexer ({0}): Relogin required", Id));
|
||||
var LoginResult = await DoLogin();
|
||||
if (!LoginResult)
|
||||
throw new Exception(string.Format("Relogin failed"));
|
||||
await TestLogin();
|
||||
response = await RequestWithCookiesAsync(searchUrl, method: method, data: queryCollection);
|
||||
if (response.IsRedirect && SearchPath.Followredirect)
|
||||
await FollowIfRedirect(response);
|
||||
var SearchResultParser = new XmlParser();
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
|
||||
if (Search.Preprocessingfilters != null)
|
||||
{
|
||||
results = applyFilters(results, Search.Preprocessingfilters, variables);
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", Definition.Id, results));
|
||||
}
|
||||
|
||||
var rowsSelector = applyGoTemplateText(Search.Rows.Selector, variables);
|
||||
rowsDom = SearchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
}
|
||||
else
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
|
||||
// check if we need to login again
|
||||
var loginNeeded = CheckIfLoginIsNeeded(response, SearchResultDocument);
|
||||
if (loginNeeded)
|
||||
{
|
||||
logger.Info(string.Format("CardigannIndexer ({0}): Relogin required", Id));
|
||||
var LoginResult = await DoLogin();
|
||||
if (!LoginResult)
|
||||
throw new Exception(string.Format("Relogin failed"));
|
||||
await TestLogin();
|
||||
response = await RequestWithCookiesAsync(searchUrl, method: method, data: queryCollection);
|
||||
if (response.IsRedirect && SearchPath.Followredirect)
|
||||
await FollowIfRedirect(response);
|
||||
|
||||
results = response.ContentString;
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
}
|
||||
|
||||
checkForError(response, Definition.Search.Error);
|
||||
|
||||
if (Search.Preprocessingfilters != null)
|
||||
{
|
||||
results = applyFilters(results, Search.Preprocessingfilters, variables);
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", Id, results));
|
||||
}
|
||||
|
||||
var rowsSelector = applyGoTemplateText(Search.Rows.Selector, variables);
|
||||
rowsDom = SearchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
|
||||
results = response.ContentString;
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
}
|
||||
|
||||
checkForError(response, Definition.Search.Error);
|
||||
|
||||
if (Search.Preprocessingfilters != null)
|
||||
{
|
||||
results = applyFilters(results, Search.Preprocessingfilters, variables);
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", Id, results));
|
||||
}
|
||||
|
||||
var rowsSelector = applyGoTemplateText(Search.Rows.Selector, variables);
|
||||
var RowsDom = SearchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
var Rows = new List<IElement>();
|
||||
foreach (var RowDom in RowsDom)
|
||||
foreach (var RowDom in rowsDom)
|
||||
{
|
||||
Rows.Add(RowDom);
|
||||
}
|
||||
@@ -1914,6 +1937,17 @@ namespace Jackett.Common.Indexers
|
||||
}
|
||||
value = release.Category.ToString();
|
||||
break;
|
||||
case "categorydesc":
|
||||
var catsDesc = MapTrackerCatDescToNewznab(value);
|
||||
if (catsDesc.Any())
|
||||
{
|
||||
if (release.Category == null || FieldModifiers.Contains("noappend"))
|
||||
release.Category = catsDesc;
|
||||
else
|
||||
release.Category = release.Category.Union(catsDesc).ToList();
|
||||
}
|
||||
value = release.Category.ToString();
|
||||
break;
|
||||
case "size":
|
||||
release.Size = ReleaseInfo.GetBytes(value);
|
||||
value = release.Size.ToString();
|
||||
|
@@ -20,9 +20,8 @@ namespace Jackett.Common.Indexers
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class Cinecalidad : BaseWebIndexer
|
||||
{
|
||||
private const int MaxItemsPerPage = 15;
|
||||
private const int MaxSearchPageLimit = 6; // 15 items per page * 6 pages = 90
|
||||
private string _language;
|
||||
private const int MaxLatestPageLimit = 3; // 10 items per page * 3 pages = 30
|
||||
private const int MaxSearchPageLimit = 6;
|
||||
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"https://cinecalidad.website/",
|
||||
@@ -41,7 +40,7 @@ namespace Jackett.Common.Indexers
|
||||
ICacheService cs)
|
||||
: base(id: "cinecalidad",
|
||||
name: "Cinecalidad",
|
||||
description: "Películas Full HD en Castellano y Latino Dual.",
|
||||
description: "Películas Full HD en Latino Dual.",
|
||||
link: "https://www.cinecalidad.lat/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
@@ -55,32 +54,12 @@ namespace Jackett.Common.Indexers
|
||||
configData: new ConfigurationData())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "es-ES";
|
||||
Language = "es-419";
|
||||
Type = "public";
|
||||
|
||||
var language = new ConfigurationData.SingleSelectConfigurationItem(
|
||||
"Select language", new Dictionary<string, string>
|
||||
{
|
||||
{"castellano", "Castilian Spanish"},
|
||||
{"latino", "Latin American Spanish"}
|
||||
})
|
||||
{
|
||||
Value = "castellano"
|
||||
};
|
||||
configData.AddDynamic("language", language);
|
||||
|
||||
AddCategoryMapping(1, TorznabCatType.MoviesHD);
|
||||
}
|
||||
|
||||
public override void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
||||
{
|
||||
{
|
||||
base.LoadValuesFromJson(jsonConfig, useProtectionService);
|
||||
var language = (ConfigurationData.SingleSelectConfigurationItem)configData.GetDynamic("language");
|
||||
_language = language?.Value ?? "castellano";
|
||||
}
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
@@ -97,11 +76,9 @@ namespace Jackett.Common.Indexers
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
var templateUrl = SiteLink;
|
||||
if (_language.Equals("castellano"))
|
||||
templateUrl += "espana/";
|
||||
templateUrl += "{0}?s="; // placeholder for page
|
||||
|
||||
var maxPages = 2; // we scrape only 2 pages for recent torrents
|
||||
var maxPages = MaxLatestPageLimit; // we scrape only 2 pages for recent torrents
|
||||
if (!string.IsNullOrWhiteSpace(query.GetQueryString()))
|
||||
{
|
||||
templateUrl += WebUtilityHelpers.UrlEncode(query.GetQueryString(), Encoding.UTF8);
|
||||
@@ -124,7 +101,7 @@ namespace Jackett.Common.Indexers
|
||||
}
|
||||
releases.AddRange(pageReleases);
|
||||
|
||||
if (pageReleases.Count < MaxItemsPerPage)
|
||||
if (pageReleases.Count < 1)
|
||||
break; // this is the last page
|
||||
}
|
||||
|
||||
@@ -139,19 +116,8 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
var linkParent = dom.QuerySelector("li:contains('Torrent')").ParentElement;
|
||||
var protectedLink = linkParent.GetAttribute("data-res");
|
||||
if (protectedLink != null)
|
||||
protectedLink = "protect/v.php?i=" + protectedLink;
|
||||
else
|
||||
protectedLink = linkParent.GetAttribute("href");
|
||||
if (protectedLink.Contains("/ouo.io/"))
|
||||
{
|
||||
// protected link =>
|
||||
// https://ouo.io/qs/qsW6rCh4?s=https://www.cinecalidad.is/protect/v2.php?i=A8--9InL&title=High+Life+%282018%29
|
||||
var linkParts = protectedLink.Split('=');
|
||||
protectedLink = protectedLink.Replace(linkParts[0] + "=", "");
|
||||
}
|
||||
var protectedLink = dom.QuerySelector("a:contains('Torrent')").GetAttribute("data-url");
|
||||
protectedLink = Base64Decode(protectedLink);
|
||||
protectedLink = GetAbsoluteUrl(protectedLink);
|
||||
|
||||
results = await RequestWithCookiesAsync(protectedLink);
|
||||
@@ -176,20 +142,23 @@ namespace Jackett.Common.Indexers
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("div.postItem");
|
||||
var rows = dom.QuerySelectorAll("article");
|
||||
foreach (var row in rows)
|
||||
{
|
||||
if (row.QuerySelector("div.selt") != null)
|
||||
continue; // we only support movies
|
||||
|
||||
var qLink = row.QuerySelector("a.absolute");
|
||||
var qImg = row.QuerySelector("img");
|
||||
if (qImg == null)
|
||||
if (qLink == null || qImg == null)
|
||||
continue; // skip results without image
|
||||
var title = qImg.GetAttribute("title");
|
||||
|
||||
var title = qLink.TextContent.Trim();
|
||||
if (!CheckTitleMatchWords(query.GetQueryString(), title))
|
||||
continue; // skip if it doesn't contain all words
|
||||
title += _language.Equals("castellano") ? " MULTi/SPANiSH" : " MULTi/LATiN SPANiSH";
|
||||
title += " 1080p BDRip x264";
|
||||
|
||||
var poster = new Uri(GetAbsoluteUrl(qImg.GetAttribute("data-src")));
|
||||
var link = new Uri(row.QuerySelector("a.postItem__back-link").GetAttribute("href"));
|
||||
title += " MULTi/LATiN SPANiSH 1080p BDRip x264";
|
||||
var poster = new Uri(GetAbsoluteUrl(qImg.GetAttribute("src")));
|
||||
var link = new Uri(qLink.GetAttribute("href"));
|
||||
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
@@ -243,6 +212,12 @@ namespace Jackett.Common.Indexers
|
||||
return SiteLink + url.TrimStart('/');
|
||||
return url;
|
||||
}
|
||||
|
||||
private string Base64Decode(string base64EncodedData)
|
||||
{
|
||||
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
|
||||
return Encoding.UTF8.GetString(base64EncodedBytes);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -21,9 +21,9 @@ using WebClient = Jackett.Common.Utils.Clients.WebClient;
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class TodoTorrents : BaseWebIndexer
|
||||
public class DonTorrent : BaseWebIndexer
|
||||
{
|
||||
private static class TodoTorrentsCatType
|
||||
private static class DonTorrentCatType
|
||||
{
|
||||
public static string Pelicula => "pelicula";
|
||||
public static string Pelicula4K => "pelicula4k";
|
||||
@@ -39,28 +39,32 @@ namespace Jackett.Common.Indexers
|
||||
private const string SearchUrl = "/buscar/";
|
||||
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://dontorrent.it/",
|
||||
"https://todotorrents.net/",
|
||||
"https://tomadivx.net/",
|
||||
"https://seriesblanco.one/"
|
||||
};
|
||||
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"https://todotorrents.net"
|
||||
"https://dontorrent.li/"
|
||||
};
|
||||
|
||||
private static Dictionary<string, string> CategoriesMap => new Dictionary<string, string>
|
||||
{
|
||||
{ "/pelicula/", TodoTorrentsCatType.Pelicula },
|
||||
{ "/serie/", TodoTorrentsCatType.Serie },
|
||||
{ "/documental", TodoTorrentsCatType.Documental },
|
||||
{ "/musica/", TodoTorrentsCatType.Musica },
|
||||
{ "/variado/", TodoTorrentsCatType.Variado },
|
||||
{ "/juego/", TodoTorrentsCatType.Juego } //games, it can be pc or console
|
||||
{ "/pelicula/", DonTorrentCatType.Pelicula },
|
||||
{ "/serie/", DonTorrentCatType.Serie },
|
||||
{ "/documental", DonTorrentCatType.Documental },
|
||||
{ "/musica/", DonTorrentCatType.Musica },
|
||||
{ "/variado/", DonTorrentCatType.Variado },
|
||||
{ "/juego/", DonTorrentCatType.Juego } //games, it can be pc or console
|
||||
};
|
||||
|
||||
public TodoTorrents(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
|
||||
public DonTorrent(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
|
||||
ICacheService cs)
|
||||
: base(id: "todotorrents",
|
||||
name: "TodoTorrents",
|
||||
description: "TodoTorrents is a SPANISH public tracker for MOVIES / TV / GENERAL",
|
||||
link: "https://todotorrents.net/",
|
||||
: base(id: "dontorrent",
|
||||
name: "DonTorrent",
|
||||
description: "DonTorrent is a SPANISH public tracker for MOVIES / TV / GENERAL",
|
||||
link: "https://dontorrent.it/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
@@ -90,13 +94,11 @@ namespace Jackett.Common.Indexers
|
||||
var matchWords = new BoolConfigurationItem("Match words in title") { Value = true };
|
||||
configData.AddDynamic("MatchWords", matchWords);
|
||||
|
||||
//configData.AddDynamic("flaresolverr", new DisplayInfoConfigurationItem("FlareSolverr", "This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href=\"https://github.com/Jackett/Jackett#configuring-flaresolverr\" target=\"_blank\">FlareSolver</a> to access it."));
|
||||
|
||||
AddCategoryMapping(TodoTorrentsCatType.Pelicula, TorznabCatType.Movies, "Pelicula");
|
||||
AddCategoryMapping(TodoTorrentsCatType.Pelicula4K, TorznabCatType.MoviesUHD, "Peliculas 4K");
|
||||
AddCategoryMapping(TodoTorrentsCatType.Serie, TorznabCatType.TVSD, "Serie");
|
||||
AddCategoryMapping(TodoTorrentsCatType.SerieHD, TorznabCatType.TVHD, "Serie HD");
|
||||
AddCategoryMapping(TodoTorrentsCatType.Musica, TorznabCatType.Audio, "Música");
|
||||
AddCategoryMapping(DonTorrentCatType.Pelicula, TorznabCatType.Movies, "Pelicula");
|
||||
AddCategoryMapping(DonTorrentCatType.Pelicula4K, TorznabCatType.MoviesUHD, "Peliculas 4K");
|
||||
AddCategoryMapping(DonTorrentCatType.Serie, TorznabCatType.TVSD, "Serie");
|
||||
AddCategoryMapping(DonTorrentCatType.SerieHD, TorznabCatType.TVHD, "Serie HD");
|
||||
AddCategoryMapping(DonTorrentCatType.Musica, TorznabCatType.Audio, "Música");
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
@@ -135,7 +137,7 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
var parser = new HtmlParser();
|
||||
|
||||
// Eg https://todotorrents.net/pelicula/24797/Halloween-Kills
|
||||
// Eg https://dontorrent.li/pelicula/24797/Halloween-Kills
|
||||
var result = await RequestWithCookiesAsync(downloadUrl);
|
||||
if (result.Status != HttpStatusCode.OK)
|
||||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
@@ -183,7 +185,7 @@ namespace Jackett.Common.Indexers
|
||||
}
|
||||
|
||||
//<span class="text-muted">2022-01-12</span>
|
||||
//<a href='pelicula/24797/Halloween-Kills' class="text-primary">Halloween Kills</a>
|
||||
//<a href='pelicula/24797/Halloween-Kills' class="text-primary">Halloween Kills</a>
|
||||
//<span class="text-muted">(MicroHD-1080p)</span>
|
||||
|
||||
if (row.TagName.Equals("A"))
|
||||
@@ -495,7 +497,6 @@ namespace Jackett.Common.Indexers
|
||||
Category = MapTrackerCatToNewznab(cat),
|
||||
PublishDate = publishDate,
|
||||
Size = size,
|
||||
Files = 1,
|
||||
Seeders = 1,
|
||||
Peers = 2,
|
||||
DownloadVolumeFactor = 0,
|
||||
@@ -673,7 +674,7 @@ namespace Jackett.Common.Indexers
|
||||
case "pelicula4k":
|
||||
if (title.Contains("4K"))
|
||||
{
|
||||
cat = TodoTorrentsCatType.Pelicula4K;
|
||||
cat = DonTorrentCatType.Pelicula4K;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -681,7 +682,7 @@ namespace Jackett.Common.Indexers
|
||||
case "seriehd":
|
||||
if (title.Contains("720p") || title.Contains("1080p"))
|
||||
{
|
||||
cat = TodoTorrentsCatType.SerieHD;
|
||||
cat = DonTorrentCatType.SerieHD;
|
||||
}
|
||||
|
||||
break;
|
@@ -141,9 +141,11 @@ namespace Jackett.Common.Indexers
|
||||
if (prev == null || !string.Equals(prev.NodeName, "style", StringComparison.OrdinalIgnoreCase))
|
||||
continue;
|
||||
|
||||
var release = new ReleaseInfo();
|
||||
release.MinimumRatio = 1;
|
||||
release.MinimumSeedTime = 86400; // 24 hours
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 86400 // 24 hours
|
||||
};
|
||||
|
||||
var qLink = row.Children[1].FirstElementChild;
|
||||
release.Title = qLink.TextContent.Trim();
|
||||
|
@@ -4,6 +4,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
@@ -65,5 +66,7 @@ namespace Jackett.Common.Indexers
|
||||
public interface IWebIndexer : IIndexer
|
||||
{
|
||||
Task<byte[]> Download(Uri link);
|
||||
|
||||
Task<WebResult> DownloadImage(Uri link);
|
||||
}
|
||||
}
|
||||
|
@@ -87,6 +87,16 @@ namespace Jackett.Common.Indexers
|
||||
Language = "en-US";
|
||||
Type = "private";
|
||||
|
||||
var sort = new ConfigurationData.SingleSelectConfigurationItem("Sort requested from site", new Dictionary<string, string>
|
||||
{
|
||||
{"time", "created"},
|
||||
{"size", "size"},
|
||||
{"seeders", "seeders"},
|
||||
{"name", "title"}
|
||||
})
|
||||
{ Value = "time" };
|
||||
configData.AddDynamic("sort", sort);
|
||||
|
||||
configData.AddDynamic("freeleech", new BoolConfigurationItem("Search freeleech only") { Value = false });
|
||||
|
||||
AddCategoryMapping(72, TorznabCatType.Movies, "Movies");
|
||||
@@ -201,6 +211,8 @@ namespace Jackett.Common.Indexers
|
||||
if (((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value)
|
||||
qc.Add("free", "on");
|
||||
|
||||
qc.Add("o", ((SingleSelectConfigurationItem)configData.GetDynamic("sort")).Value);
|
||||
|
||||
var searchUrl = SearchUrl + "?" + qc.GetQueryString();
|
||||
var response = await RequestWithCookiesAndRetryAsync(searchUrl, referer: SearchUrl);
|
||||
var results = response.ContentString;
|
||||
|
@@ -36,7 +36,7 @@ namespace Jackett.Common.Indexers
|
||||
private const string SearchUrl = "secciones.php";
|
||||
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://www.mejortorrentes.net/",
|
||||
"https://www.mejortorrentes.org/",
|
||||
"https://mejortorrent.nocensor.biz/",
|
||||
"https://mejortorrent.unblockit.how/"
|
||||
};
|
||||
@@ -59,6 +59,7 @@ namespace Jackett.Common.Indexers
|
||||
"https://www.mejortorrentes.com/",
|
||||
"https://www.mejortorrento.info/",
|
||||
"https://mejortorrent.nocensor.work/",
|
||||
"https://www.mejortorrentes.net/",
|
||||
"https://mejortorrent.unblockit.tv/"
|
||||
};
|
||||
|
||||
@@ -67,7 +68,7 @@ namespace Jackett.Common.Indexers
|
||||
: base(id: "mejortorrent",
|
||||
name: "MejorTorrent",
|
||||
description: "MejorTorrent - Hay veces que un torrent viene mejor! :)",
|
||||
link: "https://www.mejortorrentes.net/",
|
||||
link: "https://www.mejortorrentes.org/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
|
@@ -132,7 +132,7 @@ namespace Jackett.Common.Indexers
|
||||
: base(id: "newpct",
|
||||
name: "NewPCT",
|
||||
description: "NewPCT - Descargar peliculas, series y estrenos torrent gratis",
|
||||
link: "https://atomixhq.net/",
|
||||
link: "https://atomixhq.top/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
|
@@ -168,9 +168,11 @@ namespace Jackett.Common.Indexers
|
||||
foreach (var row in rows)
|
||||
{
|
||||
// TODO convert to initializer
|
||||
var release = new ReleaseInfo();
|
||||
release.MinimumRatio = 1;
|
||||
release.MinimumSeedTime = 259200; // 72 hours
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 259200 // 72 hours
|
||||
};
|
||||
|
||||
var catId = "82"; // default
|
||||
var qCatLink = row.Children[categoryIndex].QuerySelector("a");
|
||||
|
@@ -1,122 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class ShowRSS : BaseWebIndexer
|
||||
{
|
||||
private string SearchAllUrl => SiteLink + "other/all.rss";
|
||||
private string BrowseUrl => SiteLink + "browse/";
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"http://showrss.info/"
|
||||
};
|
||||
|
||||
private new ConfigurationData configData => base.configData;
|
||||
|
||||
public ShowRSS(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,
|
||||
ICacheService cs)
|
||||
: base(id: "showrss",
|
||||
name: "ShowRSS",
|
||||
description: "showRSS is a service that allows you to keep track of your favorite TV shows",
|
||||
link: "https://showrss.info/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
||||
}
|
||||
},
|
||||
configService: configService,
|
||||
client: wc,
|
||||
logger: l,
|
||||
p: ps,
|
||||
cacheService: cs,
|
||||
configData: new ConfigurationData())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "en-US";
|
||||
Type = "public";
|
||||
|
||||
AddCategoryMapping(1, TorznabCatType.TV);
|
||||
AddCategoryMapping(2, TorznabCatType.TVSD);
|
||||
AddCategoryMapping(3, TorznabCatType.TVHD);
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
var releases = await PerformQuery(new TorznabQuery());
|
||||
|
||||
await ConfigureIfOK(string.Empty, releases.Any(),
|
||||
() => throw new Exception("Could not find releases from this URL"));
|
||||
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
var episodeSearchUrl = string.Format(SearchAllUrl);
|
||||
var result = await RequestWithCookiesAndRetryAsync(episodeSearchUrl);
|
||||
var xmlDoc = new XmlDocument();
|
||||
|
||||
try
|
||||
{
|
||||
xmlDoc.LoadXml(result.ContentString);
|
||||
foreach (XmlNode node in xmlDoc.GetElementsByTagName("item"))
|
||||
{
|
||||
var title = node.SelectSingleNode(".//*[local-name()='raw_title']").InnerText;
|
||||
if (!query.MatchQueryStringAND(title))
|
||||
continue;
|
||||
|
||||
// TODO: use Jackett.Common.Utils.TvCategoryParser.ParseTvShowQuality
|
||||
// guess category from title
|
||||
var category = title.Contains("720p") || title.Contains("1080p") ?
|
||||
TorznabCatType.TVHD.ID :
|
||||
TorznabCatType.TVSD.ID;
|
||||
|
||||
var magnetUri = new Uri(node.SelectSingleNode("link")?.InnerText);
|
||||
var publishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
|
||||
var infoHash = node.SelectSingleNode(".//*[local-name()='info_hash']").InnerText;
|
||||
var details = new Uri(BrowseUrl + node.SelectSingleNode(".//*[local-name()='show_id']").InnerText);
|
||||
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
Title = title,
|
||||
Details = details,
|
||||
Category = new List<int> { category },
|
||||
Guid = magnetUri,
|
||||
PublishDate = publishDate,
|
||||
InfoHash = infoHash,
|
||||
MagnetUri = magnetUri,
|
||||
Size = 512,
|
||||
Seeders = 1,
|
||||
Peers = 2,
|
||||
DownloadVolumeFactor = 0,
|
||||
UploadVolumeFactor = 1
|
||||
};
|
||||
releases.Add(release);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
OnParseError(result.ContentString, e);
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
}
|
||||
}
|
@@ -13,6 +13,7 @@ using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
@@ -85,6 +86,8 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
wc.EmulateBrowser = false;
|
||||
|
||||
configData.AddDynamic("freeleech", new BoolConfigurationItem("Search freeleech only") { Value = false });
|
||||
|
||||
AddCategoryMapping(29, TorznabCatType.TVAnime, "Anime");
|
||||
AddCategoryMapping(28, TorznabCatType.PC, "Appz/Packs");
|
||||
AddCategoryMapping(42, TorznabCatType.AudioAudiobook, "Audio Books");
|
||||
@@ -171,6 +174,9 @@ namespace Jackett.Common.Indexers
|
||||
else
|
||||
searchUrl += ";q=" + WebUtilityHelpers.UrlEncode(query.GetQueryString(), Encoding);
|
||||
|
||||
if (((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value)
|
||||
searchUrl += ";free=on";
|
||||
|
||||
var results = await RequestWithCookiesAndRetryAsync(searchUrl);
|
||||
|
||||
// Check for being logged out
|
||||
|
@@ -11,6 +11,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AngleSharp" Version="0.16.1" />
|
||||
<PackageReference Include="AngleSharp.Xml" Version="0.16.0" />
|
||||
<PackageReference Include="Autofac" Version="6.3.0" />
|
||||
<PackageReference Include="AutoMapper" Version="10.1.1" />
|
||||
<PackageReference Include="BencodeNET" Version="4.0.0" />
|
||||
|
@@ -150,7 +150,7 @@ namespace Jackett.Common.Services
|
||||
if (!File.Exists(fullPath))
|
||||
{
|
||||
logger.Debug("Config file does not exist: " + fullPath);
|
||||
return default(T);
|
||||
return default;
|
||||
}
|
||||
|
||||
return serializeService.DeSerialise<T>(File.ReadAllText(fullPath));
|
||||
|
@@ -42,6 +42,7 @@ namespace Jackett.Common.Services
|
||||
{
|
||||
{"audiobooktorrents", "abtorrents"},
|
||||
{"broadcastthenet", "broadcasthenet"},
|
||||
{"todotorrents", "dontorrent"},
|
||||
{"hdreactor", "hdhouse"},
|
||||
{"icetorrent", "speedapp"},
|
||||
{"kickasstorrent-kathow", "kickasstorrents-ws"},
|
||||
|
@@ -16,7 +16,7 @@ namespace Jackett.Common.Services
|
||||
}
|
||||
catch
|
||||
{
|
||||
return default(T);
|
||||
return default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -44,6 +44,10 @@ namespace Jackett.Common.Services
|
||||
filePermissionService = fps;
|
||||
|
||||
variant = new Variants().GetVariant();
|
||||
|
||||
// Increase the HTTP client timeout just for update download (not other requests)
|
||||
// The update is heavy and can take longer time for slow connections. Fix #12711
|
||||
client.SetTimeout(300); // 5 minutes
|
||||
}
|
||||
|
||||
public void StartUpdateChecker() => Task.Factory.StartNew(UpdateWorkerThread);
|
||||
|
@@ -10,7 +10,7 @@ namespace Jackett.Common.Utils
|
||||
{
|
||||
var commonAssembly = Assembly.GetExecutingAssembly();
|
||||
var attribute = commonAssembly.GetCustomAttribute<BuildDateAttribute>();
|
||||
return attribute?.DateTime ?? default(DateTime);
|
||||
return attribute?.DateTime ?? default;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -49,6 +49,8 @@ namespace Jackett.Common.Utils.Clients
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
}
|
||||
|
||||
public override void SetTimeout(int seconds) => ClientTimeout = seconds;
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
@@ -92,6 +94,7 @@ namespace Jackett.Common.Utils.Clients
|
||||
clearanceHandlr.InnerHandler = clientHandlr;
|
||||
using (var client = new HttpClient(clearanceHandlr))
|
||||
{
|
||||
client.Timeout = TimeSpan.FromSeconds(ClientTimeout);
|
||||
using (var request = new HttpRequestMessage())
|
||||
{
|
||||
request.Headers.ExpectContinue = false;
|
||||
@@ -154,10 +157,9 @@ namespace Jackett.Common.Utils.Clients
|
||||
};
|
||||
|
||||
foreach (var header in response.Headers)
|
||||
{
|
||||
var value = header.Value;
|
||||
result.Headers[header.Key.ToLowerInvariant()] = value.ToArray();
|
||||
}
|
||||
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
|
||||
foreach (var header in response.Content.Headers)
|
||||
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
|
||||
|
||||
// some cloudflare clients are using a refresh header
|
||||
// Pull it out manually
|
||||
|
@@ -77,6 +77,8 @@ namespace Jackett.Common.Utils.Clients
|
||||
|
||||
clearanceHandlr.InnerHandler = clientHandlr;
|
||||
client = new HttpClient(clearanceHandlr);
|
||||
|
||||
SetTimeout(ClientTimeout);
|
||||
}
|
||||
|
||||
// Called everytime the ServerConfig changes
|
||||
@@ -90,6 +92,12 @@ namespace Jackett.Common.Utils.Clients
|
||||
}
|
||||
}
|
||||
|
||||
public override void SetTimeout(int seconds)
|
||||
{
|
||||
ClientTimeout = seconds;
|
||||
client.Timeout = TimeSpan.FromSeconds(ClientTimeout);
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
@@ -175,10 +183,9 @@ namespace Jackett.Common.Utils.Clients
|
||||
};
|
||||
|
||||
foreach (var header in response.Headers)
|
||||
{
|
||||
var value = header.Value;
|
||||
result.Headers[header.Key.ToLowerInvariant()] = value.ToArray();
|
||||
}
|
||||
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
|
||||
foreach (var header in response.Content.Headers)
|
||||
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
|
||||
|
||||
// some cloudflare clients are using a refresh header
|
||||
// Pull it out manually
|
||||
|
@@ -25,6 +25,7 @@ namespace Jackett.Common.Utils.Clients
|
||||
protected DateTime lastRequest = DateTime.MinValue;
|
||||
protected TimeSpan requestDelayTimeSpan;
|
||||
protected string ClientType;
|
||||
protected int ClientTimeout = 100; // default timeout is 100 s
|
||||
public bool EmulateBrowser = true;
|
||||
|
||||
protected static Dictionary<string, ICollection<string>> trustedCertificates = new Dictionary<string, ICollection<string>>();
|
||||
@@ -224,6 +225,8 @@ namespace Jackett.Common.Utils.Clients
|
||||
InitProxy(serverConfig);
|
||||
}
|
||||
|
||||
public virtual void SetTimeout(int seconds) => throw new NotImplementedException();
|
||||
|
||||
/**
|
||||
* This method does the same as FormUrlEncodedContent but with custom encoding instead of utf-8
|
||||
* https://stackoverflow.com/a/13832544
|
||||
|
@@ -43,9 +43,7 @@ namespace Jackett.Common.Utils
|
||||
|
||||
internal LambdaFilterFuncComponent(string id, Func<string, Func<IIndexer, bool>> builder) : base(id)
|
||||
{
|
||||
if (builder == null)
|
||||
throw new ArgumentNullException(nameof(builder));
|
||||
this.builder = builder;
|
||||
this.builder = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
}
|
||||
|
||||
public override Func<IIndexer, bool> ToFunc(string args)
|
||||
|
72
src/Jackett.Server/Controllers/ImageController.cs
Normal file
72
src/Jackett.Server/Controllers/ImageController.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Models.Config;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Server.ActionFilters;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.WebUtilities;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Server.Controllers
|
||||
{
|
||||
[AllowAnonymous]
|
||||
[DownloadActionFilter]
|
||||
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
[Route("img/{indexerID}")]
|
||||
public class ImageController : Controller
|
||||
{
|
||||
private readonly ServerConfig serverConfig;
|
||||
private readonly Logger logger;
|
||||
private readonly IIndexerManagerService indexerService;
|
||||
private readonly IProtectionService protectionService;
|
||||
|
||||
public ImageController(IIndexerManagerService i, Logger l, IProtectionService ps, ServerConfig sConfig)
|
||||
{
|
||||
serverConfig = sConfig;
|
||||
logger = l;
|
||||
indexerService = i;
|
||||
protectionService = ps;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> DownloadImage(string indexerID, string path, string jackett_apikey, string file)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (serverConfig.APIKey != jackett_apikey)
|
||||
return Unauthorized();
|
||||
|
||||
var indexer = indexerService.GetWebIndexer(indexerID);
|
||||
if (!indexer.IsConfigured)
|
||||
{
|
||||
logger.Warn($"Rejected a request to {indexer.DisplayName} which is unconfigured.");
|
||||
return Forbid("This indexer is not configured.");
|
||||
}
|
||||
|
||||
path = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(path));
|
||||
path = protectionService.UnProtect(path);
|
||||
|
||||
var target = new Uri(path, UriKind.RelativeOrAbsolute);
|
||||
var response = await indexer.DownloadImage(target);
|
||||
|
||||
if (response.Status != System.Net.HttpStatusCode.OK &&
|
||||
response.Status != System.Net.HttpStatusCode.Continue &&
|
||||
response.Status != System.Net.HttpStatusCode.PartialContent)
|
||||
return new StatusCodeResult((int)response.Status);
|
||||
|
||||
var contentType = response.Headers.ContainsKey("content-type") ?
|
||||
response.Headers["content-type"].First() :
|
||||
"image/jpeg";
|
||||
return File(response.ContentBytes, contentType);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.Debug($"Error downloading image. indexer: {indexerID} path: {path}\n{e}");
|
||||
return new StatusCodeResult((int)System.Net.HttpStatusCode.InternalServerError);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -167,11 +167,11 @@ namespace Jackett.Server.Controllers
|
||||
var serverUrl = serverService.GetServerUrl(Request);
|
||||
foreach (var result in results)
|
||||
{
|
||||
var link = result.Link;
|
||||
var file = StringUtil.MakeValidFileName(result.Title, '_', false);
|
||||
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
|
||||
result.Link = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "dl", file);
|
||||
result.Poster = serverService.ConvertToProxyLink(result.Poster, serverUrl, result.TrackerId, "img", "poster");
|
||||
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(serverService.GetBlackholeDirectory()))
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "bh", file);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -414,6 +414,7 @@ namespace Jackett.Server.Controllers
|
||||
var proxiedReleases = result.Releases.Select(r => MapperUtil.Mapper.Map<ReleaseInfo>(r)).Select(r =>
|
||||
{
|
||||
r.Link = serverService.ConvertToProxyLink(r.Link, serverUrl, r.Origin.Id, "dl", r.Title);
|
||||
r.Poster = serverService.ConvertToProxyLink(r.Poster, serverUrl, r.Origin.Id, "img", "poster");
|
||||
return r;
|
||||
});
|
||||
|
||||
@@ -498,6 +499,9 @@ namespace Jackett.Server.Controllers
|
||||
{
|
||||
var release = MapperUtil.Mapper.Map<ReleaseInfo>(r);
|
||||
release.Link = serverService.ConvertToProxyLink(release.Link, serverUrl, CurrentIndexer.Id, "dl", release.Title);
|
||||
// Poster is not used in Potato response
|
||||
//release.Poster = serverService.ConvertToProxyLink(release.Poster, serverUrl, CurrentIndexer.Id, "img", "poster");
|
||||
|
||||
// IMPORTANT: We can't use Uri.ToString(), because it generates URLs without URL encode (links with unicode
|
||||
// characters are broken). We must use Uri.AbsoluteUri instead that handles encoding correctly
|
||||
var item = new TorrentPotatoResponseItem()
|
||||
@@ -531,13 +535,13 @@ namespace Jackett.Server.Controllers
|
||||
var serverUrl = serverService.GetServerUrl(Request);
|
||||
foreach (var result in results)
|
||||
{
|
||||
var link = result.Link;
|
||||
var file = StringUtil.MakeValidFileName(result.Title, '_', false);
|
||||
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
|
||||
result.Link = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "dl", file);
|
||||
result.Poster = serverService.ConvertToProxyLink(result.Poster, serverUrl, result.TrackerId, "img", "poster");
|
||||
if (!string.IsNullOrWhiteSpace(serverConfig.BlackholeDir))
|
||||
{
|
||||
if (result.Link != null)
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "bh", file);
|
||||
else if (result.MagnetUri != null)
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(result.MagnetUri, serverUrl, result.TrackerId, "bh", file);
|
||||
}
|
||||
|
@@ -356,6 +356,7 @@ namespace Jackett.Updater
|
||||
"Definitions/hdbc.yml", // renamed to hdbitscom
|
||||
"Definitions/hdclub.yml",
|
||||
"Definitions/hddisk.yml",
|
||||
"Definitions/hdolimpo.yml", // migrated to UNIT3D API
|
||||
"Definitions/hdplus.yml",
|
||||
"Definitions/hdreactor.yml", // renamed to hdhouse
|
||||
"Definitions/hdstreet.yml",
|
||||
|
Reference in New Issue
Block a user