Compare commits

...

951 Commits

Author SHA1 Message Date
Cory
a89246c9a7 core: improve date parsing for today/yesterday/tomorrow. resolves #7701 (#7704) 2020-03-18 21:11:48 +13:00
ende124
69b01c34f8 norbits: Add fullsearch option (#7710) 2020-03-18 20:50:13 +13:00
Garfield69
a41bf6ebe4 polishsource: add imdbid search. #4859 2020-03-18 19:57:58 +13:00
Garfield69
5bf224d84d torrentview: new domain *6.net 2020-03-18 17:44:17 +13:00
Garfield69
03af2a6d1d torrent-turk: add info about unread PM 2020-03-18 17:43:51 +13:00
Garfield69
aee7bba3ce estone: update search terms 2020-03-17 20:15:30 +13:00
Garfield69
29b1304967 downloadville: 2020-03-17 18:25:16 +13:00
Garfield69
81029b3019 documentarytorrents: update modes. 2020-03-17 18:10:32 +13:00
Garfield69
62caeb3f4d divteam: update categories 2020-03-17 17:58:53 +13:00
Garfield69
fba3e1922f deildu: add imdbid search. #4859 2020-03-17 16:46:46 +13:00
Garfield69
0aacf6344d cztorrent: update categories 2020-03-17 16:24:59 +13:00
Garfield69
9d3d8ea18d crnaberza: fix title search. 2020-03-17 16:10:01 +13:00
Garfield69
4da3921e21 crazyspirit: update cats 2020-03-17 13:06:58 +13:00
Diego Heras
fed41d5b68 epublibre: add server overloaded message (#7697) 2020-03-16 21:48:14 +01:00
Garfield69
15841e26a8 cinemamovies: add imdb search. #4859 2020-03-17 09:03:18 +13:00
Garfield69
22a5f46276 totallykids: add imdb search. #4859 2020-03-16 17:58:39 +13:00
Garfield69
eb5642f293 ptfiles: add imdb search. #4859
add config sort options
add UHD cat
add engine tag
remove obsolete search terms
2020-03-16 17:36:21 +13:00
Garfield69
98297b2d85 torrentleech-pl: add imdb search. #4859 2020-03-16 17:10:25 +13:00
Diego Heras
d900ac065f webui: save search sorting and number of entries indefinitely. resolves #4558 (#7686) 2020-03-16 12:59:49 +13:00
Cory
469620d88b gimme-peers: fix parse error on zero results resolves #7678 (#7683) 2020-03-16 00:21:00 +01:00
Diego Heras
461594e336 elitetracker: fix parsing error. resolves #7675 (#7684) 2020-03-15 17:26:18 -05:00
Cory
63f1870319 bithdtv: implement category searching. resolves #7577 resolves #7596 (#7663)
* Implement category searching. Fixes #7577

* Check if no results Resolves #7596
2020-03-15 22:49:31 +01:00
Cory
ba9710cd7c hdspace: add imdb search support (#7665) 2020-03-15 22:38:54 +01:00
Garfield69
44c814417c ztracker: add imdb search. #4859
add silver DLVF
correct a couple cats
2020-03-16 09:15:32 +13:00
Diego Heras
d1290fc226 epublibre: add new spanish public tracker. resolves #6309 (#7669) 2020-03-15 18:42:14 +01:00
junglebus
fa88fa8af8 Readme: Full framework now no longer needed (#7667)
Since we are now running self contained .NET Core, no .NET is required on the host system
2020-03-16 06:24:36 +13:00
Diego Heras
318b3667ff core: add more binary formats in .gitattributes (#7670) 2020-03-16 06:23:28 +13:00
Garfield69
7b0adc7e45 torrentwal: gone. removed. resolves #7286 2020-03-15 16:35:05 +13:00
Diego Heras
d27ab11d8c elitetracker: add imdb search and fix categories (#7657) 2020-03-15 00:18:42 +01:00
Cory
5b6c9fee49 Fix proxy in all cases (#7631) resolves #7411
Co-authored-by: Diego Heras <ngosang@hotmail.es>
2020-03-14 17:53:16 -05:00
Garfield69
594959c858 torrent.lt: add config sort options
add movie-search
add freeleech
2020-03-15 11:08:20 +13:00
Garfield69
5b570b5cec torrentland: fix ULVF 2020-03-15 11:07:10 +13:00
Garfield69
875be5dde9 spiritofrevolution: fix imdbsearch. #4859 2020-03-15 08:59:11 +13:00
Garfield69
ffd1600226 bitturk, blutopia: update categories 2020-03-15 08:58:39 +13:00
Garfield69
07ef45b637 datascene: add imdb search support. #4859
also add config sort options
incldead
2020-03-15 08:58:02 +13:00
Cory
24f7fa461d bithdtv: improve imdb search. resolves #7596 (#7629) 2020-03-14 19:16:03 +01:00
Garfield69
8ebeb2bb17 icetorrent: fix imdbid searches. resolves #7651
also drop searching with both browse and browseadult
now use one or the other via config checkbox.
2020-03-15 06:33:08 +13:00
Diego Heras
fe3fcda356 style: improve date utils code style (#7632) 2020-03-15 05:05:10 +13:00
Diego Heras
b689b4581e funfile: fix parsing error. resolves #7633 (#7639) 2020-03-15 05:04:05 +13:00
Garfield69
623da8f70d readme: update net461 link 2020-03-14 21:30:06 +13:00
Garfield69
6afaf39d5a .gitattributes default eol=lf for all text source
used mainly by my win10 desktop github, it would pop up a warning that lf was going to be converting LF to CRLF
https://github.com/desktop/desktop/issues/3841 provided this solve
2020-03-14 21:29:43 +13:00
Garfield69
55bd19dc45 moecat: add 2FA to config. resollves #7644 2020-03-14 19:40:47 +13:00
junglebus
0979b0c86d Pipeline: Get text after list of commits #3 2020-03-14 17:20:38 +11:00
junglebus
f4c8677091 Fix Pipeline: Get text after list of commits 2020-03-14 16:57:34 +11:00
junglebus
1123e9d101 Pipeline: Get text after list of commits 2020-03-14 16:43:40 +11:00
junglebus
9a39fcc310 Test build from master 2020-03-14 16:18:44 +11:00
junglebus
e8fc2c758f Update build triggers 2020-03-14 15:57:57 +11:00
junglebus
b8cdf9f929 No longer needed now that Cake is not used 2020-03-14 15:45:54 +11:00
junglebus
89c860a16d Update for GitHubRelease@1 2020-03-14 15:21:54 +11:00
junglebus
ee5255b24a Update README.md 2020-03-14 15:10:51 +11:00
junglebus
674e6e37ad Update pipeline for new Azure organization 2020-03-14 15:05:49 +11:00
Garfield69
082e761d0d add * Torrent Oyun indir a public Turkish games site. resolves #7636 2020-03-14 07:16:11 +13:00
Garfield69
6e8726c197 baibako: switch to private. 2020-03-14 05:39:25 +13:00
Garfield69
3a8ed21d75 amigosshare: handle missing cat 2020-03-13 20:23:49 +13:00
Garfield69
eda0205dcd add u-torrents a private Romanian site. resolves #7626 2020-03-13 06:54:35 +13:00
Garfield69
bd250ff971 add lastfiles a Romanian privat esite. resolves #7580 2020-03-12 21:20:55 +13:00
Garfield69
1c63e9444d zetorrents: refining title. #7574 2020-03-12 19:18:24 +13:00
Garfield69
57a5959751 add zetorrents a public french site. resolves #7574 2020-03-12 18:18:59 +13:00
Garfield69
9e005c4c0b Merge branch 'master' of https://github.com/Jackett/Jackett 2020-03-12 18:14:49 +13:00
Garfield69
c6d4746e85 assorted public trackers: info about cat 100001 -> 7000 2020-03-12 18:14:41 +13:00
Diego Heras
e9851a1dbc funfile: handle disabled download links. resolves #7436 (#7620) 2020-03-12 17:34:07 +13:00
Garfield69
96d23ca19a add torrentv a public movie site. resolves #7575 2020-03-12 17:31:03 +13:00
Garfield69
733494a8a3 scenefz: update for new engine. resolves #7625 2020-03-12 15:25:00 +13:00
Garfield69
ed763fe7e1 scenefz: domain change. #7625 2020-03-12 12:36:52 +13:00
Garfield69
1ef146eea4 add rapidzona a Russian public 3x site. resolves #7561 2020-03-12 09:15:48 +13:00
Diego Heras
ed884f507d puntotorrent: fix missing categories. resolves #7592 (#7623) 2020-03-12 08:53:25 +13:00
fnk93
ec6ed23ecc torrentseeds: fix re-login and add imdb id (#7611) 2020-03-11 19:34:02 +01:00
Garfield69
9d5456e370 add torrent-pirat a public Russian 3x site. resolves #7560 2020-03-12 06:03:28 +13:00
Garfield69
ad08e28aa9 add sosulki a public Russian 3X site. resolves #7559 2020-03-11 20:48:38 +13:00
Diego Heras
34dcdd3332 core: add trace running in docker (#7565) 2020-03-11 19:02:55 +13:00
Cory
628944cb59 TorrentHeaven: Update with user provided HTML. Resolves #7586 (related to #7387) (#7616) 2020-03-11 18:20:53 +13:00
Diego Heras
08bc5cca75 shazbat: fix parser. resolves #7604 (#7619) 2020-03-11 17:58:45 +13:00
Diego Heras
5c16161bfc morethantv: add banner and description. resolves #7594 (#7621) 2020-03-11 12:53:12 +13:00
Diego Heras
4eb7392678 core: improve linux install scripts. resolves #5533 #6098 #5407 (#7614) 2020-03-10 21:49:26 +01:00
halali
0448193ecd cztorrent: Fix for Sonarr Season pack search (#7607) 2020-03-11 08:41:11 +13:00
Garfield69
dc27463826 lesaloon: revert https switching. #7221 2020-03-11 07:53:07 +13:00
Celedhrim
d3ef94c8db Downloadville: add a fake referer in search (#7609) resolves #7514 2020-03-11 07:26:45 +13:00
cadatoiva
74e3dec4ed Revert "Update TorrentHeaven with user provided html. Resolves #7586"
This reverts commit 0b45557292.
2020-03-10 12:05:57 -05:00
cadatoiva
0b45557292 Update TorrentHeaven with user provided html. Resolves #7586 2020-03-10 12:02:03 -05:00
halali
0387de3c67 trezzor: Fix some selectors in search page (#7608) 2020-03-10 21:56:54 +13:00
Garfield69
6358e62741 awsomehd: add info about 90 day mandatory password change 2020-03-10 21:42:23 +13:00
Garfield69
b012502f87 rns: add info about unread PM preventing searches. 2020-03-10 21:41:29 +13:00
Garfield69
608bb7d9e4 sdbits: switch to https: resolves #7221 2020-03-10 20:43:17 +13:00
fnk93
5f4206608e TorrentSeeds: Convert to csharp (#7603) 2020-03-10 20:11:35 +13:00
Garfield69
aef10d1246 eggmeon: gone. removed. resolves #7133 2020-03-10 20:07:03 +13:00
Garfield69
6fc972aa08 onejav: description can be missing. resovles #7602 2020-03-10 19:22:41 +13:00
Garfield69
271dcda7aa cartoonchaos: add posters. resolves #7598 2020-03-10 18:20:21 +13:00
Garfield69
94656892f8 totallykids: add posters. resolves #7589 2020-03-10 18:10:18 +13:00
Diego Heras
5fedb9c613 moviesdvdr: fix banner and size (#7599) 2020-03-10 16:04:04 +13:00
snamds
538fa6a38d Newpct: optionally remove year from movies (#7597) 2020-03-10 15:53:57 +13:00
Garfield69
4bd4d9cb0f add imdbid to modes for any yaml that supports .Query.IMDBID 2020-03-10 15:35:59 +13:00
RicardoVelaC
a353af2ee5 vizuk: Update categories (#7605) resolves #7588 2020-03-10 14:34:27 +13:00
Garfield69
565a368689 hdarea: fix imdb lookup. resolves #7368 2020-03-10 14:23:14 +13:00
Garfield69
972d4c9485 bittower: revert back to http. #7221 2020-03-10 10:25:45 +13:00
Garfield69
45b77de6b2 torrentland: add UHD categories. resolves #7591 2020-03-10 07:42:24 +13:00
Garfield69
a27c641bcb torrentleech: update categories. resolves #7590 2020-03-10 06:52:40 +13:00
Garfield69
00cd1bd81c xbytes2: update categories. resolves #7587 2020-03-10 05:30:37 +13:00
Garfield69
80493b7fa1 add ParnuXi a Russian Public 3x site. resolves #7558 2020-03-09 20:11:02 +13:00
Garfield69
925471fa0c add pornolive a Russian Public 3x site. resolves #7557 2020-03-09 18:22:17 +13:00
Garfield69
9ae16dea57 add iv-torrents a Russian semi-private site. resolves #7556 2020-03-09 17:19:53 +13:00
Garfield69
1aa3a256eb add rutracker-ru a Russian Puiblic site. resolves #7526 2020-03-09 15:51:25 +13:00
Garfield69
89d12c6fa9 zelka: add info note about bulgarian ip filter 2020-03-09 11:31:36 +13:00
Garfield69
ab6ca013d3 yaml: switch from http to https #7221 2020-03-09 11:31:04 +13:00
Garfield69
20d6e3eb09 yaml: add note about sites not supporting https 2020-03-09 11:28:43 +13:00
Garfield69
37a50f8374 pleasuredome: fix details selector
also switch to https
2020-03-09 10:57:01 +13:00
Diego Heras
fac07933a2 solidtorrents: remove retries (#7584) 2020-03-08 22:26:50 +01:00
Garfield69
8b77c6b483 greeklegends: gone. removed. resolves #6369 2020-03-09 08:21:26 +13:00
Garfield69
f1414eeeec alein: gone. removed. resolves #4021 2020-03-09 08:14:16 +13:00
jshessen
7a7bf83d98 add MMA-Torrents, a private site. (#7567) 2020-03-09 07:05:38 +13:00
Diego Heras
1d48eb2dd7 avistaz, cinemaz, privatehd: add imdb search and banner (#7579) 2020-03-08 16:28:43 +01:00
Diego Heras
e3956e123e bakabt: fix optional tag. resolves #7571 #7420 (#7578) 2020-03-08 14:50:38 +01:00
Diego Heras
1cfe4f9226 bithdtv: add imdb search (#7576) 2020-03-08 14:12:08 +01:00
Diego Heras
2cc601c5a9 piratethenet: add imdb search and fix categories. resolves #7381 (#7562) 2020-03-08 12:45:10 +01:00
Diego Heras
a69664428a morethantv: add imdb search and others category (#7553) 2020-03-08 12:32:37 +01:00
Diego Heras
389daf9957 hdolimpo: add banner image (#7568) 2020-03-08 12:31:58 +01:00
Garfield69
93d200895b cartookchaos, totallykids: note https unsupported 2020-03-08 21:06:39 +13:00
Garfield69
43414bc9ed cartoonchaos: switch to https albeit with invalid ca 2020-03-08 20:54:49 +13:00
Garfield69
e630390c3f rustorka: note https unsupported 2020-03-08 20:54:08 +13:00
Diego Heras
eb59c0bd51 nostalgic: add vhstapes in the name (#7563) 2020-03-08 16:16:44 +13:00
Diego Heras
e743f8b3aa elitetorrent: add banner image (#7569) 2020-03-08 16:06:56 +13:00
Garfield69
6aaf12f1de documentarytorrents: fix typo in config sort options 2020-03-08 15:40:23 +13:00
Garfield69
bd5e407b53 galeriens: switch to cookie method. resolves #7544 2020-03-08 08:13:11 +13:00
Garfield69
c93d2821b1 torrentview: new domain *5.net resolves #7548 2020-03-08 07:56:21 +13:00
Garfield69
f65d2ba9e9 cpabien: new domain wvw. resolves #7547 2020-03-08 07:55:53 +13:00
Diego Heras
0f5655ce0d core: fix CloudflareSolverRe library. Resolves #7397 (#7546) 2020-03-08 07:21:23 +13:00
Garfield69
5484d05291 bigtower, hqsource, inperil: switch to https. #7221 2020-03-08 07:07:39 +13:00
Garfield69
fcc4168f54 xtremezone: add imdb to results. #4859 2020-03-08 07:04:04 +13:00
Garfield69
905a52a82b pornorip: andmatch 2020-03-07 17:47:28 +13:00
Garfield69
86fd318211 add pornorip a 3x site. resolves #7524 2020-03-07 17:43:33 +13:00
Garfield69
e66beb64f4 add pornotor a 3x site. resolves #7523 2020-03-07 16:20:03 +13:00
Garfield69
4b507a3cbb add torrentrex a public search engine. resolves #7515 2020-03-07 15:09:10 +13:00
junglebus
5033171c54 azure-pipeline: Add debug logging (#7541)
Hopefully will help with github publish failures, quite a few debug statements there...
https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/GitHubReleaseV0/operations/Action.ts
2020-03-07 14:51:06 +13:00
Garfield69
8faf1c94dc ccfbits: add imdb support. #4859
also add config sort options
update ULVF
add engine tag
2020-03-07 12:55:48 +13:00
Garfield69
d05ad1ccb5 ilcorsaroblu: now semi-private resolves #7528 2020-03-07 09:54:41 +13:00
Cory
9a1562ef8b readme: Sort trackers alphabetically (#7537) 2020-03-07 09:53:34 +13:00
Garfield69
b5aee501e2 legittorrents: add missing sort 2020-03-07 09:49:09 +13:00
Cory
dc9519c451 XtremeZone: add imdb search support (#7536) resolves #7520 2020-03-07 07:41:31 +13:00
fnk93
692d006078 Torrent-Explosiv: Remove [Group Tag] in title (#7532) 2020-03-07 07:35:33 +13:00
Cory
7aac4fcfcb TorrentBytes: fix title bug (#7529) resolves #7527 2020-03-07 07:35:10 +13:00
Garfield69
81e5589707 filmsclub: optional (TVShows) label for tv titles. #7289 2020-03-06 20:51:46 +13:00
Cory
c36e3356e2 PassThePopcorn: Fix Freeleech check (#7522) resolves #6951 2020-03-06 19:03:42 +13:00
fnk93
d477f01f84 Speedtorrent Reloaded: Update to new tracker source (#7519) resolves #7517 2020-03-06 17:25:28 +13:00
Cory
d080c4a2ac Fuzer: Fix parse error (#7521) resolves #7502 2020-03-06 17:21:28 +13:00
Garfield69
6252c73cf2 xtremezone: new layout et.al. resolves #7520
also add missing cats
add config sort options
add imdb support #4859
2020-03-06 17:13:31 +13:00
Cory
3f9d182083 core: Remove warning suppression (#7513) 2020-03-06 14:57:59 +13:00
Garfield69
0cabbd68c5 spiritofevolution: fix login. resolves #7512 2020-03-06 14:35:03 +13:00
Garfield69
c42027842b downloadville: add cat 95 2020-03-06 14:34:18 +13:00
Garfield69
66b433bde1 torrentdownloads: drop .me domain 2020-03-05 20:01:01 +13:00
garfield69
ae303a5d4e Fix parse errors in Fuzer and Hebits (#7506) resolves #7502 2020-03-05 19:45:27 +13:00
Garfield69
ca19d2219e pornolab: add new categories 2020-03-05 19:44:22 +13:00
Garfield69
28a85d6426 add spiritofrevolution a Private German site. resolves #7503 2020-03-05 17:37:08 +13:00
Garfield69
bd1d95ade5 filmsclub: massage TV titles for sonarr. #7289 2020-03-05 13:32:31 +13:00
Garfield69
6634c5a036 ilcorsaronero: new domain .pw 2020-03-05 12:58:06 +13:00
Garfield69
cc671dfab5 btdb: download can be missing. resolves #7508 2020-03-05 12:53:32 +13:00
Garfield69
dccdd89299 cinemageddon: switch to https #7221 2020-03-05 12:12:00 +13:00
Garfield69
c23370b5fc limetorrents: drop .zone as an alternate domain. #7496 2020-03-05 09:08:28 +13:00
garfield69
d53a0ae4b9 Fix parse errors with Shazbat (#7493) resolves #7492 2020-03-05 08:00:06 +13:00
Garfield69
4e8c52e16a uniondht: fix typo category wiiware #7409 2020-03-05 07:38:45 +13:00
Garfield69
eaae440c66 add xxxtor a Russian public 3x site. resolves #7471 2020-03-05 07:06:22 +13:00
Garfield69
c7e288a372 add KinoNaVse100 a Russian Semi-rpivate site. resolves #7425 2020-03-04 19:19:40 +13:00
Garfield69
a8375e8cfe add uniondht a Public Russian site. resolves #7409 2020-03-04 16:00:12 +13:00
Garfield69
4ed5507e4d audiobooktorrents: add info about unread PM. resolves #7422
fix files selector
add engine tag
2020-03-04 11:01:00 +13:00
Diego Heras
682304d186 animetosho: change feed url. resolves #7456 (#7487) 2020-03-04 10:06:02 +13:00
Garfield69
1455a905f1 elitetorrent-biz: new domain .nl resolves #7486 2020-03-04 09:38:25 +13:00
Diego Heras
64f066839d TorrentSyndikat: fix error caused by #7386 Resolves #7481 (#7485) 2020-03-04 09:35:13 +13:00
Diego Heras
cf676b4a3f SceneTime: fix error caused by #7394 Resolves #7475 (#7484) 2020-03-04 09:16:11 +13:00
Diego Heras
8bd74a2cc9 Filelist: fix error caused by #7360 and added grabs. Resolves #7474 (#7483) 2020-03-04 09:15:07 +13:00
Garfield69
77837b7483 filmclub: optional config to strip year from title. #7289 2020-03-04 08:40:52 +13:00
Garfield69
96e5e259e9 lechaudron: fix download link. #5559 2020-03-04 07:29:56 +13:00
Diego Heras
6999410617 core: fix file permissions (#7479) 2020-03-03 10:29:01 -06:00
Diego Heras
e55e92f9ac Core: Fix line endings to match style guide(#7476) 2020-03-03 10:28:26 -06:00
Garfield69
4710fa619c add linuxtracker a public repo for linux iso. resolves #7407 2020-03-03 16:41:11 +13:00
Diego Heras
61f9bec045 FunFile: fix error caused by #7369 Resolves #7451 (#7472) 2020-03-03 11:24:37 +13:00
Garfield69
318e8722db restore lechaudron, its back. resolves #5559 2020-03-03 11:19:32 +13:00
Diego Heras
86ce7ef1c8 Bit-City: fix error caused by #7357 Resolves #7459 (#7468) 2020-03-03 10:47:08 +13:00
Diego Heras
0997bf674a ImmortalSeed: fix error caused by #7375 Resolves #7461 (#7464) 2020-03-03 10:45:26 +13:00
Diego Heras
c07c4f0682 Ncore: fix error caused by #7378 Resolves #7444 (#7470) 2020-03-03 10:34:46 +13:00
Cory
1563418d88 Gimmepeers: Fix invalid CSS selector caused by #7371 (#7460) resolves #7457 2020-03-03 08:09:12 +13:00
fnk93
771c0ac68c Add Fantastic Heaven a German private site. (#7449) 2020-03-03 07:54:40 +13:00
Diego Heras
143ffbf790 HD-Torrents: fix error caused by #7373 Resolves #7426 (#7458) 2020-03-03 07:46:19 +13:00
Garfield69
a3f30a2dd9 newrealworld: fix parse errors caused by #7393 2020-03-02 20:54:41 +13:00
Garfield69
a9d3ae0107 torrentbytes: fix possible parse error caused by #7388 2020-03-02 20:49:59 +13:00
Garfield69
012f3d1bbc torrentheaven: fix parse errors caused by #7387 2020-03-02 20:45:31 +13:00
Garfield69
9826e2c2af myamity: fix parse errors caused by #7377 2020-03-02 20:40:09 +13:00
Garfield69
a512ea37c3 hdtorrents: imdb can be missing. fix #7373 2020-03-02 20:33:21 +13:00
Cory
3aedbc7baf Ncore: Fix parse errors caused by #7378 Resolves #7444 (#7445) 2020-03-02 18:46:08 +13:00
Garfield69
b32257ae95 add academictorrents a public site. resolves #7405 2020-03-02 18:15:35 +13:00
Cory
6c1c4092bd Fix null reference after conversion to AngleSharp (#7443) resolves #7442 2020-03-02 15:20:13 +13:00
Diego Heras
758138415e funfile: fix error caused by #7369 Resolves #7436 (#7440) 2020-03-02 12:28:45 +13:00
fnk93
b9a6c7c810 The Resurrection: Tracker closed down (#7439) #7174 2020-03-02 09:54:09 +13:00
Garfield69
dda62f1e18 add onejav a public Asian 3x site. resolves #7345 2020-03-02 09:43:40 +13:00
Garfield69
8fcb19e1ea nordichd: gome. removed. resolves #6708 2020-03-02 08:36:50 +13:00
Garfield69
66e7ced25b scenexpress: gone. removed. resolves #6859 2020-03-02 08:34:53 +13:00
Diego Heras
5f1848d1de bakabt: fix error caused by #7355 Resolves #7420 (#7434) 2020-03-02 08:05:44 +13:00
Christian Franchin
1f9c760246 bjshare: multiple improvements (#7432)
Add details to release when its from the last 24h list;
change cat4 to PCGames;
Changed category parsing on 24h list;
Added parsing from 4K to 2160p
2020-03-02 08:05:17 +13:00
Diego Heras
3f19e6becf ncore: fix error caused by #7378 Resolves #7430 (#7431) 2020-03-02 08:02:25 +13:00
Diego Heras
130c0bebbe divxtotal: fix download links and row parsing (#7423) 2020-03-02 08:01:59 +13:00
Diego Heras
b944993733 Remove CsQuery and use AngleSharp instead. Closes #7292 (#7404) 2020-03-02 07:58:14 +13:00
Garfield69
542f8d67e4 torrentleech-pl: andmatch resolves #7424 2020-03-02 07:49:31 +13:00
Diego Heras
35f9e0fbe0 Convert Nordicbits to AngleSharp (#7401) 2020-03-01 19:45:17 +13:00
Diego Heras
db669b31a1 Convert Nordbits to AngleSharp (#7402) 2020-03-01 19:16:15 +13:00
Garfield69
1b64476102 icetorrent: site's hrefs now prefixed with / 2020-03-01 17:22:21 +13:00
Garfield69
5530fa1ca4 crazycorner: magnets no longer available on primary results page. 2020-03-01 17:05:28 +13:00
junglebus
1fb77a6334 Package update (#7413)
All packages except Automapper are now on latest versions
2020-03-01 15:58:46 +13:00
Garfield69
175249d6f0 custom.js: occured -> occurred #7414 2020-03-01 15:52:32 +13:00
Garfield69
f59f73e228 mypornclub: handle date "last year" "last month" 2020-03-01 15:29:44 +13:00
Diego Heras
c1b2328bbf Convert Abnormal to AngleSharp (#7403) 2020-03-01 14:46:34 +13:00
ilike2burnthing
a3c1f3eb52 BTSOW: New Domain btsow.club (#7410) resolves #7280 2020-03-01 12:34:27 +13:00
Cory
f238e78337 Convert Shazbat to AngleSharp (#7400) 2020-03-01 12:27:09 +13:00
Cory
fd8823f6bd Convert XSpeeds to AngleSharp (#7398) 2020-03-01 12:26:46 +13:00
Diego Heras
c14ee124f5 Convert SceneTime to AngleSharp (#7394) 2020-03-01 12:07:41 +13:00
Diego Heras
f4d45517c5 Convert NewRealWorld to AngleSharp (#7393) 2020-03-01 12:07:18 +13:00
Diego Heras
091cfbb310 Convert Pretome to AngleSharp (#7392) 2020-03-01 12:06:58 +13:00
Diego Heras
698050e86a Convert RevolutionTT to AngleSharp (#7391) 2020-03-01 09:38:53 +13:00
Diego Heras
bb3faa3f62 Convert Partis to AngleSharp (#7390) 2020-03-01 09:30:07 +13:00
Diego Heras
08a68e0116 Convert SpeedCD to AngleSharp (#7389) 2020-03-01 09:29:51 +13:00
Diego Heras
d22ef13fb2 Convert TorrentBytes to AngleSharp (#7388) 2020-03-01 09:29:35 +13:00
Diego Heras
d5e2014233 Convert TorrentSyndikat to AngleSharp (#7386) 2020-03-01 08:43:12 +13:00
Diego Heras
dd52a16bff Convert TorrentHaven to AngleSharp (#7387) 2020-03-01 08:42:31 +13:00
Diego Heras
a697aba985 Convert TVStore to AngleSharp (#7385) 2020-03-01 08:42:11 +13:00
Diego Heras
1533ad1927 Convert TorrentLeech to AngleSharp (#7384) 2020-03-01 08:23:09 +13:00
Diego Heras
348461ebfc Convert TorrentDay to AngleSharp (#7383) 2020-03-01 08:22:29 +13:00
Diego Heras
b83a984365 Convert PirateTheNet to AngleSharp (#7382) 2020-03-01 08:20:15 +13:00
junglebus
b07d1a32ca readme: Remove appveyor badge (#7380) 2020-03-01 08:09:55 +13:00
Cory
e3bb63aac4 Convert NCore to AngleSharp (#7378) 2020-03-01 08:03:51 +13:00
Cory
65fc651d88 Convert myAmity to AngleSharp (#7377) 2020-03-01 08:03:13 +13:00
Cory
218e0c989c Convert MoreThanTV to AngleSharp (#7376) 2020-03-01 07:53:36 +13:00
Cory
6f252254e3 Convert ImmortalSeed to AngleSharp (#7375) 2020-03-01 07:53:04 +13:00
Cory
977052dfd7 Convert Hebits to AngleSharp (#7374) 2020-03-01 07:52:35 +13:00
Cory
b78d04c116 Convert HDTorrents to AngleSharp (#7373) 2020-03-01 07:36:37 +13:00
Cory
63267b597e Convert HDOlimpo to AngleSharp (#7372) 2020-03-01 07:35:15 +13:00
Cory
544501d2a8 Convert GimmePeers to AngleSharp (#7371) 2020-03-01 07:33:30 +13:00
Cory
169fda4dbb Convert Fuzer to AngleSharp (#7370) 2020-03-01 07:32:35 +13:00
Cory
d3d78d3662 Convert FunFile to AngleSharp (#7369) 2020-03-01 07:31:54 +13:00
garfield69
2d1175dcc1 azure-pipelines: drop assetUploadMode 2020-03-01 07:30:54 +13:00
Garfield69
0a7f06de31 hdarea: use imdbidShort. resolves #7368 2020-03-01 07:21:17 +13:00
junglebus
9f3f11ac49 Fail build if all artifacts aren't uploaded to Github 2020-02-29 21:36:09 +11:00
junglebus
49affa0555 Revert pipeline log changes 2020-02-29 20:46:46 +11:00
junglebus
f5c482f939 Try and read pipeline logs 2020-02-29 20:31:59 +11:00
junglebus
6c67b7a8de Try and find azure logs 2020-02-29 20:11:15 +11:00
junglebus
368947a061 Try and find pipeline logs 2020-02-29 20:00:24 +11:00
junglebus
f0138405a6 Try and Find log files 2020-02-29 19:46:05 +11:00
Garfield69
8373ee3b0c add mypornclub a public 3x site. resolves #7344 2020-02-29 19:44:00 +13:00
Garfield69
dfaf9dd3a6 filebase: drop debug, comment http only. 2020-02-29 19:24:05 +13:00
Garfield69
c1bde9b643 torrentleech: download_multiplier can be null. #7367 2020-02-29 17:00:01 +13:00
Garfield69
d86c60ffef hdarea: fix login error trap. #7368
update indexer for nexusphp 1.5b4
add config sort options
add uhd movie category
add imdb support
2020-02-29 16:07:08 +13:00
Garfield69
e4cfedfcfb torrentview: new domain *4.net resolves #7365 2020-02-29 12:21:28 +13:00
Garfield69
d3161e7b75 magnet4you, torrent4you: handle xK seelders and leechers. resolves #7364 2020-02-29 12:19:11 +13:00
garfield69
baf4730316 Update azure-pipelines.yml
the azure assetuploadmode=replace routine is missing a retry-upload-after-delete so ends up just removing the conflict but not uploading a replacement, bah!
lets try the the delete option which should clear any attachments prior to starting the first upload.
2020-02-29 11:43:40 +13:00
Diego Heras
a89b69e821 Convert IPTorrents to AngleSharp (#7363) #7292 2020-02-29 11:33:21 +13:00
Cory
4d48c1be44 Convert BB to AngleSharp (#7356) #7292 2020-02-29 11:32:43 +13:00
Cory
8056e47fef Convert HD-Space from csQuery to AngleSharp (#7352) #7292 2020-02-29 11:32:02 +13:00
Cory
63a3465aa6 Convert BitHdtv to AngleSharp (#7358) #7292 2020-02-29 10:42:08 +13:00
Cory
03bbafb0c9 Convert DigitalHive to AngleSharp (#7359) #7292 2020-02-29 10:40:27 +13:00
Cory
d8cbae68d5 Convert FileList to Angle Sharp (#7360) #7292 2020-02-29 10:25:23 +13:00
Cory
99c269c896 Convert BitCityReloaded to AngleSharp (#7357) #7292 2020-02-29 10:24:26 +13:00
Cory
b4075d1d35 Convert BakaBT to AngleSharp (#7355) #7292 2020-02-29 10:23:24 +13:00
Cory
49eebc90e4 Convert AnimeTorrents to AngleSharp (#7354) #7292 2020-02-29 10:22:13 +13:00
Cory
68b25de828 Convert Abstract/AvistazTracker to AngleSharp (#7353) #7292 2020-02-29 10:20:47 +13:00
Garfield69
00104205c0 add U2 (U2分享園@動漫花園) a Private Chinese Anime site. resolves #7337 2020-02-29 10:01:24 +13:00
Garfield69
28b53d8fb1 add boxingtorrents a Private site for boxing. resolves #7323 2020-02-28 19:13:21 +13:00
Garfield69
8a94d689b8 add exkinoray a Russian semi-private site. resolves #7318 2020-02-28 16:46:50 +13:00
gwenvador
ad00e49fe2 generationfree: new login (again!) (#7350) #7341 2020-02-28 16:39:19 +13:00
gwenvador
888361f46f Update generationfree.yml (#7347)
Change login username to correct value
2020-02-27 09:19:09 -06:00
Garfield69
edc4c31fa6 add ttsweb a private site. resolves #7301 2020-02-27 18:40:38 +13:00
Garfield69
a1dde973fb generationfree: site's login has changed. resolves #7341 2020-02-27 16:37:32 +13:00
Garfield69
525f58eb1d xwtorrents: Site's login has changed. resolves #7339 2020-02-27 16:37:07 +13:00
Sen Jiang
124fbf7c1b webui: Optimize favicon.ico with leanify (#7334)
leanify -i 1000 favicon.ico
variation on #7307
2020-02-27 07:30:21 +13:00
Cory
b9b10e4e91 core: Fix IsEmptyOrNull to return true when IsNull (#7338) resolves #7333 2020-02-27 07:24:36 +13:00
Garfield69
427b556869 btdb: fix title / details selector. resolves #7335 2020-02-27 07:22:04 +13:00
Garfield69
04f9f2dfe7 newstudio: fix SxxExx processing. resolves #7331 2020-02-26 20:51:52 +13:00
Garfield69
d8e7a63768 add filmsclub a Russian semi-private site. resolves #7289 2020-02-26 19:10:41 +13:00
Diego Heras
2f694147a1 lostfilm: Remove CsQuery and use AngleSharp instead #7292 (#7328)
also add missing torznab fields not available from results
2020-02-26 09:04:36 +13:00
Diego Heras
c339d54aed core: fix compilation warning (#7329) 2020-02-26 08:48:27 +13:00
Garfield69
58974623de tvchaosuk: update for unit3d 2.2.7 resolves #7327 2020-02-26 08:01:24 +13:00
Cory
889a8da4e5 Convert functions and properties to expression bodies when able (#7312)
Convert functions and properties to expression bodies when able
2020-02-25 10:08:03 -06:00
Garfield69
2f91d99e19 icetorrent: fix login. resolves #7321
update categories
fix imdb selector
fix files selector
2020-02-25 20:00:02 +13:00
Garfield69
65e93ce137 azure-pipeline: add replace for GitHub release attachements upload. 2020-02-25 18:51:27 +13:00
Jorman
0784e0784c btdb: fetch up to 100 rows (#7319) 2020-02-25 18:23:54 +13:00
Diego Heras
963616fe07 Revert "webui: reduce favicon.ico size. removed 256px, 128px, 64px icons (#7307)" (#7315)
This reverts commit d82c11650c.
2020-02-25 08:18:33 +13:00
Garfield69
e407067c8b add bteye a public dht crawler. resolves #7247 2020-02-25 08:13:00 +13:00
tide4cw
a8ba61fc9d Add torrentview a Korean public site. (#7313) 2020-02-24 20:05:57 +13:00
Garfield69
bbc360be00 add erzsebet a semi-rpivate Russian 3x site. resolves #7252 2020-02-24 17:48:07 +13:00
Diego Heras
d82c11650c webui: reduce favicon.ico size. removed 256px, 128px, 64px icons (#7307) 2020-02-24 09:42:27 +13:00
Diego Heras
6067a4ff73 core: add logger trace with proxy information (#7306) 2020-02-24 09:39:49 +13:00
Diego Heras
8c344b2917 core: reduce log traces in info level. add start/stop log traces (#7305) 2020-02-24 09:38:59 +13:00
Diego Heras
62769325b4 core: increase log size to 2 MB (#7303) 2020-02-24 09:33:51 +13:00
Diego Heras
a96b3841b0 webui: improve server logs modal (#7302) 2020-02-24 09:31:01 +13:00
Garfield69
a3dcb0455a btdb: new layout. resolves #7308 2020-02-24 09:27:15 +13:00
Diego Heras
5d808e006d webui: fix search encode in url hash. resolves #7265 (#7299) 2020-02-23 16:30:57 +13:00
fnk93
694c39503b The Resurrection: Fix multiple logins (#7298) 2020-02-23 08:44:41 +13:00
Diego Heras
12b2de2725 iptorrents: remove login with user/pass. resolves #7063 resolves #6850 resolves #6485 resolves #6402 resolves #4624 (#7294) 2020-02-23 08:34:14 +13:00
Diego Heras
d806bb18a2 core: improve cookie configuration help (#7293) 2020-02-23 08:31:38 +13:00
Sen Jiang
5a02bb9c27 btschool: use cookie (#7290)
Got all kinds of error using username and password
2020-02-23 08:29:00 +13:00
Garfield69
a3dc1b295b bitspyder: fix login. resolves #7287
also add sort options in config
2020-02-22 13:36:28 +13:00
Garfield69
471ab7f204 btnext: add info note about classic theme. #7208
also add sort options to the config.
and update the categories.
add movie-search.
2020-02-22 11:06:13 +13:00
Garfield69
bdcdd78cee torrent9clone: new domain .pl resolves #7282 2020-02-22 10:33:07 +13:00
junglebus
966c64c48e No longer manually install ChromeDriver (#7271) 2020-02-22 08:03:15 +13:00
Patrick Koenig
d5724f2f63 Change cookie SameSite from None to Lax (#7269) 2020-02-22 08:02:28 +13:00
Garfield69
3ecdbfe7f4 gay-torrentsorg: now private again. resolves #7268 2020-02-21 12:55:10 +13:00
Garfield69
b1ad8ed0bf hddolby: is now private. resolves #7267 2020-02-21 12:48:57 +13:00
junglebus
3a35e4e40a Windows service and Tray: NET Core only (#7258)
We no longer need to support NET461 for Tray and Windows service since these are for Windows users only
2020-02-21 08:55:45 +13:00
junglebus
0d58b2d63f Don't check cert store on Mono 6 (#7260) resolves #7223 2020-02-21 07:55:46 +13:00
junglebus
3c596c978c Stop building on Appveyor (#7259)
Now that we are successfully building and releasing on Azure Pipelines, there is no need to build on Appveyor as well
2020-02-21 07:06:12 +13:00
Garfield69
cc2a69cc77 film-paleis: gone private #7254
also requires thanks before download
2020-02-20 21:07:16 +13:00
Garfield69
7627671900 torrentcsv: fix empty search error. resolves #7255 2020-02-20 17:28:27 +13:00
Garfield69
4a4af3d8c8 r4e: update for unit3d 2.2.7 resolves #7257
plus add new categories
add posters
2020-02-20 17:01:55 +13:00
Jonas Stendahl
950d38a651 Add codec and medium filters to HDBits API (#7209)
* Add codec and medium filters to HDBits API

* Add checkboxes support to CardigannIndexer

* Expose multi-select as template variable

* update datestamp to force cache refresh

Co-authored-by: garfield69 <garfield69@outlook.com>
2020-02-20 09:23:55 +13:00
Garfield69
49d4c3248c remove vanila, now using mediaget client. #4003 2020-02-20 07:33:09 +13:00
Garfield69
3da168ef6c prostylex: now semi-private. resolves #7248 2020-02-20 07:23:28 +13:00
Garfield69
d4da96559f moviesdvdr: new domain .co. #7244 2020-02-19 07:40:41 +13:00
Garfield69
084c89d9db prostylex: prevent task cancelled by using cookie. 2020-02-18 14:03:19 +13:00
Jonas Stendahl
6a913f79d4 TorrentLeech: Add support for IMDb search (#7235) 2020-02-18 10:29:32 +13:00
fnk93
938c1f1de0 The Resurrection: Changed parameter name for categories (#7234) 2020-02-18 06:23:12 +13:00
Garfield69
480f2ebfeb hdtorrentsit: switch to https #7221 2020-02-17 21:49:48 +13:00
Garfield69
b32869badd greekteam: switch to https: #7221 2020-02-17 21:04:45 +13:00
Garfield69
f2c6eadb89 add pornleech a public 3x site. resolves #7227 2020-02-16 15:21:14 +13:00
Garfield69
1f79f4a165 femdomcult: add missing cats.
dd config sort option
2020-02-16 09:40:16 +13:00
Garfield69
fa917dd66c switch to https assorted indexers. #7221 2020-02-16 06:51:41 +13:00
Garfield69
dcd10211e2 engine tag luminance. #6822 2020-02-15 18:25:37 +13:00
Garfield69
3271efe478 add eggmeon a private site. resolves #7133 2020-02-15 18:24:38 +13:00
Garfield69
c3ea12694c datascene: site forcing https 2020-02-15 16:17:49 +13:00
fnk93
1375b62cf9 TFA: Remove leading [Release Group] / [Req] combination from title (#7217) 2020-02-15 15:25:28 +13:00
junglebus
8a9e29a2ac Use ComImport to create shortcut (#7218)
* Use ComImport to create shortcut

Using the url shortcut wasn't reliable
2020-02-15 12:04:33 +11:00
Garfield69
ccaa0c5255 elitetorrent.biz: new domain .bz resolves #7215 2020-02-15 10:29:09 +13:00
Garfield69
e2b2346eb2 film-paleis: fix login error detection. resolves #7216 2020-02-15 10:25:58 +13:00
fnk93
a82c3cf963 TFA: Fix if enabled download via HTTPS (#7214) 2020-02-15 09:51:07 +13:00
Garfield69
cab1184f13 engine tags: resolves #6822 2020-02-15 09:48:27 +13:00
Lukas Loibnegger
46f03dbb6d newrealworld: Fix parsing (#7212) resolves #7195 2020-02-15 07:08:54 +13:00
Garfield69
196ca5e83d Merge branch 'master' of https://github.com/Jackett/Jackett 2020-02-15 07:05:36 +13:00
Garfield69
3e89a2f364 ibit: change sort options. resolves #7180 2020-02-15 07:05:32 +13:00
garfield69
3ab620af28 Immortuos: auto switch sitelink. #7206 2020-02-15 03:59:43 +13:00
Garfield69
3d8a761524 add badasstorrents a public site. resolves #7196 2020-02-14 17:38:49 +13:00
Garfield69
848ec59b18 add tfa a privat eGerman site. resolves #7072 2020-02-14 16:04:27 +13:00
Garfield69
e409179b74 pirateiro: set language to en-us #7070 2020-02-14 07:16:17 +13:00
Garfield69
e977ba521c add p2pelite a private ebook tracker. resolves #7126 2020-02-13 19:37:15 +13:00
Garfield69
a193bfe3e7 add magnet4you a public magnet search engine. resolves #7115 2020-02-13 17:10:33 +13:00
Garfield69
1bf05e3934 add 7torrents a public dht crawler. resolves #7098 2020-02-13 16:45:08 +13:00
Garfield69
2f724b4de0 add twilightszoom a private music site. resolves #7080 2020-02-13 16:03:20 +13:00
Garfield69
585147d43c scenepalace: fix date and banners. 2020-02-13 16:02:35 +13:00
Garfield69
19043ea2b3 add torrent4you a public site. resolves #7071 2020-02-13 11:31:22 +13:00
Garfield69
332c4eea73 add pirateiro a Spanish Public site. resolves #7070 2020-02-13 09:26:46 +13:00
Garfield69
f8e5d67049 add korsar a semi-private Russian site. resolves #7052 2020-02-12 20:24:06 +13:00
fnk93
283429f125 Immortuos: new domain (#7189) resolves #7177 2020-02-12 12:04:07 +13:00
fnk93
32207cf1a4 The Resurrection: Add download volume, upload volume and min seed time (#7188) 2020-02-12 09:28:34 +13:00
Anthony Snavely
cf06cd3541 redacted, orpheus: Add session cookie workaround for 2FA users (#7187) resolves #5912 2020-02-12 08:40:41 +13:00
garfield69
afd9566388 Update CONTRIBUTING.md 2020-02-11 22:31:29 +13:00
garfield69
c976ab8d9a Update no_information_provided.md 2020-02-11 17:57:47 +13:00
garfield69
fbecbea7be Update ISSUE_TEMPLATE.md
add proxy question.
2020-02-11 17:33:52 +13:00
Garfield69
438714a527 add WDT a private site. resolves #7033 2020-02-11 16:21:45 +13:00
Cory
348dddfbee core: Apply declarations styles (#7166) 2020-02-11 11:16:19 +13:00
Diego Heras
e13cee2e95 doc: new jackett screenshot (#7173) 2020-02-11 11:15:45 +13:00
Garfield69
5c0f028cca add hddisk a private Chinese site. resolves #7018 2020-02-11 10:38:12 +13:00
fnk93
58b6272e1e The Resurrection: fix downloading .torrent (#7178) 2020-02-11 07:40:34 +13:00
Yuri Moens
2ed11bd562 orpheus: fix free leech token option breaking the tracker (#7179) resolves #7136 2020-02-11 07:33:10 +13:00
Garfield69
5326d6b33f snowpt: correct language. #7017 2020-02-10 19:17:07 +13:00
Garfield69
6748738db3 add snowpt a private Chinese Anime site. resolves #7017 2020-02-10 19:14:12 +13:00
Cory
9efe27ca7a avistaz, privatehd, cinemaz: Remove string sanitising from search query (#7175) resolves #7167 2020-02-10 18:29:39 +13:00
fnk93
c0d7a85db3 Add the resurrection a private German site (#7174) 2020-02-10 13:12:00 +13:00
Diego Heras
cba78c299b internetarchive: fix array category (#7158)
* internetarchive: fix array category

* requested changes
2020-02-10 09:07:05 +13:00
Garfield69
f8048c7572 xwtorrents: windows-1252 encoding. resolves #6370 2020-02-10 07:57:12 +13:00
Diego Heras
3ee947c8a1 torrentfactory: add new private tracker. resolves #6740 (#7153) 2020-02-10 07:11:23 +13:00
Cory
98541ac6f8 core: Sort and remove usings (#7159) 2020-02-10 07:08:34 +13:00
Garfield69
c08f511d1e mactorrents: fix catalog processing. resolves #7157 2020-02-09 16:51:38 +13:00
Garfield69
53e2527c72 audiobookbay: fix size processing. resolves #7156 2020-02-09 16:13:46 +13:00
Diego Heras
e2310ea70b anidex: rewrite in C# to bypass DDOS. resolves #7036 resolves #6834 (#7142)
* Replace Cardigann Anidex indexer for C# impelementation

Add bypass for DDOS Guard

* Improve error messages from type conversions

* Add missing cookie check

* Fix index out of range exception

* Change error handling to only warn about DDoS bypass exceptions

This is so that searches will still be attempted if there are issues with the DDoS protection (e.g. if it is removed).

* Improve error handling and clean up code

* pending changes
2020-02-09 15:43:32 +13:00
Cory
c12da520a4 Run dotnet format on solution (#7145) 2020-02-09 15:35:16 +13:00
Garfield69
2fe1e03da9 torlock: correct date processing. 2020-02-09 09:50:10 +13:00
Garfield69
7543b9ef35 gamestorrents: size can be undefined. resolves #7144 2020-02-09 09:12:06 +13:00
junglebus
4809ee1383 Use latest 3.1 SDK (#7141) 2020-02-08 20:49:36 +11:00
junglebus
2d56ce11b7 GetExecutingAssembly points to the DLL on .NET Core not the exe (#7140) 2020-02-08 20:38:07 +11:00
Garfield69
af6c7b530b channelx: new domain .xyz 2020-02-08 20:36:19 +13:00
Diego Heras
cee7ceb1f6 iptorrents: show bad cookie error. resolves #5164 (#7137) 2020-02-08 19:11:11 +13:00
Diego Heras
f770596354 core: fix form encoding. resolves #4346 resolves #3061 (#6994) 2020-02-08 19:03:03 +13:00
Diego Heras
77a2264164 newpct: remove deleted torrents. resolves #7074 (#7135) 2020-02-08 14:49:33 +13:00
Diego Heras
48a9765c48 iptorrents: cosmetic code changes (#7134) 2020-02-08 14:47:17 +13:00
Garfield69
e5784503b5 add leaguehd a Chinese Private site. resolves #7016 2020-02-08 08:43:29 +13:00
Garfield69
9693a9890f add hdtime a Chinese Private site. resolves #7015 2020-02-07 21:41:32 +13:00
Garfield69
0593f30115 add torrentleech.pl a privat ePolish site. resolves #7014 2020-02-07 18:18:52 +13:00
Garfield69
9e37ef0c02 torrentproject2: seeders can be n/a 2020-02-07 14:53:09 +13:00
Garfield69
c22b2b3ea6 torrentproject2: leechers can be n/a resolves #7124 2020-02-07 14:51:58 +13:00
Garfield69
24c907961c microbit: correct cat11 2020-02-07 14:51:04 +13:00
Diego Heras
35b606805f internetarchive: fix array title (#7125) 2020-02-07 12:17:58 +13:00
Garfield69
f8f0c5d907 add microbit, a Hundarian private site. resolves #7007 2020-02-07 08:46:38 +13:00
Jonas Dellinger
1715f0fda4 core: API - "configured" parameter (#7120)
Add support for a "configured" parameter in the API 2.0. Only return configured indexers if true.
2020-02-07 07:22:46 +13:00
garfield69
054e0e6440 Update no_information_provided.md 2020-02-07 07:20:24 +13:00
Garfield69
1a0b62540e downloadville: fix size. resolves #7121 2020-02-07 07:14:23 +13:00
Garfield69
5fbc92682a Merge branch 'master' of https://github.com/Jackett/Jackett 2020-02-07 06:37:05 +13:00
Garfield69
5be778c28c tazmania-den: gone. removed. #5713 2020-02-07 06:37:00 +13:00
junglebus
acb2cef2b4 Look in drop folder for artifacts 2020-02-06 20:58:40 +11:00
junglebus
1a85cb3e22 Add Azure-Pipelines build status badge (#7119) 2020-02-06 20:49:19 +11:00
junglebus
614372a272 Update azure-pipelines.yml 2020-02-06 20:32:56 +11:00
junglebus
234433ba8a Update azure-pipelines.yml for Azure Pipelines 2020-02-06 19:58:11 +11:00
junglebus
d124fa9cde Update GitHub Connection 2020-02-06 19:27:15 +11:00
Cory
4d05ab3fbc Add code style guide and update documentation to reflect changes (#7045) 2020-02-06 19:39:44 +13:00
junglebus
43ddc7a854 Add Azure Pipelines support (#7024)
* Add Azure Pipelines support

* Move to correct folder

* Make display names clearer
2020-02-06 18:35:47 +13:00
Diego Heras
5bb163d521 core: show configuration dialog when GetConfigurationForSetup fails (#7104) 2020-02-06 17:01:46 +13:00
Garfield69
056f683de3 myAmity: fix title. resolves #7100
also add anime, movies/uhd and tv/sport categories
2020-02-06 16:38:43 +13:00
Garfield69
a164cfe010 twilight: add freeleech-with-expiry-date. resolves #7116 2020-02-06 15:44:37 +13:00
Diego Heras
6b51888919 divxtotal: fix error when the search has exactly 15 results (#7105) 2020-02-06 15:28:19 +13:00
feffe
daa1149bd3 AnimeBytes: fix RAW tag setting (#7066) resolves #7027 2020-02-06 15:27:26 +13:00
junglebus
b9dbba280b core: Add artifact name for Windows .NET Core (#7028) 2020-02-06 15:22:54 +13:00
junglebus
b6e8f7261e core: Add Integration Tests (#7023)
Add some basic integration tests for Jackett
2020-02-06 15:22:11 +13:00
junglebus
67750982bc core: Allow unit tests to run in non-Windows environments (#7022) 2020-02-06 15:21:48 +13:00
Jonas Dellinger
163b162b2d torrentz2: Fix sorting of torrents (#7114) 2020-02-06 15:21:08 +13:00
Garfield69
9f03831321 glodls: handle missing category. resolves #7113 2020-02-06 15:19:38 +13:00
Garfield69
48d793fcd2 ibit: handle missing size. resolves #7111 2020-02-06 13:39:43 +13:00
Garfield69
574bd29108 attv: handle missing category. resolves #7110 2020-02-06 10:07:03 +13:00
Garfield69
e215870735 extratorrent: handle missing category or no-hits. resolves #7108
also handle some date exceptions.
2020-02-06 09:53:39 +13:00
Garfield69
f718052e4a ettv: handle size=N/A resolves #7107 2020-02-06 09:14:45 +13:00
Garfield69
c1e71a9df2 piratbit: fix title. resolves #7106 2020-02-06 09:08:09 +13:00
Garfield69
d031371083 torrentlt: use cookie method. resolves #7051 2020-02-06 08:22:51 +13:00
Garfield69
dbb3234bf1 yggtorrent: new domain .se #7095 2020-02-05 17:25:23 +13:00
Garfield69
9157294dc0 oxtorrent: handle not-found result. resolves #7093 2020-02-05 13:08:43 +13:00
Garfield69
6f8afcf584 extratorrent: resolves #7068 2020-02-05 12:43:13 +13:00
Garfield69
7b57510507 btsow: new domain btio.pw resolves #7092 2020-02-05 12:41:27 +13:00
Garfield69
42ec8b63a3 index.html: update changed stamps for #7037 to flush cache 2020-02-02 08:21:26 +13:00
Justinas
a43522e4db torrentlt: add missing categories (#7041) 2020-02-02 08:12:37 +13:00
Diego Heras
694c61990d mejortorrent: rewrite from scratch. sonarr & raddar support. resolves #6988 resolves #5587 resolves #3754 resolves #3869 (#7026) 2020-02-02 07:39:19 +13:00
Diego Heras
f488cab31b webui: improve search filter and pagination style (#7037) 2020-02-02 07:35:37 +13:00
Diego Heras
72ff71de9a webui: add copied to clipboard notification (#7038) 2020-02-02 07:35:20 +13:00
Diego Heras
41beca0afc internetarchive: add new public tracker. resolves #3603 (#7042) 2020-02-02 07:32:00 +13:00
feffe
be7bd4ea22 AnimeBytes: Fix synonym setting AB (#7056) #7027 2020-02-02 07:31:04 +13:00
Diego Heras
8744fd3fa1 core: fix blackhole download for relative uris. resolves #5935 (#7057) 2020-02-02 07:29:17 +13:00
Garfield69
7d87b3287b hdtorrentsit: add info note about IP filter. #7053 2020-02-02 07:22:20 +13:00
Garfield69
6752eb6321 YTS: new domain .mx #7062 2020-02-02 07:20:51 +13:00
Garfield69
36f91abc35 rutracker: add captcha info to config. https://github.com/Jackett/Jackett/pull/6994#issuecomment-577585897 2020-01-26 10:18:25 +13:00
Garfield69
6fc1992851 gktorrent: new domain .io #7071 2020-01-26 08:30:40 +13:00
Garfield69
fadaa9eb7a BakaBT: add config note about adult-content settings. #7013 2020-01-25 19:47:37 +13:00
Marcelo Castagna
cd239498c0 tray: cleanup code (#7011) 2020-01-25 13:39:08 +13:00
Garfield69
b0e5c2e7a9 YTS: add support for 2160p tagging. resolves #7010 2020-01-25 13:38:20 +13:00
Garfield69
7200ba9660 torrentday: re-instate tday.love as primary domain. resolves #6998 2020-01-23 07:03:55 +13:00
junglebus
620a09858c Make tests run on .NET Core as well (#6997)
* Make tests run on .NET Core as well

* Only run net461 tests against full framework build

* Add support for running full framework tests on linux
2020-01-23 06:42:23 +13:00
Garfield69
5bd4f7c364 engine tags. #6822 2020-01-21 19:00:36 +13:00
Garfield69
bf7f5d4fd8 themoviecave. gone. removed. #5710 2020-01-21 18:44:58 +13:00
Diego Heras
40a0cc70bf rarbg: add sort configuration. resolves #6949 (#6989) 2020-01-21 15:25:19 +13:00
Garfield69
65ac2c8339 estrenosdtl: size can be missing. resolves #6985 2020-01-21 10:33:22 +13:00
Garfield69
b58d1d6bea torrentwal: back to old domain. resolves #6986 2020-01-21 10:22:57 +13:00
Jonas Stendahl
b60c6d132c HDBits with passkey login and assorted improvements. (#6980) 2020-01-21 10:15:22 +13:00
junglebus
67491cb4f6 Make Tray compatible with .NET Core (#6983)
By default .NET Core sets UseShellExecute to false due to being cross platform
2020-01-21 06:23:47 +13:00
Alexander Chapliuk
860168fe44 LostFilm: improvements. (#6981) resolves #6801 resolves #6945 resolves #2631 2020-01-20 12:09:10 +13:00
Garfield69
ad24dd4600 engine tags. #6822 2020-01-20 09:51:48 +13:00
Garfield69
dc0e37f3dc engine tags. #6822 2020-01-20 08:36:57 +13:00
vinanrra
dc7c84bec8 nyaasi: add [Spanish] at end of [PuyaSubs!] releases (#6979) 2020-01-20 06:53:55 +13:00
junglebus
e695f90c80 Remove COM reference for .NET Core (#6975)
* Remove COM reference for .NET Core

Removing only COM reference to get closer to having Jackett to run on .NET Core for Windows

* Handle resources

https://github.com/microsoft/msbuild/issues/4704

* Remove GenerateResourceUsePreserializedResources

* Remove System.Resources.Extensions
2020-01-20 06:50:12 +13:00
Garfield69
fe3ca03847 engine tags. #6822 2020-01-19 19:13:07 +13:00
Scott Cooper
962b29825b cili180: add missing links (#6974) 2020-01-19 12:30:58 +13:00
Garfield69
fa1cedb49d engine tags. #6822 2020-01-19 10:05:52 +13:00
Scott Cooper
7b7f600794 anirena: fix hentai category matching (#6971) 2020-01-19 08:38:25 +13:00
Garfield69
370a70ba26 engine tags. #6822 2020-01-18 18:26:04 +13:00
Garfield69
5a13b1253d engine tags. #6822 2020-01-18 11:20:53 +13:00
Garfield69
eba53cc4be crazycorner: support for new engine. 2020-01-18 10:25:05 +13:00
Garfield69
1dc3c98da8 engine tags. #6822 2020-01-18 07:52:11 +13:00
dimqua
c3f24eb788 casstudio: fix language code (#6969) 2020-01-18 07:28:28 +13:00
vinanrra
760c663259 torrentland: add language tags to titles (#6968)
Fixed the problem identifing results always as English now they will be identified as Spanish or English depending of title..
2020-01-18 07:26:35 +13:00
Garfield69
e3f44dbbce engine tags #6822 2020-01-17 09:27:12 +13:00
Garfield69
45c204e37b cili180: expired domain 2020-01-17 09:09:18 +13:00
Garfield69
752403fff1 girotorrent: layout changes. resolves #6966 2020-01-17 07:58:43 +13:00
Garfield69
6d78a8c218 nostalgic: new domain vhstapes.org 2020-01-17 07:35:21 +13:00
Garfield69
c25726dcd0 engine tags. #6822 2020-01-16 17:33:16 +13:00
Garfield69
8402275093 audionookbay: switch to public. resolves #6958
build magnet from infohash instead of using the download link (which required an a/c)
2020-01-16 16:58:44 +13:00
Garfield69
5a27395553 add brobits a Chinese private site. resolves #6956 2020-01-16 09:22:22 +13:00
Garfield69
837656ce3d nexusphp tags. #6822 2020-01-16 08:26:44 +13:00
Garfield69
a092a931a5 engine tags #6822 2020-01-15 19:32:25 +13:00
Garfield69
2368e2631b girotorrent: results layout changes. resolves #6946 2020-01-15 08:00:40 +13:00
Garfield69
ff1d818d5f bibliotik: drop files. resolves #6940 resolves #1443 2020-01-14 10:04:00 +13:00
Garfield69
2f8a093962 blutopia: switch to cookie login. resolves #6941 2020-01-14 08:33:36 +13:00
Garfield69
1ac309d513 casatorrent: prefix a plus to keywords. resolves #5078 2020-01-13 16:14:25 +13:00
Garfield69
1344499534 add rustorka a Russian semi-private site. resolves #6899 2020-01-13 09:57:10 +13:00
Diego Heras
7a1c8f9419 core: add rss url decode in download controller. resolves #4617 #6589 #4760 #6397 #5752 (#6936) 2020-01-13 07:14:36 +13:00
Diego Heras
92556a56c6 puntotorrent: fix new episode format and details link. resolves #6910 (#6935) 2020-01-13 07:14:06 +13:00
Diego Heras
5d4b252c32 estrenosdtl: fix old download links. resolves #6924 (#6934) 2020-01-13 07:10:27 +13:00
Garfield69
a39711d619 bit-titan: fx search. resolves #6932 2020-01-12 17:40:32 +13:00
Diego Heras
3d5c32b63a newpct: fix download link and remove duplicate episodes (#6933) 2020-01-12 16:25:26 +13:00
Diego Heras
f0d05b5a56 nitro: fix download link. resolves #6926 (#6931) 2020-01-12 16:23:53 +13:00
Garfield69
d460369545 efectodoppler: fix search. resolves #6929 2020-01-12 16:00:21 +13:00
Garfield69
5e8493bc9a xbytes2: grabs can be missing. resolves #6928 2020-01-12 11:46:31 +13:00
Garfield69
2513f7a473 torrentproject2: fix download. resolves #6927 2020-01-12 11:37:27 +13:00
Garfield69
11ad12abbe leporno: fix download. resolves #6925 2020-01-12 11:05:21 +13:00
Diego Heras
26564cdfbd set default value for MinimumRatio / MinimumSeedTime. resolves #6811 (#6921) 2020-01-12 07:07:19 +13:00
junglebus
748e1c4f2e No need to install Tar now (#6919)
Latest version of msys2 includes tar, so no need to manually install it
2020-01-12 07:05:13 +13:00
junglebus
dc87b36ae0 Package update (#6916)
4 packages updated -> Jackett is now using the latest version of all packages except for AutoMapper -> Will have a go at that another day -> There is a few changes needed

-Minor code changes made to support newer version of YamlDotNet and BencodeNET
-Logic update for AssemblyName as I've been experiencing restore 'weirdness'  https://stackoverflow.com/questions/208084/how-to-use-a-different-assembly-name-for-different-configurations
2020-01-12 07:04:24 +13:00
junglebus
17db2b5df3 Upgrade Tray and Service to use the newer csproj format (#6879)
https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/

This change brings the remaining two projects (Tray and Service) onto the new csproj format. Along with making them simpler and cleaner, its a needed step to get Windows users onto .NET Core

Again, been a careful as possible, so hopefully nothing breaks. Would recommend merging this after .NET Core 3.1 commit gets released and a beta release for this as well
2020-01-12 07:04:04 +13:00
Diego Heras
584ea4cf01 divxtotal: add support for sonarr / radarr. resolves #6869 (#6911) 2020-01-11 20:48:12 +13:00
Diego Heras
2d9a6803c6 divxtotal: fix search with 0 results (#6908) 2020-01-11 20:08:18 +13:00
Diego Heras
6e8ff3fa08 bakabt: re-login when cookie expires. resolves #5486 (#6907) 2020-01-11 20:07:10 +13:00
Garfield69
ab2e41df75 add ibit a public magnet search engine. resolves #6772 2020-01-11 19:33:49 +13:00
Diego Heras
9413006524 cardigann: add attribute for download selector (#6891) 2020-01-11 17:52:11 +13:00
RicardoVelaC
74dcf37352 Hachede: Update categories (#6906) 2020-01-11 10:19:22 +13:00
Garfield69
c08e7ee827 pornbits: new domain .net. resolves #6905 2020-01-11 10:17:45 +13:00
Garfield69
a11f811c20 elitetorrent: new domain .li resolves #6904 2020-01-11 10:06:32 +13:00
Garfield69
77a1ce1670 ettv: drop torrent from end of titles. resolves #6903 2020-01-11 10:00:41 +13:00
Garfield69
4f7f495200 btnext: trap english no-resutls erorr. resolves #6897 2020-01-11 09:49:37 +13:00
Garfield69
835681fcfc thetorrents: merged with datascene. removed. resolves #6898 2020-01-11 09:24:39 +13:00
Garfield69
1ca8b1e8a4 animetosho: remove redundant / from url 2020-01-10 19:57:00 +13:00
Garfield69
02fc8cee0e torrentcsv: keyword-less search fix. resolves #6896
the anything mask has changed from * to %
2020-01-10 19:11:26 +13:00
junglebus
5405405d1a Crazyscorner: Fix error when starting Jackett (#6894) 2020-01-10 18:05:51 +13:00
Garfield69
953f9c7709 tfile: config option download magnet/.torrent. resolves #6870 2020-01-10 18:02:41 +13:00
Diego Heras
38efce8f2f hachede: fix date parsing. resolves #6884 (#6893) 2020-01-10 17:38:32 +13:00
Garfield69
85b5a1a1da add feedurneed a private site. resolves #6872 2020-01-10 17:32:15 +13:00
Garfield69
3ccd8b148e redstartorrent: fix login error selector 2020-01-10 08:27:53 +13:00
Garfield69
138297718d tsue tag #6822 2020-01-10 08:13:20 +13:00
Garfield69
eff0d3e332 torrentday. fix 7d073af14f #6880 2020-01-10 07:51:50 +13:00
Garfield69
0730b0bc64 add scenexpress a movies site. resolves #6859 # 2020-01-10 07:46:05 +13:00
junglebus
f14cdd4828 Fix InnoSetup warning (#6881)
This is to fix the InnoSetup warning during the build "Warning: Constant "pf" has been renamed. Use "commonpf" instead or consider using its "auto" form."

https://jrsoftware.github.io/issrc/whatsnew.htm

Unsure why DefaultDirName was "Program Files", but have updated it to ProgramData as per all other locations in the installer script
2020-01-10 07:18:27 +13:00
junglebus
e4a511347c Minor csproj tidy up (#6878) 2020-01-10 07:18:08 +13:00
junglebus
c2588d619f VS 16.4 required for .NET Core 3.1 (#6877) 2020-01-10 07:17:54 +13:00
Garfield69
7d073af14f torrentday: drop tday.love domain. resolves #6880 2020-01-10 07:08:07 +13:00
Garfield69
0605b66b67 tag TSUE engine. #6822 2020-01-09 19:16:03 +13:00
morpheus133
a89c7dedeb ImdbTVSearchSupport added for c# based indexers (#5791) 2020-01-09 16:32:02 +13:00
Diego Heras
9565469559 core: fix fuzzytime parser regression #6845. resolves #6861 (#6871) 2020-01-09 15:19:37 +13:00
Garfield69
dcda239b3f xbtit tags #6821
add xbtit engine tag
add config sort options if aplicable
add torrent per page info
2020-01-09 10:04:03 +13:00
Garfield69
7b8f2d4dab passionetorrent: gone. removed. #1147 2020-01-09 08:44:53 +13:00
Garfield69
003d37ab27 tfile: exclude torrents without size. #6870
because they will not have a download selector in the torrent details page.
2020-01-09 08:34:42 +13:00
Garfield69
32ea40cf82 xbytes2: tag xbtit engine #6821
aff torrent per page info
add sort config option
2020-01-09 08:08:15 +13:00
junglebus
d4f873e46f Update to .NET Core 3.1 (#6857)
Minor update from .NET Core 3.0. .NET Core 3.1 is the LTS version
2020-01-08 20:51:00 +13:00
Garfield69
5b91445d59 tag xbtit #6821 2020-01-08 20:46:38 +13:00
Garfield69
797cdb5b0b puntotorrent: add config sort options #6821
add xbtit tag
add torrent per page info
2020-01-08 20:26:20 +13:00
Garfield69
fdc4db3a5d torrentland: add config sort options. #6821
xbtit tag
torrent per page info
2020-01-08 20:15:39 +13:00
Garfield69
79aa770a9b crazycorner: correct sort 2020-01-08 19:32:20 +13:00
Garfield69
54cc92a6a1 crazycorner: music only. resolves #6860
add info for torrent per page
add music-search for lidarr
add xbtit tag
add thankyou for download (new requirement)
2020-01-08 19:03:23 +13:00
Garfield69
fb1683e8fa add the-madhouse a private site. #6860 2020-01-08 17:17:17 +13:00
Garfield69
6f4ae67fb2 demonoid: temp circumvention for #6861 2020-01-08 13:03:37 +13:00
Garfield69
2ee2dfc608 demonoid: correctly remove on from dateheaders. 2020-01-08 12:40:13 +13:00
Garfield69
6e9c312679 elitetracker: add vostfr to English replacement config option. resolves #6855 2020-01-07 21:05:03 +13:00
Garfield69
0beb82bbd6 add cili180 a DHT tracker. resolves #6795 2020-01-07 19:36:02 +13:00
Garfield69
76c9000393 gktorrent, oxtorrent: add config download optoin. resolves #6848 2020-01-07 15:05:42 +13:00
Diego Heras
9aedb34dc9 divxtotal: add new public spanish tracker. resolves #1293 (#6851) 2020-01-07 11:41:51 +13:00
Mário Franco
9ea09c4498 sounpark: fix download (#6844)
I'm getting this errors when downloading:
```
Error downloading soundpark https://sound-park.world/album/torrent-XXX
CardigannIndexer (soundpark): Download selector a[href^="/album/download-torrent/"] didn't match
```
2020-01-07 07:51:41 +13:00
Garfield69
96f74ee15a hachede: fix date parsing #6832
also add config sort options
2020-01-07 07:28:35 +13:00
Diego Heras
eb36aca641 vizuk: cosmetic change (#6846) 2020-01-07 06:38:33 +13:00
Diego Heras
603001a75c core: improve fuzzytime date parser to handle week days. resolves #6832 (#6845)
Previous version works well with dates like "Yesterday 15:30" or "Today 15:30"
Now it can handle "Monday 15:30" as well (means last Monday at 15:30 h)
2020-01-07 06:34:57 +13:00
Diego Heras
ab55c6af7c adds HD-Olimpo, private Spanish tracker. resolves #5142 (#6828) 2020-01-07 06:32:40 +13:00
Garfield69
ee37d5b8f0 1337x: add lidarr support. resolves #6841 2020-01-06 20:43:39 +13:00
Garfield69
3ccefe33b3 add torrentkitty a public magnet tracker. resolves #6833 2020-01-06 18:54:39 +13:00
takosine
48515cf3b9 Add bibliotik a private book tracker. resolves #1443 (#6840) 2020-01-06 17:24:15 +13:00
Garfield69
b891b24e26 vizuk: fix date. also allow English language. resolves #6832 2020-01-06 17:07:36 +13:00
Mário Franco
424370a1c3 Added Cardigann support for functions "and" and "or" in templates (#6787) resolves #6780
Fix soundpark search for lidarr
2020-01-06 15:13:21 +13:00
HDVinnie
e230fe25c0 legacyhd: fix a couple categories. (#6839) resolves #6837 2020-01-06 09:47:03 +13:00
takosine
b70f38b8ff PassThePopcorn: change login to support 2fa (#6823) resolves #6649 2020-01-06 09:43:54 +13:00
Garfield69
d8361f3486 extratorrent.ag: search engine on site broken for over a month. removed. resolves #6742 2020-01-06 08:50:51 +13:00
Garfield69
1188ad0a67 add extratorrent.cd a public site. #6742 2020-01-06 08:49:02 +13:00
Cory
391a4f8fec corsaro.red: fix bug in category searches (#6807) resolves #6307 2020-01-06 06:43:41 +13:00
Diego Heras
3534cfd3eb core: add downloading release message (#6826) 2020-01-05 19:51:39 +13:00
Diego Heras
45b205ddc3 core: security fix, authorization first in download / blackhole links (#6825) 2020-01-05 19:41:01 +13:00
Diego Heras
7e93a86ae0 core: fix magnet link encoding. resolves #5372 #4761 (#6824) 2020-01-05 19:31:32 +13:00
IIIspaceIII
9060d8acca filelist: fix login (#6827) resolves #6782 2020-01-05 19:12:19 +13:00
Garfield69
2dcf151396 vizuk: add missing categories
and config sort options
2020-01-05 15:35:14 +13:00
HDVinnie
1e84213f1a Add legacyhd, a private site. formerly HD4Free. (#6820) 2020-01-05 11:56:28 +13:00
Garfield69
6c1044e88c vizuk: ignore expired certificate. resolves #6810
also minor code tidyup
2020-01-05 08:31:29 +13:00
Diego Heras
727e33675c newpct: remove two compilation warnings (#6819) 2020-01-05 08:16:28 +13:00
Diego Heras
22f5b59393 solidtorrents: rewrite in c#. resolves #6681 (#6817) 2020-01-05 08:11:13 +13:00
Cory
e7a48c4234 Fix file location bug in paths with spaces during updates (#6814) resolves #6671 2020-01-05 07:49:53 +13:00
snamds
a865a697fa Newpct - Sites adjustment (#6812) 2020-01-05 07:47:31 +13:00
Diego Heras
ca8fbd081d mejortorrent: fix download urls and grabs. resolves #6449 (#6565) 2020-01-05 07:42:25 +13:00
Garfield69
0046fb2a13 hdreactor: fix search query. resolves #6806 2020-01-04 19:52:30 +13:00
Garfield69
cd39b17307 torrentdownload: refresh categories resolves #6805
change the category selector.
2020-01-04 19:30:01 +13:00
Garfield69
7e9aed1154 eztv: fix ulvf. resolves #6804 2020-01-04 18:51:55 +13:00
Garfield69
de3894e3dc firebit: improve category selection. resolves #6803 2020-01-04 18:30:15 +13:00
Garfield69
fca687a5c4 nyaasi: .torrent links can be missing. resolves #6802 2020-01-04 17:40:44 +13:00
Garfield69
1a8445dc6f acgrip: ignore expired certificate. 2020-01-04 15:21:45 +13:00
Garfield69
429e58c16e hone3hd.net: site broken for over a month. removed. resolves #5525 2020-01-04 12:45:30 +13:00
Garfield69
9220efcc18 update date translations for unit3d indexers. resolves #6786 2020-01-04 09:53:04 +13:00
Garfield69
b8ce4784eb seedfile: date translations 2020-01-04 09:44:25 +13:00
Garfield69
3e04d8ad92 Update README.md 2020-01-04 08:16:36 +13:00
Garfield69
976cfe9182 demonoid: public. resolves #6790 resolves #6716 2020-01-04 06:58:51 +13:00
Garfield69
38edc02df5 Revert "demonoid: switch to private mode. resolves #6716"
This reverts commit 8ced18b4c7.
2020-01-04 06:54:45 +13:00
dlmiheev
93aa1dd759 RuTracker: update existing category, add new one (#6785) 2020-01-04 06:50:08 +13:00
junglebus
201b6997ee readme: .NET Core 3 requires macOS 10.13 or greater (#6784)
https://github.com/dotnet/core/blob/master/release-notes/3.0/3.0-supported-os.md

https://github.com/Jackett/Jackett/issues/6769
2020-01-04 06:49:45 +13:00
ERR1R
8b34e80d5b digitalcore: Cookie workaround because captcha (#6779) resolves #6770
dc added a captcha system.. cookie workaround!
2020-01-04 06:49:08 +13:00
Garfield69
e098943b69 add tlfbits a Chinese private site. resolves #6765 2020-01-03 19:12:13 +13:00
Garfield69
c2174dfdb2 scenehd: ignore the new invalid certificate. resolves #6778 2020-01-03 17:01:59 +13:00
Garfield69
dc07c27531 add moecat a Chinese privat esite. resolves #6767 2020-01-02 17:23:05 +13:00
Garfield69
638586c36d torrentbd: new domain .net and support new engine. resolves #6761
refresh categories
new layout selectors
2020-01-02 16:12:26 +13:00
Garfield69
1f7403f6a5 girotorrent: add new categories
add config sort options
2020-01-02 08:26:57 +13:00
Garfield69
a3cb9ad079 add beitai a Chinese private site. resolves #6764 2020-01-01 20:28:29 +13:00
Garfield69
36a5895664 add 52pt a Chinese private site. resolves #6763 2020-01-01 19:53:36 +13:00
Garfield69
5b45cb438a torrentccf: add login captcha error trap 2020-01-01 19:17:58 +13:00
Garfield69
123a56f577 torrentccf: add config sort options
also handle both date types
2020-01-01 17:12:16 +13:00
Garfield69
6df77c762e Update README.md 2020-01-01 13:16:28 +13:00
Garfield69
51e556b369 add onlineselfeducation a private e-learning site. resolves #6759 2020-01-01 12:30:35 +13:00
Garfield69
aad9c3a9ec mteamtp2fa: cookie login for 2fa. resolves #6741 2019-12-31 18:23:11 +13:00
Garfield69
be329e0bbc bit-titan: new Search Engine. resolves #6748
new layout selectors
2019-12-31 16:15:10 +13:00
Benjamin Hesse
6cb77ab427 speedtorrent reloaded: removed .tableinborder from row selector (#6751) 2019-12-31 14:14:24 +13:00
Garfield69
d91c4891d8 add brasiltracker a Private Brazilian site. resolves #6745 2019-12-30 17:35:37 +13:00
Garfield69
72ab0e4a9f polishsource: add uhd category
delete 3d,dvd,bluray
add config sort options
2019-12-30 13:20:08 +13:00
Garfield69
8ced18b4c7 demonoid: switch to private mode. resolves #6716 2019-12-30 07:27:54 +13:00
thebluepotato
c3f4d9cc53 magnetdl: fix incorrect legacylink. (#6739) 2019-12-30 06:50:18 +13:00
Garfield69
9437d24f45 pornbits: more row selectors 2019-12-30 06:29:22 +13:00
Garfield69
352690e1cd add pornbits a private 3x site. resolves #6710 2019-12-29 22:31:53 +13:00
Garfield69
e217a97e23 totallykids: fix 0 results. resolves #6733 2019-12-29 20:32:02 +13:00
Garfield69
10353c7406 totallykids: add xBtit_Default style notice to config. resolves #6730
also add sort options
2019-12-29 12:22:34 +13:00
Garfield69
ee5686c5d6 piratbit: andmatch. #6719 2019-12-29 12:03:34 +13:00
Garfield69
d671a3dfba loporno: andmatch. #6719 2019-12-29 11:48:12 +13:00
Garfield69
9a876b7dc7 moviesdvdr: andmatch. #6719 2019-12-29 11:40:17 +13:00
Garfield69
00f4cfa50f estrenosdtl: andmatch. #6719 2019-12-29 11:37:09 +13:00
Garfield69
9cf7811a8e gamestorrent: andmatch. #6719 2019-12-29 11:32:38 +13:00
Garfield69
458a797fb8 torlock: handle today/yesterday dates. resolves #6728 2019-12-29 11:26:44 +13:00
Garfield69
c13653f3b9 oxtorrent: add new category xxx. resolves #6714 2019-12-29 10:32:38 +13:00
Garfield69
f9f7978a07 gktorrent: add new category xxx. resolves #6712 2019-12-29 10:27:01 +13:00
Garfield69
a2d3811736 torrentland: refine row selection to prevent errors. resolves #6711 2019-12-29 10:21:10 +13:00
Garfield69
583d575a77 btsow: new title selector. resolves #6720 2019-12-29 10:01:13 +13:00
Garfield69
e47c59eca3 idope: fetch 2 pages to bump total to 20 results. resolves #6722 2019-12-29 08:28:33 +13:00
Garfield69
74e0d12a72 finvip: add style notice to config. #6723 2019-12-29 07:58:30 +13:00
Garfield69
788fef5ce6 galeriens: new domain .com 2019-12-28 17:20:56 +13:00
Garfield69
a3f5ef6acf katli: new domain kickass.ws 2019-12-28 17:06:12 +13:00
Garfield69
2bc130a93a torrentwal: new domain *2.com 2019-12-28 17:02:01 +13:00
Garfield69
897ebe4b14 add nordichd a private site. resolves #6708 2019-12-28 16:57:58 +13:00
Garfield69
c9537128dd add extremetorrents a private Dutch site. resolves #5057 2019-12-28 10:10:56 +13:00
Uilton Oliveira
f0b46a1873 BJShare: Improve search result compatibility with Sonarr on few more TV Shows / Animes (#6692) 2019-12-28 09:04:43 +13:00
Garfield69
7291efebae add finvip a Finnish Private site. resolves #6675 2019-12-25 11:35:42 +13:00
Garfield69
3851d8352e add filebase a Russian Public site. resolves #6669 2019-12-25 08:57:35 +13:00
Garfield69
0cd46efe35 add extremlymtorrents a semi-private site. resolves #6668 2019-12-24 18:02:11 +13:00
Garfield69
1433ffcd13 rptorrents: fix sort is->id 2019-12-24 16:41:31 +13:00
Garfield69
450bc8b5ff add cinemamovies a Polish private site. resolves #6667 2019-12-24 15:54:24 +13:00
Garfield69
4eadff404a btdb: add seeders to config sort option 2019-12-24 07:13:44 +13:00
Garfield69
213141f55e btdb: add seeders/leechers drop grabs. resolves #6673 2019-12-24 06:35:03 +13:00
Cory
370f95f888 720pier: Fix login and search parsing (#6670) resolves #6368 2019-12-24 06:17:48 +13:00
Garfield69
7c8ad8ac41 torrentz2: fix categories 2019-12-23 19:21:47 +13:00
Garfield69
f7401d6344 Update README.md 2019-12-23 18:51:42 +13:00
Garfield69
e85ffec947 elite-tracker: add multi config option. resolves #5064
add cat 97
fix category selector
fix longtitle processing
2019-12-23 10:01:32 +13:00
Jonas Stendahl
cf1f70d581 TorrentBytes: Remove trailing whitespace (#6663) 2019-12-23 06:58:01 +13:00
Garfield69
e0161487fd add broadcity a Turkish private site. resolves #6662 2019-12-22 10:58:30 +13:00
Garfield69
92946670b6 ztracker: size can be mising
add config sort options
2019-12-22 10:23:44 +13:00
Garfield69
4f2ef558ad zooqle: add config sort options 2019-12-22 10:04:49 +13:00
Garfield69
9b0c4c8ed2 yggtorrent: add config sort options 2019-12-22 09:51:15 +13:00
Garfield69
7ae1b57ddd xtremefile: add config sort option 2019-12-22 09:17:54 +13:00
Garfield69
246bf48aba vanila: add config sort options
add login remember and hidepresence
2019-12-22 08:59:45 +13:00
Garfield69
41cbbe5818 unlimitz: add config sort options 2019-12-22 08:45:19 +13:00
Garfield69
66964f9b58 inionfansub: add config sort options 2019-12-22 08:27:24 +13:00
Garfield69
c2123de964 add netcosmo an Italian private site. resolves #6657 2019-12-22 06:57:50 +13:00
Garfield69
b81147812c twilight: add config sort optoins 2019-12-21 20:19:11 +13:00
Garfield69
27a8b8dda4 turktorrent" refresh categories
add config sort option
2019-12-21 20:10:13 +13:00
Garfield69
bc88f98cf4 tribalmixes: add config sort options 2019-12-21 19:46:56 +13:00
Garfield69
af32e419ae torrentz2: update categories
add config sort options
2019-12-21 19:31:40 +13:00
Garfield69
c68d0f27b8 torrentslocal: add config sort options 2019-12-21 17:40:44 +13:00
Garfield69
593680f8d3 torrentquest: return movies and tv when using the TEST button. (sonarr radarr support)
add config sort options
2019-12-21 16:58:35 +13:00
Garfield69
0b59811c77 torrentproject2: add config sort option 2019-12-21 16:17:20 +13:00
Garfield69
c836fa7a74 torrentland: refresh cats 2019-12-21 16:04:40 +13:00
Garfield69
172f71de81 torrentgalaxy: add config sort options 2019-12-21 15:48:56 +13:00
Garfield69
3d582fe851 torrentdownload: add config sort option 2019-12-21 15:36:41 +13:00
Garfield69
8f18304257 torrent-turk: refresh categories
add config sort options
2019-12-21 15:24:58 +13:00
Garfield69
c4e1db0f8a tapochek: download link is required for sonarr radarr. resolves #6654 2019-12-21 11:28:01 +13:00
Garfield69
9044d17d3f torrentexplosiv: add config sort options 2019-12-21 11:01:51 +13:00
Garfield69
83c55f4a43 tsc: add config sort options 2019-12-21 10:48:17 +13:00
Garfield69
5650734a5d toros: add config sort options 2019-12-21 10:34:42 +13:00
Garfield69
8791a8d30b theaudioscene: add config sort option 2019-12-21 10:26:38 +13:00
Garfield69
2fa6db38f6 theshinning: fix date selector
add config sort options
add imdb selector
add comment selector
refresh dlvf and ulvf
2019-12-21 09:07:47 +13:00
Garfield69
318ff175a5 thehorrorcharnel: refresh categories
implement category filter
add config sort options
add banner
fix login use_ssl flag
2019-12-21 08:25:11 +13:00
Garfield69
b9f9c6a136 tellytorrent: add config sort options 2019-12-21 07:01:51 +13:00
Garfield69
257f2928f4 tapochek: add config sort options 2019-12-21 06:22:45 +13:00
Garfield69
3091393470 sukebemyaasi: add config sort options 2019-12-20 20:37:56 +13:00
Garfield69
a5a5821e84 sukebei-pantsu: add config sort options 2019-12-20 20:25:04 +13:00
Garfield69
6e71e32185 sportscult: add config sort options 2019-12-20 20:16:02 +13:00
Garfield69
cbb338a52e solidtorrents: add config sort option 2019-12-20 20:02:19 +13:00
Garfield69
c4f3de644d skytorrentsclone: add config sort option 2019-12-20 19:40:45 +13:00
Garfield69
1266773e9b siambit: add config sort options 2019-12-20 17:14:34 +13:00
Garfield69
0850fc3b9a sharewood: update categories 2019-12-20 17:02:47 +13:00
Garfield69
152bcf14c4 sharewood: add config sort options 2019-12-20 16:36:58 +13:00
Garfield69
609821afa3 shareuniversity: add config sort options 2019-12-20 16:31:46 +13:00
Garfield69
88843a4e0e shareisland: add config sort options 2019-12-20 16:25:19 +13:00
Garfield69
f54541b299 scenerush: add config sort options 2019-12-20 16:12:02 +13:00
Garfield69
094dbbcd06 scenepalace: add config sort options 2019-12-20 16:03:43 +13:00
Garfield69
874ac222c5 rutor: add config sort option 2019-12-20 14:03:50 +13:00
Garfield69
e1897f05b2 rptorrents: refresh categories
add config sort order
2019-12-20 11:06:27 +13:00
Garfield69
8c37db63f7 rockbox: add config sort options 2019-12-20 10:50:28 +13:00
Garfield69
b91c01ba4c rns: add config sort options 2019-12-20 10:41:27 +13:00
Garfield69
f14831cb74 riperam: add config sort options 2019-12-20 10:35:19 +13:00
Garfield69
4808313c10 racingforme: refresh categories
add config sort option
drop from 5 pages to 3 to reduce server workload (its too slow).
2019-12-20 09:48:11 +13:00
Garfield69
66ae983457 r4e: add config sort options
drop banner selector (site does not have any)
2019-12-20 08:32:30 +13:00
Garfield69
4b415cbd81 pt99: add config sort options 2019-12-20 08:01:20 +13:00
Garfield69
d200e61de8 prostylex: refresh categories
add config sort options
2019-12-20 07:17:11 +13:00
Sergey Mikhailov
d901b4d275 rutracker: quality and language fix for some movie titles (#6645) 2019-12-20 06:42:40 +13:00
Garfield69
445344ea6a hdtorrentsit: revert adbe9f3f resolves 6647 2019-12-20 06:15:24 +13:00
Garfield69
66fa125b71 elittraker: gone. removed. #1445 2019-12-19 20:43:17 +13:00
Garfield69
c38f66146b torrentseed: add config sort options
amend login
2019-12-19 20:37:31 +13:00
Garfield69
d720588568 filmpaleis: amend login 2019-12-19 20:28:44 +13:00
Garfield69
7f69f87039 thetorrents: amend login 2019-12-19 20:18:02 +13:00
Garfield69
77e35be0a9 tasmanit: amend login 2019-12-19 20:14:31 +13:00
Garfield69
46cb42f4bf takeabyte: amend login
also add config sort options
2019-12-19 20:10:46 +13:00
Garfield69
365eda7503 ccfbits: amend login. 2019-12-19 20:00:17 +13:00
Garfield69
fba73be438 pwtorrents: add config sort options
amend login
2019-12-19 19:48:28 +13:00
Garfield69
c657aa171a rgu: gone. removed. #3084 2019-12-19 18:45:26 +13:00
Garfield69
bf2ced2005 waffles: gone. removed. #1182 2019-12-19 17:35:52 +13:00
Garfield69
5f73d2261a torviet: gone. removed. #850 2019-12-19 17:31:48 +13:00
Garfield69
60a8fd369f music-master: gone. removed. #5547 2019-12-19 17:15:32 +13:00
Garfield69
adbe9f3f9c hdtorrents.it: gone. removed. #1180 2019-12-19 17:09:29 +13:00
Garfield69
028aeb77dc asiandvdclub: gone. removed. #890 2019-12-19 16:51:52 +13:00
Garfield69
2fe52703b0 bitspiracy: gone. Removed. #4459 2019-12-19 16:46:06 +13:00
Garfield69
8e3cfffa46 bitme: gone. removed. #1977 2019-12-19 16:38:55 +13:00
Garfield69
a2d5fdbcec proaudiotorrents: add config sort options 2019-12-19 16:17:48 +13:00
Garfield69
386090b9c3 add xwt-classics: a private wresting site. resolves #6641 2019-12-19 15:56:55 +13:00
Garfield69
72da838819 xwtorrents: update login
also add config sort options
2019-12-19 15:54:49 +13:00
Sergey Mikhailov
1737c21eea rutracker: fix movies naming when stripping Russian (directors name cut) (#6639) resolves #6638 2019-12-19 09:22:06 +13:00
Garfield69
60ef4d2546 pleasuredome: fix leechers
also handle 2x ul vf
add config sort options
2019-12-18 19:27:06 +13:00
Garfield69
9b994e4b83 pixelcove: add config sort options 2019-12-18 18:51:41 +13:00
Garfield69
07d6a6d902 piratbit: add config sort options 2019-12-18 18:43:54 +13:00
Garfield69
0ce432ed1a peersfm: add config sort options 2019-12-18 18:36:17 +13:00
Garfield69
ff4c192a01 p2pbg: add config sort options 2019-12-18 17:58:38 +13:00
Garfield69
fe5c1d4962 nyaasi: add config sort options
add Spanish tag for puyasubs releases
2019-12-18 16:04:01 +13:00
Garfield69
77ddc9dd2f nyaa-pantsu: refresh categories
add config sort options
2019-12-18 15:46:07 +13:00
Garfield69
29d64294d9 nostalgic: refresh categories
also add config sort options
2019-12-18 15:01:38 +13:00
Garfield69
619e3b3c6b nnm-club: add config sort options 2019-12-18 12:41:42 +13:00
Garfield69
d662666976 nntt: add config sort options 2019-12-18 12:28:55 +13:00
Garfield69
cd6de00aa1 nitro: add config sort options 2019-12-18 10:31:27 +13:00
Garfield69
f698869438 newstudio: add config sort options 2019-12-18 09:23:45 +13:00
Garfield69
470ff8742b nethd: add config sort options 2019-12-18 08:45:14 +13:00
Garfield69
33624244a7 nbtorrents: add config sort options 2019-12-18 08:35:34 +13:00
Garfield69
5e5be1d932 mvgroup: add config sort options 2019-12-18 08:04:17 +13:00
Garfield69
edcb2cc6f8 metaltracker: add config sort options 2019-12-18 06:45:06 +13:00
Garfield69
0603996579 marinetracker: add config sort options 2019-12-18 06:20:04 +13:00
Garfield69
3103862a98 limetorrents: add config sort options 2019-12-18 06:10:41 +13:00
Garfield69
fb7e55cba9 leporno add config sort options 2019-12-17 21:32:16 +13:00
Garfield69
cc7bbcc022 legittorrents: add config sort options 2019-12-17 20:46:08 +13:00
Garfield69
a16f4b1906 learnflakes: add config sort options 2019-12-17 20:38:26 +13:00
Garfield69
913442a4c6 kinozal: add config sort option 2019-12-17 20:25:54 +13:00
Garfield69
765dbcdb3d katli: add config sort options 2019-12-17 20:13:41 +13:00
Garfield69
46851edd0c itorrent: add config sort optiions 2019-12-17 18:58:38 +13:00
Garfield69
c9656a8723 isohunt2: ad configsort option
no need for additional pages
240 hits is excessive with 3 calls
80 in one call is good enough
2019-12-17 18:38:47 +13:00
Garfield69
67a2681bad idope: add config sort options 2019-12-17 18:06:36 +13:00
Garfield69
2228dca126 hdzone: add config sort options 2019-12-17 17:36:06 +13:00
Garfield69
7d413910e4 hdreactor: drop debug on date
add config sort options
2019-12-17 17:13:38 +13:00
Garfield69
5cf3abd7d4 hamsterstudio: add confog sort options 2019-12-17 17:04:51 +13:00
Garfield69
96b16e7d87 greeklegends: add config sort options 2019-12-17 16:13:10 +13:00
Garfield69
083552580c glodls: add config sort options 2019-12-17 15:53:50 +13:00
Garfield69
11a4390307 generationfree: refresh catalog
add config sort options
2019-12-17 15:48:01 +13:00
Garfield69
6174bdf40c freetorrent: add config sort options
and a couple domain redirects
2019-12-17 14:31:49 +13:00
Garfield69
13b859cfb0 focusx: add config sort options 2019-12-17 10:44:16 +13:00
Garfield69
879d03c055 film-paleis: correct login error selector.
correct leechers selector
2019-12-17 10:24:47 +13:00
Garfield69
5661000c19 torrentleech: use download_multiplier for freeleech spotting. resolves #6624 #6579 2019-12-17 08:48:22 +13:00
Marcus
0f7e44f0bb Added Pornbay a private tracker. (#6629) 2019-12-17 08:25:15 +13:00
Garfield69
5f0d2d6129 btdb: new domain .io resolves #6630
Also add config sort option
2019-12-17 07:59:21 +13:00
Garfield69
ea340200f0 zamundanet: add config info aboit LIST view. resolves #6627
also add config sort options
switch to https
correct catalog selector
clean up titles
2019-12-17 07:29:54 +13:00
Garfield69
39b5a9df76 exttorrents: add config sort options 2019-12-16 19:33:41 +13:00
Garfield69
77df49f76e ettv: refresh categories
and add config sort options
2019-12-16 19:03:48 +13:00
Garfield69
c3cec7fa5d estone: add config sort options 2019-12-16 17:53:02 +13:00
Garfield69
3301b1207a esharenet: add config sort option 2019-12-16 16:14:59 +13:00
Garfield69
7790395f96 eniahd: add config sort option 2019-12-16 15:56:32 +13:00
Garfield69
982f77be66 efectodoppler: add config sort option 2019-12-16 15:42:13 +13:00
Garfield69
b9e219d866 ebookparadijs: fix login error selector
also fix leechers selector
2019-12-16 15:33:47 +13:00
Garfield69
ff1a51b698 dxp: add config sort option 2019-12-16 14:09:40 +13:00
Garfield69
422cc64e5f dxdhd: support for unit3d upgrade to 2.2.7
also add config sort support
2019-12-16 14:01:02 +13:00
Garfield69
b8b2a44474 documentarytorrents: add config sort order 2019-12-16 13:42:36 +13:00
Garfield69
9f6c3ffd25 4thd: handle invalid date. resolves #6622
also add config sort option
add new category 44 music pack
2019-12-16 11:33:17 +13:00
Garfield69
2fc244484c ebook-shares: new layout. resolves #6621
also add config sort option
2019-12-16 11:00:01 +13:00
Garfield69
6c02be7136 add muziekfabriek a Dutch semi-rpivate site. resolves #6619 2019-12-16 08:56:56 +13:00
klemk86
40b17a93fd Partis: Updated login check. (#6617) 2019-12-16 05:49:46 +13:00
Garfield69
28cb075d64 divteam: add config sort option 2019-12-15 19:11:29 +13:00
Garfield69
e9cf18825f desireleasers: add config sort option 2019-12-15 19:03:04 +13:00
Garfield69
1ba6f574f4 demonoid: add config sort option 2019-12-15 18:53:10 +13:00
Garfield69
9bbe42c6d6 deildu: add config sort option
also refresh categories
enable category selector
2019-12-15 17:21:11 +13:00
Garfield69
0c6c05179d dark-shadow: gone. removed. #4573 2019-12-15 16:40:21 +13:00
Garfield69
057e624379 cztorrent: add config sort option 2019-12-15 16:34:30 +13:00
Garfield69
676bab3bec crnaberza: add config sort option 2019-12-15 16:19:53 +13:00
Garfield69
622c46e1df crazycorner: add config sort option
also update categories
2019-12-15 12:20:12 +13:00
Garfield69
ba62891535 crazyspirits: add config sort option 2019-12-15 11:40:17 +13:00
Garfield69
8010cbf688 moviesdvdr: add default data for Radarr. resolves #6613 2019-12-15 11:14:40 +13:00
Garfield69
c56ba37cec crazyhd: add config sort option 2019-12-15 09:45:33 +13:00
Garfield69
8f2a5f55ff cpasbien: does not suppoort categories.
default to Other.
2019-12-15 08:50:57 +13:00
Garfield69
8e017e7398 cpasbienclone: add config sort option
site does not provide categories, defaulting to Other.
2019-12-15 08:39:42 +13:00
Garfield69
ac9417caea concertos: add config sort option 2019-12-14 21:07:03 +13:00
Garfield69
e72392d124 concen: add congif sort option 2019-12-14 20:58:15 +13:00
Garfield69
987ea6325e channelx: add config sort option 2019-12-14 20:08:49 +13:00
Garfield69
f7bb02f618 casstudiotv: add config sort option
also refresh categories
2019-12-14 19:20:15 +13:00
Garfield69
dc0fa03144 casatorrent: add config sort option.
also refresh categories
2019-12-14 15:26:13 +13:00
Garfield69
e5a1180a3a cartoonchaos: add config sort option 2019-12-14 14:46:43 +13:00
Garfield69
47743f1dcb underverse: add freeleech. resolves #6599
also add config sort option.
2019-12-14 11:41:33 +13:00
Garfield69
2ffc7899fb newpct: add freeleech. #6599 2019-12-14 11:30:16 +13:00
Garfield69
4da390c1ba corsarored: add freeleech. #6599 2019-12-14 11:24:27 +13:00
Garfield69
696a6b0e1f magnetdl: add alternate domain. resolves #6604
also add config sort option
2019-12-14 11:11:39 +13:00
Garfield69
66927a7020 rus-media: size/seeders/leechers can be missing. resolves #6603
also add config sort option.
2019-12-14 10:58:37 +13:00
Garfield69
d1ac466974 bttree: add andmatch filter. resolves #6601
also add config sort option
2019-12-14 10:19:53 +13:00
Garfield69
004d0d7014 shokweb: add andmatch filter. resolves #6600 2019-12-14 10:00:53 +13:00
Garfield69
fc360a9770 torlock, torrentdownloads: freeleech. resolves #6599
torlock: add config sort option.
2019-12-14 09:54:14 +13:00
Garfield69
4fb6a4f28d btdigg: add config sort option 2019-12-14 09:33:12 +13:00
Garfield69
88092323f1 booktracker: add config sort option 2019-12-14 08:39:06 +13:00
Garfield69
5d82cda21a blutopia: add config sort option 2019-12-14 08:29:56 +13:00
Garfield69
a0a54f74e7 bitturk: add config sort option 2019-12-14 08:14:06 +13:00
Garfield69
80699db8ae bittorrentfiles: add config sort option 2019-12-14 07:25:22 +13:00
Garfield69
d5b6a35473 bittorrentam: add config sort option 2019-12-14 06:36:27 +13:00
Garfield69
2790357a20 bitru: add config sort option 2019-12-14 05:47:59 +13:00
Garfield69
c3f7a3bc60 bithorlo: add config sort option 2019-12-14 05:30:33 +13:00
Garfield69
5b90ecca1c tvchaosuk: update categories. resolves #6596
also add config sort option
add category description to banner
2019-12-14 05:16:13 +13:00
Garfield69
231e974ed3 bit-titan: add config sort option 2019-12-13 21:15:33 +13:00
Garfield69
2346157fcd bigfangroup: add config sort option 2019-12-13 20:58:30 +13:00
Garfield69
6288cc1cea beyondhd: add config sort options 2019-12-13 19:07:50 +13:00
Garfield69
f5e6ca30ef baibako: add config sort option 2019-12-13 17:14:58 +13:00
Garfield69
0610401418 awsomehd: add config sort option 2019-12-13 17:05:44 +13:00
Garfield69
99b40f36e1 audionews: add config sort option 2019-12-13 09:22:30 +13:00
Garfield69
65dcc68c9c asiancinema: add config sort option 2019-12-13 08:31:39 +13:00
Garfield69
ceb45bec27 asgaard: add config sort option 2019-12-13 07:24:04 +13:00
Garfield69
45a21ca33a arenabg: category updates. 2019-12-13 06:48:58 +13:00
Garfield69
809f5feab2 anidex: add config sort option 2019-12-12 20:13:19 +13:00
Garfield69
ff9c5e146f amigosshare: add config sort option.
also update categories
and grab date from poster description if available.
2019-12-12 19:55:17 +13:00
Garfield69
51e101658a alexfilm: add config sort options. 2019-12-12 18:06:38 +13:00
Garfield69
71e5a20f61 alein: add sort to config options. 2019-12-12 17:23:19 +13:00
Garfield69
7255a1c059 aftershock: add config sort options.
and row andmatch filter
2019-12-12 15:52:47 +13:00
Garfield69
38c3d99437 1337x: add config sort options 2019-12-12 12:00:00 +13:00
Garfield69
1cd3329259 3evils: add config sort options. 2019-12-12 11:19:28 +13:00
Garfield69
68b9941d11 nyaasi: handler empty seeders/leechers/grabs. resolves #6587 2019-12-12 09:08:32 +13:00
Garfield69
1afc082bb1 torrent9clone: correction to date 2019-12-12 08:49:32 +13:00
Garfield69
b22bb55b43 torrent9: correction to date 2019-12-12 08:49:15 +13:00
Garfield69
c96dfd74e7 tfile: correction to ULVF and DLVF 2019-12-12 08:45:12 +13:00
Garfield69
6daa7d6976 rutor: correction to ULVF and DLVF 2019-12-12 08:43:33 +13:00
Garfield69
9f2cba9871 racingforme: correction to ULVF and DLVF 2019-12-12 08:40:19 +13:00
Garfield69
af93a613f6 newstudiol: correction to ULVF 2019-12-12 08:38:25 +13:00
Garfield69
2788d40e1f newstudio: correction to ULVF 2019-12-12 08:37:41 +13:00
Garfield69
8f9c93c329 kinozal: correction to ULVF 2019-12-12 08:35:41 +13:00
Garfield69
e9870aab92 loporno: correction to DLVF 2019-12-12 08:34:02 +13:00
Garfield69
ba306d8788 0daykiev: correction to ULVF 2019-12-12 08:24:45 +13:00
Garfield69
7fe4f47279 btsow: ignore header row. resolves #6586 2019-12-12 07:59:54 +13:00
Garfield69
7d8502fb01 2fast4you: add sort options
also fix seeders and leechers selector
2019-12-12 07:31:51 +13:00
Garfield69
5da39c56b7 0daykiev: add sort options 2019-12-12 06:43:04 +13:00
Garfield69
eb458ee29f skytorrentsclone: sort=created for top100 2019-12-12 05:38:32 +13:00
Garfield69
0829b26164 add topnow a public site. resolves #6583 2019-12-11 22:12:13 +13:00
Garfield69
f2739c4ae1 add btsow a public indexer. resolves #6576 2019-12-11 21:39:13 +13:00
Garfield69
c24956d793 add Seedpeer a public indexer. resolves #6450 2019-12-11 21:02:32 +13:00
Garfield69
226fdfd03c torrentleech: check tags for freeleech. resolves #6579 2019-12-11 20:33:27 +13:00
Garfield69
9c22679b41 IPTorrents: drop invalid char from titles. resolves #6582 2019-12-11 19:12:04 +13:00
Garfield69
d85836ce1b cardigannIndexer: if guid not set from details or comments then try magnet uri. resolves #6581 2019-12-11 17:57:10 +13:00
Garfield69
5a7e0158d6 tokyotosho: amend selectors. resolves #6580
also add magnets and DL/UL volume factors.
2019-12-11 17:09:10 +13:00
Garfield69
6aef316220 limetorrents: add alternate domain limetor.pro resolves #6577 2019-12-11 16:40:28 +13:00
klemk86
13f193013c Added Partis a SLOVENIAN Private site. (#6573) resolves #1596 2019-12-11 16:34:32 +13:00
Garfield69
8c856a9a50 torrentland: fix #6570 2019-12-11 16:29:37 +13:00
Garfield69
d44bc93776 Revert "core: fix login redirect with nginx + admin password. resolves #4765 (#6561)"
This reverts commit 642bed1ef4.
2019-12-11 11:49:51 +13:00
Garfield69
090ae2db08 torrentland: swap Sxx with Txx on search and back for titles. resolves #6570 2019-12-11 06:42:29 +13:00
snamds
453165e081 [Newpct] fix No results error (#6567) resolves #6551 2019-12-10 12:25:25 +13:00
csutcliff
9c3f1134b9 Beyond-HD-oneurl: Add support for OneURL login (#6566)
Quick fix for the recaptcha/2FA woes of the current method
2019-12-10 12:18:13 +13:00
Diego Heras
642bed1ef4 core: fix login redirect with nginx + admin password. resolves #4765 (#6561) 2019-12-10 08:30:12 +13:00
Diego Heras
b666b01461 core: fix static resources in web ui (images) (#6564)
* core: fix static resources in web ui (images)

* delete unused .png files
2019-12-10 07:53:51 +13:00
Garfield69
574d41021b torrent9clone: update category selector. resolves #6557 2019-12-09 23:08:52 +13:00
Garfield69
bb8f94f23a dmhy: exclude row without magnets. resolves #6556 2019-12-09 22:55:25 +13:00
Garfield69
b51527d340 torrentwal: size can be empty. resolves #6555
also add bluray movie cat.
2019-12-09 22:44:18 +13:00
Garfield69
a5d055cf33 demonoid: category can be missing. resolves #6554 2019-12-09 22:01:26 +13:00
Garfield69
99feb6f4cf tfile: size/seeders/leechers can be empty. resolves #6553 2019-12-09 21:48:52 +13:00
Garfield69
418ffc9bf3 movecr: handle empty size selector. resolves #6552 2019-12-09 21:29:19 +13:00
Garfield69
0ddefb0328 torrentscsv: bunt datestamp from int to long. resolves #6550 2019-12-09 20:47:01 +13:00
Garfield69
6b66a19631 freetorrent: support for Unit3D 2.2.5 upgrade. 2019-12-09 17:55:26 +13:00
Garfield69
394aec14e6 torrentfunk: add andmatch filter. resolves #6548 2019-12-09 17:32:46 +13:00
Garfield69
a2e93b4f75 yourbittorrent: add andmatch filter. resolves #6547
also update categories.
2019-12-09 17:28:49 +13:00
Garfield69
e2255f1e3a torrentgalaxyorg: add captcha to config. resolves #6546 2019-12-09 17:09:40 +13:00
Garfield69
92fd7d857b mactorrents: correct categories. resolves #6544
and fix category selector.
2019-12-09 16:19:58 +13:00
Garfield69
1b4afc0e72 glodls: accept itorrents.org links. resolves #6543 2019-12-09 16:04:42 +13:00
Garfield69
83b2efb3c4 sukebeinyaasi: handle missing .torrent or magnet links. resolves #6542 2019-12-09 15:46:00 +13:00
Garfield69
08dc395b63 focusx: handle two flavours of date selectors. resolves #6541
also update categories.
2019-12-09 15:21:13 +13:00
Garfield69
5172df48e1 torrentwal: drop rows without categories. resolves #6540 2019-12-09 09:01:09 +13:00
Garfield69
4b1a343f60 itorrent: fix grabs > 999. resolves #6539
also replace new categories
and prevent dataparse error
2019-12-09 08:29:08 +13:00
Garfield69
6acacd1947 estrenosdtl: categories on this site are optional. resolves #6538 2019-12-09 07:16:59 +13:00
Garfield69
a71bd50259 elitetorrent: add andmatch filter. resolves #6537 2019-12-09 06:53:54 +13:00
Garfield69
cbfa1a4732 shokweb: fix search. resolves #6536 2019-12-09 06:32:07 +13:00
Garfield69
741d16cbf5 limetorrents add alternate domains. resolves #6534 2019-12-09 06:09:55 +13:00
Garfield69
4b4ccd74df acgsou: filter rows that have results. resolves #6532 2019-12-09 05:35:59 +13:00
Garfield69
556e7fc738 toros: fix search. resolves #6497 2019-12-09 05:21:19 +13:00
Garfield69
6ec07e0412 improve language support for Unit3D sites. 2019-12-08 15:19:53 +13:00
Garfield69
ae3e10a84a add chinese suppoort for Unit3D indexers. resolves #6529 2019-12-08 14:41:04 +13:00
Garfield69
5536e8314d Update README.md 2019-12-07 14:17:08 +13:00
TuGeek
5d395b6f67 HDCIty: Corrected search of episodes with Sonarr (#6519) resolves #6510 2019-12-07 08:38:34 +13:00
Garfield69
b0a711253a yourbittorrent: add alternate domain. resolves #6500
also covert keywords to lowercase
2019-12-07 05:39:43 +13:00
Garfield69
a5e4299673 torrentfunk: colvert to lowercase before search. resolves #6502 2019-12-07 05:28:41 +13:00
Garfield69
32a7cc5cac add toros a public tracker. resolves #6497 2019-12-06 14:17:59 +13:00
Garfield69
d275971101 Merge branch 'master' of https://github.com/Jackett/Jackett 2019-12-06 09:04:25 +13:00
Garfield69
b20a37d8d6 add hdu a private Chinese site. resolves #5746 2019-12-06 09:04:20 +13:00
Jorman
a36a3a9329 shareisland: update categories (#6512) 2019-12-06 08:00:47 +13:00
Garfield69
070f819e06 add springsunday a private Chinese site. resolves #6483 2019-12-06 07:44:07 +13:00
Garfield69
3bb81d408e add hd4fans a private Chinese site. resolves #6482 2019-12-05 21:33:18 +13:00
Garfield69
71c9ffb7cd retroflix: release_year and quality are optional.
prevents selector not found error
2019-12-05 20:37:23 +13:00
Garfield69
155e46a24d icetorrent: handle both kinds of date selectors 2019-12-05 20:20:33 +13:00
lpearl
fd36eb068c add pornolab a semi-private Russian site (#6465) resolves #4373 2019-12-05 16:26:59 +13:00
Garfield69
f2605b8a3e concen: filter out rows without title. resolves #6506 2019-12-05 16:13:31 +13:00
Garfield69
75020d9a6c mactorrents: filter out torrents without download link. resolves #6505 2019-12-05 16:01:09 +13:00
Garfield69
d028c11bb0 torrentfunk: correct search. resolves #6502 #6501
add alternate domain
2019-12-05 15:35:19 +13:00
Garfield69
dfc130154c yourbittorrent: drop sponsored links. drop andmatch. resolves #6500 2019-12-05 14:58:28 +13:00
Garfield69
25302d939f yourbittorrent: update for current layout. 2019-12-05 14:47:05 +13:00
Garfield69
98fc07e82b Revert "yourbittorrent: new domain .host"
This reverts commit 4c764a022a.
2019-12-05 14:19:03 +13:00
Garfield69
d563063c86 torlock: make .com default domain again. 2019-12-05 14:14:22 +13:00
Garfield69
d6a9a88ae4 add hdroute a private Chinese site. resolves #6477 2019-12-05 09:57:29 +13:00
Garfield69
9cae079014 esharenet: drop search quantity from 100 to 50.
server seems unable to deliver 100 results and times out.
2019-12-05 06:47:56 +13:00
Garfield69
0970a40b9e torrent-explosiv: now private. resolves #6489 2019-12-04 13:14:36 +13:00
Garfield69
edc7d5e4c4 skytorrentsclone: they have dropped the itorrents.org download link. 2019-12-04 08:50:30 +13:00
Garfield69
0eea2f5ef7 desireleasers: drop search quantity from 100 to 50. resolves #6480
it appears that their server cannot handle requests for 100 rows, returning an internal server error message.
2019-12-04 06:12:47 +13:00
Garfield69
bc127cac76 nostalgic: drop rows without download
to prevent download selector error
2019-12-03 21:07:33 +13:00
Garfield69
979bdec229 theempire, thegeeks, theoccult, theplace, theshow, thevault: fix grabs.
replace Never with 0 to prevent selector error.
2019-12-03 21:06:23 +13:00
Garfield69
e798130428 audionews: update categories
and prevent selector row error
2019-12-03 20:37:16 +13:00
Garfield69
8081baad7b hdhome: use cookie login. resolves #6460
also updated the  categories.
2019-12-03 20:02:19 +13:00
Garfield69
310cba2655 GazelleTracker: enable keeplogged #6461 2019-12-03 18:21:48 +13:00
Garfield69
3fc2476bd2 yggtorrent: new domain .ws #6473 2019-12-03 16:11:26 +13:00
Garfield69
4881040830 torrentdownloads: add alternate domain .info resolves #6468 2019-12-03 06:48:02 +13:00
Garfield69
81bc901d08 torrentparadise: new domain .cl 2019-12-02 14:54:53 +13:00
Garfield69
3d09e3d3fd hdhome: swithc to using http. #6460 2019-12-02 08:11:16 +13:00
Garfield69
e8f06cb54f monova: drop sponsored results. resolves #6459 2019-12-02 07:52:57 +13:00
Garfield69
46cb027261 add torrentdownload, a public tracker. resolves #6451 2019-12-01 18:20:58 +13:00
Garfield69
7882fb5699 limetorrents: add movie-search. 2019-12-01 17:45:21 +13:00
Garfield69
6bf0f4a446 add bittirrent.AM a public tracker. resolves #6452 2019-12-01 16:34:46 +13:00
Garfield69
c15be19bff monova: fix search. resolves #6453 2019-12-01 08:08:29 +13:00
Garfield69
dd85da7558 btdb: change search= to s= for #6448 2019-12-01 07:42:26 +13:00
Garfield69
5a72c63ee5 Update README.md 2019-12-01 06:25:33 +13:00
Garfield69
e5258d43db alexfilm: certificate bypass for expired one #6445 2019-11-30 17:11:46 +13:00
Garfield69
1337129cb6 Update README.md 2019-11-29 19:32:24 +13:00
Garfield69
fc09839296 readme: corrections additions to linux prereqs #6442 2019-11-29 19:29:33 +13:00
Garfield69
608c83c8e8 readme: update linux core 3 prereqs. resolves #6442 2019-11-29 19:25:00 +13:00
Garfield69
f6ec6a9fbb 1337x: add an alternate domain to the site link list. 2019-11-29 14:29:33 +13:00
Garfield69
58b9fef9fa CloudflareSolverRe: bump to 1.0.6 2019-11-29 12:12:00 +13:00
Garfield69
216cd7fda7 add moviesdvdr a Spanish public movie site. resolves #6438 2019-11-29 08:08:20 +13:00
Garfield69
bf7d36669b transmitthenet: Add daily show support for NEB. Resolves #6413 2019-11-29 06:53:12 +13:00
Garfield69
1b336b026e mkvkage: gone. removed. #5983 2019-11-28 19:07:47 +13:00
Garfield69
d2a743b779 add EstrenosDTL a public Spanish movie site. resolves #6431 2019-11-28 07:30:21 +13:00
Garfield69
00adba0650 ztracker: update categories
drop grabs.
2019-11-27 21:05:06 +13:00
Garfield69
349790968f add bt.etree a public bootleg site. resolves #6429 2019-11-27 15:48:28 +13:00
Garfield69
2e04a22c63 vanila: correct date selector, update categories. 2019-11-27 10:04:32 +13:00
Garfield69
5b0ba0c53b add legittorrents a public site. resolves #6426 2019-11-27 09:14:14 +13:00
Garfield69
e509cc6784 add riperam a Russian semi-private site. resolves #6425 2019-11-27 07:38:43 +13:00
HDVinnie
a5020dd2f2 ChannelX: support for upgrade to unit3d 2.2.5 (#6423) 2019-11-26 09:37:21 +13:00
Garfield69
94e9aed032 sktorrent: update categories 2019-11-25 18:19:10 +13:00
Garfield69
c01114d2e6 torrent-turk: back to using form#loginbox_form 2019-11-25 18:01:09 +13:00
Garfield69
23612e8576 torrent9: new domain oxtorrent.me 2019-11-25 08:30:40 +13:00
Garfield69
f7ced614e8 add bitru a Russian public site. resolves #6411 2019-11-25 08:19:33 +13:00
Garfield69
71eb6435d7 torrent9clone: new domain .so 2019-11-23 07:31:52 +13:00
Garfield69
fa7162d4f7 hdturk: site is now forcing https:
plus additional changes to the login form.
2019-11-21 10:05:12 +13:00
Garfield69
8e748d159a filmpaleis: site now forcing https. 2019-11-21 09:41:25 +13:00
Garfield69
da16016e7f nostalgic: drop keeploggedin option. #6405 2019-11-21 09:30:24 +13:00
Garfield69
2cf0cc1740 greeklegends: support for upgrade to unit3d 2.2.3 2019-11-21 09:11:35 +13:00
Garfield69
661541ed1f digbt: gone. indexer removed. #4344 2019-11-21 08:50:00 +13:00
Garfield69
90074f89b0 torrent9clone: new domain .ai 2019-11-21 08:44:35 +13:00
Garfield69
68ecb8fafe add firebit a public Ukrainian site. resolves #6395 2019-11-20 21:05:23 +13:00
dimqua
f8f9570b63 dxp: mark VIP categories as 'Other/Misc' (#6404) for #6382 2019-11-20 10:46:26 +13:00
TuGeek
e827ccb52e Optimization Puntotorrent and HDCity Trackers (#6400) 2019-11-20 08:12:36 +13:00
Garfield69
3b65ea3c4e piratbit, piratbitL: new size selector. resolves #6399
also tidy up grabs and date selectors
2019-11-20 07:58:09 +13:00
Garfield69
5a5c0a5f34 torrentparadise: correction to a category. 2019-11-20 06:59:28 +13:00
Garfield69
68275057dd gktorrent, oxtorrent: switch download to magnet. resolves #6398
only the magnet button is now an actual reliable magnet to download.
the telecharger button on gktorrent is always a click bait fake button, and the one on oxtorrent goes to click bait first, and works the second time.
2019-11-20 06:50:17 +13:00
Garfield69
8e80c28f34 add torrentparadise a public magnet indexer. resolves #6385 2019-11-19 20:06:07 +13:00
Garfield69
0feae6768a add dxp a semi-private site for Russian subtitled movies/tv. resolves #6382 2019-11-19 17:21:10 +13:00
cesco-trask
ff7776ed71 bigtower: Update categories (#6387)
BigTower has removed many categories, this should fix the tracker
2019-11-19 06:08:05 +13:00
Alberto Moreno
abbf09c953 hdcity: Optimise search for Complete Season (#6386)
Search for complete seasons with other names than "T1"
2019-11-19 05:54:19 +13:00
Garfield69
0d60ed8326 add rus-media a public Russian site. resolves #6381 2019-11-18 19:48:29 +13:00
Garfield69
dbb3c0faec nntt: correct date parsing 2019-11-18 19:06:28 +13:00
Garfield69
bbf3a3c749 cardigann: only log AFTER processing when debug enabled. #6377 2019-11-17 19:54:33 +13:00
Garfield69
dc7f8e20ab galeriens: new layout. new date selector. 2019-11-16 08:17:41 +13:00
Garfield69
062b967f88 elitetorrentbiz: new domain .tv 2019-11-16 06:39:33 +13:00
Garfield69
632718e1ce gamestorrents: new domain .nu 2019-11-16 06:35:03 +13:00
ZiemusG
9effc3b21b btgigs: update login action path (#6372)
Update login path.
2019-11-16 06:06:29 +13:00
Garfield69
4fb3246b06 oops. misnamed the greeklegends indexer. #6369 2019-11-15 19:22:47 +13:00
Garfield69
d6f737bf48 cpabien: add auto-correct for gktorrent link 2019-11-15 07:49:40 +13:00
Garfield69
bafad8c5a2 add nntt a public Russian site. resolves #6345 2019-11-14 17:53:54 +13:00
Garfield69
0354e10322 underverse, underverseL: handle genmed and seedmed user classes. resolves #6360 2019-11-14 13:53:53 +13:00
Garfield69
8cc5060242 yggtorrent: new domain www5. #6341 2019-11-13 20:05:12 +13:00
Garfield69
48159e9605 piratbit: public, magnets. piratbitl: login for .torrents #6335. 2019-11-13 18:48:43 +13:00
Garfield69
dee185c9ff underverse: magnets only. #6335 2019-11-13 17:55:48 +13:00
Garfield69
34df9096a3 Merge branch 'master' of https://github.com/Jackett/Jackett 2019-11-13 15:51:42 +13:00
Garfield69
b29d5d3620 underversel: underverse with Login for #6335 2019-11-13 15:51:37 +13:00
Leonardo Merza
db0c071313 add greeklegends a private site for hq content (#6349) 2019-11-13 08:21:56 +13:00
Alberto Moreno
9f7b361512 Bug in fields args broke HDCity template (#6343)
Missing spaces in fields args that broke the HDCity template
2019-11-12 21:44:43 +13:00
716 changed files with 40366 additions and 16233 deletions

295
.editorconfig Normal file
View File

@@ -0,0 +1,295 @@
root=true
# To learn more about .editorconfig see https://aka.ms/editorconfigdocs
# With more recent updates Visual Studio 2017 supports EditorConfig files out of the box
# Visual Studio Code needs an extension: https://github.com/editorconfig/editorconfig-vscode
# For emacs, vim, np++ and other editors, see here: https://github.com/editorconfig
###############################
# Core EditorConfig Options #
###############################
# All files
[*]
indent_style=space
insert_final_newline=true
charset=utf-8
end_of_line=lf
trim_trailing_whitespace=true
# Microsoft .NET properties
csharp_new_line_before_members_in_object_initializers=true
csharp_space_after_cast=false
csharp_style_var_elsewhere=true:suggestion
csharp_style_var_for_built_in_types=true:suggestion
csharp_style_var_when_type_is_apparent=true:suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:none
dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:none
dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:none
# ReSharper properties
resharper_align_linq_query=true
resharper_align_multiline_argument=true
resharper_align_multiline_calls_chain=true
resharper_align_multiline_extends_list=true
resharper_align_multiline_for_stmt=true
resharper_align_tuple_components=true
resharper_csharp_alignment_tab_fill_style=optimal_fill
resharper_csharp_align_multiline_parameter=true
resharper_csharp_align_multiple_declaration=true
resharper_csharp_indent_pars=outside
resharper_csharp_keep_blank_lines_in_code=0
resharper_csharp_keep_blank_lines_in_declarations=1
resharper_csharp_max_line_length=125
resharper_csharp_stick_comment=false
resharper_csharp_wrap_after_invocation_lpar=true
resharper_force_attribute_style=join
resharper_indent_invocation_pars=outside
resharper_indent_method_decl_pars=outside
resharper_indent_preprocessor_region=no_indent
resharper_indent_statement_pars=outside
resharper_indent_typearg_angles=outside
resharper_indent_typeparam_angles=outside
resharper_keep_existing_embedded_arrangement=false
resharper_keep_existing_expr_member_arrangement=false
resharper_keep_existing_invocation_parens_arrangement=false
resharper_keep_existing_linebreaks=false
resharper_keep_existing_switch_expression_arrangement=false
resharper_place_attribute_on_same_line=false
resharper_place_expr_accessor_on_single_line=true
resharper_place_expr_method_on_single_line=true
resharper_place_expr_property_on_single_line=true
resharper_place_simple_embedded_statement_on_same_line=false
resharper_space_within_empty_braces=false
resharper_wrap_array_initializer_style=chop_always
resharper_wrap_before_extends_colon=true
resharper_wrap_before_type_parameter_langle=true
resharper_wrap_multiple_type_parameter_constraints_style=wrap_if_long
resharper_wrap_object_and_collection_initializer_style=chop_always
# ReSharper inspection severities
resharper_arrange_attributes_highlighting=suggestion
resharper_arrange_redundant_parentheses_highlighting=suggestion
resharper_enforce_if_statement_braces_highlighting=suggestion
# Xml project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
indent_size=2
# JavaScript/HTML
[*.{js,ts,json,html,cshtml}]
indent_size=2
# Code files
[*.{cs,csx,vb,vbx}]
indent_size=4
###############################
# .NET Coding Conventions #
###############################
[*.{cs,vb}]
# Organize usings
dotnet_sort_system_directives_first=true
# this. preferences
dotnet_style_qualification_for_field=false:suggestion
dotnet_style_qualification_for_property=false:suggestion
dotnet_style_qualification_for_method=false:suggestion
dotnet_style_qualification_for_event=false:suggestion
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members=true:warning
dotnet_style_predefined_type_for_member_access=true:suggestion
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators=always_for_clarity:silent
dotnet_style_parentheses_in_relational_binary_operators=always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators=always_for_clarity:silent
dotnet_style_parentheses_in_other_operators=never_if_unnecessary:silent
# Modifier preferences
dotnet_style_require_accessibility_modifiers=for_non_interface_members:silent
dotnet_style_readonly_field=true:suggestion
# Expression-level preferences
dotnet_style_object_initializer=true:warning
dotnet_style_collection_initializer=true:warning
dotnet_style_explicit_tuple_names=true:suggestion
dotnet_style_null_propagation=true:suggestion
dotnet_style_coalesce_expression=true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method=true:suggestion
dotnet_style_prefer_inferred_tuple_names=true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names=true:suggestion
dotnet_style_prefer_auto_properties=true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment=true:suggestion
dotnet_style_prefer_conditional_expression_over_return=true:suggestion
dotnet_style_prefer_compound_assignment=true:suggestion
###############################
# Naming Conventions #
###############################
# Style Definitions
dotnet_naming_style.pascal_case_style.capitalization=pascal_case
# Use PascalCase for constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity=warning
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols=constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style=pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds=field
dotnet_naming_symbols.constant_fields.applicable_accessibilities=*
dotnet_naming_symbols.constant_fields.required_modifiers=const
# Naming rules
dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = warning
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.private_or_internal_static_field_should_be_private_or_internal_static_with_prefix.severity = warning
dotnet_naming_rule.private_or_internal_static_field_should_be_private_or_internal_static_with_prefix.symbols = private_or_internal_static_field
dotnet_naming_rule.private_or_internal_static_field_should_be_private_or_internal_static_with_prefix.style = private_or_internal_static_with_prefix
dotnet_naming_rule.private_or_internal_field_should_be_private_prefix.severity = warning
dotnet_naming_rule.private_or_internal_field_should_be_private_prefix.symbols = private_or_internal_field
dotnet_naming_rule.private_or_internal_field_should_be_private_prefix.style = private_prefix
dotnet_naming_rule.asyncmethods_should_be_ends_with_async.severity = warning
dotnet_naming_rule.asyncmethods_should_be_ends_with_async.symbols = asyncmethods
dotnet_naming_rule.asyncmethods_should_be_ends_with_async.style = ends_with_async
# Symbol specifications
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
dotnet_naming_symbols.asyncmethods.applicable_kinds = delegate, method, local_function
dotnet_naming_symbols.asyncmethods.applicable_accessibilities = *
dotnet_naming_symbols.asyncmethods.required_modifiers = async
# Naming styles
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.private_or_internal_static_with_prefix.required_prefix = _
dotnet_naming_style.private_or_internal_static_with_prefix.required_suffix =
dotnet_naming_style.private_or_internal_static_with_prefix.word_separator =
dotnet_naming_style.private_or_internal_static_with_prefix.capitalization = pascal_case
dotnet_naming_style.private_prefix.required_prefix = _
dotnet_naming_style.private_prefix.required_suffix =
dotnet_naming_style.private_prefix.word_separator =
dotnet_naming_style.private_prefix.capitalization = camel_case
dotnet_naming_style.ends_with_async.required_prefix =
dotnet_naming_style.ends_with_async.required_suffix = Async
dotnet_naming_style.ends_with_async.word_separator =
dotnet_naming_style.ends_with_async.capitalization = pascal_case
###############################
# C# Coding Conventions #
###############################
[*.cs]
# var preferences
csharp_style_var_for_built_in_types=true:suggestion
csharp_style_var_when_type_is_apparent=true:suggestion
csharp_style_var_elsewhere=true:suggestion
# Expression-bodied members
csharp_style_expression_bodied_methods=when_on_single_line:suggestion
csharp_style_expression_bodied_constructors=when_on_single_line:suggestion
csharp_style_expression_bodied_operators=when_on_single_line:suggestion
csharp_style_expression_bodied_properties=true:suggestion
csharp_style_expression_bodied_indexers=true:suggestion
csharp_style_expression_bodied_accessors=true:suggestion
csharp_style_expression_bodied_lambdas=true:suggestion
csharp_style_expression_bodied_local_functions=true:suggestion
# Pattern matching preferences
csharp_style_pattern_matching_over_is_with_cast_check=true:suggestion
csharp_style_pattern_matching_over_as_with_null_check=true:suggestion
# Null-checking preferences
csharp_style_throw_expression=true:warning
csharp_style_conditional_delegate_call=true:warning
# Modifier preferences
csharp_preferred_modifier_order=public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
# Expression-level preferences
csharp_prefer_braces=false:suggestion
csharp_style_deconstructed_variable_declaration=true:suggestion
csharp_prefer_simple_default_expression=true:warning
csharp_style_pattern_local_over_anonymous_function=true:suggestion
csharp_style_inlined_variable_declaration=true:suggestion
# Prefer C# 8.0 Indexing Features
csharp_style_prefer_index_operator=true:suggestion
csharp_style_prefer_range_operator=true:suggestion
csharp_style_deconstructed_variable_declaration=true:suggestion
csharp_style_pattern_local_over_anonymous_function=true:suggestion
csharp_using_directive_placement=outside_namespace:suggestion
csharp_prefer_static_local_function=true:suggestion
csharp_prefer_simple_using_statement=true:suggestion
csharp_style_prefer_switch_expression=true:suggestion
###############################
# C# Formatting Rules #
###############################
# New line preferences
csharp_new_line_before_open_brace=all
csharp_new_line_before_else=true
csharp_new_line_before_catch=true
csharp_new_line_before_finally=true
csharp_new_line_before_members_in_object_initializers=true
csharp_new_line_before_members_in_anonymous_types=true
csharp_new_line_between_query_expression_clauses=true
# Indentation preferences
csharp_indent_case_contents=true
csharp_indent_switch_labels=true
csharp_indent_labels=flush_left
csharp_indent_block_contents=true
csharp_indent_braces=false
csharp_indent_case_contents_when_block=true
# Space preferences
csharp_space_after_cast=false
csharp_space_after_keywords_in_control_flow_statements=true
csharp_space_between_method_call_parameter_list_parentheses=false
csharp_space_between_method_declaration_parameter_list_parentheses=false
csharp_space_between_parentheses=false
csharp_space_before_colon_in_inheritance_clause=true
csharp_space_after_colon_in_inheritance_clause=true
csharp_space_around_binary_operators=before_and_after
csharp_space_between_method_declaration_empty_parameter_list_parentheses=false
csharp_space_between_method_call_name_and_opening_parenthesis=false
csharp_space_between_method_call_empty_parameter_list_parentheses=false
# Wrapping preferences
csharp_preserve_single_line_statements=false
csharp_preserve_single_line_blocks=true
###############################
# VB Coding Conventions #
###############################
[*.vb]
# Modifier preferences
visual_basic_preferred_modifier_order=Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion

19
.gitattributes vendored
View File

@@ -1,16 +1,13 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
# Declare files that will always have LF line endings on checkout.
*.yml text eol=lf
*.sh text eol=lf
# Declare files that will always have CRLF line endings on checkout.
*.cs text eol=crlf
* text eol=lf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.eot binary
*.ico binary
*.jpg binary
*.otf binary
*.png binary
*.ttf binary
*.woff binary
*.woff2 binary

View File

@@ -1,13 +1,33 @@
**Please use the search bar** at the top of the page and make sure you are not creating an already submitted issue. Duplicating issues makes it more difficult for everyone to follow. Your issue may have already been solved in the past as well.
**Please use the search bar** at the top of the page and make sure you are not creating an already submitted issue.
Check closed issues as well, because your issue may have already been fixed.
Provide a description of the feature request or bug, the more details the better.
Please read our [Contributing Guidelines](https://github.com/Jackett/Jackett/blob/master/CONTRIBUTING.md) before submitting your issue to ensure a prompt response to your bug.
If you are experiencing an issue with a tracker, then:
1. Use your browser to check you can access the site directly, and if a login is required, check you can login and that you do not have any outstanding account issues.
2. If you haven't already, try upgrading to the latest version of Jackett, your issue may have already been resolved.
3. If it is still not working for you, then a **full enhanced log must be included**. Instructions for obtaining logs are here: https://github.com/Jackett/Jackett#troubleshooting
### Environment
(At the bottom of your Jackett Dashboard page) **Jackett version**:
(if you installed using Jackett.Binaries.Mono.tar.gz) **Mono version**:
**OS**:
-------------------------------
**.Net Runtime**: [.Net-Core/.Net-Framework/Mono]
**.Net Version**:
**Jackett Version**:
**Last Working Jackett Version**:
**Are you using a proxy or VPN?** [yes/no]
### Description
[List steps to reproduce the error and details on what happens and what you expected to happen]
### Logged Error Messages
[Place any relevant error messages you noticed from the logs here.]
[Make sure you attach the full logs with your personal information removed in case we need more information]
### Screenshots
[Place any screenshots of the issue here if needed]

BIN
.github/jackett-screenshot1.png vendored Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

BIN
.github/jackett-screenshot2.png vendored Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
.github/jackett-screenshot3.png vendored Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

View File

@@ -2,8 +2,31 @@ Hi @{{ payload.sender.login }},
You've created an issue, but haven't provided any details to allow the community to assist you. To prevent issue tracker clutter, this issue will now be closed. Please provide the information needed below and your comment will automatically re-open this issue.
Provide a description of the feature request or bug, the more details the better.
If you are experiencing an issue with a tracker, a **full enhanced log must be included**. Instructions for obtaining logs are here: https://github.com/Jackett/Jackett#troubleshooting
### Environment
(At the bottom of your Jackett Dashboard page) **Jackett version**:
(if you installed using Jackett.Binaries.Mono.tar.gz) **Mono version**:
**OS**:
**.Net Runtime**: [.Net-Core/.Net-Framework/Mono]
**.Net Version**:
**Jackett Version**:
**Last Working Jackett Version**:
**Are you using a proxy or VPN?** [yes/no]
### Description
[List steps to reproduce the error and details on what happens and what you expected to happen]
### Logged Error Messages
[Place any relevant error messages you noticed from the logs here.]
[Make sure you attach the full logs with your personal information removed in case we need more information]
### Screenshots
[Place any screenshots of the issue here if needed]

3
.gitignore vendored
View File

@@ -195,9 +195,6 @@ FakesAssemblies/
# Visual Studio 6 workspace options file
*.opt
/tools
/BuildOutput
/Artifacts
/TestResults
*.DS_Store
.idea/
launchSettings.json

200
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,200 @@
# Contributing to Jackett
So, you've decided you want to help make Jackett a better program for everyone. Not everyone chooses to help, so we thank you for your decision.
In order to help us make the most of your contribution please take the time to read these contributing guidelines.
These are just guidelines, not hard rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
## Ways you can help
- [Getting Started](#getting-started)
- [Troubleshooting](#troubleshooting)
- [Reporting a bug](#reporting-a-bug)
- [Adding a new tracker](#adding-a-new-tracker)
- [Contributing Code](#contributing-code)
- [Setting up your environment](#setting-up-your-environment)
- [Coding style](#coding-style)
- [Getting your code accepted & pull requests](#pull-requests)
# Getting Started
Now that you've decided you want to help us make Jackett a better program the big question is: Where do you start?
Why right here of course. You can help in several ways, from finding and reporting bugs, to adding new trackers,
to fixing bugs in the program code itself. Below, we outline the steps needed to file your first bug report.
## Troubleshooting
Before you submit a bug report, it's important to make sure it's not already a known issue,
and to make sure it's a bug we can find and fix quickly.
These troubleshooting tips will help make sure your bug report is high quality and can be fixed quickly.
**Update your Jackett to the latest version**
Before you submit a bug-report or do any other troubleshooting, make sure your Jackett is the latest release version.
We are releasing bug fixes almost daily, so your issue may have been fixed already.
Bugs that are submitted without being on the latest version may be closed.
**Error "An error occurred while sending the request: Error: TrustFailure (A call to SSPI failed, see inner exception.)"**
This is often caused by missing CA certificates.
Try reimporting the certificates in this case:
- On Linux (as user root): `wget -O - https://curl.haxx.se/ca/cacert.pem | cert-sync /dev/stdin`
- On macOS: `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
**Tracker isn't working**
If you are experiencing an issue with a tracker, then:
- Use your browser to check you can access the site directly, and if a login is required,
check you can login and that you do not have any outstanding account issues.
- If you haven't already, try upgrading to the latest version of Jackett.
- If it is still not working for you, then a **full enhanced log must be included**.
**Enable enhanced logging**
- You can get *enhanced* logging with the command line switches `-t -l` or by enabling `Enhanced logging` via the web interface
(followed by clicking on the `Apply Server Settings` button).
- These enhanced logs are necessary for us to quickly track down your bug and get a fix implemented in code.
- Make sure you remove your username/password/cookies from the log files before submitting them with your issue.
- The logfiles (log.txt/updater.txt) are stored on Windows in `%ProgramData%\Jackett`, on Linux/macOS in `~/.config/Jackett/`,
and on FreeBSD in `/usr/local/jackett`.
## Reporting a Bug
Once you have your enhanced logs and you are still unable to resolve your issue yourself, now it's time to prepare to submit a bug report!
Before you submit your report, make sure you've searched open *and* closed bugs to see if someone's already informed us of your issue.
If your search doesn't help you fix your issue and you can't find a similar bug already listed, then you get to make a new issue.
Your issue should have the following information.
- **Descriptive Title** - The title of your bug should include keywords and a descriptive summary of what you're experiencing
to help others avoid duplicating your bug report
- Keywords in the title should be as follows:
- Tracker bugs should start with the tracker in brackets e.g. [**AnimeBytes**]
- Feature requests should start with [**REQ**]
- New trackers should begin with [**New**] and the tracker type [**Public**/**Private**/**Semi-Private**] e.g. **[New][Public] ThePirateBay**
- **Environment Details** - These are things like your OS version, Jackett type and version, mono/.Net-core/framework version(s).
These are asked for by the issue template when you create a new issue on GitHub.
- **Steps** to cause the problem, if applicable. These should be specific and repeatable.
- **What happens** when you take the steps and **what you expected to happen**
- **Error messages** and/or screenshots of the issue.
- The **last working version** if it's applicable. Tracker issues normally don't need this information.
- An attached copy of your **enhanced logs**. Don't forget to remove usernames/passwords/API-keys from the logs.
We'll be working on making sure these are automatically censored in the future.
- Any other **relevant details** you can think of. The more information we have, the quicker we can solve the problem.
## Adding a New Tracker
Jackett's framework typically allows our team and volunteering developers to implement new trackers in a couple of hours
Depending on logic complexity, there are two common ways new trackers are implemented:
1. simple [definitions](http://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Definitions) (.yml / YAML)
2. advanced (native) [indexers](http://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Indexers) (.cs / C#)
Read more about the [simple definition format](https://github.com/Jackett/Jackett/wiki/Definition-format).
# Contributing Code
While reporting the bugs is super helpful since you can't fix bugs you don't know about, they don't get fixed unless someone goes in and fixes them.
Luckily, you're a developer who wants to help us do just that. Thanks!
We really need more developers working on Jackett, no matter their skill level or walk of life.
We've developed the guide below to make sure we're all on the same page because this makes reading and fixing code much simpler, faster, and less bug-prone.
## Setting up your environment
The following guide assumes you've never worked with a Visual Studio project with GitHub before.
This will give you the minimum necessary tools to get started. There are plenty of optional tools that may help you, but we won't cover those here.
- The guide is currently only geared towards developing on Windows using Visual Studio Community 2019.
If you use something else, please add it here for others.
<details open=true> <summary> Windows </summary>
<details open=true> <summary> Visual Studio 2019 </summary>
- Install [Visual Studio Community 2019](http://visualstudio.com) for free.
- About 2GB download. 8GB installed.
- Make sure it includes the following Workloads/Components:
- .Net Desktop Development
- .Net Core Cross-Platform Development
- GitHub extension for Visual Studio
- [Connect and synchronize your forked repository to Visual Studio](https://doc.fireflymigration.com/working-with-github-fork-in-visual-studio.html)
- Open `Tools -> NuGet Package Manager -> Package Manager Console`
- From the PMC, run `dotnet tool install -g dotnet-format` and `dotnet restore`
- Run `Build -> Rebuild Solution` to restore NuGet packages
- Ensure `Jackett.Server` is the Startup Project (instead of `Jackett.Service`), and the Run Target (instead of `IIS Express`)
</details>
</details>
## Coding Style
Now that you're ready to code, it's time to teach you our style guidelines. This style guide helps our code stay readable and bug-free.
You can see the full details in the [Editor Config](.editorconfig) file.
Running `dotnet format` from the Package Manager Console will apply the style guide to the solution and is required before any pull request will be accepted.
- Whitespace
- Indenting is done with 4 spaces
- No whitespace at the end of lines
- All files have a final newline
- Unix style new lines for committed code
- Spaces around all non-unary operators
- Braces
- Opening brace on its own line
- Single line statements do not use braces
- If any part of an `if ... else if ... else` block needs braces, all blocks will use braces
- Naming
- `interface` names begin with I and are `PascalCase`
- `private` variables begin with _ and are `camelCase`
- `private static` variables begin with s_ and are `camelCase`
- local variables are `camelCase`
- `async` function names end with Async
- all others are `PascalCase`
- Others
- Prefer `var` for declarations
- Prefer modern language enhancements (C#7, C#8 features)
- switch expressions
- range operator
- using statements
- `default` over `default(T)`
- Prefer conditional access `?.` and null coalescing `??` over null checks
- Prefer pattern matching
- Prefer expression bodies
- Avoid `this` qualifier
- `using` statements go outside namespace declaration and are sorted:
- `using System`
- `using System.*` alphabetically
- all others alphabetically
- Prefer explicit variable modifiers: `private`, `public`, `protected`
- Prefer `readonly` and `const` variables when appropriate
## Pull Requests
At this point, you've found the bug, fixed it, tested that the bug is gone, and you haven't broken anything else in the process.
Now it's time to share your code with everyone else so we can all enjoy a better version of the program.
Here's what you need to do to give your pull request the best chance at a timely review and maximize that it will be accepted.
- Make sure your code follows GitHub and Jackett's standards and practices.
- Your changes should be made in a new branch based on `master` not directly on your `master` branch
- Your commit messages should start with a capital letter, be in the singular imperative voice, and do not end with punctuation marks, e.g.:
- Fix login handling for xxx tracker
- Add feature yyy
- Remove dead tracker fff
- Run `dotnet format` from the Package Manager Console (found in `Tools -> NuGet Package Manager` or `View -> Other Windows`)
- If your branch falls out of sync and has merge conflicts with the Jackett official `master`
[rebase](https://mohitgoyal.co/2018/04/18/working-with-git-and-visual-studio-use-git-rebase-inside-visual-studio/) your fix before submission.
- If you deleted, moved, or renamed any files/folders, be sure to add the old file/folder path to the appropriate array in `Jacket.Updater/Program.cs`
- If you added or renamed a tracker, update the README to include the new name
- [Squash your local commits](https://github.com/spottedmahn/my-blog/issues/26)
- Push your commit branch to your fork on GitHub.
- Create your Pull Request
- You can do this from the GitHub website or from the GitHub window in Visual Studio.
- Give your Pull Request a descriptive title
- Include keywords like `[New Tracker]` or `[Feature]` at the beginning of the title
- Include any open tickets this Pull Request should fix in the description. **Do not** put ticket numbers in the title.
We will be by when we can to review your Pull Request.

View File

@@ -19,7 +19,7 @@ AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultDirName={commonappdata}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyOutputFilename}

453
README.md
View File

@@ -2,131 +2,187 @@
[![GitHub issues](https://img.shields.io/github/issues/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/pulls)
[![Build status](https://ci.appveyor.com/api/projects/status/gaybh5mvyx418nsp/branch/master?svg=true)](https://ci.appveyor.com/project/Jackett/jackett)
[![Github Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Build Status](https://dev.azure.com/Jackett-project/Jackett/_apis/build/status/Jackett.Jackett?branchName=master)](https://dev.azure.com/jackett/jackett/_build/latest?definitionId=1&branchName=master)
[![GitHub Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jackett.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/jackett/)
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60&style=flat-square)](https://discord.gg/J865QuA)
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), [Lidarr](https://github.com/lidarr/lidarr), [DuckieTV](https://github.com/SchizoDuckie/DuckieTV), [qBittorrent](https://www.qbittorrent.org/), [Nefarious](https://github.com/lardbit/nefarious) etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Please see our [troubleshooting and contributing guidelines](CONTRIBUTING.md) before submitting any issues or pull requests
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), [Lidarr](https://github.com/lidarr/lidarr), [DuckieTV](https://github.com/SchizoDuckie/DuckieTV), [qBittorrent](https://www.qbittorrent.org/), [Nefarious](https://github.com/lardbit/nefarious) etc.) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
#### Supported Systems
* Windows 7SP1 or greater using .NET 4.6.1 or above [Download here](https://www.microsoft.com/net/framework/versions/net461)
* Linux ([supported operating systems here](https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.md))
* macOS 10.12 or greater
* Windows 7SP1 or greater
* Linux [supported operating systems here](https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.md#linux)
* macOS 10.13 or greater
<details> <summary> <b> Supported Public Trackers </b> </summary>
### Supported Public Trackers
* 1337x
* 7torrents
* AcademicTorrents
* ACG.RIP
* ACGsou
* Anidex
* Anime Tosho
* AniRena
* AudioBook Bay (ABB)
* Badass Torrents
* BigFANGroup
* BitRu
* BitTorrent.AM
* BT.etree
* BTDB
* BTDIGG
* BTeye
* BTSOW
* Cili180
* ConCen
* Corsaro.red
* cpasbien
* cpasbienClone
* Demonoid
* DIGBT
* dmhy
* ETTV
* EliteTorrent.biz
* ExtraTorrent.ag
* EstrenosDTL
* ETTV
* EXT Torrents
* ExtraTorrent.cd
* EZTV
* Filebase
* FireBit
* Frozen Layer
* GamesTorrents
* GkTorrent
* GloDLS
* HDReactor
* Hon3yHD.net
* Horrible Subs
* IBit
* Idope
* Il CorSaRo Blu
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Il Corsaro Blu
* Internet Archive (archive.org)
* Isohunt2
* iTorrent
* KickAssTorrent (KATcr)
* KickAssTorrent (kat.li)
* KickAssTorrent (KATcr)
* Legit Torrents
* LePorno
* LimeTorrents
* LinuxTracker
* MacTorrents
* Magnet4You
* MagnetDL
* MejorTorrent <!-- maintained by ivandelabeldad -->
* MkvCage
* Monova
* MovCr
* MoviesDVDR
* MyPornClub
* Newpct (aka: tvsinpagar, descargas2020, torrentlocura, torrentrapid, tumejortorrent, pctnew, etc)
* Newstudio
* Nitro
* NNTT
* NoName Club (NNM-Club)
* Nyaa.si
* Nyaa-Pantsu
* Nyaa.si
* OneJAV
* OxTorrent
* ParnuXi
* PiratBit
* Pirateiro
* PornLeech
* PornoLive
* PornoRip
* PornoTor
* ProStyleX
* Rapidzona
* RARBG
* Rus-media
* RuTor
* RuTracker.RU
* Seedpeer
* shokweb
* ShowRSS
* SkyTorrentsClone
* SolidTorrents
* sukebei.Nyaa.si
* sosulki
* sukebei-Pantsu
* sukebei.Nyaa.si
* TFile
* The Pirate Bay (TPB)
* Tokyo Tosho
* TopNow
* Torlock
* TOROS
* Torrent Downloads (TD)
* TorrentFunk
* TorrentGalaxy (TGx)
* TorrentProject2
* TorrentQuest
* Torrents.csv
* TorrentWal
* Torrent Oyun indir
* torrent-pirat
* Torrent4You
* Torrent9
* Torrent9Clone
* TorrentDownload
* TorrentFunk
* TorrentGalaxy (TGx)
* TorrentKitty
* TorrentParadise
* TorrentProject2
* TorrentRex
* TorrentQuest
* Torrents.csv
* Torrentv
* TorrentView
* Torrentz2
* Underverse
* UnionDHT
* xxxtor
* YourBittorrent
* YTS.ag
* zetorrents
* Zooqle
</details>
<details> <summary> <b> Supported Semi-Private Trackers </b> </summary>
### Supported Semi-Private Trackers
* Alein
* AlexFilm
* AniDUB
* ArenaBG
* BaibaKo
* BookTracker
* CasStudioTV
* Crazy's Corner
* CzTorrent
* DXP (Deaf Experts)
* Deildu
* EniaHD
* Film-Paleis
* Erzsebet
* ExKinoRay
* ExtremlymTorrents
* FilmsClub
* Gay-Torrents.net
* Gay-Torrents.org
* HamsterStudio
* HD Dolby
* HamsterStudio
* IV-Torrents
* KinoNaVse100
* Kinozal
* Korsar
* LostFilm.tv
* Marine Tracker
* Metal Tracker
* MVGroup Forum
* MVGroup Main
* Marine Tracker
* Metal Tracker
* MuziekFrabriek
* NetHD (VietTorrent)
* PiratBit
* Pornolab
* RiperAM
* RockBox
* RuTracker
* Rustorka
* Sharewood
* SkTorrent
* SoundPark
@@ -135,17 +191,20 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Torrents-Local
* TribalMixes
* Union Fansub
* Vanila
* YggTorrent (YGG)
* Ztracker
</details>
<details> <summary> <b> Supported Private Trackers </b> </summary>
### Supported Private Trackers
* 0day.kiev
* 2 Fast 4 You
* 3D Torrents (3DT)
* 3D Torrents (3DT)
* 3evils
* 4thD (4th Dimension)
* 52PT
* 720pier
* AST4u
* Abnormal
* Acid Lounge (A-L)
* Aftershock
@@ -157,53 +216,57 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Araba Fenice (Phoenix)
* Asgaard (AG)
* AsianCinema
* AsianDVDClub
* AST4u
* Audiobook Torrents (ABT)
* AudioNews (AN)
* Awesome-HD (AHD)
* Audiobook Torrents (ABT)
* Avistaz (AsiaTorrents)
* Back-ups
* BakaBT
* BaconBits (bB)
* BeyondHD (BHD)
* Awesome-HD (AHD)
* BaibaKo
* BIGTorrent
* BigTower
* Bit-City Reloaded
* BIT-HDTV
* BiT-TiTAN
* Bithorlo (BHO)
* BitHUmen
* BitMe
* BitsPiracy
* Bitspyder
* BitTorrentFiles
* BitTurk
* BJ-Share (BJ)
* BlueBird
* Blutopia (BLU)
* BroadcastTheNet (BTN)
* BrokenStones
* BRObits
* BTGigs (TG)
* BTNext (BTNT)
* BTSCHOOL
* Carpathians
* CartoonChaos (CC)
* CasaTorrent
* Back-ups
* BaconBits (bB)
* BakaBT
* BeiTai
* BeyondHD (BHD)
* BiT-TiTAN
* Bibliotik
* BigTower
* Bit-City Reloaded
* BitHUmen
* BitTorrentFiles
* BitTurk
* Bithorlo (BHO)
* Bitspyder
* BlueBird
* Blutopia (BLU)
* Boxing Torrents
* Brasil Tracker
* BroadCity
* BroadcastTheNet (BTN)
* BrokenStones
* CCFBits
* CGPeers
* CHDBits
* Carpathians
* CartoonChaos (CC)
* CasaTorrent
* ChannelX
* CinemaMovies
* CinemaZ (EuTorrents)
* Cinemageddon
* Cinematik
* CinemaZ (EuTorrents)
* Classix
* Concertos
* CrazyHD
* CrazySpirits
* CrnaBerza
* DXDHD
* DanishBits (DB)
* Dark-Shadow
* Das Unerwartete
* DataScene (DS)
* DesiReleasers
@@ -212,211 +275,242 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* DigitalCore
* DigitalHive
* DivTeam
* DivxTotal
* DocumentaryTorrents (DT)
* Downloadville
* Dragonworld Reloaded
* DXDHD
* EbookParadijs
* Ebooks-Shares
* EfectoDoppler
* Elit Tracker (ET)
* Elite-Tracker
* Empornium (EMP)
* eShareNet
* eStone (XiDER, BeLoad)
* EpubLibre
* Ethor.net (Thor's Land)
* ExoticaZ (YourExotic)
* ExtremeTorrents
* FANO.IN
* FileList (FL)
* Fantastic Heaven
* FeedUrNeed (FuN)
* Femdomcult
* FileList (FL)
* Film-Paleis
* FinVip
* FocusX
* FreeTorrent
* FullMixMusic
* FunFile (FF)
* FunkyTorrents (FT)
* Fuzer (FZ)
* Galeriens (LaPauseTorrents)
* GAYtorrent.ru
* GFXPeers
* Galeriens (LaPauseTorrents)
* GazelleGames (GGn)
* Generation-Free
* GFXPeers
* GigaTorrents
* GimmePeers (formerly ILT) <!-- maintained by jamesb2147 -->
* GimmePeers (formerly ILT)
* GiroTorrent
* Greek Team
* HacheDe
* HD-Bits.com
* HD-Forever (HDF)
* HD-Olimpo
* HD-Only (HDO)
* HD-Space (HDS)
* HD-Spain
* HD-Torrents (HDT)
* HD-Bits.com
* HD4FANS
* HDArea (HDA)
* HDBits
* HDCenter
* HDChina (HDWing)
* HDCity
* HDDisk (HDD)
* HDHome (HDBigger)
* HDME
* HDRoute
* HDSky
* HDTime
* HDTorrents.it
* HDTurk
* HDU
* HDZone
* HQSource (HQS)
* HacheDe
* Hebits
* Hon3y HD
* HQSource (HQS)
* HuSh
* HuSh
* ICE Torrent
* IPTorrents (IPT)
* ImmortalSeed (iS)
* Immortuos
* inPeril
* Insane Tracker
* IPTorrents (IPT)
* JPopsuki
* Kapaki
* Karagarga
* LastFiles
* Le Saloon
* LeChaudron
* LeagueHD
* LearnFlakes
* LegacyHD (HD4Free)
* LibraNet (LN)
* LinkoManija
* LosslessClub
* M-Team TP (MTTP)
* Magico (Trellas)
* Majomparádé (TurkDepo)
* MicroBit (µBit)
* MMA-Torrents
* MoeCat
* Mononoké-BT
* MoreThanTV (MTV)
* Music-Master
* MyAnonamouse (MAM)
* myAmity
* MySpleen
* NBTorrents
* NCore
* Nebulance (NBL) (TransmiTheNet)
* NetCosmo
* NetLab
* New Real World
* Norbits
* NordicBits (NB)
* Nostalgic (The Archive)
* notwhat.cd
* Nostalgic (The Archive / VHSTAPES)
* OnlineSelfEducation
* Orpheus
* Ourbits (HDPter)
* P2PBG
* Passione Torrent <!-- maintained by bonny1992 -->
* P2PElite
* PT99
* PTFiles (PTF)
* PThome
* PWTorrents (PWT)
* Partis
* PassThePopcorn (PTP)
* Peers.FM
* PiXELHD (PxHD)
* PirateTheNet (PTN)
* PixelCove (Ultimate Gamer)
* PiXELHD (PxHD)
* Pleasuredome
* PolishSource (PS)
* PolishTracker
* PornBits (PB)
* Pornbay
* Pretome
* PrivateHD (PHD)
* ProAudioTorrents (PAT)
* Psytorrents
* PT99
* PTFiles (PTF)
* PThome
* PuntoTorrent
* PWTorrents (PWT)
* R3V WTF!
* RPTorrents
* Racing4Everyone (R4E)
* RacingForMe (RFM)
* RainbowNation Sharing (RNS)
* Redacted (PassTheHeadphones)
* Red Star Torrent (RST)
* Redacted (PassTheHeadphones)
* RetroFlix
* RevolutionTT
* RGU
* RoDVD (Cinefiles)
* Romanian Metal Torrent (RMT)
* RPTorrents
* SDBits
* SceneFZ
* SceneHD
* ScenePalace (SP)
* SceneRush
* SceneTime
* SDBits
* Secret Cinema
* SeedFile (SF)
* Shareisland
* ShareSpaceDB
* ShareUniversity
* Shareisland
* Shazbat
* Shellife (SL)
* SiamBIT
* SnowPT (SSPT)
* SpaceTorrent
* SpeedCD
* SpeedTorrent Reloaded
* Spirit of Revolution
* SportHD
* SportsCult
* SpringSunday
* SuperBits (SBS)
* TEKNO3D
* TLFBits
* TOrrent-tuRK (TORK)
* TTsWEB
* TV Chaos UK (TVCUK)
* TV-Vault
* TVstore
* TakeaByte
* Tapochek
* Tasmanit
* Tazmania-Den
* TeamHD
* TeamOS
* TEKNO3D
* TellyTorrent
* TenYardTorrents (TYT)
* TheAudioScene
* TheEmpire (TE)
* The Falling Angels (TFA)
* The Geeks
* The Horror Charnel (THC)
* The Movie Cave
* The New Retro
* The Occult
* The Place
* The Shinning (TsH)
* The Show
* The-Torrents
* The Vault
* The-Madhouse
* TheAudioScene
* TheEmpire (TE)
* ToTheGlory
* Torrent Network (TN)
* Torrent Sector Crew (TSC)
* Torrent-Syndikat
* Torrent.LT
* TorrentBD
* TorrentBytes (TBy)
* TorrentCCF (TCCF)
* TorrentDay (TD)
* Torrentech (TTH)
* TorrentHeaven
* TorrentFactory
* TorrentHR
* TorrentHeaven
* TorrentLeech (TL)
* TorrentLeech.pl
* TorrentSeeds (TS)
* Torrentech (TTH)
* Torrenting (TT)
* Torrentland
* TorrentLeech (TL)
* TorrentSeeds (TS)
* Torrent-Syndikat
* TOrrent-tuRK (TORK)
* TorViet (HDVNBits)
* TotallyKids (TK)
* ToTheGlory
* TranceTraffic
* Trezzor
* TurkTorrent (TT) [![(invite needed)][inviteneeded]](#)
* TV Chaos UK (TVCUK)
* TV-Vault
* TVstore
* TurkTorrent (TT)
* Twilight Torrents
* u-torrents (SceneFZ)
* Twilights Zoom
* U-Torrents
* U2 (U2分享園@動漫花園)
* UHDBits
* UnionGang
* UnlimitZ
* Vizuk
* Waffles
* WDT (Wrestling Desires Torrents / Ultimate Wrestling Torrents)
* World-In-HD
* World-of-Tomorrow
* x-ite.me (XM)
* xBytesV2
* XSpeeds (XS)
* XWT-Classics
* XWTorrents (XWT)
* Xthor
* XtremeFile
* XtreMeZone (MYXZ)
* ExoticaZ (YourExotic)
* XtremeFile
* Zamunda.net
* Zelka.org
* eShareNet
* eStone (XiDER, BeLoad)
* inPeril
* myAmity
* notwhat.cd
* u-torrents (SceneFZ)
* x-ite.me (XM)
* xBytesV2
</details>
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to garfieldsixtynine -at- gmail.com to get them fixed/improved.
### Aggregate indexers
@@ -426,12 +520,12 @@ It will query all configured indexers and return the combined results.
If your client supports multiple feeds it's recommended to add each indexer directly instead of using the all indexer.
Using the all indexer has no advantages (besides reduced management overhead), only disadvantages:
* you lose control over indexer specific settings (categories, search modes, etc.)
* mixing search modes (IMDB, query, etc.) might cause low quality results
* mixing search modes (IMDB, query, etc.) might cause low-quality results
* indexer specific categories (>= 100000) can't be used.
* slow indexers will slow down the overall result
* total results are limited to 1000
To get all Jackett indexers including their capabilities you can use `t=indexers` on the all indexer. To get only configured/unconfigured indexers you can also add `configured=true/false` as query parameter.
To get all Jackett indexers including their capabilities you can use `t=indexers` on the all indexer. To get only configured/unconfigured indexers you can also add `configured=true/false` as a query parameter.
## Installation on Windows
@@ -443,7 +537,7 @@ To get started with using the installer for Jackett, follow the steps below:
2. When prompted if you would like this app to make changes to your computer, select "yes".
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
4. Once the installation has finished, check the "Launch Jackett" box to get started.
5. Navigate your web browser to: http://127.0.0.1:9117
5. Navigate your web browser to http://127.0.0.1:9117
6. You're now ready to begin adding your trackers and using Jackett.
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
@@ -452,7 +546,7 @@ Jackett can also be run from the command line if you would like to see log messa
## Install on Linux (AMDx64)
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x#linux-distribution-dependencies
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://github.com/dotnet/core/blob/master/Documentation/linux-prereqs.md
### Install as service
1. Download and extract the latest `Jackett.Binaries.LinuxAMDx64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases)
@@ -462,21 +556,21 @@ On most operating systems all the required dependencies will already be present.
Download and extract the latest `Jackett.Binaries.LinuxAMDx64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases), open a Terminal, cd to the jackett folder and run Jackett with the command `./jackett`
### home directory
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
## Install on Linux (ARMv7 or above)
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x#linux-distribution-dependencies
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://github.com/dotnet/core/blob/master/Documentation/linux-prereqs.md
### Install as service
1. Download and extract the latest `Jackett.Binaries.LinuxARM32.tar.gz` or `Jackett.Binaries.LinuxARM64.tar.gz` (32 bit is the most common on ARM) release from the [releases page](https://github.com/Jackett/Jackett/releases)
1. Download and extract the latest `Jackett.Binaries.LinuxARM32.tar.gz` or `Jackett.Binaries.LinuxARM64.tar.gz` (32 bit is the most common on ARM) release from the [releases page](https://github.com/Jackett/Jackett/releases)
2. To install Jackett as a service, open a Terminal, cd to the jackett folder and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
### Run without installing as a service
Download and extract the latest `Jackett.Binaries.LinuxARM32.tar.gz` or `Jackett.Binaries.LinuxARM64.tar.gz` (32 bit is the most common on ARM) release from the [releases page](https://github.com/Jackett/Jackett/releases), open a Terminal, cd to the jackett folder and run Jackett with the command `./jackett`
### home directory
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
## Installation on Linux (ARMv6 or below)
@@ -484,13 +578,13 @@ If you want to run it with a user without a /home directory you need to add `Env
* Follow the instructions on the mono website and install the `mono-devel` and the `ca-certificates-mono` packages.
* On Red Hat/CentOS/openSUSE/Fedora the `mono-locale-extras` package is also required.
2. Install libcurl:
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
* Debian/Ubuntu: `apt-get install libcurl4-openssl-dev`
* Redhat/Fedora: `yum install libcurl-devel`
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
3. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono --debug JackettConsole.exe`.
4. (Optional) To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd_mono.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
Mono must be compiled with the Roslyn compiler (default), using MCS will cause "An error has occurred." errors (See https://github.com/Jackett/Jackett/issues/2704).
@@ -505,7 +599,7 @@ On an Ubuntu 16 system: [chrisjohnson00.jackett](https://galaxy.ansible.com/chri
## Installation on macOS
### Prerequisites
macOS 10.12 or greater
macOS 10.13 or greater
### Install as service
1. Download and extract the latest `Jackett.Binaries.macOS.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases).
@@ -518,16 +612,13 @@ Logs are stored as usual under `~/.config/Jackett/log.txt`.
### Run without installing as a service
Download and extract the latest `Jackett.Binaries.macOS.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`.
### upgrading from mono
If you were previously using the Mono flavour of Jackett then you should shutdown the service from a terminal with with the command `systemctl stop jackett.service` and then remove the startup script at `/etc/systemd/system/jackett.service` and delete the content of the `/Applications/Jackett` folder, prior to performing this install.
## Installation using Docker
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system e.g. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
## Installation on Synology
Jackett is available as beta package from [SynoCommunity](https://synocommunity.com/)
Jackett is available as a beta package from [SynoCommunity](https://synocommunity.com/)
## Running Jackett behind a reverse proxy
@@ -543,7 +634,7 @@ Example config for apache:
</Location>
```
Example config for nginx:
Example config for Nginx:
```
location /jackett {
proxy_pass http://127.0.0.1:9117;
@@ -555,91 +646,105 @@ location /jackett {
}
```
## Troubleshooting
* __Command line switches__
You can pass various options when running via the command line, see --help for details.
* __Error "An error occurred while sending the request: Error: TrustFailure (A call to SSPI failed, see inner exception.)"__
This is often caused by missing CA certificates.
Try reimporting the certificates in this case:
- On Linux (as user root): `wget -O - https://curl.haxx.se/ca/cacert.pem | cert-sync /dev/stdin`
- On macOS: `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
* __Enable enhanced logging__
You can get *enhanced* logging with the command line switches `-t -l` or by enabling `Enhanced logging` via the web interface (followed by clicking on the `Apply Server Settings` button).
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/macOS.
## Configuring OMDb
This feature is used as a fallback (when using the aggregate Indexer) to get the movie/series title if only the IMDB ID is provided in the request.
To use it, please just request a free API key on [OMDb](http://www.omdbapi.com/apikey.aspx) (1,000 daily requests limit) and paste the key in Jackett
## Creating an issue
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
## Command line switches
## Contributing
You can pass various options when running via the command line:
Jackett's framework typically allows our team and volunteering developers to implement new trackers in a couple of hours
<details> <summary> Command Line Switches </summary>
Depending on logic complexity, there are two common ways new trackers are implemented:
- `-i, --Install` Install Jackett windows service (Must be admin)
- `-s, --Start` Start the Jacket Windows service (Must be admin)
- `-k, --Stop` Stop the Jacket Windows service (Must be admin)
- `-u, --Uninstall` Uninstall Jackett windows service (Must be admin).
1. simple [definitions](http://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Definitions) (.yml / YAML), and;
2. advanced (native) [indexers](http://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Indexers) (.cs / C#)
- `-r, --ReserveUrls` (Re)Register windows port reservations (Required for
listening on all interfaces).
Read more about the [simple definition format](https://github.com/Jackett/Jackett/wiki/Definition-format).
- `-l, --Logging` Log all requests/responses to Jackett
If you are a developer then it's recommended to download the free community version of [Visual Studio](http://visualstudio.com)
- `-t, --Tracing` Enable tracing
If you are not a developer and would like a (new) tracker supported then feel free to leave an [issue](https://github.com/Jackett/Jackett/issues) request.
- `-c, --UseClient` Override web client selection.
[automatic(Default)/httpclient/httpclient2]
All contributions are welcome just send a pull request.
- `-j, --ProxyConnection` use proxy - e.g. 127.0.0.1:8888
- `-x, --ListenPublic` Listen publicly
- `-z, --ListenPrivate` Only allow local access
- `-p, --Port` Web server port
- `-m, --MigrateSettings` Migrate settings manually (Must be an admin on Windows)
- `-n, --IgnoreSslErrors` [true/false] Ignores invalid SSL certificates
- `-d, --DataFolder` Specify the location of the data folder (Must be an admin on Windows)
- e.g. --DataFolder="D:\Your Data\Jackett\".
- Don't use this on Unix (mono) systems. On Unix just adjust the HOME directory of the user to the datadir or set the XDG_CONFIG_HOME environment variable.
- `--NoRestart` Don't restart after update
- `--PIDFile` Specify the location of PID file
- `--NoUpdates` Disable automatic updates
- `--help` Display this help screen.
- `--version` Display version information.
</details>
## Building from source
### Windows
* Install the .NET Core [SDK](https://www.microsoft.com/net/download/windows)
* Clone Jackett
* Open Powershell and from the `src` directory, run `dotnet restore`
* Open the Jackett solution in Visual Studio 2019 (version 16.3 or above)
* Right click on the Jackett solution and click 'Rebuild Solution' to restore nuget packages
* Select Jackett.Server as startup project
* In the drop down menu of the run button select "Jackett.Server" instead of "IIS Express"
* Open PowerShell and from the `src` directory, run `dotnet restore`
* Open the Jackett solution in Visual Studio 2019 (version 16.4 or above)
* Right-click on the Jackett solution and click 'Rebuild Solution' to restore NuGet packages
* Select Jackett.Server as the startup project
* In the drop-down menu of the run button select "Jackett.Server" instead of "IIS Express"
* Build/Start the project
### OSX
```bash
# manually install osx dotnet via:
# manually install osx dotnet via:
https://dotnet.microsoft.com/download?initial-os=macos
# then:
# then:
git clone https://github.com/Jackett/Jackett.git
cd Jackett/src
# dotnet core version
dotnet publish Jackett.Server -f netcoreapp3.0 --self-contained -r osx-x64 -c Debug # takes care of everything
./Jackett.Server/bin/Debug/netcoreapp3.0/osx-x64/jackett # run jackett
dotnet publish Jackett.Server -f netcoreapp3.1 --self-contained -r osx-x64 -c Debug # takes care of everything
./Jackett.Server/bin/Debug/netcoreapp3.1/osx-x64/jackett # run jackett
```
### Linux
```bash
sudo apt install mono-complete nuget msbuild dotnet-sdk-3.0 # install build tools (debian/ubuntu)
sudo apt install mono-complete nuget msbuild dotnet-sdk-3.1 # install build tools (Debian/ubuntu)
git clone https://github.com/Jackett/Jackett.git
cd Jackett/src
# dotnet core version
dotnet publish Jackett.Server -f netcoreapp3.0 --self-contained -r linux-x64 -c Debug # takes care of everything
./Jackett.Server/bin/Debug/netcoreapp3.0/linux-x64/jackett # run jackett
dotnet publish Jackett.Server -f netcoreapp3.1 --self-contained -r linux-x64 -c Debug # takes care of everything
./Jackett.Server/bin/Debug/netcoreapp3.1/linux-x64/jackett # run jackett
```
## Screenshots
![screenshot](https://i.imgur.com/0d1nl7g.png "screenshot")
![screenshot](https://raw.githubusercontent.com/Jackett/Jackett/master/.github/jackett-screenshot1.png)
![screenshot](https://raw.githubusercontent.com/Jackett/Jackett/master/.github/jackett-screenshot2.png)
![screenshot](https://raw.githubusercontent.com/Jackett/Jackett/master/.github/jackett-screenshot3.png)
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png

View File

@@ -1,20 +1,20 @@
author "sea3pea0"
description "Upstart Script to run NzbDrone as a service on Ubuntu/Debian based systems, as well as others"
#Set username for the process. Should probably be what you use for logging in
setuid {username to run jackett}
setgid users
#This is the install directory. If you installed using a deb package or the NzbDrone Repository you do not need to change this
env DIR=/opt/Jackett
env LD_LIBRARY_PATH=/usr/local/nzbdrone/lib
start on runlevel [2345]
stop on runlevel [016]
respawn
script
chdir $DIR
exec /volume1/@appstore/Mono/usr/bin/mono --debug JackettConsole.exe
end script
author "sea3pea0"
description "Upstart Script to run NzbDrone as a service on Ubuntu/Debian based systems, as well as others"
#Set username for the process. Should probably be what you use for logging in
setuid {username to run jackett}
setgid users
#This is the install directory. If you installed using a deb package or the NzbDrone Repository you do not need to change this
env DIR=/opt/Jackett
env LD_LIBRARY_PATH=/usr/local/nzbdrone/lib
start on runlevel [2345]
stop on runlevel [016]
respawn
script
chdir $DIR
exec /volume1/@appstore/Mono/usr/bin/mono --debug JackettConsole.exe
end script

View File

@@ -1,46 +0,0 @@
version: 0.12.{build}
skip_tags: true
image:
- Ubuntu
- Visual Studio 2019
environment:
APPVEYOR_YML_DISABLE_PS_LINUX: true
configuration: Release
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '{version}'
assembly_file_version: '{version}'
assembly_informational_version: '{version}'
dotnet_csproj:
patch: true
file: '**\*.csproj'
version: '{version}'
package_version: '{version}'
assembly_version: '{version}'
file_version: '{version}'
informational_version: '{version}'
build_script:
- ps: .\build.ps1 --target=Windows-Appveyor
- sh: ./build.sh --target=Linux
test: off
before_deploy:
- ps: ${env:release_description} = ( Get-Content -LiteralPath BuildOutput/ReleaseNotes.txt -Encoding UTF8 ) -join "`n";
deploy:
- provider: GitHub
tag: v$(APPVEYOR_BUILD_VERSION)
description: $(release_description)
auth_token:
secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa
artifact: /^(?:(?![Ee]xperimental).)*$/
draft: true
force_update: true
on:
branch: master
notifications:
- provider: Webhook
url: https://skyhook.glitch.me/api/webhooks/346588605843767297/_VWi5abKliaWsBmQO7AX69tD28FhqSLjKyLBwkSwwT13uyWJQHx5TSWK_iAs-0RzmyvZ/appveyor
method: POST
on_build_success: true
on_build_failure: true
on_build_status_changed: true

398
azure-pipelines.yml Normal file
View File

@@ -0,0 +1,398 @@
name: $(majorVersion).$(minorVersion).$(patchVersion)
variables:
majorVersion: 0
minorVersion: 14
patchVersion: $[counter(variables['minorVersion'], 1)] #this will reset when we bump minor
jackettVersion: $(majorVersion).$(minorVersion).$(patchVersion)
buildConfiguration: Release
netCoreFramework: netcoreapp3.1
netCoreSdkVersion: 3.1.x
system.debug: true
pr:
autoCancel: true
trigger:
batch: true
stages:
- stage: BuildJackett
displayName: Create Binaries
jobs:
- job: Build
workspace:
clean: all
strategy:
matrix:
Mono:
buildDescription: Mono
imageName: ubuntu-latest
framework: net461
runtime: linux-x64
archiveType: tar
artifactName: Jackett.Binaries.Mono.tar.gz
Windows:
buildDescription: Windows
imageName: windows-latest
framework: $(netCoreFramework)
runtime: win-x86
archiveType: zip
artifactName: Jackett.Binaries.Windows.zip
macOS:
buildDescription: macOS
imageName: macOS-latest
framework: $(netCoreFramework)
runtime: osx-x64
archiveType: tar
artifactName: Jackett.Binaries.macOS.tar.gz
LinuxAmdx64:
buildDescription: Linux AMD x64
imageName: ubuntu-latest
framework: $(netCoreFramework)
runtime: linux-x64
archiveType: tar
artifactName: Jackett.Binaries.LinuxAMDx64.tar.gz
LinuxARM32:
buildDescription: Linux ARM32
imageName: ubuntu-latest
framework: $(netCoreFramework)
runtime: linux-arm
archiveType: tar
artifactName: Jackett.Binaries.LinuxARM32.tar.gz
LinuxARM64:
buildDescription: Linux ARM64
imageName: ubuntu-latest
framework: $(netCoreFramework)
runtime: linux-arm64
archiveType: tar
artifactName: Jackett.Binaries.LinuxARM64.tar.gz
pool:
vmImage: $(imageName)
displayName: ${{ variables.buildDescription }}
steps:
- checkout: self
- task: UseDotNet@2
displayName: Install .NET Core SDK
inputs:
packageType: sdk
version: $(netCoreSdkVersion)
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: DotNetCoreCLI@2
displayName: Build Jackett Server
inputs:
command: publish
projects: 'src/Jackett.Server/Jackett.Server.csproj'
publishWebProjects: false
zipAfterPublish: false
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task: DotNetCoreCLI@2
displayName: Build Jackett Updater
inputs:
command: publish
projects: 'src/Jackett.Updater/Jackett.Updater.csproj'
publishWebProjects: false
zipAfterPublish: false
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task: DotNetCoreCLI@2
displayName: Build Jackett Tray (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
command: publish
projects: 'src/Jackett.Tray/Jackett.Tray.csproj'
publishWebProjects: false
zipAfterPublish: false
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task: DotNetCoreCLI@2
displayName: Build Jackett Service (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
command: publish
projects: 'src/Jackett.Service/Jackett.Service.csproj'
publishWebProjects: false
zipAfterPublish: false
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework) --output $(Build.BinariesDirectory) /p:AssemblyVersion=$(jackettVersion) /p:FileVersion=$(jackettVersion) /p:InformationalVersion=$(jackettVersion) /p:Version=$(jackettVersion)'
- task: CopyFiles@2
displayName: Copy Jackett Server
inputs:
SourceFolder: $(Build.BinariesDirectory)/Jackett.Server
contents: '**'
targetFolder: $(Build.BinariesDirectory)/Jackett
- task: CopyFiles@2
displayName: Copy Jackett Updater
inputs:
SourceFolder: $(Build.BinariesDirectory)/Jackett.Updater
contents: JackettUpdater*
targetFolder: $(Build.BinariesDirectory)/Jackett
- task: CopyFiles@2
displayName: Copy Jackett Tray (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
SourceFolder: $(Build.BinariesDirectory)/Jackett.Tray
contents: |
System.Drawing.dll
System.Security.Cryptography.ProtectedData.dll
WindowsBase.dll
targetFolder: $(Build.BinariesDirectory)/Jackett
overWrite: true
- task: CopyFiles@2
displayName: Copy Jackett Tray Part 2 (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
SourceFolder: $(Build.BinariesDirectory)/Jackett.Tray
contents: '*'
targetFolder: $(Build.BinariesDirectory)/Jackett
overWrite: false
- task: CopyFiles@2
displayName: Copy Jackett Service (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
SourceFolder: $(Build.BinariesDirectory)/Jackett.Service
contents: JackettService*
targetFolder: $(Build.BinariesDirectory)/Jackett
- task: CopyFiles@2
displayName: Copy Mono Specific Scripts
condition: and(succeeded(), startsWith(variables['buildDescription'], 'Mono'))
inputs:
SourceFolder: $(Build.SourcesDirectory)
contents: |
install_service_systemd_mono.sh
Upstart.config
targetFolder: $(Build.BinariesDirectory)/Jackett
- task: CopyFiles@2
displayName: Copy macOS Specific Scripts
condition: and(succeeded(), startsWith(variables['buildDescription'], 'macOS'))
inputs:
SourceFolder: $(Build.SourcesDirectory)
contents: install_service_macos
targetFolder: $(Build.BinariesDirectory)/Jackett
- task: CopyFiles@2
displayName: Copy Linux Specific Scripts
condition: and(succeeded(), startsWith(variables['buildDescription'], 'Linux'))
inputs:
SourceFolder: $(Build.SourcesDirectory)
contents: |
install_service_systemd.sh
jackett_launcher.sh
targetFolder: $(Build.BinariesDirectory)/Jackett
#There is an issue with Mono 5.8 (fixed in Mono 5.12) where its expecting to use its own patched version of System.Net.Http.dll, instead of the version supplied in folder
#https://github.com/dotnet/corefx/issues/19914
#https://bugzilla.xamarin.com/show_bug.cgi?id=60315
#The workaround is to delete System.Net.Http.dll and patch the .exe.config file
#Mono on FreeBSD doesn't like the bundled System.Runtime.InteropServices.RuntimeInformation -> Delete it
#https://github.com/dotnet/corefx/issues/23989
#https://github.com/Jackett/Jackett/issues/3547
- task: PowerShell@2
displayName: Patch Mono Build (Mono only)
condition: and(succeeded(), startsWith(variables['buildDescription'], 'Mono'))
inputs:
workingDirectory: $(Build.BinariesDirectory)/Jackett
targetType: inline
script: |
$file = '$(Build.BinariesDirectory)/Jackett/JackettConsole.exe.config'
$xml = [xml] (Get-Content $file)
$newVersion = $xml.SelectSingleNode("configuration/runtime/*[name()='assemblyBinding']/*[name()='dependentAssembly']/*[name()='assemblyIdentity'][@name='System.Net.Http']/../*[name()='bindingRedirect']/@newVersion")
$newVersion.Value = '4.0.0.0'
$xml.Save($file)
Remove-Item '$(Build.BinariesDirectory)/Jackett/System.Net.Http.dll'
Remove-Item '$(Build.BinariesDirectory)/Jackett/System.Runtime.InteropServices.RuntimeInformation.dll'
- task: Bash@3
displayName: Set Folder and File Permissions (Mono, Linux and macOS)
condition: and(succeeded(), not(startsWith(variables['runtime'], 'win')))
inputs:
workingDirectory: $(Build.BinariesDirectory)/Jackett
targetType: inline
script: |
chmod 755 $(find "$(Build.BinariesDirectory)"/Jackett -type d)
chmod 644 $(find "$(Build.BinariesDirectory)"/Jackett -type f)
chmod 755 jackett
chmod 755 JackettUpdater
if [ -f install_service_systemd_mono.sh ]; then chmod 755 install_service_systemd_mono.sh; fi
if [ -f install_service_macos ]; then chmod 755 install_service_macos; fi
if [ -f install_service_systemd.sh ]; then chmod 755 install_service_systemd.sh; fi
if [ -f jackett_launcher.sh ]; then chmod 755 jackett_launcher.sh; fi
- task: ArchiveFiles@2
displayName: Compress Binaries
inputs:
rootFolderOrFile: $(Build.BinariesDirectory)/Jackett
includeRootFolder: true
archiveType: '$(archiveType)'
tarCompression: gz
archiveFile: '$(Build.ArtifactStagingDirectory)/$(artifactName)'
- task: CmdLine@2
displayName: Create Jackett Installer (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
script: >
iscc.exe $(Build.SourcesDirectory)/Installer.iss
/O"$(Build.ArtifactStagingDirectory)"
/DMyFileForVersion=$(Build.BinariesDirectory)/Jackett/Jackett.Common.dll
/DMySourceFolder=$(Build.BinariesDirectory)/Jackett
/DMyOutputFilename=Jackett.Installer.Windows
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
- task: DotNetCoreCLI@2
displayName: Unit Tests (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
command: test
projects: '**/*.Test*/*.csproj'
arguments: '--configuration $(buildConfiguration) --framework $(framework)'
- task: DotNetCoreCLI@2
displayName: Unit Tests (Mono, Linux and macOS)
condition: and(succeeded(), not(startsWith(variables['runtime'], 'win')))
inputs:
command: test
projects: '**/*.Test*/*.csproj'
arguments: '--configuration $(buildConfiguration) --framework $(framework) --runtime $(runtime)'
- stage: Integration
displayName: Integration Tests
dependsOn: BuildJackett
jobs:
- job: Selenium
workspace:
clean: all
strategy:
matrix:
Mono:
buildDescription: Mono
imageName: ubuntu-latest
artifactName: Jackett.Binaries.Mono.tar.gz
Windows:
buildDescription: Windows
imageName: windows-latest
artifactName: Jackett.Binaries.Windows.zip
# Enable once ChromeDriver is deployed to macOS image https://github.com/actions/virtual-environments/issues/7
# macOS:
# buildDescription: macOS
# imageName: macOS-latest
# artifactName: Jackett.Binaries.macOS.tar.gz
LinuxAmdx64:
buildDescription: Linux AMD x64
imageName: ubuntu-latest
artifactName: Jackett.Binaries.LinuxAMDx64.tar.gz
pool:
vmImage: $(imageName)
displayName: ${{ variables.buildDescription }}
steps:
- checkout: self
- task: DownloadPipelineArtifact@2
displayName: Download artifacts for integration tests
inputs:
patterns: '**/Jackett*'
path: $(Build.ArtifactStagingDirectory)
- task: PowerShell@2
displayName: Install Jackett (Windows only)
condition: and(succeeded(), eq(variables['buildDescription'], 'Windows'))
inputs:
workingDirectory: $(Build.ArtifactStagingDirectory)/drop
targetType: inline
script: |
Start-Process ./Jackett.Installer.Windows.exe /silent -NoNewWindow -Wait
- task: Bash@3
displayName: Install Jackett (Mono, Linux and macOS)
condition: and(succeeded(), ne(variables['buildDescription'], 'Windows'))
inputs:
workingDirectory: $(Build.ArtifactStagingDirectory)/drop
targetType: inline
script: |
tar xzf "$(artifactName)"
cd Jackett
if [[ "$(artifactName)" == *"Mono"* ]]; then mono --version; fi
if [[ "$(artifactName)" == *"Mono"* ]]; then sudo ./install_service_systemd_mono.sh; fi
if [[ "$(artifactName)" == *"macOS"* ]]; then sudo ./install_service_macos; fi
if [[ "$(artifactName)" == *"LinuxAMDx64"* ]]; then sudo ./install_service_systemd.sh; fi
- task: UseDotNet@2
displayName: Install .NET Core SDK
inputs:
packageType: sdk
version: $(netCoreSdkVersion)
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: DotNetCoreCLI@2
displayName: Run Integration Tests
inputs:
command: test
projects: '**/*IntegrationTest*/*.csproj'
- stage: PublishGithub
displayName: Publish to Github
dependsOn: Integration
condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
jobs:
- job: Publish
workspace:
clean: all
steps:
- checkout: self
- task: DownloadPipelineArtifact@2
displayName: Download Artifacts for Publish
inputs:
patterns: '**/Jackett*'
path: $(Build.ArtifactStagingDirectory)
- task: GitHubRelease@1
displayName: Create Github release
inputs:
gitHubConnection: github.com_jackett
repositoryName: '$(Build.Repository.Name)'
action: create
target: $(Build.SourceVersion)
tagSource: userSpecifiedTag
tag: v$(Build.BuildNumber)
title: v$(Build.BuildNumber)
assets: $(Build.ArtifactStagingDirectory)/drop/*
assetUploadMode: replace
isDraft: true
addChangeLog: true
compareWith: lastNonDraftRelease
- task: PowerShell@2
displayName: Ensure all artifacts are uploaded to Github
inputs:
targetType: inline
script: |
$json = Invoke-WebRequest 'https://dev.azure.com/jackett/jackett/_apis/build/builds/$(Build.BuildId)/logs?api-version=5.0' | ConvertFrom-Json
$lastTwoLogUrls = $json.value[-1..-2].url
foreach($logUrl in $lastTwoLogUrls)
{
Write-Output $logUrl
$logText = Invoke-WebRequest $logUrl
if ($logText -like '*Creating a release for tag:*')
{
$logInspect = ($logText -split "Creating a release for tag:")[-1]
$successCount = (Select-String "Uploaded file successfully:" -InputObject $logInspect -AllMatches).Matches.Count
$failureCount = (Select-String "Duplicate asset found:" -InputObject $logInspect -AllMatches).Matches.Count
Write-Output "Success count is: $successCount and failure count is: $failureCount"
if (($successCount -ne 7) -or ($failureCount -ne 0)) { Write-Host "##vso[task.complete result=Failed;]DONE" }
}
}

View File

@@ -1,522 +0,0 @@
#tool nuget:?package=NUnit.ConsoleRunner
#addin nuget:?package=Cake.Git
//////////////////////////////////////////////////////////////////////
// ARGUMENTS
//////////////////////////////////////////////////////////////////////
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Debug");
//////////////////////////////////////////////////////////////////////
// PREPARATION
//////////////////////////////////////////////////////////////////////
// Define directories.
var workingDir = MakeAbsolute(Directory("./"));
string artifactsDirName = "Artifacts";
string testResultsDirName = "TestResults";
string netCoreFramework = "netcoreapp3.0";
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string updaterProjectPath = "./src/Jackett.Updater/Jackett.Updater.csproj";
//////////////////////////////////////////////////////////////////////
// TASKS
//////////////////////////////////////////////////////////////////////
Task("Info")
.Does(() =>
{
Information(@"Jackett Cake build script starting...");
Information(@"Requires InnoSetup and C:\msys64 to be present for packaging (Pre-installed on AppVeyor) on Windows");
Information(@"Working directory is: " + workingDir);
if (IsRunningOnWindows())
{
Information("Platform is Windows");
}
else
{
Information("Platform is Linux, Windows builds will be skipped");
}
});
Task("Clean")
.IsDependentOn("Info")
.Does(() =>
{
CleanDirectories("./src/**/obj");
CleanDirectories("./src/**/bin");
CleanDirectories("./BuildOutput");
CleanDirectories("./" + artifactsDirName);
CleanDirectories("./" + testResultsDirName);
CreateDirectory("./" + artifactsDirName);
Information("Clean completed");
});
Task("Build-Full-Framework")
.IsDependentOn("Clean")
.Does(() =>
{
NuGetRestore("./src/Jackett.sln");
var buildSettings = new MSBuildSettings()
.SetConfiguration(configuration)
.UseToolVersion(MSBuildToolVersion.VS2019);
MSBuild("./src/Jackett.sln", buildSettings);
});
Task("Run-Unit-Tests")
.IsDependentOn("Build-Full-Framework")
.Does(() =>
{
CreateDirectory("./" + testResultsDirName);
var resultsFile = $"./{testResultsDirName}/JackettTestResult.xml";
NUnit3("./src/**/bin/" + configuration + "/**/*.Test.dll", new NUnit3Settings
{
Results = new[] { new NUnit3Result { FileName = resultsFile } }
});
if (AppVeyor.IsRunningOnAppVeyor && IsRunningOnWindows())
{
AppVeyor.UploadTestResults(resultsFile, AppVeyorTestResultsType.NUnit3);
}
});
Task("Package-Windows-Full-Framework")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
string buildOutputPath = "./BuildOutput/net461/win7-x86/Jackett";
DotNetCorePublish(serverProjectPath, "net461", "win7-x86", buildOutputPath);
CopyFiles("./src/Jackett.Service/bin/" + configuration + "/JackettService.*", buildOutputPath);
CopyFiles("./src/Jackett.Tray/bin/" + configuration + "/JackettTray.*", buildOutputPath);
CopyFiles("./src/Jackett.Updater/bin/" + configuration + "/net461" + "/JackettUpdater.*", buildOutputPath); //builds against multiple frameworks
Zip("./BuildOutput/net461/win7-x86", $"./{artifactsDirName}/Jackett.Binaries.Windows.zip");
//InnoSetup
string sourceFolder = MakeAbsolute(Directory(buildOutputPath)).ToString();
InnoSetupSettings settings = new InnoSetupSettings();
settings.OutputDirectory = workingDir + "/" + artifactsDirName;
//Can remove below line once Cake is updated for InnoSetup 6 - https://github.com/cake-build/cake/pull/2565
settings.ToolPath = @"C:\Program Files (x86)\Inno Setup 6\ISCC.exe";
settings.Defines = new Dictionary<string, string>
{
{ "MyFileForVersion", sourceFolder + "/Jackett.Common.dll" },
{ "MySourceFolder", sourceFolder },
{ "MyOutputFilename", "Jackett.Installer.Windows" },
};
InnoSetup("./Installer.iss", settings);
});
Task("Package-Mono-Full-Framework")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
string buildOutputPath = "./BuildOutput/net461/linux-x64/Jackett";
DotNetCorePublish(serverProjectPath, "net461", "linux-x64", buildOutputPath);
CopyFiles("./src/Jackett.Updater/bin/" + configuration + "/net461" + "/JackettUpdater.*", buildOutputPath); //builds against multiple frameworks
CopyFileToDirectory("./install_service_systemd_mono.sh", buildOutputPath);
CopyFileToDirectory("./Upstart.config", buildOutputPath);
//There is an issue with Mono 5.8 (fixed in Mono 5.12) where its expecting to use its own patched version of System.Net.Http.dll, instead of the version supplied in folder
//https://github.com/dotnet/corefx/issues/19914
//https://bugzilla.xamarin.com/show_bug.cgi?id=60315
//The workaround is to delete System.Net.Http.dll and patch the .exe.config file
DeleteFile(buildOutputPath + "/System.Net.Http.dll");
var configFile = File(buildOutputPath + "/JackettConsole.exe.config");
XmlPoke(configFile, "configuration/runtime/*[name()='assemblyBinding']/*[name()='dependentAssembly']/*[name()='assemblyIdentity'][@name='System.Net.Http']/../*[name()='bindingRedirect']/@newVersion", "4.0.0.0");
//Mono on FreeBSD doesn't like the bundled System.Runtime.InteropServices.RuntimeInformation
//https://github.com/dotnet/corefx/issues/23989
//https://github.com/Jackett/Jackett/issues/3547
DeleteFile(buildOutputPath + "/System.Runtime.InteropServices.RuntimeInformation.dll");
InstallMsysTar();
Gzip("./BuildOutput/net461/linux-x64", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.Mono.tar.gz");
});
Task("Package-DotNetCore-macOS")
.IsDependentOn("Clean")
.Does(() =>
{
string runtimeId = "osx-x64";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
CopyFileToDirectory("./install_service_macos", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.macOS.tar.gz");
});
Task("Package-DotNetCore-LinuxAMDx64")
.IsDependentOn("Clean")
.Does(() =>
{
string runtimeId = "linux-x64";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./jackett_launcher.sh", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.LinuxAMDx64.tar.gz");
});
Task("Package-DotNetCore-LinuxARM32")
.IsDependentOn("Clean")
.Does(() =>
{
string runtimeId = "linux-arm";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./jackett_launcher.sh", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.LinuxARM32.tar.gz");
});
Task("Package-DotNetCore-LinuxARM64")
.IsDependentOn("Clean")
.Does(() =>
{
string runtimeId = "linux-arm64";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./jackett_launcher.sh", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.LinuxARM64.tar.gz");
});
Task("Appveyor-Push-Artifacts")
.IsDependentOn("Clean")
.Does(() =>
{
if (AppVeyor.IsRunningOnAppVeyor)
{
foreach (var file in GetFiles(workingDir + $"/{artifactsDirName}/*"))
{
AppVeyor.UploadArtifact(file.FullPath);
}
}
else
{
Information(@"Skipping artifact push as not running in AppVeyor Windows Environment");
}
});
Task("Release-Notes")
.IsDependentOn("Clean")
.Does(() =>
{
string latestTag = GitDescribe(".", false, GitDescribeStrategy.Tags, 0);
Information($"Latest tag is: {latestTag}" + Environment.NewLine);
List<GitCommit> relevantCommits = new List<GitCommit>();
var commitCollection = GitLog("./", 50);
foreach(GitCommit commit in commitCollection)
{
var commitTag = GitDescribe(".", commit.Sha, false, GitDescribeStrategy.Tags, 0);
if (commitTag == latestTag)
{
relevantCommits.Add(commit);
}
else
{
break;
}
}
relevantCommits = relevantCommits.AsEnumerable().Reverse().Skip(1).ToList();
if (relevantCommits.Count() > 0)
{
List<string> notesList = new List<string>();
foreach(GitCommit commit in relevantCommits)
{
notesList.Add($"{commit.MessageShort} (Thank you @{commit.Author.Name})");
}
string buildNote = String.Join(Environment.NewLine, notesList);
Information(buildNote);
System.IO.File.WriteAllLines(workingDir + "/BuildOutput/ReleaseNotes.txt", notesList.ToArray());
}
else
{
Information($"No commit messages found to create release notes");
}
});
Task("Windows-Environment-Dev")
.IsDependentOn("Package-Windows-Full-Framework")
.IsDependentOn("Package-Mono-Full-Framework")
.IsDependentOn("Package-DotNetCore-macOS")
.IsDependentOn("Package-DotNetCore-LinuxAMDx64")
.IsDependentOn("Package-DotNetCore-LinuxARM32")
.IsDependentOn("Package-DotNetCore-LinuxARM64")
.IsDependentOn("Appveyor-Push-Artifacts")
.IsDependentOn("Release-Notes")
.Does(() =>
{
Information("Windows-Environment Task Completed");
});
Task("Windows-Environment-Appveyor")
.IsDependentOn("Package-Windows-Full-Framework")
.IsDependentOn("Package-Mono-Full-Framework")
.IsDependentOn("Appveyor-Push-Artifacts")
.IsDependentOn("Release-Notes")
.Does(() =>
{
Information("Windows-Environment Task Completed");
});
Task("Linux-Environment")
.IsDependentOn("Package-DotNetCore-macOS")
.IsDependentOn("Package-DotNetCore-LinuxAMDx64")
.IsDependentOn("Package-DotNetCore-LinuxARM32")
.IsDependentOn("Package-DotNetCore-LinuxARM64")
.IsDependentOn("Appveyor-Push-Artifacts")
.IsDependentOn("Release-Notes")
.Does(() =>
{
Information("Linux-Environment Task Completed");
});
private void RunMsysCommand(string utility, string utilityArguments)
{
var msysDir = @"C:\msys64\usr\bin\";
var utilityProcess = msysDir + utility + ".exe";
Information("MSYS2 Utility: " + utility);
Information("MSYS2 Directory: " + msysDir);
Information("Utility Location: " + utilityProcess);
Information("Utility Arguments: " + utilityArguments);
IEnumerable<string> redirectedStandardOutput;
IEnumerable<string> redirectedErrorOutput;
var exitCodeWithArgument =
StartProcess(
utilityProcess,
new ProcessSettings {
Arguments = utilityArguments,
WorkingDirectory = msysDir,
RedirectStandardOutput = true
},
out redirectedStandardOutput,
out redirectedErrorOutput
);
Information(utility + " output:" + Environment.NewLine + string.Join(Environment.NewLine, redirectedStandardOutput.ToArray()));
// Throw exception if anything was written to the standard error.
if (redirectedErrorOutput != null && redirectedErrorOutput.Any())
{
throw new Exception(
string.Format(
utility + " Errors ocurred: {0}",
string.Join(", ", redirectedErrorOutput)));
}
Information(utility + " Exit code: {0}", exitCodeWithArgument);
}
private string RelativeWinPathToFullPath(string relativePath)
{
return (workingDir + relativePath.TrimStart('.'));
}
private void RunLinuxCommand(string file, string arg)
{
var startInfo = new System.Diagnostics.ProcessStartInfo()
{
Arguments = arg,
FileName = file,
UseShellExecute = true
};
var process = System.Diagnostics.Process.Start(startInfo);
process.WaitForExit();
}
private void Gzip(string sourceFolder, string outputDirectory, string tarCdirectoryOption, string outputFileName)
{
var tarFileName = outputFileName.Remove(outputFileName.Length - 3, 3);
if (IsRunningOnWindows())
{
var fullSourcePath = RelativeWinPathToFullPath(sourceFolder);
var tarArguments = @"--force-local -cvf " + fullSourcePath + "/" + tarFileName + " -C " + fullSourcePath + $" {tarCdirectoryOption} --mode ='755'";
var gzipArguments = @"-k " + fullSourcePath + "/" + tarFileName;
RunMsysCommand("tar", tarArguments);
RunMsysCommand("gzip", gzipArguments);
MoveFile($"{sourceFolder}/{tarFileName}.gz", $"{outputDirectory}/{tarFileName}.gz");
}
else
{
RunLinuxCommand("find", MakeAbsolute(Directory(sourceFolder)) + @" -type d -exec chmod 755 {} \;");
RunLinuxCommand("find", MakeAbsolute(Directory(sourceFolder)) + @" -type f -exec chmod 644 {} \;");
RunLinuxCommand("chmod", $"755 {MakeAbsolute(Directory(sourceFolder))}/Jackett/jackett");
RunLinuxCommand("chmod", $"755 {MakeAbsolute(Directory(sourceFolder))}/Jackett/JackettUpdater");
string macOsServiceScript = MakeAbsolute(Directory(sourceFolder)) + "/Jackett/install_service_macos";
if (FileExists(macOsServiceScript))
{
RunLinuxCommand("chmod", $"755 {macOsServiceScript}");
}
string systemdMonoScript = MakeAbsolute(Directory(sourceFolder)) + "/Jackett/install_service_systemd_mono.sh";
if (FileExists(systemdMonoScript))
{
RunLinuxCommand("chmod", $"755 {systemdMonoScript}");
}
string systemdScript = MakeAbsolute(Directory(sourceFolder)) + "/Jackett/install_service_systemd.sh";
if (FileExists(systemdScript))
{
RunLinuxCommand("chmod", $"755 {systemdScript}");
}
string launcherScript = MakeAbsolute(Directory(sourceFolder)) + "/Jackett/jackett_launcher.sh";
if (FileExists(launcherScript))
{
RunLinuxCommand("chmod", $"755 {launcherScript}");
}
RunLinuxCommand("tar", $"-C {sourceFolder} -zcvf {outputDirectory}/{tarFileName}.gz {tarCdirectoryOption}");
}
}
private void InstallMsysTar()
{
//Gzip is included by default with MSYS2, but not tar. Use the package manager to install tar
var startInfo = new System.Diagnostics.ProcessStartInfo()
{
Arguments = "-S --noconfirm tar",
FileName = @"C:\msys64\usr\bin\pacman.exe",
UseShellExecute = false
};
var process = System.Diagnostics.Process.Start(startInfo);
process.WaitForExit();
if (FileExists(@"C:\msys64\usr\bin\tar.exe") && FileExists(@"C:\msys64\usr\bin\gzip.exe"))
{
Information("tar.exe and gzip.exe were found");
}
else
{
throw new Exception("tar.exe and gzip.exe were NOT found");
}
}
private void DotNetCorePublish(string projectPath, string framework, string runtime, string outputPath)
{
bool publishSingleFile = false;
if (publishSingleFile && framework != "net461")
{
var settings = new DotNetCorePublishSettings
{
Framework = framework,
Runtime = runtime,
OutputDirectory = outputPath,
ArgumentCustomization = args=>args.Append("/p:PublishSingleFile=true")
};
DotNetCorePublish(projectPath, settings);
}
else
{
var settings = new DotNetCorePublishSettings
{
Framework = framework,
Runtime = runtime,
OutputDirectory = outputPath
};
DotNetCorePublish(projectPath, settings);
}
}
//////////////////////////////////////////////////////////////////////
// TASK TARGETS
//////////////////////////////////////////////////////////////////////
Task("Default")
.IsDependentOn("Windows-Environment-Dev")
.Does(() =>
{
Information("Default Task Completed");
});
Task("Windows-Appveyor")
.IsDependentOn("Windows-Environment-Appveyor")
.Does(() =>
{
Information("Windows Appveyor Task Completed");
});
Task("Linux")
.IsDependentOn("Linux-Environment")
.Does(() =>
{
Information("Linux Task Completed");
});
//////////////////////////////////////////////////////////////////////
// EXECUTION
//////////////////////////////////////////////////////////////////////
RunTarget(target);

242
build.ps1
View File

@@ -1,242 +0,0 @@
##########################################################################
# This is the Cake bootstrapper script for PowerShell.
# This file was downloaded from https://github.com/cake-build/resources
# Feel free to change this file to fit your needs.
##########################################################################
<#
.SYNOPSIS
This is a Powershell script to bootstrap a Cake build.
.DESCRIPTION
This Powershell script will download NuGet if missing, restore NuGet tools (including Cake)
and execute your Cake build script with the parameters you provide.
.PARAMETER Script
The build script to execute.
.PARAMETER Target
The build script target to run.
.PARAMETER Configuration
The build configuration to use.
.PARAMETER Verbosity
Specifies the amount of information to be displayed.
.PARAMETER ShowDescription
Shows description about tasks.
.PARAMETER DryRun
Performs a dry run.
.PARAMETER SkipToolPackageRestore
Skips restoring of packages.
.PARAMETER ScriptArgs
Remaining arguments are added here.
.LINK
https://cakebuild.net
#>
[CmdletBinding()]
Param(
[string]$Script = "build.cake",
[string]$Target,
[string]$Configuration,
[ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")]
[string]$Verbosity,
[switch]$ShowDescription,
[Alias("WhatIf", "Noop")]
[switch]$DryRun,
[switch]$SkipToolPackageRestore,
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
[string[]]$ScriptArgs
)
# Attempt to set highest encryption available for SecurityProtocol.
# PowerShell will not set this by default (until maybe .NET 4.6.x). This
# will typically produce a message for PowerShell v2 (just an info
# message though)
try {
# Set TLS 1.2 (3072), then TLS 1.1 (768), then TLS 1.0 (192), finally SSL 3.0 (48)
# Use integers because the enumeration values for TLS 1.2 and TLS 1.1 won't
# exist in .NET 4.0, even though they are addressable if .NET 4.5+ is
# installed (.NET 4.5 is an in-place upgrade).
[System.Net.ServicePointManager]::SecurityProtocol = 3072 -bor 768 -bor 192 -bor 48
} catch {
Write-Output 'Unable to set PowerShell to use TLS 1.2 and TLS 1.1 due to old .NET Framework installed. If you see underlying connection closed or trust errors, you may need to upgrade to .NET Framework 4.5+ and PowerShell v3'
}
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
function MD5HashFile([string] $filePath)
{
if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf))
{
return $null
}
[System.IO.Stream] $file = $null;
[System.Security.Cryptography.MD5] $md5 = $null;
try
{
$md5 = [System.Security.Cryptography.MD5]::Create()
$file = [System.IO.File]::OpenRead($filePath)
return [System.BitConverter]::ToString($md5.ComputeHash($file))
}
finally
{
if ($file -ne $null)
{
$file.Dispose()
}
}
}
function GetProxyEnabledWebClient
{
$wc = New-Object System.Net.WebClient
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$wc.Proxy = $proxy
return $wc
}
Write-Host "Preparing to run build script..."
if(!$PSScriptRoot){
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
}
$TOOLS_DIR = Join-Path $PSScriptRoot "tools"
$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins"
$MODULES_DIR = Join-Path $TOOLS_DIR "Modules"
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe"
$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe"
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config"
$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum"
$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config"
$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config"
# Make sure tools folder exists
if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
Write-Verbose -Message "Creating tools directory..."
New-Item -Path $TOOLS_DIR -Type directory | out-null
}
# Make sure that packages.config exist.
if (!(Test-Path $PACKAGES_CONFIG)) {
Write-Verbose -Message "Downloading packages.config..."
try {
$wc = GetProxyEnabledWebClient
$wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG)
} catch {
Throw "Could not download packages.config."
}
}
# Try find NuGet.exe in path if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Trying to find nuget.exe in PATH..."
$existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) }
$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1
if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) {
Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)."
$NUGET_EXE = $NUGET_EXE_IN_PATH.FullName
}
}
# Try download NuGet.exe if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Downloading NuGet.exe..."
try {
$wc = GetProxyEnabledWebClient
$wc.DownloadFile($NUGET_URL, $NUGET_EXE)
} catch {
Throw "Could not download NuGet.exe."
}
}
# Save nuget.exe path to environment to be available to child processed
$ENV:NUGET_EXE = $NUGET_EXE
# Restore tools from NuGet?
if(-Not $SkipToolPackageRestore.IsPresent) {
Push-Location
Set-Location $TOOLS_DIR
# Check for changes in packages.config and remove installed tools if true.
[string] $md5Hash = MD5HashFile($PACKAGES_CONFIG)
if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or
($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) {
Write-Verbose -Message "Missing or changed package.config hash..."
Get-ChildItem -Exclude packages.config,nuget.exe,Cake.Bakery |
Remove-Item -Recurse
}
Write-Verbose -Message "Restoring tools from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet tools."
}
else
{
$md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII"
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Restore addins from NuGet
if (Test-Path $ADDINS_PACKAGES_CONFIG) {
Push-Location
Set-Location $ADDINS_DIR
Write-Verbose -Message "Restoring addins from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet addins."
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Restore modules from NuGet
if (Test-Path $MODULES_PACKAGES_CONFIG) {
Push-Location
Set-Location $MODULES_DIR
Write-Verbose -Message "Restoring modules from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet modules."
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Make sure that Cake has been installed.
if (!(Test-Path $CAKE_EXE)) {
Throw "Could not find Cake.exe at $CAKE_EXE"
}
# Build Cake arguments
$cakeArguments = @("$Script");
if ($Target) { $cakeArguments += "-target=$Target" }
if ($Configuration) { $cakeArguments += "-configuration=$Configuration" }
if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" }
if ($ShowDescription) { $cakeArguments += "-showdescription" }
if ($DryRun) { $cakeArguments += "-dryrun" }
$cakeArguments += $ScriptArgs
# Start Cake
Write-Host "Running build script..."
&$CAKE_EXE $cakeArguments
exit $LASTEXITCODE

117
build.sh
View File

@@ -1,117 +0,0 @@
#!/usr/bin/env bash
##########################################################################
# This is the Cake bootstrapper script for Linux and OS X.
# This file was downloaded from https://github.com/cake-build/resources
# Feel free to change this file to fit your needs.
##########################################################################
# Define directories.
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
TOOLS_DIR=$SCRIPT_DIR/tools
ADDINS_DIR=$TOOLS_DIR/Addins
MODULES_DIR=$TOOLS_DIR/Modules
NUGET_EXE=$TOOLS_DIR/nuget.exe
CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
PACKAGES_CONFIG=$TOOLS_DIR/packages.config
PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum
ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config
MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config
# Define md5sum or md5 depending on Linux/OSX
MD5_EXE=
if [[ "$(uname -s)" == "Darwin" ]]; then
MD5_EXE="md5 -r"
else
MD5_EXE="md5sum"
fi
# Define default arguments.
SCRIPT="build.cake"
CAKE_ARGUMENTS=()
# Parse arguments.
for i in "$@"; do
case $1 in
-s|--script) SCRIPT="$2"; shift ;;
--) shift; CAKE_ARGUMENTS+=("$@"); break ;;
*) CAKE_ARGUMENTS+=("$1") ;;
esac
shift
done
# Make sure the tools folder exist.
if [ ! -d "$TOOLS_DIR" ]; then
mkdir "$TOOLS_DIR"
fi
# Make sure that packages.config exist.
if [ ! -f "$TOOLS_DIR/packages.config" ]; then
echo "Downloading packages.config..."
curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages
if [ $? -ne 0 ]; then
echo "An error occurred while downloading packages.config."
exit 1
fi
fi
# Download NuGet if it does not exist.
if [ ! -f "$NUGET_EXE" ]; then
echo "Downloading NuGet..."
curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
if [ $? -ne 0 ]; then
echo "An error occurred while downloading nuget.exe."
exit 1
fi
fi
# Restore tools from NuGet.
pushd "$TOOLS_DIR" >/dev/null
if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then
find . -type d ! -name . ! -name 'Cake.Bakery' | xargs rm -rf
fi
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet tools."
exit 1
fi
$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5"
popd >/dev/null
# Restore addins from NuGet.
if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then
pushd "$ADDINS_DIR" >/dev/null
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet addins."
exit 1
fi
popd >/dev/null
fi
# Restore modules from NuGet.
if [ -f "$MODULES_PACKAGES_CONFIG" ]; then
pushd "$MODULES_DIR" >/dev/null
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet modules."
exit 1
fi
popd >/dev/null
fi
# Make sure that Cake has been installed.
if [ ! -f "$CAKE_EXE" ]; then
echo "Could not find Cake.exe at '$CAKE_EXE'."
exit 1
fi
# Start Cake
exec mono "$CAKE_EXE" $SCRIPT "${CAKE_ARGUMENTS[@]}"

View File

@@ -1,39 +1,66 @@
#!/bin/bash
#Setting up colors
# If you have problems installing Jackett, please open an issue on
# https://github.com/Jackett/Jackett/issues
# Setting up colors
BOLDRED="$(printf '\033[1;31m')"
BOLDGREEN="$(printf '\033[1;32m')"
NC="$(printf '\033[0m')" # No Color
# Stop and unload the service if it's running
jackettservice="jackett.service"
systemctl stop ${jackettservice}
# Check if the install script is running as root
if [ "$EUID" -ne 0 ]; then
echo "${BOLDRED}ERROR${NC}: Please run this script as root"
exit 1
fi
# Check if Jackett service is running
JACKETT_SERVICE="jackett.service"
echo "Checking if the service '${JACKETT_SERVICE}' is running ..."
if systemctl is-active --quiet "${JACKETT_SERVICE}"; then
echo "Service '${JACKETT_SERVICE}' is running"
# Stop and unload the service
if systemctl stop "${JACKETT_SERVICE}"; then
echo "Service '${JACKETT_SERVICE}' stopped"
else
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped"
exit 1
fi
else
echo "Service '${JACKETT_SERVICE}' is not running"
fi
# Move working directory to Jackett's
cd "$(dirname "$0")"
JACKETT_DIR="$(dirname "$(readlink -f "$0")")"
echo "Jackett will be installed in '${JACKETT_DIR}'"
if ! cd "${JACKETT_DIR}"; then
echo "${BOLDRED}ERROR${NC}: Can not cd into '${JACKETT_DIR}' folder"
exit 1
fi
# Check if we're running from Jackett's directory
if [ ! -f ./jackett ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate jackett. Is the script in the right directory?"
echo "${BOLDRED}ERROR${NC}: Can not locate 'jackett' file in '${JACKETT_DIR}'."
echo "Is the script in the right directory?"
exit 1
fi
jackettdir="$(pwd)"
# Check if Jackett's owner is root
jackettuser="$(stat -c "%U" ./jackett)"
if [ "${jackettuser}" == "root" ]; then
echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory."
exit 1
fi
# Check that no other service called Jackett is already running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
JACKETT_USER="$(stat -c "%U" ./jackett)"
if [ "${JACKETT_USER}" == "root" ] || [ "${JACKETT_USER}" == "UNKNOWN" ] ; then
echo "${BOLDRED}ERROR${NC}: The owner of Jackett directory is '${JACKETT_USER}'."
echo "Please, change the owner with the command 'chown <user>:<user> -R \"${JACKETT_DIR}\"'"
echo "The user <user> will be used to run Jackett."
exit 1
fi
echo "Jackett will be executed with the user '${JACKETT_USER}'"
# Write the systemd service descriptor
cat >"/etc/systemd/system/${jackettservice}" <<EOL
JACKETT_SERVICE_PATH="/etc/systemd/system/${JACKETT_SERVICE}"
echo "Creating Jackett unit file in '${JACKETT_SERVICE_PATH}' ..."
cat > "${JACKETT_SERVICE_PATH}" <<EOL
[Unit]
Description=Jackett Daemon
After=network.target
@@ -43,35 +70,39 @@ SyslogIdentifier=jackett
Restart=always
RestartSec=5
Type=simple
User=${jackettuser}
Group=${jackettuser}
WorkingDirectory=${jackettdir}
ExecStart=${jackettdir}/jackett_launcher.sh
TimeoutStopSec=20
User=${JACKETT_USER}
Group=${JACKETT_USER}
WorkingDirectory=${JACKETT_DIR}
ExecStart=/bin/sh "${JACKETT_DIR}/jackett_launcher.sh"
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
EOL
if [ $? -ne 0 ]; then
echo "${BOLDRED}ERROR${NC}: Can not create the file '${JACKETT_SERVICE_PATH}'"
echo "The UnitPath of systemd changes from one distribution to another. You may have to edit the script and change the path manually."
exit 1
fi
echo "Installing Jackett service ..."
# Reload systemd daemon
systemctl daemon-reload
if ! systemctl daemon-reload; then
echo "${BOLDRED}ERROR${NC}: Can not reload systemd daemon"
exit 1
fi
# Enable the service for following restarts
systemctl enable ${jackettservice}
if ! systemctl enable "${JACKETT_SERVICE}"; then
echo "${BOLDRED}ERROR${NC}: Can not enable the service '${JACKETT_SERVICE}'"
exit 1
fi
# Run the service
systemctl start ${jackettservice}
# Check that it's running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
if systemctl start "${JACKETT_SERVICE}"; then
echo "${BOLDGREEN}Service successfully installed and launched!${NC}"
else
cat << EOL
${BOLDRED}ERROR${NC}: Could not launch service. The installation might have failed.
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
Jackett directory: \`${jackettdir}\`
Jackett user: \`${jackettuser}\`
EOL
echo "${BOLDRED}ERROR${NC}: Can not start the service '${JACKETT_SERVICE}'"
exit 1
fi

View File

@@ -1,43 +1,75 @@
#!/bin/bash
#Setting up colors
# If you have problems installing Jackett, please open an issue on
# https://github.com/Jackett/Jackett/issues
# Setting up colors
BOLDRED="$(printf '\033[1;31m')"
BOLDGREEN="$(printf '\033[1;32m')"
NC="$(printf '\033[0m')" # No Color
# Stop and unload the service if it's running
jackettservice="jackett.service"
systemctl stop ${jackettservice}
# Check if the install script is running as root
if [ "$EUID" -ne 0 ]; then
echo "${BOLDRED}ERROR${NC}: Please run this script as root"
exit 1
fi
# Check if Jackett service is running
JACKETT_SERVICE="jackett.service"
echo "Checking if the service '${JACKETT_SERVICE}' is running ..."
if systemctl is-active --quiet "${JACKETT_SERVICE}"; then
echo "Service '${JACKETT_SERVICE}' is running"
# Stop and unload the service
if systemctl stop "${JACKETT_SERVICE}"; then
echo "Service '${JACKETT_SERVICE}' stopped"
else
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped"
exit 1
fi
else
echo "Service '${JACKETT_SERVICE}' is not running"
fi
# Move working directory to Jackett's
cd "$(dirname "$0")"
JACKETT_DIR="$(dirname "$(readlink -f "$0")")"
echo "Jackett will be installed in '${JACKETT_DIR}'"
if ! cd "${JACKETT_DIR}"; then
echo "${BOLDRED}ERROR${NC}: Can not cd into '${JACKETT_DIR}' folder"
exit 1
fi
# Check if we're running from Jackett's directory
if [ ! -f ./JackettConsole.exe ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate JackettConsole.exe. Is the script in the right directory?"
echo "${BOLDRED}ERROR${NC}: Can not locate 'JackettConsole.exe' file in '${JACKETT_DIR}'."
echo "Is the script in the right directory?"
exit 1
fi
jackettdir="$(pwd)"
# Check if Jackett's owner is root
jackettuser="$(stat -c "%U" ./JackettConsole.exe)"
if [ "${jackettuser}" == "root" ]; then
echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory."
JACKETT_USER="$(stat -c "%U" ./JackettConsole.exe)"
if [ "${JACKETT_USER}" == "root" ] || [ "${JACKETT_USER}" == "UNKNOWN" ] ; then
echo "${BOLDRED}ERROR${NC}: The owner of Jackett directory is '${JACKETT_USER}'."
echo "Please, change the owner with the command 'chown <user>:<user> -R \"${JACKETT_DIR}\"'"
echo "The user <user> will be used to run Jackett."
exit 1
fi
echo "Jackett will be executed with the user '${JACKETT_USER}'"
# Check if mono is installed
command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; }
monodir="$(dirname $(command -v mono))"
# Check that no other service called Jackett is already running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
# Check if Mono is installed
echo "Checking if Mono is installed ..."
if ! command -v mono > /dev/null; then
echo "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed"
exit 1
fi
MONO_DIR="$(dirname "$(command -v mono)")"
echo "Mono is installed in '${MONO_DIR}'"
# Write the systemd service descriptor
cat >"/etc/systemd/system/${jackettservice}" <<EOL
JACKETT_SERVICE_PATH="/etc/systemd/system/${JACKETT_SERVICE}"
echo "Creating Jackett unit file in '${JACKETT_SERVICE_PATH}' ..."
cat > "${JACKETT_SERVICE_PATH}" <<EOL
[Unit]
Description=Jackett Daemon
After=network.target
@@ -47,36 +79,39 @@ SyslogIdentifier=jackett
Restart=always
RestartSec=5
Type=simple
User=${jackettuser}
Group=${jackettuser}
WorkingDirectory=${jackettdir}
ExecStart=${monodir}/mono --debug ${jackettdir}/JackettConsole.exe --NoRestart
TimeoutStopSec=20
User=${JACKETT_USER}
Group=${JACKETT_USER}
WorkingDirectory=${JACKETT_DIR}
ExecStart="${MONO_DIR}/mono" --debug "${JACKETT_DIR}/JackettConsole.exe" --NoRestart
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
EOL
if [ $? -ne 0 ]; then
echo "${BOLDRED}ERROR${NC}: Can not create the file '${JACKETT_SERVICE_PATH}'"
echo "The UnitPath of systemd changes from one distribution to another. You may have to edit the script and change the path manually."
exit 1
fi
echo "Installing Jackett service ..."
# Reload systemd daemon
systemctl daemon-reload
if ! systemctl daemon-reload; then
echo "${BOLDRED}ERROR${NC}: Can not reload systemd daemon"
exit 1
fi
# Enable the service for following restarts
systemctl enable ${jackettservice}
if ! systemctl enable "${JACKETT_SERVICE}"; then
echo "${BOLDRED}ERROR${NC}: Can not enable the service '${JACKETT_SERVICE}'"
exit 1
fi
# Run the service
systemctl start ${jackettservice}
# Check that it's running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
if systemctl start "${JACKETT_SERVICE}"; then
echo "${BOLDGREEN}Service successfully installed and launched!${NC}"
else
cat << EOL
${BOLDRED}ERROR${NC}: Could not launch service. The installation might have failed.
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
Mono directory: \`${monodir}\`
Jackett directory: \`${jackettdir}\`
Jackett user: \`${jackettuser}\`
EOL
echo "${BOLDRED}ERROR${NC}: Can not start the service '${JACKETT_SERVICE}'"
exit 1
fi

View File

@@ -7,12 +7,12 @@
JACKETT_DIR="$(dirname "$(readlink -f "$0")")"
# Launch Jackett
${JACKETT_DIR}/jackett --NoRestart
"${JACKETT_DIR}/jackett" --NoRestart
# Get user running the service
JACKETT_USER=$(whoami)
# Wait until the updater ends
while pgrep -u ${JACKETT_USER} JackettUpdater > /dev/null; do
while pgrep -u "${JACKETT_USER}" JackettUpdater > /dev/null; do
sleep 1
done

View File

@@ -9,6 +9,10 @@
using System;
using System.Text.RegularExpressions;
// ReSharper disable NotAccessedField.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
namespace DateTimeRoutines
{
/// <summary>
@@ -21,12 +25,12 @@ namespace DateTimeRoutines
/// <summary>
/// Amount of seconds elapsed between 1970-01-01 00:00:00 and the date-time.
/// </summary>
/// <param name="date_time">date-time</param>
/// <param name="dateTime">date-time</param>
/// <returns>seconds</returns>
public static uint GetSecondsSinceUnixEpoch(this DateTime date_time)
public static uint GetSecondsSinceUnixEpoch(this DateTime dateTime)
{
TimeSpan t = date_time - new DateTime(1970, 1, 1);
int ss = (int)t.TotalSeconds;
var t = dateTime - new DateTime(1970, 1, 1);
var ss = (int)t.TotalSeconds;
if (ss < 0)
return 0;
return (uint)ss;
@@ -44,83 +48,83 @@ namespace DateTimeRoutines
/// <summary>
/// Index of first char of a date substring found in the string
/// </summary>
readonly public int IndexOfDate = -1;
public readonly int IndexOfDate;
/// <summary>
/// Length a date substring found in the string
/// </summary>
readonly public int LengthOfDate = -1;
public readonly int LengthOfDate;
/// <summary>
/// Index of first char of a time substring found in the string
/// </summary>
readonly public int IndexOfTime = -1;
public readonly int IndexOfTime;
/// <summary>
/// Length of a time substring found in the string
/// </summary>
readonly public int LengthOfTime = -1;
public readonly int LengthOfTime;
/// <summary>
/// DateTime found in the string
/// </summary>
readonly public DateTime DateTime;
public readonly DateTime DateTime;
/// <summary>
/// True if a date was found within the string
/// </summary>
readonly public bool IsDateFound;
public readonly bool IsDateFound;
/// <summary>
/// True if a time was found within the string
/// </summary>
readonly public bool IsTimeFound;
public readonly bool IsTimeFound;
/// <summary>
/// UTC offset if it was found within the string
/// </summary>
readonly public TimeSpan UtcOffset;
public readonly TimeSpan UtcOffset;
/// <summary>
/// True if UTC offset was found in the string
/// </summary>
readonly public bool IsUtcOffsetFound;
public readonly bool IsUtcOffsetFound;
/// <summary>
/// Utc gotten from DateTime if IsUtcOffsetFound is True
/// </summary>
public DateTime UtcDateTime;
internal ParsedDateTime(int index_of_date, int length_of_date, int index_of_time, int length_of_time, DateTime date_time)
internal ParsedDateTime(int indexOfDate, int lengthOfDate, int indexOfTime, int lengthOfTime, DateTime dateTime)
{
IndexOfDate = index_of_date;
LengthOfDate = length_of_date;
IndexOfTime = index_of_time;
LengthOfTime = length_of_time;
DateTime = date_time;
IsDateFound = index_of_date > -1;
IsTimeFound = index_of_time > -1;
IndexOfDate = indexOfDate;
LengthOfDate = lengthOfDate;
IndexOfTime = indexOfTime;
LengthOfTime = lengthOfTime;
DateTime = dateTime;
IsDateFound = indexOfDate > -1;
IsTimeFound = indexOfTime > -1;
UtcOffset = new TimeSpan(25, 0, 0);
IsUtcOffsetFound = false;
UtcDateTime = new DateTime(1, 1, 1);
}
internal ParsedDateTime(int index_of_date, int length_of_date, int index_of_time, int length_of_time, DateTime date_time, TimeSpan utc_offset)
internal ParsedDateTime(int indexOfDate, int lengthOfDate, int indexOfTime, int lengthOfTime, DateTime dateTime, TimeSpan utcOffset)
{
IndexOfDate = index_of_date;
LengthOfDate = length_of_date;
IndexOfTime = index_of_time;
LengthOfTime = length_of_time;
DateTime = date_time;
IsDateFound = index_of_date > -1;
IsTimeFound = index_of_time > -1;
UtcOffset = utc_offset;
IsUtcOffsetFound = Math.Abs(utc_offset.TotalHours) < 12;
IndexOfDate = indexOfDate;
LengthOfDate = lengthOfDate;
IndexOfTime = indexOfTime;
LengthOfTime = lengthOfTime;
DateTime = dateTime;
IsDateFound = indexOfDate > -1;
IsTimeFound = indexOfTime > -1;
UtcOffset = utcOffset;
IsUtcOffsetFound = Math.Abs(utcOffset.TotalHours) < 12;
if (!IsUtcOffsetFound)
UtcDateTime = new DateTime(1, 1, 1);
else
{
if (index_of_date < 0)//to avoid negative date exception when date is undefined
if (indexOfDate < 0)//to avoid negative date exception when date is undefined
{
TimeSpan ts = date_time.TimeOfDay + utc_offset;
var ts = dateTime.TimeOfDay + utcOffset;
if (ts < new TimeSpan(0))
UtcDateTime = new DateTime(1, 1, 2) + ts;
else
UtcDateTime = new DateTime(1, 1, 1) + ts;
}
else
UtcDateTime = date_time + utc_offset;
UtcDateTime = dateTime + utcOffset;
}
}
}
@@ -129,7 +133,7 @@ namespace DateTimeRoutines
/// Date that is accepted in the following cases:
/// - no date was parsed by TryParseDateOrTime();
/// - no year was found by TryParseDate();
/// It is ignored if DefaultDateIsNow = true was set after DefaultDate
/// It is ignored if DefaultDateIsNow = true was set after DefaultDate
/// </summary>
public static DateTime DefaultDate
{
@@ -138,15 +142,10 @@ namespace DateTimeRoutines
_DefaultDate = value;
DefaultDateIsNow = false;
}
get
{
if (DefaultDateIsNow)
return DateTime.Now;
else
return _DefaultDate;
}
get => DefaultDateIsNow ? DateTime.Now : _DefaultDate;
}
static DateTime _DefaultDate = DateTime.Now;
private static DateTime _DefaultDate = DateTime.Now;
/// <summary>
/// If true then DefaultDate property is ignored and DefaultDate is always DateTime.Now
@@ -156,16 +155,17 @@ namespace DateTimeRoutines
/// <summary>
/// Defines default date-time format.
/// </summary>
[Flags]
public enum DateTimeFormat
{
/// <summary>
/// month number goes before day number
/// </summary>
USA_DATE,
UsaDate,
/// <summary>
/// day number goes before month number
/// </summary>
UK_DATE,
UkDate,
///// <summary>
///// time is specifed through AM or PM
///// </summary>
@@ -177,83 +177,79 @@ namespace DateTimeRoutines
#region parsing derived methods for DateTime output
/// <summary>
/// Tries to find date and time within the passed string and return it as DateTime structure.
/// Tries to find date and time within the passed string and return it as DateTime structure.
/// </summary>
/// <param name="str">string that contains date and/or time</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="date_time">parsed date-time output</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="dateTime">parsed date-time output</param>
/// <returns>true if both date and time were found, else false</returns>
static public bool TryParseDateTime(this string str, DateTimeFormat default_format, out DateTime date_time)
public static bool TryParseDateTime(this string str, DateTimeFormat defaultFormat, out DateTime dateTime)
{
ParsedDateTime parsed_date_time;
if (!TryParseDateTime(str, default_format, out parsed_date_time))
if (!TryParseDateTime(str, defaultFormat, out ParsedDateTime parsedDateTime))
{
date_time = new DateTime(1, 1, 1);
dateTime = new DateTime(1, 1, 1);
return false;
}
date_time = parsed_date_time.DateTime;
dateTime = parsedDateTime.DateTime;
return true;
}
/// <summary>
/// Tries to find date and/or time within the passed string and return it as DateTime structure.
/// Tries to find date and/or time within the passed string and return it as DateTime structure.
/// If only date was found, time in the returned DateTime is always 0:0:0.
/// If only time was found, date in the returned DateTime is DefaultDate.
/// </summary>
/// <param name="str">string that contains date and(or) time</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="date_time">parsed date-time output</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="dateTime">parsed date-time output</param>
/// <returns>true if date and/or time was found, else false</returns>
static public bool TryParseDateOrTime(this string str, DateTimeFormat default_format, out DateTime date_time)
public static bool TryParseDateOrTime(this string str, DateTimeFormat defaultFormat, out DateTime dateTime)
{
ParsedDateTime parsed_date_time;
if (!TryParseDateOrTime(str, default_format, out parsed_date_time))
if (!TryParseDateOrTime(str, defaultFormat, out ParsedDateTime parsedDateTime))
{
date_time = new DateTime(1, 1, 1);
dateTime = new DateTime(1, 1, 1);
return false;
}
date_time = parsed_date_time.DateTime;
dateTime = parsedDateTime.DateTime;
return true;
}
/// <summary>
/// Tries to find time within the passed string and return it as DateTime structure.
/// Tries to find time within the passed string and return it as DateTime structure.
/// It recognizes only time while ignoring date, so date in the returned DateTime is always 1/1/1.
/// </summary>
/// <param name="str">string that contains time</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="time">parsed time output</param>
/// <returns>true if time was found, else false</returns>
public static bool TryParseTime(this string str, DateTimeFormat default_format, out DateTime time)
public static bool TryParseTime(this string str, DateTimeFormat defaultFormat, out DateTime time)
{
ParsedDateTime parsed_time;
if (!TryParseTime(str, default_format, out parsed_time, null))
if (!TryParseTime(str, defaultFormat, out var parsedTime, null))
{
time = new DateTime(1, 1, 1);
return false;
}
time = parsed_time.DateTime;
time = parsedTime.DateTime;
return true;
}
/// <summary>
/// Tries to find date within the passed string and return it as DateTime structure.
/// Tries to find date within the passed string and return it as DateTime structure.
/// It recognizes only date while ignoring time, so time in the returned DateTime is always 0:0:0.
/// If year of the date was not found then it accepts the current year.
/// If year of the date was not found then it accepts the current year.
/// </summary>
/// <param name="str">string that contains date</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="date">parsed date output</param>
/// <returns>true if date was found, else false</returns>
static public bool TryParseDate(this string str, DateTimeFormat default_format, out DateTime date)
public static bool TryParseDate(this string str, DateTimeFormat defaultFormat, out DateTime date)
{
ParsedDateTime parsed_date;
if (!TryParseDate(str, default_format, out parsed_date))
if (!TryParseDate(str, defaultFormat, out ParsedDateTime parsedDate))
{
date = new DateTime(1, 1, 1);
return false;
}
date = parsed_date.DateTime;
date = parsedDate.DateTime;
return true;
}
@@ -262,71 +258,69 @@ namespace DateTimeRoutines
#region parsing derived methods for ParsedDateTime output
/// <summary>
/// Tries to find date and time within the passed string and return it as ParsedDateTime object.
/// Tries to find date and time within the passed string and return it as ParsedDateTime object.
/// </summary>
/// <param name="str">string that contains date-time</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="parsed_date_time">parsed date-time output</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="parsedDateTime">parsed date-time output</param>
/// <returns>true if both date and time were found, else false</returns>
static public bool TryParseDateTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_date_time)
public static bool TryParseDateTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedDateTime)
{
if (DateTimeRoutines.TryParseDateOrTime(str, default_format, out parsed_date_time)
&& parsed_date_time.IsDateFound
&& parsed_date_time.IsTimeFound
if (TryParseDateOrTime(str, defaultFormat, out parsedDateTime)
&& parsedDateTime.IsDateFound
&& parsedDateTime.IsTimeFound
)
return true;
parsed_date_time = null;
parsedDateTime = null;
return false;
}
/// <summary>
/// Tries to find time within the passed string and return it as ParsedDateTime object.
/// Tries to find time within the passed string and return it as ParsedDateTime object.
/// It recognizes only time while ignoring date, so date in the returned ParsedDateTime is always 1/1/1
/// </summary>
/// <param name="str">string that contains date-time</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="parsed_time">parsed date-time output</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="parsedTime">parsed date-time output</param>
/// <returns>true if time was found, else false</returns>
static public bool TryParseTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_time)
{
return TryParseTime(str, default_format, out parsed_time, null);
}
public static bool TryParseTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedTime)
=> TryParseTime(str, defaultFormat, out parsedTime, null);
/// <summary>
/// Tries to find date and/or time within the passed string and return it as ParsedDateTime object.
/// Tries to find date and/or time within the passed string and return it as ParsedDateTime object.
/// If only date was found, time in the returned ParsedDateTime is always 0:0:0.
/// If only time was found, date in the returned ParsedDateTime is DefaultDate.
/// </summary>
/// <param name="str">string that contains date-time</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="parsed_date_time">parsed date-time output</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="parsedDateTime">parsed date-time output</param>
/// <returns>true if date or time was found, else false</returns>
static public bool TryParseDateOrTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_date_time)
public static bool TryParseDateOrTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedDateTime)
{
parsed_date_time = null;
parsedDateTime = null;
ParsedDateTime parsed_date;
ParsedDateTime parsed_time;
if (!TryParseDate(str, default_format, out parsed_date))
ParsedDateTime parsedTime;
if (!TryParseDate(str, defaultFormat, out
ParsedDateTime parsedDate))
{
if (!TryParseTime(str, default_format, out parsed_time, null))
if (!TryParseTime(str, defaultFormat, out parsedTime, null))
return false;
DateTime date_time = new DateTime(DefaultDate.Year, DefaultDate.Month, DefaultDate.Day, parsed_time.DateTime.Hour, parsed_time.DateTime.Minute, parsed_time.DateTime.Second);
parsed_date_time = new ParsedDateTime(-1, -1, parsed_time.IndexOfTime, parsed_time.LengthOfTime, date_time, parsed_time.UtcOffset);
var dateTime = new DateTime(DefaultDate.Year, DefaultDate.Month, DefaultDate.Day, parsedTime.DateTime.Hour, parsedTime.DateTime.Minute, parsedTime.DateTime.Second);
parsedDateTime = new ParsedDateTime(-1, -1, parsedTime.IndexOfTime, parsedTime.LengthOfTime, dateTime, parsedTime.UtcOffset);
}
else
{
if (!TryParseTime(str, default_format, out parsed_time, parsed_date))
if (!TryParseTime(str, defaultFormat, out parsedTime, parsedDate))
{
DateTime date_time = new DateTime(parsed_date.DateTime.Year, parsed_date.DateTime.Month, parsed_date.DateTime.Day, 0, 0, 0);
parsed_date_time = new ParsedDateTime(parsed_date.IndexOfDate, parsed_date.LengthOfDate, -1, -1, date_time);
var dateTime = new DateTime(parsedDate.DateTime.Year, parsedDate.DateTime.Month, parsedDate.DateTime.Day, 0, 0, 0);
parsedDateTime = new ParsedDateTime(parsedDate.IndexOfDate, parsedDate.LengthOfDate, -1, -1, dateTime);
}
else
{
DateTime date_time = new DateTime(parsed_date.DateTime.Year, parsed_date.DateTime.Month, parsed_date.DateTime.Day, parsed_time.DateTime.Hour, parsed_time.DateTime.Minute, parsed_time.DateTime.Second);
parsed_date_time = new ParsedDateTime(parsed_date.IndexOfDate, parsed_date.LengthOfDate, parsed_time.IndexOfTime, parsed_time.LengthOfTime, date_time, parsed_time.UtcOffset);
var dateTime = new DateTime(parsedDate.DateTime.Year, parsedDate.DateTime.Month, parsedDate.DateTime.Day, parsedTime.DateTime.Hour, parsedTime.DateTime.Minute, parsedTime.DateTime.Second);
parsedDateTime = new ParsedDateTime(parsedDate.IndexOfDate, parsedDate.LengthOfDate, parsedTime.IndexOfTime, parsedTime.LengthOfTime, dateTime, parsedTime.UtcOffset);
}
}
@@ -342,42 +336,39 @@ namespace DateTimeRoutines
/// It recognizes only time while ignoring date, so date in the returned ParsedDateTime is always 1/1/1
/// </summary>
/// <param name="str">string that contains date</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="parsed_time">parsed date-time output</param>
/// <param name="parsed_date">ParsedDateTime object if the date was found within this string, else NULL</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="parsedTime">parsed date-time output</param>
/// <param name="parsedDate">ParsedDateTime object if the date was found within this string, else NULL</param>
/// <returns>true if time was found, else false</returns>
public static bool TryParseTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_time, ParsedDateTime parsed_date)
public static bool TryParseTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedTime, ParsedDateTime parsedDate)
{
parsed_time = null;
parsedTime = null;
string time_zone_r;
if(default_format == DateTimeFormat.USA_DATE)
time_zone_r = @"(?:\s*(?'time_zone'UTC|GMT|CST|EST))?";
else
time_zone_r = @"(?:\s*(?'time_zone'UTC|GMT))?";
var timeZoneR = defaultFormat == DateTimeFormat.UsaDate ?
@"(?:\s*(?'time_zone'UTC|GMT|CST|EST))?" : @"(?:\s*(?'time_zone'UTC|GMT))?";
Match m;
if (parsed_date != null && parsed_date.IndexOfDate > -1)
if (parsedDate != null && parsedDate.IndexOfDate > -1)
{//look around the found date
//look for <date> hh:mm:ss <UTC offset>
m = Regex.Match(str.Substring(parsed_date.IndexOfDate + parsed_date.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{2})\s*:\s*(?'minute'\d{2})\s*:\s*(?'second'\d{2})\s+(?'offset_sign'[\+\-])(?'offset_hh'\d{2}):?(?'offset_mm'\d{2})(?=$|[^\d\w])", RegexOptions.Compiled);
//look for <date> hh:mm:ss <UTC offset>
m = Regex.Match(str.Substring(parsedDate.IndexOfDate + parsedDate.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{2})\s*:\s*(?'minute'\d{2})\s*:\s*(?'second'\d{2})\s+(?'offset_sign'[\+\-])(?'offset_hh'\d{2}):?(?'offset_mm'\d{2})(?=$|[^\d\w])", RegexOptions.Compiled);
if (!m.Success)
//look for <date> [h]h:mm[:ss] [PM/AM] [UTC/GMT]
m = Regex.Match(str.Substring(parsed_date.IndexOfDate + parsed_date.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?"+time_zone_r+@"(?=$|[^\d\w])", RegexOptions.Compiled);
//look for <date> [h]h:mm[:ss] [PM/AM] [UTC/GMT]
m = Regex.Match(str.Substring(parsedDate.IndexOfDate + parsedDate.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[^\d\w])", RegexOptions.Compiled);
if (!m.Success)
//look for [h]h:mm:ss [PM/AM] [UTC/GMT] <date>
m = Regex.Match(str.Substring(0, parsed_date.IndexOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?"+time_zone_r+@"(?=$|[\s,]+)", RegexOptions.Compiled);
m = Regex.Match(str.Substring(0, parsedDate.IndexOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[\s,]+)", RegexOptions.Compiled);
if (!m.Success)
//look for [h]h:mm:ss [PM/AM] [UTC/GMT] within <date>
m = Regex.Match(str.Substring(parsed_date.IndexOfDate, parsed_date.LengthOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?"+time_zone_r+@"(?=$|[\s,]+)", RegexOptions.Compiled);
m = Regex.Match(str.Substring(parsedDate.IndexOfDate, parsedDate.LengthOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[\s,]+)", RegexOptions.Compiled);
}
else//look anywhere within string
{
//look for hh:mm:ss <UTC offset>
//look for hh:mm:ss <UTC offset>
m = Regex.Match(str, @"(?<=^|\s+|\s*T\s*)(?'hour'\d{2})\s*:\s*(?'minute'\d{2})\s*:\s*(?'second'\d{2})\s+(?'offset_sign'[\+\-])(?'offset_hh'\d{2}):?(?'offset_mm'\d{2})?(?=$|[^\d\w])", RegexOptions.Compiled);
if (!m.Success)
//look for [h]h:mm[:ss] [PM/AM] [UTC/GMT]
m = Regex.Match(str, @"(?<=^|\s+|\s*T\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?"+time_zone_r+@"(?=$|[^\d\w])", RegexOptions.Compiled);
m = Regex.Match(str, @"(?<=^|\s+|\s*T\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[^\d\w])", RegexOptions.Compiled);
}
if (!m.Success)
@@ -385,15 +376,15 @@ namespace DateTimeRoutines
//try
//{
int hour = int.Parse(m.Groups["hour"].Value);
var hour = int.Parse(m.Groups["hour"].Value);
if (hour < 0 || hour > 23)
return false;
int minute = int.Parse(m.Groups["minute"].Value);
var minute = int.Parse(m.Groups["minute"].Value);
if (minute < 0 || minute > 59)
return false;
int second = 0;
var second = 0;
if (!string.IsNullOrEmpty(m.Groups["second"].Value))
{
second = int.Parse(m.Groups["second"].Value);
@@ -401,49 +392,49 @@ namespace DateTimeRoutines
return false;
}
if (string.Compare(m.Groups["ampm"].Value, "PM", true) == 0 && hour < 12)
if ("PM".Equals(m.Groups["ampm"].Value, StringComparison.OrdinalIgnoreCase) && hour < 12)
hour += 12;
else if (string.Compare(m.Groups["ampm"].Value, "AM", true) == 0 && hour == 12)
else if ("AM".Equals(m.Groups["ampm"].Value, StringComparison.OrdinalIgnoreCase) && hour == 12)
hour -= 12;
DateTime date_time = new DateTime(1, 1, 1, hour, minute, second);
var dateTime = new DateTime(1, 1, 1, hour, minute, second);
if (m.Groups["offset_hh"].Success)
{
int offset_hh = int.Parse(m.Groups["offset_hh"].Value);
int offset_mm = 0;
var offsetHh = int.Parse(m.Groups["offset_hh"].Value);
var offsetMm = 0;
if (m.Groups["offset_mm"].Success)
offset_mm = int.Parse(m.Groups["offset_mm"].Value);
TimeSpan utc_offset = new TimeSpan(offset_hh, offset_mm, 0);
offsetMm = int.Parse(m.Groups["offset_mm"].Value);
var utcOffset = new TimeSpan(offsetHh, offsetMm, 0);
if (m.Groups["offset_sign"].Value == "-")
utc_offset = -utc_offset;
parsed_time = new ParsedDateTime(-1, -1, m.Index, m.Length, date_time, utc_offset);
utcOffset = -utcOffset;
parsedTime = new ParsedDateTime(-1, -1, m.Index, m.Length, dateTime, utcOffset);
return true;
}
if (m.Groups["time_zone"].Success)
{
TimeSpan utc_offset;
TimeSpan utcOffset;
switch (m.Groups["time_zone"].Value)
{
case "UTC":
case "GMT":
utc_offset = new TimeSpan(0, 0, 0);
utcOffset = new TimeSpan(0, 0, 0);
break;
case "CST":
utc_offset = new TimeSpan(-6, 0, 0);
utcOffset = new TimeSpan(-6, 0, 0);
break;
case "EST":
utc_offset = new TimeSpan(-5, 0, 0);
utcOffset = new TimeSpan(-5, 0, 0);
break;
default:
throw new Exception("Time zone: " + m.Groups["time_zone"].Value + " is not defined.");
}
parsed_time = new ParsedDateTime(-1, -1, m.Index, m.Length, date_time, utc_offset);
parsedTime = new ParsedDateTime(-1, -1, m.Index, m.Length, dateTime, utcOffset);
return true;
}
parsed_time = new ParsedDateTime(-1, -1, m.Index, m.Length, date_time);
parsedTime = new ParsedDateTime(-1, -1, m.Index, m.Length, dateTime);
//}
//catch(Exception e)
//{
@@ -453,37 +444,37 @@ namespace DateTimeRoutines
}
/// <summary>
/// Tries to find date within the passed string and return it as ParsedDateTime object.
/// Tries to find date within the passed string and return it as ParsedDateTime object.
/// It recognizes only date while ignoring time, so time in the returned ParsedDateTime is always 0:0:0.
/// If year of the date was not found then it accepts the current year.
/// If year of the date was not found then it accepts the current year.
/// </summary>
/// <param name="str">string that contains date</param>
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
/// <param name="parsed_date">parsed date output</param>
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
/// <param name="parsedDate">parsed date output</param>
/// <returns>true if date was found, else false</returns>
static public bool TryParseDate(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_date)
public static bool TryParseDate(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedDate)
{
parsed_date = null;
parsedDate = null;
if (string.IsNullOrEmpty(str))
return false;
//look for dd/mm/yy
Match m = Regex.Match(str, @"(?<=^|[^\d])(?'day'\d{1,2})\s*(?'separator'[\\/\.])+\s*(?'month'\d{1,2})\s*\'separator'+\s*(?'year'\d{2}|\d{4})(?=$|[^\d])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var m = Regex.Match(str, @"(?<=^|[^\d])(?'day'\d{1,2})\s*(?'separator'[\\/\.])+\s*(?'month'\d{1,2})\s*\'separator'+\s*(?'year'\d{2}|\d{4})(?=$|[^\d])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (m.Success)
{
DateTime date;
if ((default_format ^ DateTimeFormat.USA_DATE) == DateTimeFormat.USA_DATE)
if ((defaultFormat ^ DateTimeFormat.UsaDate) == DateTimeFormat.UsaDate)
{
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["day"].Value), int.Parse(m.Groups["month"].Value), out date))
if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["day"].Value), int.Parse(m.Groups["month"].Value), out date))
return false;
}
else
{
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))
if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))
return false;
}
parsed_date = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
parsedDate = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
return true;
}
@@ -491,10 +482,9 @@ namespace DateTimeRoutines
m = Regex.Match(str, @"(?<=^|[^\d])(?'year'\d{2}|\d{4})\s*(?'separator'[\-])\s*(?'month'\d{1,2})\s*\'separator'+\s*(?'day'\d{1,2})(?=$|[^\d])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (m.Success)
{
DateTime date;
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))
if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out var date))
return false;
parsed_date = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
parsedDate = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
return true;
}
@@ -514,9 +504,9 @@ namespace DateTimeRoutines
m = Regex.Match(str, @"(?:^|[^\d\w])(?'month'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[uarychilestmbro]*\s+(?'day'\d{1,2})(?:-?st|-?th|-?rd|-?nd)?(?:\s*,?\s*(?'year'\d{4}))?(?=$|[^\d\w])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (m.Success)
{
int month = -1;
int index_of_date = m.Index;
int length_of_date = m.Length;
var month = -1;
var indexOfDate = m.Index;
var lengthOfDate = m.Length;
switch (m.Groups["month"].Value)
{
@@ -569,23 +559,19 @@ namespace DateTimeRoutines
break;
}
int year;
if (!string.IsNullOrEmpty(m.Groups["year"].Value))
year = int.Parse(m.Groups["year"].Value);
else
year = DefaultDate.Year;
var year = !string.IsNullOrEmpty(m.Groups["year"].Value) ?
int.Parse(m.Groups["year"].Value) : DefaultDate.Year;
DateTime date;
if (!convert_to_date(year, month, int.Parse(m.Groups["day"].Value), out date))
if (!ConvertToDate(year, month, int.Parse(m.Groups["day"].Value), out var date))
return false;
parsed_date = new ParsedDateTime(index_of_date, length_of_date, -1, -1, date);
parsedDate = new ParsedDateTime(indexOfDate, lengthOfDate, -1, -1, date);
return true;
}
return false;
}
static bool convert_to_date(int year, int month, int day, out DateTime date)
private static bool ConvertToDate(int year, int month, int day, out DateTime date)
{
if (year >= 100)
{
@@ -597,9 +583,9 @@ namespace DateTimeRoutines
}
else
if (year > 30)
year += 1900;
else
year += 2000;
year += 1900;
else
year += 2000;
try
{
@@ -615,4 +601,4 @@ namespace DateTimeRoutines
#endregion
}
}
}

View File

@@ -1,7 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>8</LangVersion>
<NoWarn />
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningsAsErrors />
</PropertyGroup>
</Project>

View File

@@ -1,4 +1,4 @@
function getUrlParams() {
function getUrlParams() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
@@ -7,4 +7,4 @@
vars[hash[0]] = hash[1];
}
return vars;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -7,10 +7,8 @@ body {
border-radius: 6px;
background-color: white;
max-width: 900px;
margin: 0 auto;
margin-top: 30px;
padding: 20px;
margin-bottom: 100px;
margin: 30px auto 100px;
}
.container-fluid {
@@ -22,7 +20,7 @@ body {
#indexers {
text-align: center;
margin-top: 30px;
margin-top: 20px;
}
.indexer-table {
@@ -57,6 +55,14 @@ body {
max-width: 255px;
}
.setup-item-inputcheckbox label {
padding: 0 1.5em;
}
.setup-item-inputcheckbox input {
height: 20px;
}
.setup-item-inputbool input {
max-width: 100px;
height: 20px;
@@ -116,7 +122,7 @@ hr {
}
.input-area {
margin: 4px 0px;
margin: 4px 0;
}
.input-area > * {
@@ -155,8 +161,7 @@ hr {
#footer {
color: #444444;
margin: 0 auto;
margin-top: 10px;
margin: 10px auto 0;
text-align: center;
}
@@ -170,7 +175,7 @@ hr {
}
.indexer-caps {
padding: 0px 15px 15px 15px;
padding: 0 15px 15px 15px;
border-top: 1px solid #e5e5e5;
}
@@ -178,6 +183,12 @@ hr {
border-bottom: 1px solid #ddd;
}
.jackettlog-narrowcol {
width: 1px;
white-space: nowrap;
vertical-align: top;
}
.jackettlogWarn {
background-color: #FFFF8E !important;
}
@@ -201,23 +212,57 @@ hr {
pre {
display: block;
padding: 3px;
margin: 0 0 0px;
margin: 0 0 0;
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: transparent;
border: 0px;
border-radius: 0px;
border: 0;
border-radius: 0;
word-break: normal;
white-space: pre-wrap; /* Since CSS 2.1 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
.modal-open .modal {
overflow-x: auto; /* Model can be bigger than the screen on mobiles */
}
.dataTables_length {
white-space: nowrap;
}
.dataTables_length select, .dataTables_filter input, .dataTable.compact tfoot td select {
display: inline-block;
height: 26px;
padding: 0 8px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 4px;
}
.dataTables_length select {
width: inherit;
}
.dataTables_filter input {
width: 400px
width: 400px;
}
.dataTable.compact tfoot td {
padding: 4px 0;
}
.dataTable.compact tfoot td select {
height: 26px;
padding: 0;
}
.dataTables_wrapper .dataTables_paginate .paginate_button {
padding: 3px 9px !important;
}
#unconfigured-indexers-template {
@@ -250,7 +295,7 @@ table td.fit{
.tooltip-inner img {
max-width: 250px;
height: auto;
height: auto;
}
.type-public {
@@ -272,7 +317,8 @@ table td.fit{
}
input#searchquery {
width:400px;
width: 400px;
display: inline-block;
}
#proxy-warning {

View File

@@ -32,7 +32,15 @@ $(document).ready(function () {
return opts.fn(this);
else
return opts.inverse(this);
});
});
Handlebars.registerHelper('if_in', function(elem, list, opts) {
if(list.indexOf(elem) > -1) {
return opts.fn(this);
}
return opts.inverse(this);
});
var index = window.location.pathname.indexOf("/UI");
var pathPrefix = window.location.pathname.substr(0, index);
@@ -43,7 +51,12 @@ $(document).ready(function () {
});
function openSearchIfNecessary() {
const hashArgs = location.hash.substring(1).split('&').reduce((prev, item) => Object.assign({ [item.split('=')[0]]: (item.split('=').length < 2 ? undefined : decodeURIComponent(item.split('=')[1])) }, prev), {});
const hashArgs = location.hash.substring(1).split('&').reduce((prev, item) =>
Object.assign({
[item.split('=')[0]]: (item.split('=').length < 2 ?
undefined :
decodeURIComponent(item.split('=')[1].replace(/\+/g,'%20')))
}, prev), {});
if ("search" in hashArgs) {
showSearch(hashArgs.tracker, hashArgs.search, hashArgs.category);
}
@@ -169,6 +182,7 @@ function displayConfiguredIndexersList(indexers) {
indexersTable.find("table").dataTable(
{
"stateSave": true,
"stateDuration": 0,
"pageLength": -1,
"lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]],
"order": [[0, "asc"]],
@@ -228,9 +242,9 @@ function displayUnconfiguredIndexersList() {
}).fail(function (data) {
if(data.responseJSON.error !== undefined) {
var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104
doNotify("An error occured while configuring this indexer<br /><b>" + data.responseJSON.error.substring(0, indexEnd) + "</b><br /><i><a href=\"https://github.com/Jackett/Jackett/issues/new?title=[" + indexerId + "] " + data.responseJSON.error.substring(0, indexEnd) + " (Config)\" target=\"_blank\">Click here to open an issue on GitHub for this indexer.</a><i>", "danger", "glyphicon glyphicon-alert", false);
doNotify("An error occurred while configuring this indexer<br /><b>" + data.responseJSON.error.substring(0, indexEnd) + "</b><br /><i><a href=\"https://github.com/Jackett/Jackett/issues/new?title=[" + indexerId + "] " + data.responseJSON.error.substring(0, indexEnd) + " (Config)\" target=\"_blank\">Click here to open an issue on GitHub for this indexer.</a><i>", "danger", "glyphicon glyphicon-alert", false);
} else {
doNotify("An error occured while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert");
doNotify("An error occurred while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert");
}
});
});
@@ -240,6 +254,7 @@ function displayUnconfiguredIndexersList() {
indexersTable.find("table").DataTable(
{
"stateSave": true,
"stateDuration": 0,
"fnStateSaveParams": function (oSettings, sValue) {
sValue.search.search = ""; // don't save the search filter content
return sValue;
@@ -333,6 +348,7 @@ function copyToClipboard(text) {
var succeed;
try {
succeed = document.execCommand("copy");
doNotify("Copied to clipboard!", "success", "glyphicon glyphicon-ok");
} catch (e) {
succeed = false;
}
@@ -607,6 +623,11 @@ function getConfigModalJson(configForm) {
case "inputbool":
itemEntry.value = $el.find(".setup-item-inputbool input").is(":checked");
break;
case "inputcheckbox":
itemEntry.values = [];
$el.find(".setup-item-inputcheckbox input:checked").each(function () {
itemEntry.values.push($(this).val());
});
case "inputselect":
itemEntry.value = $el.find(".setup-item-inputselect select").val();
break;
@@ -761,7 +782,7 @@ function updateReleasesRow(row)
}
function showSearch(selectedIndexer, query, category) {
var selectedIndexers = []
var selectedIndexers = [];
if (selectedIndexer)
selectedIndexers = selectedIndexer.split(",");
$('#select-indexer-modal').remove();
@@ -828,7 +849,11 @@ function showSearch(selectedIndexer, query, category) {
Tracker: releaseDialog.find('#searchTracker').val()
};
window.location.hash = $.param({ search: queryObj.Query, tracker: queryObj.Tracker.join(","), category: queryObj.Category.join(",") });
window.location.hash = Object.entries({
search: encodeURIComponent(queryObj.Query).replace(/%20/g,'+'),
tracker: queryObj.Tracker.join(","),
category: queryObj.Category.join(",")
}).map(([k, v], i) => k + '=' + v).join('&');
$('#jackett-search-perform').html($('#spinner').html());
$('#searchResults div.dataTables_filter input').val("");
@@ -876,7 +901,7 @@ function showSearch(selectedIndexer, query, category) {
enableCaseInsensitiveFiltering: true,
nonSelectedText: 'All'
});
if (category !== undefined) {
searchCategory.val(category.split(","));
@@ -932,6 +957,7 @@ function updateSearchResultTable(element, results) {
"dom": "lfr<\"dataTables_deadfilter\">tip",
"stateSave": true,
"stateDuration": 0,
"bAutoWidth": false,
"pageLength": 20,
"lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]],
@@ -955,22 +981,22 @@ function updateSearchResultTable(element, results) {
"searchable": false,
"type": 'num'
},
{
"targets": 5,
"visible": true,
"searchable": false,
"iDataSort": 4
}
{
"targets": 5,
"visible": true,
"searchable": false,
"iDataSort": 4
}
],
fnPreDrawCallback: function () {
var table = this;
var deadfilterdiv = element.find(".dataTables_deadfilter");
var deadfiltercheckbox = deadfilterdiv.find("input");
if (!deadfiltercheckbox.length) {
deadfilterlabel = $('<label><input type="checkbox" id="jackett-search-results-datatable_deadfilter_checkbox" value="1">Show dead torrents</label>'
deadfilterlabel = $('<label><input type="checkbox" id="jackett-search-results-datatable_deadfilter_checkbox" value="1"> Show dead torrents</label>'
);
deadfilterdiv.append(deadfilterlabel);
deadfiltercheckbox = deadfilterlabel.find("input")
deadfiltercheckbox = deadfilterlabel.find("input");
deadfiltercheckbox.on("change", function () {
settings.deadfilter = this.checked;
table.api().draw();
@@ -1059,6 +1085,7 @@ function bindUIButtons() {
table.DataTable(
{
"stateSave": true,
"stateDuration": 0,
"bAutoWidth": false,
"pageLength": 20,
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "All"]],
@@ -1154,8 +1181,8 @@ function bindUIButtons() {
var jackett_port = Number($("#jackett-port").val());
var jackett_basepathoverride = $("#jackett-basepathoverride").val();
var jackett_external = $("#jackett-allowext").is(':checked');
var jackett_update = $("#jackett-allowupdate").is(':checked');
var jackett_prerelease = $("#jackett-prerelease").is(':checked');
var jackett_update = $("#jackett-allowupdate").is(':checked');
var jackett_prerelease = $("#jackett-prerelease").is(':checked');
var jackett_logging = $("#jackett-logging").is(':checked');
var jackett_omdb_key = $("#jackett-omdbkey").val();
var jackett_omdb_url = $("#jackett-omdburl").val();

View File

@@ -7,10 +7,8 @@ body {
border-radius: 6px;
background-color: white;
max-width: 900px;
margin: 0 auto;
margin-top: 30px;
padding: 20px;
margin-bottom: 30px;
margin: 30px auto;
}
.container-fluid {
@@ -22,7 +20,7 @@ body {
#indexers {
text-align: center;
margin-top: 30px;
margin-top: 20px;
}
.indexer-table {
@@ -116,7 +114,7 @@ hr {
}
.input-area {
margin: 4px 0px;
margin: 4px 0;
}
.input-area > * {
@@ -155,8 +153,7 @@ hr {
#footer {
color: #444444;
margin: 0 auto;
margin-top: 10px;
margin: 10px auto 0;
text-align: center;
}
@@ -170,7 +167,7 @@ hr {
}
.indexer-caps {
padding: 0px 15px 15px 15px;
padding: 0 15px 15px 15px;
border-top: 1px solid #e5e5e5;
}
@@ -178,6 +175,12 @@ hr {
border-bottom: 1px solid #ddd;
}
.jackettlog-narrowcol {
width: 1px;
white-space: nowrap;
vertical-align: top;
}
.jackettlogWarn {
background-color: #FFFF8E !important;
}
@@ -201,23 +204,57 @@ hr {
pre {
display: block;
padding: 3px;
margin: 0 0 0px;
margin: 0 0 0;
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: transparent;
border: 0px;
border-radius: 0px;
border: 0;
border-radius: 0;
word-break: normal;
white-space: pre-wrap; /* Since CSS 2.1 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
.modal-open .modal {
overflow-x: auto; /* Model can be bigger than the screen on mobiles */
}
.dataTables_length {
white-space: nowrap;
}
.dataTables_length select, .dataTables_filter input, .dataTable.compact tfoot td select {
display: inline-block;
height: 26px;
padding: 0 8px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 4px;
}
.dataTables_length select {
width: inherit;
}
.dataTables_filter input {
width: 75%
width: 75%;
}
.dataTable.compact tfoot td {
padding: 4px 0;
}
.dataTable.compact tfoot td select {
height: 26px;
padding: 0;
}
.dataTables_wrapper .dataTables_paginate .paginate_button {
padding: 3px 9px !important;
}
#unconfigured-indexers-template {
@@ -249,7 +286,7 @@ table td.fit{
.tooltip-inner img {
max-width: 250px;
height: auto;
height: auto;
}
.type-public {
@@ -282,7 +319,8 @@ div#jackett-releases-datatable_wrapper {
overflow-x: scroll;
}
input#searchquery {
width:50%;
width: 50%;
display: inline-block;
}
#proxy-warning {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
@@ -14,12 +14,12 @@
<link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144" />
<link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png" />
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png" />
<link rel="mask-icon" href="jackett_medium.png" color="#35c5f4">
<link rel="mask-icon" href="../jackett_medium.png" color="#35c5f4">
<link rel="icon" type="image/ico" href="../favicon.ico" />
<link rel='shortcut icon' type='image/x-icon' href='../favicon.ico?' />
<link rel='shortcut icon' type='image/x-icon' href='../favicon.ico' />
<script type="text/javascript" src="../libs/filesize.min.js?changed=2017083001"></script>
<script type="text/javascript" src="../libs/jquery.min.js?changed=2017083001"></script>
<script type="text/javascript" src="../libs/jquery.dataTables.min.js?changed=2017083001" charset="utf8"></script>
@@ -34,8 +34,8 @@
<link rel="stylesheet" type="text/css" href="../bootstrap/bootstrap.min.css?changed=2017083001">
<link rel="stylesheet" type="text/css" href="../animate.css?changed=2017083001">
<link rel="stylesheet" type="text/css" href="../custom.css?changed=20190401" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20190401" media="only screen and (max-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom.css?changed=20200223" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20200223" media="only screen and (max-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../css/jquery.dataTables.min.css?changed=2017083001">
<link rel="stylesheet" type="text/css" href="../css/bootstrap-multiselect.css?changed=2017083001" />
<link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css?changed=2017083001">
@@ -52,11 +52,11 @@
</div>
<hr />
<div id="can-upgrade-from-mono" hidden class="alert alert-info" role="alert">
<div id="can-upgrade-from-mono" hidden class="alert alert-info" role="alert">
<strong>Standalone version of Jackett is now available - Mono not required</strong> <br>
To upgrade to the standalone version of Jackett, <a href="https://github.com/Jackett/Jackett#install-on-linux-amdx64" target="_blank" class="alert-link">click here</a> for install instructions.
Upgrading is straight forward, simply install the standalone version and your indexers/configuration will carry over.
Benefits include: increased performance, improved stability and no dependency on Mono.
To upgrade to the standalone version of Jackett, <a href="https://github.com/Jackett/Jackett#install-on-linux-amdx64" target="_blank" class="alert-link">click here</a> for install instructions.
Upgrading is straight forward, simply install the standalone version and your indexers/configuration will carry over.
Benefits include: increased performance, improved stability and no dependency on Mono.
</div>
<div class="pull-right">
@@ -235,6 +235,19 @@
{{/if}}
</div>
</script>
<script id="setup-item-inputcheckbox" type="text/x-handlebars-template">
<div class="setup-item-inputcheckbox">
{{#each options}}
<div class="checkbox"><label>
{{#if_in @key ../values}}
<input type="checkbox" data-id="{{../../id}}" class="form-control" value="{{@key}}" checked />
{{else}}
<input type="checkbox" data-id="{{../../id}}" class="form-control" value="{{@key}}" />
{{/if_in}}
{{this}}</label></div>
{{/each}}
</div>
</script>
<script id="setup-item-inputselect" type="text/x-handlebars-template">
<div class="setup-item-inputselect">
<select class="form-control" data-id="{{id}}">
@@ -471,7 +484,7 @@
<div class="modal-body">
<p>You can search all configured indexers from this screen.</p>
<label for="text">Query</label>
<input type="text" name="query" id="searchquery" />
<input class="form-control" type="text" name="query" id="searchquery" />
<label for="tracker">Tracker</label>
<select name="tracker" id="searchTracker" multiple="multiple">
{{#each indexers}}
@@ -603,16 +616,16 @@
<table class="dataTable compact cell-border hover stripe">
<thead>
<tr>
<th style="width: 200px">When</th>
<th style="width: 80px">Level</th>
<th>Date</th>
<th>Level</th>
<th>Message</th>
</tr>
</thead>
<tbody>
{{#each logs}}
<tr class="jackettlog{{Level}}">
<td>{{dateFormat When}}</td>
<td>{{Level}}</td>
<td class="jackettlog-narrowcol">{{dateFormat When}}</td>
<td class="jackettlog-narrowcol">{{Level}}</td>
<td><pre>{{Message}}</pre></td>
</tr>
{{/each}}
@@ -678,6 +691,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=20190427"></script>
<script type="text/javascript" src="../custom.js?changed=20200316"></script>
</body>
</html>

View File

@@ -86,4 +86,4 @@ var api = {
success: callback
});
}
}
}

View File

@@ -1,6 +1,6 @@
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
if(v1 === v2) {
return options.fn(this);
}
return options.inverse(this);
});
});

View File

@@ -1,11 +1,11 @@

Handlebars.registerHelper('dateFormat', function (context, block) {
if (window.moment) {
var f = block.hash.format || "MMM DD, YYYY hh:mm:ss A";
var f = block.hash.format || "YYYY-MM-DD HH:mm:ss";
return moment(context).format(f); //had to remove Date(context)
} else {
return context; // moment plugin not available. return data as is.
};
}
});
Handlebars.registerHelper('jacketTimespan', function (context, block) {
@@ -22,7 +22,7 @@ Handlebars.registerHelper('jacketTimespan', function (context, block) {
if (hours < 48) {
return Math.round(hours) + 'h ago';
}
var days = timeSpan.asDays();
if (days < 365) {
return Math.round(days) + 'd ago';
@@ -34,4 +34,4 @@ Handlebars.registerHelper('jacketTimespan', function (context, block) {
Handlebars.registerHelper('jacketSize', function (context, block) {
return filesize(context, { round: 1 });
});
});

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
@@ -16,7 +16,7 @@
<link href="../bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="../animate.css" rel="stylesheet">
<link href="../custom.css" rel="stylesheet">
<link href="../custom.css?changed=20200223" rel="stylesheet">
<title>Jackett</title>
</head>

View File

@@ -1,4 +1,4 @@
---
---
site: 0daykiev
name: 0day.kiev
description: "0day.kiev.ua is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -50,6 +50,22 @@
type: checkbox
label: Strip Russian Letters
default: true
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: takelogin.php
@@ -84,6 +100,9 @@
incldead: 1
# 0 title 1 title and descr
where: 0
sort: "{{ .Config.sort}}"
type: "{{ .Config.type}}"
rows:
selector: table > tbody > tr.rowtorrentinfo
fields:
@@ -162,4 +181,5 @@
img[src="pic/silverdownload.gif"]: 0.5
"*": 1
uploadvolumefactor:
text: 1
text: 1
# engine n/a

View File

@@ -13,6 +13,7 @@
- https://x1337x.ws/
- https://x1337x.eu/
- https://x1337x.se/
- https://1337x.unblocked.earth/
caps:
categorymappings:
@@ -108,6 +109,7 @@
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q, album, artist, label, year]
settings:
- name: downloadlink
@@ -119,28 +121,40 @@
"http://torrage.info/" : "Torrage.info"
"http://btcache.me/" : "BTcache.me"
"magnet:": "magnet"
- name: sort
type: select
label: Sort requested from site
default: "time"
options:
"time": "created"
"seeders": "seeders"
"size": "size"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
download:
# the .torrent url is on the on the details page
selector: ul li a[href^="{{ .Config.downloadlink }}"]
filters:
- name: replace # temp fix for #5372
args: ["%E2%AD%90", ""]
attribute: href
search:
paths:
# present first page of movies and tv results if there are no search parms supplied
- path: "{{if .Keywords}}sort-search/{{ .Keywords}}/time/desc/1/{{else}}cat/Movies/1/{{end}}"
- path: "{{if .Keywords}}{{else}}cat/TV/1/{{end}}"
- path: "{{if .Keywords}}sort-search/{{ .Keywords}}/time/desc/2/{{else}}{{end}}"
- path: "{{if .Keywords}}sort-search/{{ .Keywords}}/time/desc/3/{{else}}{{end}}"
- path: "{{if .Keywords}}sort-search/{{ .Keywords}}/time/desc/4/{{else}}{{end}}"
- path: "{{if .Keywords}}sort-search/{{ .Keywords}}/time/desc/5/{{else}}{{end}}"
# present first page of movies tv and music results if there are no search parms supplied (20 hits per page)
- path: "{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}sort-search{{else}}cat/Movies{{end}}{{if or (.Query.Album) (.Query.Artist) }}/{{ or (.Query.Album) (.Query.Artist) }}{{else}}/{{ .Keywords }}{{end}}{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}/{{else}}{{end}}{{ .Config.sort }}/{{ .Config.type }}/1/"
- path: "{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}sort-search{{else}}cat/TV{{end}}{{if or (.Query.Album) (.Query.Artist) }}/{{ or (.Query.Album) (.Query.Artist) }}{{else}}/{{ .Keywords }}{{end}}{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}/{{else}}{{end}}{{ .Config.sort }}/{{ .Config.type }}/{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}2{{else}}1{{end}}/"
- path: "{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}sort-search{{else}}cat/Music{{end}}{{if or (.Query.Album) (.Query.Artist) }}/{{ or (.Query.Album) (.Query.Artist) }}{{else}}/{{ .Keywords }}{{end}}{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}/{{else}}{{end}}{{ .Config.sort }}/{{ .Config.type }}/{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}3{{else}}1{{end}}/"
keywordsfilters:
- name: replace # use this as a workaround till #893 is implemented
args: ["Greys Anatomy", "Grey's Anatomy"]
rows:
selector: tr:has(a[href^="/torrent/"])
fields:
title:
selector: td[class^="coll-1"] a[href^="/torrent/"]
@@ -198,7 +212,7 @@
- name: dateparse
args: "Jan. 2 06"
date:
# # (today) 12:25am
# (today) 12:25am
optional: true
selector: td[class^="coll-date"]:contains(":")
filters:
@@ -211,6 +225,7 @@
leechers:
selector: td[class^="coll-3"]
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# engine n/a

View File

@@ -1,4 +1,4 @@
---
---
site: 2fast4you
name: 2 Fast 4 You
description: "2 Fast 4 You is a FRENCH Private site for TV / MOVIES / GENERAL"
@@ -82,6 +82,30 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "id"
options:
"id": "created"
"seeders": "seeders"
"size": "size"
"name": "title"
- name: order
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: account-login.php
method: post
@@ -108,11 +132,15 @@
freeleech: 0
# 0 any 1 French 2 English 3 Multi 4-8 32-41
lang: 0
sort: "{{ .Config.sort}}"
order: "{{ .Config.order}}"
keywordsfilters:
- name: re_replace
args: ["^$", "%"] # replace empty search string with %
rows:
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
fields:
category:
selector: a[href^="torrents.php?cat="]
@@ -140,15 +168,16 @@
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
date:
text: now
downloadvolumefactor:
case:
img[title="freeleech"]: "0"
"*": "1"
img[title="freeleech"]: 0
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1
# engine n/a

View File

@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://www.3dtorrents.org/
- http://www.3dtorrents.org/ # site does not support https ERR_CONNECTION_CLOSED
caps:
categorymappings:
@@ -33,6 +33,18 @@
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: index.php?page=login&amp;returnto=index.php
method: form
@@ -48,19 +60,21 @@
- selector: span.errormsg
test:
path: index.php
search:
paths:
- path: index.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
page: torrents
category: 0
3dformat: 0
active: 1
rows:
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
category:
selector: a[href^="index.php?page=torrents&category="]
@@ -93,8 +107,9 @@
args: "02/01/2006"
downloadvolumefactor:
case:
img[title^="You get 50% off download count on this torrent"]: "0.5"
"*": "1"
img[title^="You get 50% off download count on this torrent"]: 0.5
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1
# xbtit

View File

@@ -1,4 +1,4 @@
---
---
site: 3evils
name: 3evils
description: "3evils is a Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -31,6 +31,30 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: takelogin.php
method: post
@@ -56,10 +80,14 @@
searchin: title
# 0 active 1 incldead 2 onlydead
incldead: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.responsive-card-table tr:has(td[data-label])
filters:
- name: andmatch
fields:
category:
selector: td[data-label="Type"] a
@@ -122,4 +150,5 @@
"*": 1
uploadvolumefactor:
case:
"*": 1
"*": 1
# U-232 V5

View File

@@ -26,6 +26,7 @@
- {id: 2, cat: TV/SD, "TV/SD MP4/mkv"}
- {id: 31, cat: TV/SD, "TV/XviD"}
- {id: 18, cat: PC/Games, "Games/PC"}
- {id: 44, cat: Audio, "Music/Pack"}
- {id: 12, cat: Audio/Lossless, "Music/FLAC"}
- {id: 15, cat: Audio/MP3, "Music/MP3"}
- {id: 37, cat: Audio, "Radio"}
@@ -38,6 +39,29 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "time"
options:
"time": "created"
"seeders": "seeders"
"size": "size"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: login.php
method: form
@@ -57,24 +81,26 @@
- path: torrents.php
inputs:
# https://4thd.xyz/torrents.php?order_by=time&order_way=desc&filter_freeleech=1&title=twilight+zone&search_type=1&taglist=&tags_type=0
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
order_by: time
order_way: desc
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
# 0 all 1 onlyfree
filter_freeleech: 0
title: "{{ .Keywords }}"
search_type: 1
taglist: ""
tags_type: 0
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
category:
selector: td.cats_col div a
attribute: href
filters:
- name: regexp
args: "\\[(\\d+)\\]"
args: \[(\d+)\]
title:
selector: a[href^="torrents.php?id="]
details:
@@ -97,6 +123,9 @@
selector: td:nth-child(3)
date:
selector: td:nth-child(5)
filters:
- name: replace
args: ["Never", "99 years ago"]
size:
selector: td:nth-child(6)
grabs:
@@ -112,3 +141,4 @@
uploadvolumefactor:
case:
"*": 1
# Engine n/a

View File

@@ -0,0 +1,158 @@
---
site: 52pt
name: 52PT
description: "52PT is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://52pt.site/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
- {id: 406, cat: Audio/Video, desc: "MusicVideo/音乐MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/运体"}
- {id: 409, cat: Other, desc: "Misc/其他"}
- {id: 410, cat: Other, desc: "Opera/戏曲 曲艺"}
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
modes:
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("失败"))
- selector: td.embedded:has(h2:contains("登录失败"))
test:
path: index.php
selector: a[href*="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 incldead 1 active 2 dead
incldead: 0
# 0 all 1 normal 2 free 3 2x 4 2xfree 5 50% 6 2x50% 7 30%
spstate: 0
# 0 title 1 descr 3 uploaded 4 imdburl
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
# 0 AND 1 OR 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[href^="details.php?id="]
title:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdb:
optional: true
selector: div.imdb_100 > a
attribute: href
date:
# time type: time elapsed (default)
selector: td:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date:
# time added
selector: td:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
description:
selector: td:nth-child(2)
remove: a, img
# NexusPHP Standard v1.5 Beta 4

View File

@@ -0,0 +1,77 @@
---
site: 7torrents
name: 7torrents
description: "7torrents is a Public BitTorrent DHT search engine."
language: en-us
type: public
encoding: UTF-8
links:
- https://www.7torrents.cc/
caps:
categories:
1: Other
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: info
type: info
default: 7torrents does not use categories. In your software Indexer settings, set the category to 7000.
- name: sort
type: select
label: Sort requested from site
default: "created"
options:
"created": "created"
"length": "size"
"seeders": "seeders"
search:
# https://www.7torrents.cc/search?query=2020&sort=created
paths:
- path: search
inputs:
query: "{{ if .Keywords }}{{ .Keywords }}{{else}}2020{{end}}"
sort: "{{ .Config.sort }}"
rows:
selector: div.media
fields:
category:
text: 1
title:
selector: div.media
attribute: data-name
details:
selector: div.media h5 a
attribute: href
download:
selector: div.media-right a[href*="/torrent/"]
attribute: href
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
date:
selector: div.media
attribute: data-added
filters:
- name: timeago
size:
selector: div.media
attribute: data-size
seeders:
selector: div.media
attribute: data-seeders
leechers:
selector: div.media
attribute: data-leechers
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -107,6 +107,22 @@
- name: pass
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seeds": "seeders"
"size": "size"
"name": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: signin.php
@@ -123,15 +139,18 @@
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{.Query.IMDBID}}{{else}}{{.Keywords}}{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0=title 1=descr 2=nfo 3=all
search_where: "{{if .Query.IMDBID}}3{{else}}0{{end}}"
search_where: "{{ if .Query.IMDBID }}3{{else}}0{{end}}"
# 0=active 1=all 2=dead 4=upload 5=doubleup 6=halfdown 7=highlight =request
status: 1
orderby: "{{ .Config.sort }}"
sort: "{{ .Config.type }}"
rows:
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
fields:
title:
selector: a[href^="details.php"]
@@ -199,11 +218,12 @@
args: "02.01.2006 15:04:05"
downloadvolumefactor:
case:
img[alt="OU"]: "0"
img[alt="D/2"]: "0.5"
img[alt="D / 2"]: "0.5"
"*": "1"
img[alt="OU"]: 0
img[alt="D/2"]: 0.5
img[alt="D / 2"]: 0.5
"*": 1
uploadvolumefactor:
case:
img[alt="2xU"]: "2"
"*": "1"
img[alt="2xU"]: 2
"*": 1
# engine n/a

View File

@@ -0,0 +1,100 @@
---
site: academictorrents
name: AcademicTorrents
description: "AcademicTorrents is a Public Community-Maintained Distributed Repository for datasets and scientific knowledge."
language: en-us
type: public
encoding: UTF-8
links:
- https://academictorrents.com/
caps:
categorymappings:
- {id: 5, cat: Books, desc: "Paper"}
- {id: 6, cat: Other, desc: "Dataset"}
- {id: 7, cat: TV/Documentary, desc: "Course"}
modes:
search: [q]
settings:
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seeders": "seeders"
"size": "size"
"name": "title"
- name: type
type: select
label: Order requested from site
default: "DESC"
options:
"DESC": "desc"
"ASC": "asc"
search:
# https://academictorrents.com/browse.php?search=&c5=1&c6=1&c7=1&sort_field=added&sort_dir=DESC
paths:
- path: browse.php
- path: browse.php
inputs:
page: 1
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
sort_field: "{{ .Config.sort }}"
sort_dir: "{{ .Config.type }}"
rows:
selector: table.table> tbody > tr:has(a[href^="/browse.php?cat="])
filters:
- name: andmatch
fields:
category:
selector: a[href^="/browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="/details/"]
details:
selector: a[href^="/details/"]
attribute: href
download:
# /download/08078e0894099530913e9335bdbc804f42f6e872.torrent"
selector: a[href^="/details/"]
attribute: href
filters:
- name: replace
args: ["/details/", "/download/"]
- name: append
args: ".torrent"
date:
selector: td:nth-child(4)
filters:
- name: dateparse
args: "2006-01-02"
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
text: 0
seeders:
selector: td:nth-child(7):not(:empty)
optional: true
filters:
- name: replace
args: ["+", ""]
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -8,13 +8,15 @@
encoding: UTF-8
links:
- https://acg.rip/
certificates:
- bfd88de41aeeda5c9d98d5e081e8c4ec40204b6b # expired 4 jan 20
caps:
categories:
1: TV
modes:
tv-search: [q, season, ep]
search: [q]
tv-search: [q, season, ep]
settings: []
@@ -22,9 +24,11 @@
paths:
- path: /
inputs:
term: "{{ .Query.Keywords }}"
term: "{{ .Keywords }}"
rows:
selector: tbody tr
fields:
title:
selector: td.title > span.title a
@@ -50,6 +54,7 @@
filters:
- name: fuzzytime
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# engine n/a

View File

@@ -38,14 +38,17 @@
download:
selector: a[href^="magnet:?xt="]
attribute: href
search:
paths:
# https://www.acgsou.com/1.html
# https://www.acgsou.com/search.php?keyword=test
- path: "{{ if .Keywords }}search.php?keyword={{ .Keywords }}{{else}}1.html{{end}}"
rows:
selector: table tbody tr[class^="alt"]
selector: table tbody tr[class^="alt"]:has(td:nth-child(3) a)
fields:
date:
selector: td:nth-child(1):contains("昨天")
@@ -86,6 +89,7 @@
leechers:
text: 1
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# BTMaster 2.1.1

View File

@@ -1,4 +1,4 @@
---
---
site: acidlounge
name: Acid-Lounge
description: "Acid Lounge (A-L) is a Private Torrent Tracker for 0DAY / GENERAL"

View File

@@ -1,4 +1,4 @@
---
---
site: aftershock
name: Aftershock
description: "Aftershock is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"
@@ -53,6 +53,30 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "0"
options:
"0": "created"
"6": "seeders"
"4": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: takelogin.php
method: post
@@ -78,11 +102,17 @@
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table tbody#torrent_background tr:has(a.index)
filters:
- name: andmatch
fields:
title:
selector: a.index
@@ -134,9 +164,10 @@
args: "2006-01-02 15:04:05"
downloadvolumefactor:
case:
span.icon_gift: "0"
"*": "1"
span.icon_gift: 0
"*": 1
uploadvolumefactor:
case:
span.icon_upload: "2"
"*": "1"
span.icon_upload: 2
"*": 1
# XBT v3

View File

@@ -1,126 +0,0 @@
---
site: alein
name: Alein
description: "Alein is a BULGARIAN Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
language: bg
type: semi-private
encoding: UTF-8
links:
- http://alein.org/
caps:
categorymappings:
- {id: 1, cat: Movies/SD, desc: "Movies-XviD"}
- {id: 15, cat: Movies/HD, desc: "Movies-x264"}
- {id: 41, cat: Movies, desc: "Movies-BG"}
- {id: 14, cat: Movies/HD, desc: "Movies-HD"}
- {id: 48, cat: Movies/UHD, desc: "Movies-x265"}
- {id: 39, cat: Movies/Foreign, desc: "Movies-XviD-Rus"}
- {id: 40, cat: Movies/Foreign, desc: "Movies-x264-Rus"}
- {id: 20, cat: Movies/Other, desc: "Movies-Animations"}
- {id: 16, cat: Movies/3D, desc: "Movies-3D"}
- {id: 5, cat: TV/Anime, desc: "Movies-Anime"}
- {id: 21, cat: Movies/BluRay, desc: "Movies-Blu-ray"}
- {id: 22, cat: TV/Documentary , desc: "Movies-Documentaries"}
- {id: 11, cat: Movies/DVD, desc: "Movies-DVD-R"}
- {id: 47, cat: TV/SD, desc: "TV-Episodes"}
- {id: 46, cat: TV/HD, desc: "TV-Episodes-HD"}
- {id: 3, cat: PC/ISO, desc: "Games-PC ISO"}
- {id: 31, cat: Console/Xbox, desc: "Games-XBOX"}
- {id: 33, cat: Console/PSP, desc: "Games-PS"}
- {id: 2, cat: Audio/MP3, desc: "Music-MP3"}
- {id: 50, cat: Audio/Lossless, desc: "Music-FLAC"}
- {id: 18, cat: Audio/Video, desc: "Music-Video"}
- {id: 9, cat: PC/0day, desc: "Software-Windows"}
- {id: 8, cat: PC, desc: "Software-Linux"}
- {id: 36, cat: Other, desc: "Trailer"}
- {id: 34, cat: Other/Misc, desc: "Pictures"}
- {id: 4, cat: Other, desc: "Other"}
- {id: 6, cat: Books/Comics, desc: "Books-Comics"}
- {id: 24, cat: PC/Phone-Other, desc: "Mobile-GSM"}
- {id: 23, cat: TV/Sport, desc: "Sport"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: index.php?page=login
method: form
form: form[action*="/index.php?page=login"]
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: td.lista span[style="color:#FF0000;"]
test:
path: /
selector: :has(a[href="logout.php"])
search:
paths:
# http://alein.org/index.php?page=torrents&category=1%3B15%3B41%3B14%3B48%3B39%3B20%3B16%3B5%3B21%3B22%3B11&search=venom&active=1
- path: index.php
inputs:
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
search: "{{if .Keywords }}{{.Keywords}}{{else}}{{end}}"
active: "1"
rows:
selector: tr.trclass:not(:has(td.lista-cat-rec))
fields:
title:
selector: td a[href*="id="]
details:
selector: td a[href*="id="]
attribute: href
category:
selector: td a[href*="category="]
attribute: href
filters:
- name: querystring
args: category
download:
selector: td a[href*="id="]
attribute: href
filters:
- name: querystring
args: id
- name: prepend
args: "download.php?id="
- name: append
args: "&f={{.Result.title}}.torrent"
banner:
selector: td a[href*="id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) width="
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(9)
date:
selector: td:nth-child(5)
filters:
- name: dateparse
args: "02/01/2006"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -1,4 +1,4 @@
---
---
site: alexfilm
name: AlexFilm
description: "AlexFilm is a RUSSIAN Semi-Private Torrent Tracker for TV"
@@ -9,6 +9,8 @@
- https://alexfilm.org/
legacylinks:
- https://alexfilm.cc/
certificates:
- 9200e15406272061df1f609a0f40d76282f54295 # expired 30 nov '19
caps:
categorymappings:
@@ -29,6 +31,22 @@
type: checkbox
label: Strip Russian Letters
default: false
- name: sort
type: select
label: Sort requested from site
default: "1"
options:
"1": "created"
"10": "seeders"
"7": "size"
"2": "title"
- name: type
type: select
label: Order requested from site
default: "1"
options:
"2": "desc"
"1": "asc"
login:
path: login.php
@@ -64,9 +82,9 @@
prev_ds: 0
prev_tor_type: 0
# sort by 1=registered 2=topicTitle 4=completed 10=seed 11=leech 12=up 13=down 5=replies 6=views 7=size 8=lastPost 9=seedLastSeen
o: 1
o: "{{ .Config.sort }}"
# 1=asc 2=desc
s: 2
s: "{{ .Config.type }}"
# show category
dc: 0
# show forum
@@ -89,6 +107,7 @@
rows:
selector: tr[id^="tor_"]
fields:
title:
selector: td a.tLink
@@ -129,9 +148,10 @@
selector: td:nth-child(6) span:nth-last-child(1)
downloadvolumefactor:
case:
img[src="./styles/images/tor_gold.gif"]: "0"
img[src="./styles/images/tor_silver.gif"]: "0.5"
"*": "1"
img[src="./styles/images/tor_gold.gif"]: 0
img[src="./styles/images/tor_silver.gif"]: 0.5
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1
# engine n/a

View File

@@ -21,96 +21,92 @@
type: info
label: "Search results"
default: "Set <b>Exibição De Torrents</b> to <b>Lista</b> in your <b>Minhas Configurações</b>.<br />Using <b>Capas</b> is not supported and will return 0 results."
- name: sort
type: select
label: Sort requested from site
default: "id"
options:
"id": "created"
"seeders": "seeders"
"size": "size"
"name": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
caps:
categorymappings:
- {id: 107, cat: XXX, desc: "Adultos: Gay"}
- {id: 75, cat: XXX, desc: "Adultos: Hentai"}
- {id: 108, cat: XXX, desc: "Adultos: Transex/Female"}
- {id: 74, cat: XXX, desc: "Adultos: XXX"}
- {id: 75, cat: XXX, desc: "Adultos: Hentai"}
- {id: 69, cat: TV/Anime, desc: "Anime: Anime"}
- {id: 118, cat: TV/Anime, desc: "Anime: Séries"}
- {id: 116, cat: TV/Anime, desc: "Anime: Filmes"}
- {id: 21, cat: PC/0day, desc: "Aplicativos: Windows"}
- {id: 22, cat: PC/Mac, desc: "Aplicativos: Mac"}
- {id: 118, cat: TV/Anime, desc: "Anime: Séries"}
- {id: 23, cat: PC/Phone-Android, desc: "Aplicativos: Android"}
- {id: 25, cat: PC, desc: "Aplicativos: Linux"}
- {id: 26, cat: PC/Phone-IOS, desc: "Aplicativos: iPhone"}
- {id: 27, cat: PC/Phone-IOS, desc: "Aplicativos: iPad"}
- {id: 26, cat: PC/Phone-IOS, desc: "Aplicativos: iPhone"}
- {id: 28, cat: PC/Phone-IOS, desc: "Aplicativos: iPod"}
- {id: 71, cat: Books, desc: "Apostila: Cursos"}
- {id: 25, cat: PC, desc: "Aplicativos: Linux"}
- {id: 22, cat: PC/Mac, desc: "Aplicativos: Mac"}
- {id: 21, cat: PC/0day, desc: "Aplicativos: Windows"}
- {id: 72, cat: Books, desc: "Apostila: Apostila"}
- {id: 71, cat: Books, desc: "Apostila: Cursos"}
- {id: 121, cat: Audio/Audiobook, desc: "Ebook: Audio-book"}
- {id: 112, cat: Books, desc: "Ebook: HQs"}
- {id: 67, cat: Books, desc: "Ebook: Livros"}
- {id: 68, cat: Books, desc: "Ebook: Revistas"}
- {id: 112, cat: Books, desc: "Ebook: HQs"}
- {id: 119, cat: Movies, desc: "Filmes:"}
- {id: 70, cat: XXX, desc: "Fotos: XXX"}
- {id: 79, cat: Console/PS4, desc: "Jogos: Ps4"}
- {id: 57, cat: Console, desc: "Jogos: Android"}
- {id: 52, cat: Console, desc: "Jogos: Dreamcast"}
- {id: 109, cat: Console, desc: "Jogos: Emulação"}
- {id: 47, cat: PC/Games, desc: "Jogos: Pc"}
- {id: 61, cat: Console, desc: "Jogos: Emuladores e Roms"}
- {id: 48, cat: PC/Mac, desc: "Jogos: Mac"}
- {id: 58, cat: Console/NDS, desc: "Jogos: Nintendo DS"}
- {id: 110, cat: Console, desc: "Jogos: Nintendo Switch"}
- {id: 47, cat: PC/Games, desc: "Jogos: Pc"}
- {id: 49, cat: Console, desc: "Jogos: Ps1"}
- {id: 50, cat: Console, desc: "Jogos: Ps2"}
- {id: 51, cat: Console/PS3, desc: "Jogos: Ps3"}
- {id: 52, cat: Console, desc: "Jogos: Dreamcast"}
- {id: 79, cat: Console/PS4, desc: "Jogos: Ps4"}
- {id: 82, cat: Console/PSP, desc: "Jogos: PSP"}
- {id: 55, cat: Console/Wii, desc: "Jogos: Wii"}
- {id: 54, cat: Console/Xbox 360, desc: "Jogos: Xbox360"}
- {id: 56, cat: Console/Xbox, desc: "Jogos: Xbox"}
- {id: 55, cat: Console/Wii, desc: "Jogos: Wii"}
- {id: 58, cat: Console/NDS, desc: "Jogos: Nintendo DS"}
- {id: 110, cat: Console, desc: "Jogos: Nintendo Switch"}
- {id: 57, cat: Console, desc: "Jogos: Android"}
- {id: 82, cat: Console/PSP, desc: "Jogos: PSP"}
- {id: 78, cat: Console/Xbox One, desc: "Jogos: Xbox One"}
- {id: 29, cat: Audio, desc: "Musica: Axé"}
- {id: 31, cat: Audio, desc: "Musica: Funk"}
- {id: 32, cat: Audio, desc: "Musica: Pagode"}
- {id: 33, cat: Audio, desc: "Musica: Hip-Hop"}
- {id: 34, cat: Audio, desc: "Musica: Rap"}
- {id: 36, cat: Audio, desc: "Musica: Rock"}
- {id: 37, cat: Audio, desc: "Musica: Hard Rock"}
- {id: 38, cat: Audio, desc: "Musica: Blues"}
- {id: 39, cat: Audio, desc: "Musica: Dance"}
- {id: 40, cat: Audio, desc: "Musica: Discografia"}
- {id: 43, cat: Audio, desc: "Musica: Dubstep"}
- {id: 41, cat: Audio, desc: "Musica: Erudita"}
- {id: 42, cat: Audio, desc: "Musica: Forró"}
- {id: 43, cat: Audio, desc: "Musica: Dubstep"}
- {id: 46, cat: Audio, desc: "Musica: Sertanejo"}
- {id: 45, cat: Audio, desc: "Musica: Samba"}
- {id: 77, cat: Audio, desc: "Musica: Outros"}
- {id: 76, cat: Audio, desc: "Musica: Reggae"}
- {id: 83, cat: Audio, desc: "Musica: Gospel"}
- {id: 115, cat: Audio, desc: "Musica: POP"}
- {id: 114, cat: Audio, desc: "Musica: MPB"}
- {id: 31, cat: Audio, desc: "Musica: Funk"}
- {id: 84, cat: Audio, desc: "Musica: Game (OST)"}
- {id: 88, cat: TV, desc: "Series: Musical"}
- {id: 86, cat: TV, desc: "Series: Guerra"}
- {id: 105, cat: TV, desc: "Series: Biografia"}
- {id: 99, cat: TV/Sport, desc: "Series: Esportes"}
- {id: 103, cat: TV, desc: "Series: Ficção"}
- {id: 102, cat: TV, desc: "Series: Infantil"}
- {id: 89, cat: TV, desc: "Series: Nacionais"}
- {id: 100, cat: TV, desc: "Series: Policial"}
- {id: 98, cat: TV, desc: "Series: Religioso"}
- {id: 90, cat: TV, desc: "Series: Suspense"}
- {id: 91, cat: TV, desc: "Series: Western"}
- {id: 92, cat: TV, desc: "Series: Animação"}
- {id: 93, cat: TV, desc: "Series: Clássicos"}
- {id: 94, cat: TV, desc: "Series: Comédia"}
- {id: 95, cat: TV/Documentary, desc: "Series: Documentário"}
- {id: 96, cat: TV, desc: "Series: Drama"}
- {id: 97, cat: TV, desc: "Series: Romance"}
- {id: 101, cat: TV, desc: "Series: Terror"}
- {id: 104, cat: TV, desc: "Series: Ação"}
- {id: 24, cat: TV, desc: "Series: Cartoon"}
- {id: 19, cat: TV/HD, desc: "Series: HD"}
- {id: 20, cat: TV, desc: "Series: Seriados"}
- {id: 87, cat: TV, desc: "Series: Aventura"}
- {id: 83, cat: Audio, desc: "Musica: Gospel"}
- {id: 37, cat: Audio, desc: "Musica: Hard Rock"}
- {id: 33, cat: Audio, desc: "Musica: Hip-Hop"}
- {id: 114, cat: Audio, desc: "Musica: MPB"}
- {id: 77, cat: Audio, desc: "Musica: Outros"}
- {id: 32, cat: Audio, desc: "Musica: Pagode"}
- {id: 115, cat: Audio, desc: "Musica: POP"}
- {id: 34, cat: Audio, desc: "Musica: Rap"}
- {id: 76, cat: Audio, desc: "Musica: Reggae"}
- {id: 36, cat: Audio, desc: "Musica: Rock"}
- {id: 45, cat: Audio, desc: "Musica: Samba"}
- {id: 46, cat: Audio, desc: "Musica: Sertanejo"}
- {id: 120, cat: TV, desc: "Series:"}
- {id: 65, cat: TV, desc: "Shows: Show"}
- {id: 63, cat: TV, desc: "Tv: Aberta"}
- {id: 62, cat: TV/Sport, desc: "Tv: Esportes"}
- {id: 64, cat: TV, desc: "Tv: Fechada"}
- {id: 73, cat: TV, desc: "Video Aula: Video Aula"}
- {id: 999, cat: Other, desc: "Error Cat not Found"}
modes:
search: [q]
@@ -123,7 +119,7 @@
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: "yes"
remember: yes
error:
- selector: div.alert-error
test:
@@ -152,18 +148,20 @@
inputs:
page: 4
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ re_replace .Keywords \"[\\s]+\" \"%\" }}"
incldead: 1
freeleech: 0
lang: 0
sort: "id"
order: "desc"
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["([12][0-9]{3})", ""]
rows:
selector: div#fancy-list-group ul.list-group li.list-group-item
fields:
_quality:
selector: div.list-group-item-content p.m-0 span.badge-primary:contains("1080p"), div.list-group-item-content p.m-0 span.badge-primary:contains("720p"), div.list-group-item-content p.m-0 span.badge-primary:contains("4k")
@@ -200,93 +198,82 @@
attribute: src
case:
# unfortunately the site does not have category numbers on the results page, just a .png which can apply to both movies and tv.
# therefore I've order the list to favour movies,
# therefore I've order the list to favour movies,
# also, not all .png have been verified as the site has many empty categories. their image names have been extrapolated from the cat desc.
"[src$=\"/XXXZ.png\"]": "74"
"[src$=\"/Hentai.png\"]": "75"
"[src$=\"/Anime.png\"]": "69"
"[src$=\"/Windows.png\"]": "21"
"[src$=\"/Mac.png\"]": "22"
"[src$=\"/Android.png\"]": "23"
"[src$=\"/Linux.png\"]": "25"
"[src$=\"/iPhone.png\"]": "26"
"[src$=\"/iPad.png\"]": "27"
"[src$=\"/iPod.png\"]": "28"
"[src$=\"/Cursos.png\"]": "71"
"[src$=\"/Apostila.png\"]": "72"
"[src$=\"/E-books.png\"]": "67"
"[src$=\"/Revista.png\"]": "68"
"[src$=\"/HQ.png\"]": "112"
"[src$=\"/Filmes.png\"]": "119"
"[src$=\"/Revistas-XXX.png\"]": "70"
"[src$=\"/PS4.png\"]": "79"
"[src$=\"/Jogos-PC.png\"]": "47"
"[src$=\"/Emulador.png\"]": "61"
"[src$=\"/Emulacao.png\"]": "109"
"[src$=\"/Jogos-Mac.png\"]": "48"
"[src$=\"/Jogos-PS1.png\"]": "49"
"[src$=\"/Jogos-PS2.png\"]": "50"
"[src$=\"/Jogos-PS3.png\"]": "51"
"[src$=\"/Jogos-Dreamcast.png\"]": "52"
"[src$=\"/Jogos-Xbox360.png\"]": "54"
"[src$=\"/Jogos-Xbox.png\"]": "56"
"[src$=\"/Jogos-Wii.png\"]": "55"
"[src$=\"/Jogos-DS.png\"]": "58"
"[src$=\"/jogosandroid.png\"]": "57"
"[src$=\"/Jogos-PSP.png\"]": "82"
"[src$=\"/Jogos-NS.png\"]": "110"
"[src$=\"/Jogos-XboxOne.png\"]": "78"
"[src$=\"/Axe.png\"]": "29"
"[src$=\"/Funk.png\"]": "31"
"[src$=\"/Pagode.png\"]": "32"
"[src$=\"/Hip_Hop.png\"]": "33"
"[src$=\"/Rap.png\"]": "34"
"[src$=\"/Rock.png\"]": "36"
"[src$=\"/Hard-Rock.png\"]": "37"
"[src$=\"/Blues.png\"]": "38"
"[src$=\"/Dance.png\"]": "39"
"[src$=\"/Discografia.png\"]": "40"
"[src$=\"/Erudita.png\"]": "41"
"[src$=\"/Forro.png\"]": "42"
"[src$=\"/Dubstep.png\"]": "43"
"[src$=\"/Sertanejo.png\"]": "46"
"[src$=\"/Samba.png\"]": "45"
"[src$=\"/Musica-Outros.png\"]": "77"
"[src$=\"/Reggae.png\"]": "76"
"[src$=\"/Gospel.png\"]": "83"
"[src$=\"/POP.png\"]": "115"
"[src$=\"/MPB.png\"]": "114"
"[src$=\"/OST.png\"]": "84"
"[src$=\"/Musical.png\"]": "88"
"[src$=\"/Guerra.png\"]": "86"
"[src$=\"/Biografia.png\"]": "105"
"[src$=\"/Esportes.png\"]": "99"
"[src$=\"/Ficcao.png\"]": "103"
"[src$=\"/Infantil.png\"]": "102"
"[src$=\"/Nacionais.png\"]": "89"
"[src$=\"/Policial.png\"]": "100"
"[src$=\"/Religioso.png\"]": "98"
"[src$=\"/Suspense.png\"]": "90"
"[src$=\"/Western.png\"]": "91"
"[src$=\"/Animacao.png\"]": "92"
"[src$=\"/Classicos.png\"]": "93"
"[src$=\"/Comedia.png\"]": "94"
"[src$=\"/Documentario.png\"]": "95"
"[src$=\"/Drama.png\"]": "96"
"[src$=\"/Romance.png\"]": "97"
"[src$=\"/Terror.png\"]": "101"
"[src$=\"/Acao.png\"]": "104"
"[src$=\"/Cartoon.png\"]": "24"
"[src$=\"/Serieshd.png\"]": "19"
"[src$=\"/Seriado.png\"]": "20"
"[src$=\"/Aventura.png\"]": "87"
"[src$=\"/Shows.png\"]": "65"
"[src$=\"/Aberta.png\"]": "63"
"[src$=\"/Esporte.png\"]": "62"
"[src$=\"/Fechada.png\"]": "64"
"[src$=\"/Videoaula.png\"]": "73"
"[src$=\"/XXXZ.png\"]": 74
"[src$=\"/Hentai.png\"]": 75
"[src$=\"/Anime.png\"]": 69
"[src$=\"/Windows.png\"]": 21
"[src$=\"/Mac.png\"]": 22
"[src$=\"/Android.png\"]": 23
"[src$=\"/Linux.png\"]": 25
"[src$=\"/iPhone.png\"]": 26
"[src$=\"/iPad.png\"]": 27
"[src$=\"/iPod.png\"]": 28
"[src$=\"/Cursos.png\"]": 71
"[src$=\"/Apostila.png\"]": 72
"[src$=\"/E-books.png\"]": 67
"[src$=\"/Revista.png\"]": 68
"[src$=\"/HQ.png\"]": 112
"[src$=\"/Filmes.png\"]": 119
"[src$=\"/Revistas-XXX.png\"]": 70
"[src$=\"/PS4.png\"]": 79
"[src$=\"/Jogos-PC.png\"]": 47
"[src$=\"/Emulador.png\"]": 61
"[src$=\"/Emulacao.png\"]": 109
"[src$=\"/Jogos-Mac.png\"]": 48
"[src$=\"/Jogos-PS1.png\"]": 49
"[src$=\"/Jogos-PS2.png\"]": 50
"[src$=\"/Jogos-PS3.png\"]": 51
"[src$=\"/Jogos-Dreamcast.png\"]": 52
"[src$=\"/Jogos-Xbox360.png\"]": 54
"[src$=\"/Jogos-Xbox.png\"]": 56
"[src$=\"/Jogos-Wii.png\"]": 55
"[src$=\"/Jogos-DS.png\"]": 58
"[src$=\"/jogosandroid.png\"]": 57
"[src$=\"/Jogos-PSP.png\"]": 82
"[src$=\"/Jogos-NS.png\"]": 110
"[src$=\"/Jogos-XboxOne.png\"]": 78
"[src$=\"/Axe.png\"]": 29
"[src$=\"/Funk.png\"]": 31
"[src$=\"/Pagode.png\"]": 32
"[src$=\"/HIP_HOP.png\"]": 33
"[src$=\"/Rap.png\"]": 34
"[src$=\"/Rock.png\"]": 36
"[src$=\"/Hard-Rock.png\"]": 37
"[src$=\"/Blues.png\"]": 38
"[src$=\"/Dance.png\"]": 39
"[src$=\"/Discografia.png\"]": 40
"[src$=\"/Erudita.png\"]": 41
"[src$=\"/Forro.png\"]": 42
"[src$=\"/Dubstep.png\"]": 43
"[src$=\"/Sertanejo.png\"]": 46
"[src$=\"/Samba.png\"]": 45
"[src$=\"/Musica-Outros.png\"]": 77
"[src$=\"/Reggae.png\"]": 76
"[src$=\"/Gospel.png\"]": 83
"[src$=\"/POP.png\"]": 115
"[src$=\"/MPB.png\"]": 114
"[src$=\"/OST.png\"]": 84
"[src$=\"/Seriados.png\"]": 120
"[src$=\"/Shows.png\"]": 65
"[src$=\"/Aberta.png\"]": 63
"[src$=\"/Esporte.png\"]": 62
"[src$=\"/Fechada.png\"]": 64
"[src$=\"/Videoaula.png\"]": 73
"*": 999
date:
text: now
date:
selector: p:contains("Lançado:")
optional: true
filters:
- name: regexp
args: "Lançado: (.+?)$"
- name: re_replace
args: [" (\\d:)", " 0$1"]
- name: dateparse
args: "02/01/06 15:04:05"
size:
selector: div.list-group-item-content p.m-0 span.badge-info
seeders:
@@ -297,8 +284,8 @@
selector: div.list-group-item-controls a:nth-child(3)
downloadvolumefactor:
case:
"span.badge-success:contains(\"FREE\")": "0"
"*": "1"
"span.badge-success:contains(\"FREE\")": 0
"*": 1
uploadvolumefactor:
case:
"*": "1"
text: 1
# engine n/a

View File

@@ -1,88 +0,0 @@
---
site: anidex
name: Anidex
description: "Anidex is a Public torrent tracker and indexer, primarily for English fansub groups of anime"
language: en-us
encoding: UTF-8
type: public
links:
- https://anidex.info/
caps:
categorymappings:
- {id: 1, cat: TV/Anime, desc: "Anime - Sub"}
- {id: 2, cat: TV/Anime, desc: "Anime - Raw"}
- {id: 3, cat: TV/Anime, desc: "Anime - Dub"}
- {id: 4, cat: TV/Anime, desc: "LA - Sub"}
- {id: 5, cat: TV/Anime, desc: "LA - Raw"}
- {id: 6, cat: TV/Anime, desc: "Light Novel"}
- {id: 7, cat: TV/Anime, desc: "Manga - TLed"}
- {id: 8, cat: TV/Anime, desc: "Manga - Raw"}
- {id: 9, cat: TV/Anime, desc: "♫ - Lossy"}
- {id: 10, cat: TV/Anime, desc: "♫ - Lossless"}
- {id: 11, cat: TV/Anime, desc: "♫ - Video"}
- {id: 12, cat: TV/Anime, desc: "Games"}
- {id: 13, cat: TV/Anime, desc: "Applications"}
- {id: 14, cat: TV/Anime, desc: "Pictures"}
- {id: 15, cat: TV/Anime, desc: "Adult Video"}
- {id: 16, cat: TV/Anime, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: lang-id
type: text
label: Language ID
- name: info
type: info
label: Language ID Note
default: "You can filter your searches using any of the following language ID (comma delimited):<br>19 :Arabic<br>22 :Bengali<br>14 :Bulgarian<br>21 :Chinese (Simplified)<br>24 :Czech<br>20 :Danish<br>5 :Dutch<br>1 :English<br>11 :Finnish<br>10 :French<br>8 :German<br>13 :Greek<br>9 :Hungarian<br>27 :Indonesian<br>6 :Italian<br>2 :Japanese<br>28 :Korean<br>31 :Malaysian<br>25 :Mongolian<br>30 :Persian<br>3 :Polish<br>16 :Portuguese (Brazil)<br>17 :Portuguese (Portugal)<br>23 :Romanian<br>7 :Russian<br>4 :Serbo-Croatian<br>29 :Spanish (LATAM)<br>15 :Spanish (Spain)<br>18 :Swedish<br>26 :Turkish<br>12 :Vietnamese"
search:
paths:
# https://anidex.info/?page=search&id=1,2,3&lang_id=5,1,10&group_id=0&q=rinshi
- path: "?page=search&id={{if .Categories}}{{range .Categories}},{{.}}{{end}}{{else}}0{{end}}{{if .Config.lang-id}}&lang_id={{.Config.lang-id}}{{else}}{{end}}&group_id=0&q={{if .Keywords}}{{.Keywords}}{{else}}{{end}}"
rows:
selector: div.table-responsive > table > tbody > tr
fields:
category:
selector: a[href^="/?id="]
attribute: href
filters:
- name: querystring
args: id
title:
selector: td:nth-child(3) > a.torrent > span.span-1440
filters:
- name: re_replace # remove anidb id from return string
args: ["(\\[[A-Z0-9]*\\])\\.", "."]
details:
selector: td:nth-child(3) > a.torrent
attribute: href
download:
selector: td:nth-child(5) > a
attribute: href
magnet:
selector: a[href^="magnet:?"]
attribute: href
size:
selector: td:nth-child(7)
date:
selector: td:nth-child(8)
attribute: title
filters:
- name: replace
args: ["UTC", "+00:00"]
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
grabs:
selector: td:nth-child(11)
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -36,8 +36,10 @@
search:
paths:
- path: "{{if .Keywords}}?s={{ .Keywords}}{{else}}{{end}}"
rows:
selector: table tbody tr:has(td.torrents_small_type_data1)
fields:
title:
selector: .torrents_small_info_data1 div
@@ -61,18 +63,19 @@
selector: .torrents_small_type_data1 img
attribute: src
case:
"[src=\"./styles/tracker/imageset/cat_raw_small.png\"]": "1"
"[src=\"./styles/tracker/imageset/cat_anime_small.png\"]": "2"
"[src=\"./styles/tracker/imageset/cat_hentai_small.png\"]": "3"
"[src=\"./styles/tracker/imageset/cat_drama_small.png\"]": "4"
"[src=\"./styles/tracker/imageset/cat_dvd_small.png\"]": "5"
"[src=\"./styles/tracker/imageset/cat_hgame2_small.png\"]": "6"
"[src=\"./styles/tracker/imageset/cat_manga_small.png\"]": "7"
"[src=\"./styles/tracker/imageset/cat_music_small.png\"]": "8"
"[src=\"./styles/tracker/imageset/cat_musicvid_small.png\"]": "9"
"[src=\"./styles/tracker/imageset/cat_noneng_small.png\"]": "10"
"[src=\"./styles/tracker/imageset/cat_other_small.png\"]": "11"
"[src=\"./styles/tracker/imageset/cat_raw_small.png\"]": 1
"[src=\"./styles/tracker/imageset/cat_anime_small.png\"]": 2
"[src=\"./styles/tracker/imageset/cat_hentai_small.png\"]": 3
"[src=\"./styles/tracker/imageset/cat_drama_small.png\"]": 4
"[src=\"./styles/tracker/imageset/cat_dvd_small.png\"]": 5
"[src=\"./styles/tracker/imageset/cat_hgame2_small.png\"]": 6
"[src=\"./styles/tracker/imageset/cat_manga_small.png\"]": 7
"[src=\"./styles/tracker/imageset/cat_music_small.png\"]": 8
"[src=\"./styles/tracker/imageset/cat_musicvid_small.png\"]": 9
"[src=\"./styles/tracker/imageset/cat_noneng_small.png\"]": 10
"[src=\"./styles/tracker/imageset/cat_other_small.png\"]": 11
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# engine n/a

View File

@@ -1,4 +1,4 @@
---
---
site: arabafenice
name: ArabaFenice
description: "Araba Fenice (Phoenix) is an ITALIAN Private site for TV / MOVIES / GENERAL"
@@ -65,10 +65,38 @@
- {id: 32, cat: PC/Phone-Android, desc: "Android APP"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "3"
options:
"3": "created"
"5": "seeders"
"4": "size"
"2": "title"
- name: type
type: select
label: Order requested from site
default: "2"
options:
"2": "desc"
"1": "asc"
- name: info
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: index.php?page=login
method: post
@@ -91,12 +119,13 @@
download:
before:
path: thanks.php
method: "post"
method: post
inputs:
infohash: "{{ .DownloadUri.Query.id }}"
thanks: "1"
thanks: 1
rndval: "1487013827343"
selector: a[href^="download.php?id="]
attribute: href
search:
paths:
@@ -110,12 +139,16 @@
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "$1 $2"]
inputs:
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
page: torrents
category: "{{ range .Categories }}{{.}};{{end}}"
options: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
active: "0"
active: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
@@ -172,19 +205,20 @@
selector: td:nth-last-child(7)
downloadvolumefactor:
case:
img[alt="Gold 100% Free"]: "0"
img[alt="Silver 50% Free"]: "0.5"
img[alt="Bronze 25% Free"]: "0.75"
"*": "1"
img[alt="Gold 100% Free"]: 0
img[alt="Silver 50% Free"]: 0.5
img[alt="Bronze 25% Free"]: 0.75
"*": 1
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"
img[alt="2x Upload Multiplier"]: 2
img[alt="3x Upload Multiplier"]: 3
img[alt="4x Upload Multiplier"]: 4
img[alt="5x Upload Multiplier"]: 5
img[alt="6x Upload Multiplier"]: 6
img[alt="7x Upload Multiplier"]: 7
img[alt="8x Upload Multiplier"]: 8
img[alt="9x Upload Multiplier"]: 9
img[alt="10x Upload Multiplier"]: 10
"*": 1
# xbtitFM v1.16

View File

@@ -1,4 +1,4 @@
---
---
site: arenabg
name: ArenaBG
description: "ArenaBG is a BULGARIAN Semi-Private Torrent Tracker for 0DAY / GENERAL"
@@ -12,53 +12,54 @@
categorymappings:
- {id: "movies", cat: Movies, desc: "Movies"}
- {id: "arenabgtv", cat: Movies, desc: "Movies / ArenaBG.TV"}
- {id: "xvid", cat: Movies, desc: "Movies / XviD"}
- {id: "dvd-r", cat: Movies, desc: "Movies / DVD-R"}
- {id: "x264", cat: Movies, desc: "Movies / x264"}
- {id: "animemanga", cat: Movies, desc: "Movies / Anime & Manga"}
- {id: "documentaries", cat: Movies, desc: "Movies / Documentaries"}
- {id: "blu-ray", cat: Movies, desc: "Movies / Blu-ray"}
- {id: "xvid", cat: Movies/SD, desc: "Movies / XviD"}
- {id: "dvd-r", cat: Movies/DVD, desc: "Movies / DVD-R"}
- {id: "x264", cat: Movies/HD, desc: "Movies / x264"}
- {id: "animemanga", cat: TV/Anime, desc: "Movies / Anime & Manga"}
- {id: "documentaries", cat: TV/Documentary, desc: "Movies / Documentaries"}
- {id: "blu-ray", cat: Movies/BluRay, desc: "Movies / Blu-ray"}
- {id: "boxset", cat: Movies, desc: "Movies / Boxset"}
- {id: "x264boxset", cat: Movies, desc: "Movies / x264 Boxset"}
- {id: "tvepisodeshd", cat: Movies, desc: "Movies / HDTV"}
- {id: "3d", cat: Movies, desc: "Movies / 3D"}
- {id: "movies-hd", cat: Movies, desc: "Movies / Movies HD"}
- {id: "x265", cat: Movies, desc: "Movies / x265"}
- {id: "x264boxset", cat: Movies/HD, desc: "Movies / x264 Boxset"}
- {id: "tvepisodeshd", cat: Movies/HD, desc: "Movies / HDTV"}
- {id: "3d", cat: Movies/3D, desc: "Movies / 3D"}
- {id: "movies-hd", cat: Movies/HD, desc: "Movies / Movies HD"}
- {id: "x265", cat: Movies/HD, desc: "Movies / x265"}
- {id: "4k", cat: Movies/UHD, desc: "Movies / 4K"}
- {id: "series", cat: TV, desc: "Series"}
- {id: "hdtv", cat: TV, desc: "Series / TV Episodes HD"}
- {id: "hdtv", cat: TV/HD, desc: "Series / TV Episodes HD"}
- {id: "tvepisodes", cat: TV, desc: "Series / TV Episodes"}
- {id: "tvboxset", cat: TV, desc: "Series / TV Boxset"}
- {id: "tvboxsethd", cat: TV, desc: "Series / TV Boxset HD"}
- {id: "tvboxsethd", cat: TV/HD, desc: "Series / TV Boxset HD"}
- {id: "music", cat: Audio, desc: "Music"}
- {id: "mp3", cat: Audio, desc: "Music / MP3"}
- {id: "music-video", cat: Audio, desc: "Music / Video"}
- {id: "flac", cat: Audio, desc: "Music / FLAC"}
- {id: "mp3", cat: Audio/MP3, desc: "Music / MP3"}
- {id: "music-video", cat: Audio/Video, desc: "Music / Video"}
- {id: "flac", cat: Audio/Lossless, desc: "Music / FLAC"}
- {id: "music-dvd", cat: Audio, desc: "Music / DVD"}
- {id: "music-ape", cat: Audio, desc: "Music / APE"}
- {id: "music-ape", cat: Audio/Lossless, desc: "Music / APE"}
- {id: "music-dts", cat: Audio, desc: "Music / DTS"}
- {id: "musicwavpack", cat: Audio, desc: "Music / WavePack"}
- {id: "musicost", cat: Audio, desc: "Music / OST"}
- {id: "games", cat: PC, desc: "Games"}
- {id: "games-iso", cat: PC, desc: "Games / PC ISO"}
- {id: "games", cat: PC/Games, desc: "Games"}
- {id: "games-iso", cat: PC/Games, desc: "Games / PC ISO"}
- {id: "pc-rip", cat: PC, desc: "Games / PC RIP"}
- {id: "ps2", cat: Console, desc: "Games / PS2"}
- {id: "psp", cat: Console, desc: "Games / PSP"}
- {id: "xbox", cat: Console, desc: "Games / XBOX"}
- {id: "xbox-360", cat: Console, desc: "Games / XBOX-360"}
- {id: "ps3", cat: Console, desc: "Games / PS3"}
- {id: "wii", cat: Console, desc: "Games / WII"}
- {id: "PS4", cat: Console, desc: "Games / PS4"}
- {id: "psp", cat: Console/PSP, desc: "Games / PSP"}
- {id: "xbox", cat: Console/Xbox, desc: "Games / XBOX"}
- {id: "xbox-360", cat: Console/Xbox 360, desc: "Games / XBOX-360"}
- {id: "ps3", cat: Console/PS3, desc: "Games / PS3"}
- {id: "wii", cat: Console/Wii, desc: "Games / WII"}
- {id: "PS4", cat: Console/PS4, desc: "Games / PS4"}
- {id: "software", cat: PC, desc: "Software"}
- {id: "pc-iso", cat: PC, desc: "Software / PC ISO"}
- {id: "pdasmartphone", cat: PC, desc: "Software / Smartphone"}
- {id: "pc-iso", cat: PC/ISO, desc: "Software / PC ISO"}
- {id: "pdasmartphone", cat: PC/Phone-Other, desc: "Software / Smartphone"}
- {id: "tutorial", cat: PC, desc: "Software / Tutorial"}
- {id: "android", cat: PC, desc: "Software / Android"}
- {id: "ios", cat: PC, desc: "Software / iOS"}
- {id: "misc", cat: Other, desc: "Misc"}
- {id: "android", cat: PC/Phone-Android, desc: "Software / Android"}
- {id: "ios", cat: PC/Phone-IOS, desc: "Software / iOS"}
- {id: "misc", cat: Other/Misc, desc: "Misc"}
- {id: "other", cat: Other, desc: "Misc / Other"}
- {id: "e-books", cat: Other, desc: "Misc / e-Books"}
- {id: "sports", cat: Other, desc: "Misc / Sports"}
- {id: "0-day", cat: Other, desc: "Misc / 0-Day"}
- {id: "e-books", cat: Books/Ebook, desc: "Misc / e-Books"}
- {id: "sports", cat: TV/Sport, desc: "Misc / Sports"}
- {id: "0-day", cat: PC/0day, desc: "Misc / 0-Day"}
- {id: "xxx", cat: XXX, desc: "XXX"}
- {id: "porn", cat: XXX, desc: "XXX / Porn"}
- {id: "xxx-hd", cat: XXX, desc: "XXX / XXX HD"}
@@ -101,6 +102,7 @@
download:
selector: a[href*="{{ .Config.downloadlink }}"]
attribute: href
search:
paths:
@@ -117,6 +119,7 @@
rows:
selector: tr:has(td.category)
fields:
title:
# use the second div for full title
@@ -173,6 +176,7 @@
- name: regexp
args: src=\\'([^\s\\]+)
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# engine n/a

View File

@@ -1,4 +1,4 @@
---
---
site: asgaard
name: Asgaard
description: "Asgaard (AG) is a NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -57,21 +57,37 @@
- {id: 43, cat: Books/Technical, desc: "Books Education"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: info
type: info
label: "About the Username field"
default: "Enter your <b>Email address</b> in the username field."
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info
type: info
label: "About the Username field"
default: "Enter your <b>Email address</b> in the username field."
- name: sort
type: select
label: Sort requested from site
default: "2"
options:
"2": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: login.php
@@ -88,15 +104,15 @@
test:
path: /
selector: a[href$="/logout.php"]
search:
paths:
# https://asgrd.org/browse.php?sns=&sna=&spf=&sr=&sg=&sys=&sye=&srs=&sre=&si=tt2401090&ss=&incldead=0&only_free=0&sort=4&type=desc
- path: browse.php
inputs:
$raw: "{{range .Categories}}cats[]={{.}}&{{end}}"
$raw: "{{ range .Categories }}cats[]={{.}}&{{end}}"
sns: ""
sna: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
sna: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
spf: ""
sr: ""
sg: ""
@@ -110,12 +126,14 @@
incldead: 0
# 0 incl non-free 1 incl only-free
only_free: 0
sort: 4
type: desc
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.table-striped > tbody > tr:has(a[href*="details.php?id="])
filters:
- name: andmatch
fields:
title:
selector: div.torrent-name
@@ -157,8 +175,8 @@
selector: td:nth-child(10)
downloadvolumefactor:
case:
img[src="./images/gold.png"]: "0"
"*": "1"
img[src="./images/gold.png"]: 0
"*": 1
uploadvolumefactor:
case:
"*": "1"
text: 1
# Midgaard

View File

@@ -15,10 +15,34 @@
- {id: 3, cat: Audio, desc: "Music"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- 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
@@ -43,24 +67,28 @@
download:
selector: a[href*="/download/"]
attribute: href
search:
paths:
- path: filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
description: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: ""
tmdb: ""
mal: ""
sort: created_at
direction: desc
sorting: "{{ .Config.sort }}"
sort: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
@@ -104,29 +132,37 @@
date:
selector: time
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portoguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
- name: re_replace
args: ["(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|hace|il y a|vor|преди)", "ago"]
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
- name: re_replace
args: ["(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut)", "minute"]
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
- name: re_replace
args: ["(dakika|minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟)", " minute"]
- name: re_replace
args: ["(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur)", "hour"]
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
- name: re_replace
args: ["(saat|tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时)", " hour"]
- name: re_replace
args: ["(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден)", "day"]
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
- name: re_replace
args: ["(gün|päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天)", " day"]
- name: re_replace
args: ["(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица)", "week"]
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
- name: re_replace
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周)", " week"]
- name: re_replace
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
args: ["(?i) (ay)", "month"]
- name: re_replace
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月)", " 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"]
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store

View File

@@ -1,112 +0,0 @@
---
site: asiandvdclub
name: AsianDVDClub
description: "AsianDVDClub is an ASIAN Private Torrent Tracker for HD MOVIES / TV"
language: en-us
type: private
encoding: UTF-8
links:
- https://asiandvdclub.org/
caps:
categorymappings:
- {id: 19, cat: TV/Anime, desc: "Anime"}
- {id: 12, cat: Movies/Foreign, desc: "China"}
- {id: 15, cat: Movies/Foreign, desc: "Hong Kong"}
- {id: 27, cat: Movies/Foreign, desc: "India"}
- {id: 13, cat: Movies/Foreign, desc: "Japan"}
- {id: 14, cat: Movies/Foreign, desc: "Korea"}
- {id: 20, cat: Movies/Foreign, desc: "Music DVDs"}
- {id: 18, cat: Movies/Foreign, desc: "Other Asian"}
- {id: 25, cat: Movies/Foreign, desc: "Patches"}
- {id: 24, cat: Movies/Foreign, desc: "Philippines"}
- {id: 23, cat: Movies/Foreign, desc: "Pinku"}
- {id: 21, cat: Audio, desc: "Soundtracks"}
- {id: 26, cat: Movies/Foreign, desc: "Taiwan"}
- {id: 17, cat: Movies/Foreign, desc: "Thailand"}
- {id: 22, cat: TV, desc: "TV Series"}
- {id: 16, cat: Movies/Foreign, desc: "Viet Nam"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
apple: "evil"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: browse.php
search:
paths:
- path: browse.php
keywordsfilters:
- name: replace
args: ["-", " "]
- name: replace
args: ["(", " "]
- name: replace
args: [")", " "]
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: "1"
rows:
selector: table.torrenttable > tbody > tr
filters:
- name: andmatch
fields:
download:
selector: a[href^="/details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php", "download.php"]
title:
selector: td.torrentname > a
details:
selector: a[href^="/details.php?id="]
attribute: href
category:
selector: td.cat_pic > a
attribute: href
filters:
- name: regexp
args: c(\d+)=1
seeders:
selector: td.seeders
filters:
- name: replace
args: ["-\xA0-\xA0-", "0"]
leechers:
selector: td.leechers
filters:
- name: replace
args: ["-\xA0-\xA0-", "0"]
grabs:
selector: td.dls
filters:
- name: replace
args: ["-\xA0-\xA0-", "0"]
date:
selector: td.time
filters:
- name: append
args: " ago"
size:
selector: td.size
downloadvolumefactor:
case:
img[title="Free to download"]: "0"
img[title="Download counts 50%"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,13 +1,12 @@
---
site: audiobookbay
name: AudioBookBay
description: "AudioBook Bay (ABB) is a semi-private Torrent Tracker for AUDIOBOOKS"
description: "AudioBook Bay (ABB) is a public Torrent Tracker for AUDIOBOOKS"
language: en-us
type: semi-private
type: public
encoding: UTF-8
followredirect: true
links:
- http://audiobookbay.nl/
- http://audiobookbay.nl/ # site forces http, does not support https
legacylinks:
- https://audiobookbay.la/
@@ -75,41 +74,30 @@
modes:
search: [q]
login:
path: https://audiobookbay.nl/member/login.php
form: form[action$="/member/login.php"]
method: post
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.warning
test:
path: http://audiobookbay.nl/member/users/
selector: a[href="/member/logout"]
settings: []
download:
method: get
before:
path: https://audiobookbay.nl/member/login.php
method: "post"
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
selector: td:contains("Info Hash:") ~ td
filters:
- name: prepend
args: "magnet:?xt=urn:btih:"
- name: append
args: "&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969&tr=udp%3A%2F%2Fp4p.arenabg.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Fipv4.tracker.harry.lu%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.cyberia.is%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2Fdenis.stalker.upeer.me%3A6969%2Fannounce"
search:
paths:
# with just 7 results per page, try to grab up to 35 results
# http://audiobookbay.nl/?s=teeth
# http://audiobookbay.nl/page/2/?s=teeth
- path: "{{if .Keywords}}/?s={{ .Keywords}}{{else}}/{{end}}"
- path: "{{if .Keywords}}/page/2/?s={{ .Keywords}}{{else}}{{end}}"
- path: "{{if .Keywords}}/page/3/?s={{ .Keywords}}{{else}}{{end}}"
- path: "{{if .Keywords}}/page/4/?s={{ .Keywords}}{{else}}{{end}}"
- path: "{{if .Keywords}}/page/5/?s={{ .Keywords}}{{else}}{{end}}"
- path: "{{ if .Keywords }}/?s={{ .Keywords }}{{else}}/{{end}}"
- path: "{{ if .Keywords }}/page/2/?s={{ .Keywords }}{{else}}{{end}}"
- path: "{{ if .Keywords }}/page/3/?s={{ .Keywords }}{{else}}{{end}}"
- path: "{{ if .Keywords }}/page/4/?s={{ .Keywords }}{{else}}{{end}}"
- path: "{{ if .Keywords }}/page/5/?s={{ .Keywords }}{{else}}{{end}}"
rows:
selector: div.post:has(div[class="postTitle"])
fields:
title:
selector: div.postTitle
@@ -117,11 +105,8 @@
selector: div.postTitle h2 a
attribute: href
download:
selector: a[href^="/dl-now?f="]
selector: div.postTitle h2 a
attribute: href
filters:
- name: replace
args: ["/dl-now?f=", "/download?f="]
banner:
optional: true
selector: img
@@ -142,7 +127,13 @@
selector: div.postContent p:contains("File Size:")
filters:
- name: regexp
args: "File Size: (.+?)s"
args: "File Size: (.+?)$"
- name: replace
args: ["MBs", "MB"]
- name: replace
args: ["GBs", "GB"]
- name: replace
args: ["KBs", "KB"]
seeders:
text: 1
leechers:
@@ -151,3 +142,4 @@
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -44,15 +44,27 @@
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info_results
type: info
label: Search results
default: "If you are getting the error <b>Login Failed, got redirected</b> then access the site with your browser and <b>mark as read</b> all PMs."
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
use_ssl: "1"
perm_ssl: "1"
submitme: "X"
use_ssl: 1
perm_ssl: 1
submitme: X
error:
- selector: td.embedded:has(h2:contains("Oops"))
- selector: td.embedded:has(h2:contains("failed"))
@@ -65,58 +77,38 @@
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
searchin: "title"
incldead: "1"
searchin: title
incldead: 1
rows:
selector: tr.browse_color, tr.freeleech_color, tr[id^="kdescr"]
after: 1
fields: # some users (rank specific?) have an extra column (td:nth-child(4)) with bookmark features
banner:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: src=\'(.*?)\'
title:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: Tip\('<b>(.*?)</b>
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: Tip\('<b>(.*?)</b>
details:
selector: a[href^="details.php?id="][onmouseover]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: a[href^="filelist.php"]
size:
selector: td:nth-last-child(6)
grabs:
selector: td:nth-last-child(5)
banner:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: ([\d,]+)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
date:
selector: td:nth-last-child(7)
downloadvolumefactor:
case:
"a.info > b:contains(\"[FREE]\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
args: src=\'(.*?)\'
description:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
@@ -130,7 +122,29 @@
- name: prepend
args: "{{ .Result.description }}<br>\n"
description:
selector: td[colspan=13]
selector: td[colspan="13"]
filters:
- name: prepend
args: "{{ .Result.description }}<br>\n"
files:
selector: td:nth-last-child(9)
date:
selector: td:nth-last-child(7)
size:
selector: td:nth-last-child(6)
grabs:
selector: td:nth-last-child(5)
filters:
- name: regexp
args: (\d+)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
downloadvolumefactor:
case:
"a.info > b:contains(\"[FREE]\")": 0
"*": 1
uploadvolumefactor:
text: 1
# U-232 V4

View File

@@ -1,4 +1,4 @@
---
---
site: audionews
name: AudioNews
description: "AudioNews (AN) is a Private Torrent Tracker for AUDIO SOFTWARE / SAMPLES / ETC"
@@ -162,11 +162,58 @@
- {id: 164, cat: Audio/Other, desc: "PRESETS Sylenth"}
- {id: 168, cat: Audio/Other, desc: "PRESETS Toontrack"}
- {id: 21, cat: Other, desc: "UPDATE"}
- {id: 222, cat: Other, desc: "GFXNEWS 3D"}
- {id: 207, cat: Other, desc: "GFXNEWS APPS WIN"}
- {id: 215, cat: Other, desc: "GFXNEWS APPS LINUX"}
- {id: 214, cat: Other, desc: "GFXNEWS APPS MAC"}
- {id: 211, cat: Other, desc: "GFXNEWS BOOKS"}
- {id: 224, cat: Other, desc: "GFXNEWS CAD/CAM"}
- {id: 212, cat: Other, desc: "GFXNEWS FONTS"}
- {id: 213, cat: Other, desc: "GFXNEWS FOOTAGE"}
- {id: 226, cat: Other, desc: "GFXNEWS MAGAZINE"}
- {id: 216, cat: Other, desc: "GFXNEWS PHOTOSTOCK"}
- {id: 220, cat: Other, desc: "GFXNEWS PHOTOGRAPHY - ART"}
- {id: 227, cat: Other, desc: "GFXNEWS PHOTOSHOP"}
- {id: 228, cat: Other, desc: "GFXNEWS PHOTOSHOP Actions, Pattern & Styles"}
- {id: 229, cat: Other, desc: "GFXNEWS PHOTOSHOP Background & PSD Source"}
- {id: 230, cat: Other, desc: "GFXNEWS PHOTOSHOP Brushes & Gradient"}
- {id: 231, cat: Other, desc: "GFXNEWS PHOTOSHOP Toolkits, Papers & Objects"}
- {id: 225, cat: Other, desc: "GFXNEWS PLUGINS LINUX"}
- {id: 223, cat: Other, desc: "GFXNEWS PLUGINS MAC"}
- {id: 210, cat: Other, desc: "GFXNEWS PLUGINS WIN"}
- {id: 217, cat: Other, desc: "GFXNEWS SCRIPTS - WEB PROGRAMMING"}
- {id: 218, cat: Other, desc: "GFXNEWS TEMPLATES"}
- {id: 232, cat: Other, desc: "GFXNEWS TEXTURES"}
- {id: 219, cat: Other, desc: "GFXNEWS TUTORIALS"}
- {id: 221, cat: Other, desc: "GFXNEWS VIDEO PRODUCTION"}
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "1"
options:
"1": "created"
"10": "seeders"
"7": "size"
"2": "title"
- name: type
type: select
label: Order requested from site
default: "2"
options:
"2": "desc"
"1": "asc"
login:
path: login.php
method: post
@@ -207,8 +254,8 @@
prev_date_from: ""
prev_date_to: ""
prev_hide_rereg: 0
o: 1
s: 2
o: "{{ .Config.sort }}"
s: "{{ .Config.type }}"
df: 1
da: 1
nm: "{{ .Keywords }}"
@@ -216,12 +263,13 @@
submit: "Search"
rows:
selector: table > tbody > tr:has(a[href*="/dl.php?id="])
selector: table.forumline > tbody > tr:has(a[href*="/dl.php?id="])
dateheaders:
selector: td[colspan="20"] > strong
filters:
- name: dateparse
args: "01-02-2006"
fields:
title:
selector: td a[href*="/viewtopic.php?t="]
@@ -252,21 +300,22 @@
optional: true
selector: td:contains(\00a0B)
seeders:
text: "0"
text: 0
seeders:
optional: true
selector: td[title="Seeders"]
leechers:
text: "0"
text: 0
leechers:
optional: true
selector: td[title="Leechers"]
grabs:
text: "0"
text: 0
grabs:
optional: true
selector: td[title^="Replies:"]
downloadvolumefactor:
text: "1"
text: 1
uploadvolumefactor:
text: "1"
text: 1
# engine n/a

View File

@@ -18,6 +18,33 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "time"
options:
"time": "created"
"seeders": "seeders"
"size": "size"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
- name: info_login
type: info
label: "Password Changes"
default: "This site forces you to change your <b>Password</b> every <b>90 days</b>.<br/>If you get a <b>Login Failed, got redirected</b> error, then access the site with your browser and check if you need to change your password. Logout after saving, and update this config to login."
login:
path: login.php
method: form
@@ -35,11 +62,15 @@
paths:
- path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Keywords }}"
page: torrents
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
rows:
selector: table#torrent_table > tbody > tr.group, tr.torrent, tr.group_torrent:not(.edition_info)
selector: table#torrent_table > tbody > tr.group, tr.torrent, tr.group_torrent:not(.edition_info)
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
@@ -52,8 +83,6 @@
selector: td:nth-child(3) > a
category:
selector: td:nth-child(2)
# files:
# selector: td:nth-child(4)
date:
selector: td:nth-last-child(5)
size:
@@ -66,7 +95,7 @@
selector: td:nth-last-child(1)
downloadvolumefactor:
case:
"*": "1"
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1

View File

@@ -1,4 +1,4 @@
 site: backups
site: backups
name: Back-ups
description: "Back-Ups is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-us

View File

@@ -0,0 +1,73 @@
---
site: badasstorrents
name: Badass Torrents
description: "Badass Torrents is a Public torrent site for MOVIES / TV / GENERAL"
language: en-us
type: public
encoding: UTF-8
links:
- https://badasstorrents.com/
caps:
categories:
"Anime": TV/Anime
"apps": PC
"Books": Books
"Games": PC/Games
"Movies": Movies
"Music": Audio
"Other": Other
"TV": TV
"XXX": XXX
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: downloadlink
type: select
label: Download link
default: "magnet:?xt="
options:
"/download/" : ".torrent"
"magnet:?xt=": "magnet"
download:
selector: a[href*="{{ .Config.downloadlink }}"]
attribute: href
search:
paths:
- path: "torrents/search/{{ .Keywords }}"
rows:
selector: table.table-hover > tbody > tr:has(a[href*="/torrent/"])
fields:
category:
selector: a[href*="/cat/"]
title:
selector: a[href*="/torrent/"]
details:
selector: a[href*="/torrent/"]
attribute: href
download:
selector: a[href*="/torrent/"]
attribute: href
date:
selector: td:nth-child(3)
filters:
- name: timeago
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -1,12 +1,12 @@
---
---
site: baibako
name: BaibaKo
description: "BaibaKo is a RUSSIAN Semi-Private Torrent Tracker for TV"
description: "BaibaKo is a RUSSIAN Private Torrent Tracker for TV"
language: ru-ru
type: semi-private
type: private
encoding: windows-1251
links:
- http://baibako.tv/
- http://baibako.tv/ # site does not support https NET::ERR_CERT_AUTHORITY_INVALID
caps:
categorymappings:
@@ -27,6 +27,22 @@
type: checkbox
label: Strip Russian Letters
default: false
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: takelogin.php
@@ -46,12 +62,16 @@
inputs:
search: "{{.Keywords }}"
# 0 active 1 incldead 2 onlydead 3 gold 4 seedfree
incldead: "1"
incldead: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["[s|S](\\d+)[e|E][\\d]+", "/s$1"]
rows:
selector: table > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[href^="details.php?id="]
@@ -142,8 +162,9 @@
selector: td:nth-last-child(1)
downloadvolumefactor:
case:
"a[href^=\"details.php?id=\"]:contains(\"(Золото)\")": "0"
"*": "1"
"a[href^=\"details.php?id=\"]:contains(\"(Золото)\")": 0
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1
# engine n/a

View File

@@ -0,0 +1,151 @@
---
site: beitai
name: BeiTai
description: "BeiTai is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://www.beitai.pt/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
- {id: 406, cat: Audio/Video, desc: "MusicVideo/音乐MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/运体"}
- {id: 409, cat: Other, desc: "Misc/其他"}
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
modes:
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("登录失败"))
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 incldead 1 active 2 dead
incldead: 0
# 0 all 1 normal 2 free 3 2x 4 2xfree 5 50% 6 2x50% 7 30%
spstate: 0
# 0 title 1 descr 3 uploaded 4 imdburl
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
# 0 AND 1 OR 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[href^="details.php?id="]
title:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdb:
optional: true
selector: div.imdb_100 > a
attribute: href
date:
# time type: time elapsed (default)
selector: td:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date:
# time added
selector: td:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
description:
selector: td:nth-child(2)
remove: a, img
# NexusPHP Standard v1.5 Beta 4

View File

@@ -0,0 +1,118 @@
---
site: beyond-hd-oneurl
name: Beyond-HD (OneURL)
description: "Without BeyondHD, your HDTV is just a TV"
language: en-us
type: private
encoding: UTF-8
links:
- https://beyond-hd.me/
settings:
- name: oneurl
type: text
label: OneURL
- 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"
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
method: oneurl
inputs:
oneurl: "{{ .Config.oneurl }}"
test:
path: torrents
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
description: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tmdb: ""
sorting: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
rows:
selector: table > tbody > tr
after: 1
fields:
_category:
selector: a[href*="/categories/"]
optional: true
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
category:
text: "{{if .Result._category}}{{.Result._category}}{{else}}1{{end}}"
title:
selector: a.torrent-name
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.torrent-name
attribute: href
banner:
optional: true
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["/img/person.png", ""]
date:
selector: td:not(a[href$="/history"]) span.text-orange
filters:
- name: timeago
size:
selector: td span.text-blue
seeders:
selector: a[href$="/peers"] span.text-green
leechers:
selector: a[href$="/peers"] span.text-red
grabs:
selector: a[href$="/history"]
imdb:
optional: true
selector: a[href*="www.imdb.com/title/tt"]
attribute: href
downloadvolumefactor:
case:
i[data-original-title="100% Free"]: 0
i[data-original-title="100% Free (Limited UL)"]: 0
i[data-original-title="25% Promo"]: 0.75
i[data-original-title="50% Promo"]: 0.5
i[data-original-title="75% Promo"]: 0.25
"*": 1
uploadvolumefactor:
text: 1
# UNIT3D

View File

@@ -14,10 +14,34 @@
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- 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
@@ -38,18 +62,20 @@
paths:
- path: torrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
description: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tmdb: ""
sorting: created_at
direction: desc
sorting: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
rows:
selector: table > tbody > tr
after: 1
fields:
_category:
selector: a[href*="/categories/"]
@@ -93,13 +119,12 @@
attribute: href
downloadvolumefactor:
case:
i[data-original-title="100% Free"]: "0"
i[data-original-title="100% Free (Limited UL)"]: "0"
i[data-original-title="25% Promo"]: "0.75"
i[data-original-title="50% Promo"]: "0.5"
i[data-original-title="75% Promo"]: "0.25"
"*": "1"
i[data-original-title="100% Free"]: 0
i[data-original-title="100% Free (Limited UL)"]: 0
i[data-original-title="25% Promo"]: 0.75
i[data-original-title="50% Promo"]: 0.5
i[data-original-title="75% Promo"]: 0.25
"*": 1
uploadvolumefactor:
case:
"*": "1"
# UNIT3D
text: 1
# UNIT3D

View File

@@ -0,0 +1,143 @@
---
site: bibliotik
name: Bibliotik
description: "Bibliotik is a private site for eBooks and audiobooks"
language: en-US
type: private
encoding: UTF-8
links:
- https://bibliotik.me/
caps:
categorymappings:
- { id: 1, cat: PC, desc: "Applications" }
- { id: 3, cat: Audio/Audiobook, desc: "Audiobooks" }
- { id: 4, cat: Books/Comics, desc: "Comics" }
- { id: 5, cat: Books/Ebook, desc: "eBooks" }
- { id: 7, cat: Books/Magazines, desc: "Magazines" }
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: orderby
type: select
label: Sort requested from site
default: "relevance"
options:
"relevance": "relevance"
"year": "year"
"size": "size"
"duration": "duration"
"added": "added"
"leechers": "leechers"
"seeders": "seeders"
"snatches": "snatches"
"comments": "comments"
"files": "files"
- name: order
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: /
method: form
form: form#loginform
submitpath: /
inputs:
action: login
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeploggedin: 1
error:
- selector: center:first-of-type
test:
path: torrents/
selector: div#pre_header
search:
paths:
- path: torrents/
inputs:
search: "{{ .Keywords }}"
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
orderby: "{{ .Config.orderby }}"
order: "{{ .Config.order }}"
rows:
selector: table#torrents_table > tbody > tr:has(.title)
fields:
category:
selector: td:first-child
case:
div[title="Applications"]: 1
div[title="Audiobooks"]: 3
div[title="Comics"]: 4
div[title="Ebooks"]: 5
div[title="Magazines"]: 7
_year:
selector: .torYear
optional: true
_filetype:
selector: .torFormat
optional: true
title:
selector: .title a
filters:
- name: append
args: "{{ if .Result._year }} {{ .Result._year }}{{else}}{{end}}{{ if .Result._filetype }} {{ .Result._filetype }}{{else}}{{end}}"
details:
selector: .title a
attribute: href
date:
optional: true
selector: .t_files_size_added time
filters:
- name: timeago
download:
selector: a[title="Download"]
attribute: href
# files:
# selector: .t_files_size_added
# filters:
# - name: regexp
# args: "^\\s*(\\d+)\\s*file"
size:
selector: .t_files_size_added
filters:
- name: split
args: [",", 1]
- name: trim
seeders:
text: 0
seeders:
optional: true
selector: .seeders
leechers:
text: 0
leechers:
optional: true
selector: .leechers
grabs:
text: 0
grabs:
optional: true
selector: .snatches
downloadvolumefactor:
case:
"*": 1
uploadvolumefactor:
case:
"*": 1
# engine tbc

View File

@@ -1,4 +1,4 @@
---
---
site: bigfangroup
name: BigFANGroup
description: "BigFANGroup is a RUSSIAN Public Torrent Tracker for MOVIES / TV"
@@ -62,8 +62,6 @@
modes:
search: [q]
# seems that site does not support season/episode searching
# tv-search: [q, season, ep]
movie-search: [q]
settings:
@@ -71,29 +69,38 @@
type: checkbox
label: Strip Russian Letters
default: false
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seed": "seeders"
"size": "size"
"name": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
search:
# https://bigfangroup.org/browse.php?search=black+lightning&cat=0&incldead=0&year=0&format=0
#
paths:
- path: browse.php
# cant get season/episode search working on this site
# keywordsfilters:
# - name: diacritics
# args: replace
# - name: re_replace # S01 to Сезон 1
# args: ["(?i)\\bS0*(\\d+)\\b", ", Сезон $1"]
# - name: re_replace # S01E01 to Сезон 1 Серия 1
# args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", ", Сезон $1, Серия $2"]
inputs:
# multi category filters not supported
# $raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
cat: 0
# 0 active 1 incldead 2 onlydead 3 gold 4 noseed 5 silver 7 BFG
incldead: 1
ajax: 1
year: 0
format: 0
s: "{{ .Config.sort }}"
d: "{{ .Config.type }}"
rows:
selector: table > tbody#highlighted > tr:has(a[href^="browse.php?cat="])
@@ -183,3 +190,4 @@
"*": 1
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -6,6 +6,8 @@
type: private
encoding: UTF-8
links:
- https://www.bigtorrent.eu/
legacylinks:
- http://www.bigtorrent.eu/
caps:
@@ -55,7 +57,8 @@
download:
selector: a[href^="download.php?id="]
attribute: href
search:
paths:
- path: browse.php
@@ -95,4 +98,4 @@
"*": "1"
uploadvolumefactor:
case:
"*": "1"
"*": "1"

View File

@@ -6,69 +6,39 @@
type: private
encoding: UTF-8
links:
- http://bigtower.info/
- http://bigtower.info/ # site does not support https NET::ERR_CERT_DATE_INVALID
legacylinks:
- https://bigtower.info/
caps:
categorymappings:
# Movies
- {id: 91, cat: Movies/HD, desc: "DSS"}
- {id: 92, cat: Movies/HD, desc: "DSS 3D"}
- {id: 14, cat: Movies, desc: "Screener"}
- {id: 15, cat: Movies/SD, desc: "DVDRip"}
- {id: 16, cat: Movies/HD, desc: "BDRip"}
- {id: 17, cat: Movies/HD, desc: "HD 720p"}
- {id: 18, cat: Movies/HD, desc: "HD 1080p"}
- {id: 19, cat: Movies/HD, desc: "HD 3D"}
- {id: 83, cat: Movies/HD, desc: "4K (Ultra HD)"}
- {id: 89, cat: Movies/DVD, desc: "DVD 5"}
- {id: 90, cat: Movies/DVD, desc: "DVD 9"}
- {id: 37, cat: Movies, desc: "MP4"}
- {id: 61, cat: TV, desc: "TV Show"}
- {id: 78, cat: TV, desc: "Serie TV"}
- {id: 96, cat: TV/HD, desc: "Serie TV 720p"}
- {id: 97, cat: TV/HD, desc: "Serie TV 1080p"}
- {id: 98, cat: TV, desc: "Serie TV MP4"}
- {id: 24, cat: TV/Anime, desc: "Cartoni"}
- {id: 66, cat: TV/Anime, desc: "Anime"}
- {id: 71, cat: TV, desc: "SUB iTA"}
- {id: 75, cat: TV/Documentary, desc: "Documentari"}
- {id: 72, cat: TV/Sport, desc: "Sport"}
- {id: 11, cat: Movies/HD, desc: "DSS"}
- {id: 1, cat: Movies, desc: "Screener"}
- {id: 2, cat: Movies, desc: "DVDRip & BDRip"}
- {id: 3, cat: Movies/BluRay, desc: "Bluray 1080p & 720p"}
- {id: 5, cat: Movies/UHD, desc: "Ultra HD 4K"}
- {id: 6, cat: TV, desc: "Serie TV"}
- {id: 4, cat: TV/Anime, desc: "Cartoni"}
# GAMES
- {id: 28, cat: PC/Games, desc: "PC Games"}
- {id: 63, cat: Console/Xbox 360, desc: "XBOX 360"}
- {id: 64, cat: Console/PS3, desc: "PS3"}
- {id: 33, cat: Console/Wii, desc: "WII"}
- {id: 76, cat: Console/Other, desc: "PS2"}
- {id: 81, cat: Console/Xbox One, desc: "XBOX ONE"}
- {id: 84, cat: Console/PS4, desc: "PS4"}
- {id: 7, cat: PC/Games, desc: "Giochi"}
# MUSIC
- {id: 35, cat: Audio, desc: "MP3"}
- {id: 67, cat: Audio, desc: "FLAC"}
- {id: 8, cat: Audio, desc: "Musica"}
# SOFTWARE
- {id: 52, cat: PC/ISO, desc: "Windows"}
- {id: 54, cat: PC/ISO, desc: "Mac"}
- {id: 69, cat: PC/ISO, desc: "Linux"}
- {id: 9, cat: PC/0day, desc: "Software"}
# PHONE
- {id: 40, cat: PC/Phone-IOS, desc: "Android"}
- {id: 41, cat: PC/Phone-Android, desc: "Iphone"}
- {id: 12, cat: PC/Phone-Other, desc: "Applicazioni"}
# OTHER
- {id: 44, cat: Other, desc: "Varie"}
- {id: 82, cat: Other, desc: "Music Video"}
- {id: 86, cat: Other, desc: "Navigatori"}
- {id: 95, cat: Other, desc: "Immagini"}
- {id: 99, cat: Other, desc: "AudioLibri"}
- {id: 14, cat: Other, desc: "Varie & Altro"}
# EBOOK
- {id: 46, cat: Books, desc: "Ebook"}
- {id: 73, cat: Books/Comics, desc: "Fumetti"}
- {id: 74, cat: Books/Comics, desc: "Manga"}
- {id: 87, cat: Books, desc: "Giornali"}
- {id: 13, cat: Books, desc: "Libri & Edicola"}
modes:
search: [q]
@@ -86,6 +56,10 @@
type: checkbox
label: Show donor torrent? (Enable if you're a donor)
default: false
- name: info
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: index.php?page=login
@@ -104,12 +78,14 @@
- path: index.php
inputs:
search: "{{ .Keywords }}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "0"
active: "0"
page: torrents
category: "{{ range .Categories }}{{.}};{{end}}"
options: 0
active: 0
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="]){{if .Config.donor }}{{else}}:not(:has(img[src*="keditbookmarks.png"])){{end}}
fields:
download:
selector: a[href^="index.php?page=torrent-details&id="]
@@ -157,19 +133,20 @@
selector: td:nth-last-child(6)
downloadvolumefactor:
case:
img[alt="Gold 100% Free"]: "0"
img[alt="Silver 50% Free"]: "0.5"
img[alt="Bronze 25% Free"]: "0.75"
"*": "1"
img[alt="Gold 100% Free"]: 0
img[alt="Silver 50% Free"]: 0.5
img[alt="Bronze 25% Free"]: 0.75
"*": 1
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"
img[alt="2x Upload Multiplier"]: 2
img[alt="3x Upload Multiplier"]: 3
img[alt="4x Upload Multiplier"]: 4
img[alt="5x Upload Multiplier"]: 5
img[alt="6x Upload Multiplier"]: 6
img[alt="7x Upload Multiplier"]: 7
img[alt="8x Upload Multiplier"]: 8
img[alt="9x Upload Multiplier"]: 9
img[alt="10x Upload Multiplier"]: 10
"*": 1
# xbtitFM v3.0.00

View File

@@ -1,4 +1,4 @@
---
---
site: bit-titan
name: BiT-TiTAN
description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -20,7 +20,7 @@
- {id: 1080, cat: Movies/DVD, desc: "Movies DVD"}
- {id: 1090, cat: Movies/BluRay, desc: "Movies BluRay"}
- {id: 1100, cat: Movies/DVD, desc: "Movies HD2DVD"}
- {id: 1110, cat: Movies/Foreign, desc: "Movies nternational"}
- {id: 1110, cat: Movies/Foreign, desc: "Movies International"}
- {id: 1120, cat: Movies/HD, desc: "Movies HD Packs"}
- {id: 1130, cat: Movies/SD, desc: "Movies SD Packs"}
- {id: 2010, cat: TV/UHD, desc: "TV 2160p"}
@@ -55,6 +55,7 @@
- {id: 5060, cat: XXX, desc: "XXX XviD"}
- {id: 5070, cat: XXX, desc: "XXX HD Packs"}
- {id: 5080, cat: XXX, desc: "XXX SD Packs"}
- {id: 5090, cat: XXX, desc: "XXX Sonstiges"}
- {id: 6010, cat: PC/Games, desc: "Games Windows"}
- {id: 6020, cat: Console, desc: "Games Linux"}
- {id: 6030, cat: PC/Mac, desc: "Games MacOS"}
@@ -98,6 +99,22 @@
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "1"
options:
"1": "created"
"8": "seeders"
"6": "size"
"2": "title"
- name: type
type: select
label: Order requested from site
default: "1"
options:
"1": "desc"
"2": "asc"
login:
path: login.php
@@ -130,42 +147,46 @@
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# seachin 0=name 1=descr 2=both
blah: 0
# include dead 0=active 1=all 2=dead
incldead: 1
orderby: added
sort: desc
showsearch: 0
suchfeld: 2
alleanzeigen: 1
$raw: "{{ range .Categories }}kategorie[]={{.}}&{{end}}"
suche: "{{ .Keywords }}"
# searchin 1 name 2 descr 3 both
durchsuche: 1
# includedead 1 active 2 all 3 dead 4 highlight 5 bookmark 6 onlyups 7 freeleech 8 multi2 9 multi5 10 multi10 11 25%dl 12 50%dl 13 75%dl
suchein: 2
# cat 1 all 1000 film 2000 tv 3000 docs 4000 sport 5000 xxx 6000 games 7000 apps 8000 music 9000 other
sucheaus: 1
sortierenach: "{{ .Config.sort }}"
sortierung: "{{ .Config.type }}"
rows:
selector: table.tableinborder[border="0"][cellspacing="0"][cellpadding="0"] tr
fields:
category:
selector: td.tableb a
selector: a.bt-cat
attribute: href
filters:
- name: querystring
args: cat
- name: regexp
args: (\d+)$
title:
selector: div a.tor-name
selector: a.tor-name
details:
selector: div a.tor-name
selector: a.tor-name
attribute: href
download:
selector: div a.tor-name
selector: div.tor-metadl a
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?torrent="]
banner:
selector: div[id^="details-"] img
attribute: src
seeders:
selector: div.tor-sl b
selector: div.tor-seeder
leechers:
selector: div.tor-sl b:last-of-type
selector: div.tor-leecher
grabs:
selector: div.tor-snatcher
# 2 flavours of dates
date:
# Heute 13:30:04
@@ -178,12 +199,12 @@
- name: replace
args: ["Gestern", "Yesterday"]
date:
# 30.02.2018&nbsp;23:12:50
# &nbsp;&nbsp;27.05.2019 <b>12:52:11</b>
selector: div.tor-date:contains(".")
optional: true
filters:
- name: replace
args: ["\u00a0", " "]
args: ["\u00a0", ""]
- name: dateparse
args: "02.01.2006 15:04:05"
size:
@@ -193,21 +214,16 @@
args: [".", ""]
- name: replace
args: [",", "."]
grabs:
selector: div.tor-take
filters:
- name: regexp
args: (\d+)
downloadvolumefactor:
case:
img[src="pic/new_details/25k.png"]: 0.25
img[src="pic/new_details/50k.png"]: 0.5
img[src="pic/new_details/75k.png"]: 0.75
img[src="pic/ou_new.png"]: 0
font.ou: 0 # only upload is counted
font.fl: 0 # freeleech neither dl or ul is counted
"*": 1
uploadvolumefactor:
case:
img[src="pic/sc-dark/multi2.jpg"]: 2
img[src="pic/sc-dark/multi5.jpg"]: 5
img[src="pic/sc-dark/multi10.jpg"]: 10
"font.mu:contains(\"2x\")": 2
"font.mu:contains(\"5x\")": 5
"font.mu:contains(\"10x\")": 10
font.fl: 0 # freeleech neither dl or ul is counted
"*": 1
# engine n/a

View File

@@ -1,4 +1,4 @@
---
---
site: bithorlo
name: Bithorlo
description: "Bithorlo (BHO) is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"
@@ -63,6 +63,22 @@
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>"
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
method: cookie
@@ -73,33 +89,15 @@
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: tr[class^="browse"]
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="torrent.php?id="]
attribute: title
banner:
optional: true
selector: a[href^="torrent.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: ", '(.*)'"
downloadvolumefactor:
case:
img[title="Ingyenes letöltés"]: "0"
"*": "1"
uploadvolumefactor:
selector: span:contains("Feltöltési szorzó")
filters:
- name: replace
args: ["Feltöltési szorzó × ", ""]
category:
selector: a[href^="browse.php?cat="]
attribute: href
@@ -107,9 +105,22 @@
- name: querystring
args: cat
- name: trim # some torrents have an extra space
title:
selector: a[href^="torrent.php?id="]
attribute: title
details:
selector: a[href^="torrent.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
banner:
optional: true
selector: a[href^="torrent.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: ", '(.*)'"
size:
selector: td:nth-child(4)
grabs:
@@ -120,3 +131,13 @@
selector: td:nth-child(7)
date:
selector: "a[style=\"font-size: 8pt;cursor: pointer;\"][title]"
downloadvolumefactor:
case:
img[title="Ingyenes letöltés"]: 0
"*": 1
uploadvolumefactor:
selector: span:contains("Feltöltési szorzó")
filters:
- name: replace
args: ["Feltöltési szorzó × ", ""]
# engine n/a

View File

@@ -42,8 +42,8 @@
- {id: 27, cat: Other, desc: "Klipek"}
modes:
search: [q]
tv-search: [q, season, ep]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
@@ -61,13 +61,15 @@
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: 1
rows:
selector: table#torrenttable > tbody > tr:has(a[href^="details.php?id="])
filters:
- name: andmatch
fields:
# download button can be disbled in the profile, use details link instead
# download:
@@ -156,3 +158,4 @@
args: ["tegnap", "yesterday"]
description:
selector: td:nth-child(2) > div
# engine tbd

View File

@@ -1,128 +0,0 @@
---
site: bitme
name: BitMe
description: "BitMe.ORG is an E-Learning torrent tracker"
language: en-us
type: private
encoding: windows-1252
links:
- http://www.bitme.org/
caps:
categorymappings:
- {id: 20, cat: Books, desc: "3D"}
- {id: 1, cat: Books, desc: "AppDev"}
- {id: 14, cat: Books, desc: "Art"}
- {id: 2, cat: Audio/Audiobook, desc: "Audio"}
- {id: 3, cat: Books, desc: "CBT"}
- {id: 21, cat: Books, desc: "Dating"}
- {id: 29, cat: Books, desc: "Do It Yourself"}
- {id: 5, cat: TV/Documentary, desc: "Documentaries"}
- {id: 6, cat: Books, desc: "e-Books"}
- {id: 7, cat: Books, desc: "Keystone"}
- {id: 8, cat: Books, desc: "Languages"}
- {id: 9, cat: Books, desc: "LearnKey"}
- {id: 10, cat: Books, desc: "Lynda.com"}
- {id: 19, cat: Books, desc: "Magic"}
- {id: 30, cat: Books, desc: "MATH"}
- {id: 18, cat: Books, desc: "Medical"}
- {id: 11, cat: Books, desc: "Misc"}
- {id: 12, cat: Books, desc: "Misc E-Learning"}
- {id: 22, cat: Books, desc: "Music Learning"}
- {id: 28, cat: Books, desc: "Photography"}
- {id: 23, cat: Books, desc: "Political"}
- {id: 24, cat: Books, desc: "Religion"}
- {id: 25, cat: Books, desc: "Self Improvement"}
- {id: 16, cat: Audio/Other, desc: "SFX"}
- {id: 26, cat: Books, desc: "Sports"}
- {id: 17, cat: Other, desc: "Stock Photography"}
- {id: 13, cat: Books, desc: "Total Training"}
- {id: 4, cat: Books, desc: "TTC"}
- {id: 27, cat: Other, desc: "Video Stock"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
method: form
path: login.php
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[src="visual.php"]
input: secimage
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
logout: "no"
error:
- selector: table:contains("Login failed!")
- selector: table:contains("Wrong Code!")
test:
path: browse.php
search:
path: browse.php
method: get
inputs:
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: table[cellpadding="5"] > tbody > tr:has(td.latest)
fields:
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
size:
selector: td:nth-child(7)
filters:
- name: replace
args: ["<br>", ""]
grabs:
selector: td:nth-child(8)
filters:
- name: replace
args: ["<br>", ""]
- name: replace
args: ["times", ""]
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: font[color="999999"]
filters:
- name: replace
args: ["at", ""]
- name: replace
args: [",", ""]
- name: replace
args: ["st", ""]
- name: replace
args: ["nd", ""]
- name: replace
args: ["rd", ""]
- name: replace
args: ["th", ""]
- dateparse:
args: "Monday January 2 2006 15:04:05 PM"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,158 @@
---
site: bitru
name: BitRu
description: "BitRu is a RUSSIAN Public Torrent Tracker for MOVIES / TV / GENERAL"
language: ru-ru
type: public
encoding: UTF-8
links:
- http://bitru.org/ # site forces http, https is not supported
caps:
categories:
"movie": Movies
"serial": TV
"music": Audio
"game": PC/Games
"soft": PC
"literature": Books
"audiobook": Audio/Audiobook
"video": Movies
"image": Other
"xxx": XXX
modes:
search: [q]
settings:
- name: adverts
type: select
label: Include Advertising
default: "yes"
options:
"yes": "yes"
"no": "no"
- name: sort
type: select
label: Sort requested from site
default: "_"
options:
"_": "created"
"seeders": "seeders"
"size": "size"
search:
paths:
- path: browse.php
inputs:
s: "{{ .Keywords }}"
rek: "{{ .Config.adverts }}"
sort: "{{ re_replace .Config.sort \"_\" \"\"}}"
rows:
selector: table.browse-list > tbody > tr
fields:
category:
selector: td:nth-child(1) a
attribute: href
filters:
- name: querystring
args: tmp
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details", "download"]
description:
selector: img[src="styles/images/adwarn.png"]
optional: true
attribute: title
filters:
- name: replace
args: ["Присутствует реклама", "Contains Adverts"]
banner:
selector: a[href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
date:
# Сегодня в 09:09 от
# Вчера в 22:47 от
selector: td:nth-child(2) div.b-info div span:nth-child(2):contains("Сегодня"), td:nth-child(2) div.b-info div span:nth-child(2):contains("Вчера")
optional: true
filters:
- name: regexp
args: "(.*?) от "
- name: replace
args: ["Сегодня в", "Today"]
- name: replace
args: ["Вчера в", "Yesterday"]
date:
# 08 ноября 2019 в 23:53 от
selector: td:nth-child(2) div.b-info div span:nth-child(2):not(:contains("Сегодня")):not(:contains("Вчера"))
optional: true
filters:
- name: regexp
args: "(.*?) от "
- name: replace
args: [" в ", " "]
- name: replace
args: ["января", "January"]
- name: replace
args: ["февраля", "February"]
- name: replace
args: ["марта ", "March"]
- name: replace
args: ["апреля", "April"]
- name: replace
args: ["мая", "May"]
- name: replace
args: ["июня", "June"]
- name: replace
args: ["июля", "July"]
- name: replace
args: ["августа", "August"]
- name: replace
args: ["сентября", "September"]
- name: replace
args: ["октября", "October"]
- name: replace
args: ["ноября", "November"]
- name: replace
args: ["декабря", "December"]
- name: dateparse
args: "02 January 2006 15:04"
size:
selector: td:nth-child(3)
filters:
- name: replace
args: ["ТБ", "TB"]
- name: replace
args: ["ГБ", "GB"]
- name: replace
args: ["МБ", "MB"]
- name: replace
args: ["КБ", "KB"]
seeders:
selector: td:nth-child(4)
filters:
- name: replace
args: ["?", "1"]
leechers:
selector: td:nth-child(5)
filters:
- name: replace
args: ["?", "0"]
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -6,6 +6,8 @@
type: private
encoding: windows-1252
links:
- https://bitspyder.net/
legacylinks:
- http://bitspyder.net/
caps:
@@ -47,9 +49,34 @@
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "8"
options:
"8": "created"
"6": "seeders"
"4": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: processf.php
method: post
path: login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
@@ -61,17 +88,20 @@
search:
paths:
- path: browse.php
method: post
inputs:
search: "{{ .Keywords }}"
# 0 active 1 incldead 2 onlydead
incldead: 1
# 0 title 1 default
scope: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table > tbody > tr[class]
filters:
- name: andmatch
fields:
# there are two styles, we support both
title:
@@ -101,7 +131,7 @@
selector: td.rowcol:nth-child(7):has(br), td.clear:nth-child(4)
filters:
- name: regexp
args: ([\d,]+)
args: (\d+)
seeders:
selector: td.rowcol:nth-last-child(3)
leechers:
@@ -138,3 +168,4 @@
description:
optional: true
selector: font[color="#990000"]
# custom v4

View File

@@ -0,0 +1,83 @@
---
site: bittorrentam
name: Bittorrent.AM
description: "Bittorrent.AM is a Public torrent index"
language: en-us
type: public
encoding: UTF-8
links:
- http://www.bittorrent.am/
caps:
categorymappings:
- {id: 0, cat: XXX, desc: "Adult"}
- {id: 1, cat: TV/Anime, desc: "Anime / Hentai"}
- {id: 2, cat: PC, desc: "Apps"}
- {id: 3, cat: Console, desc: "Games"}
- {id: 4, cat: Movies, desc: "Movies"}
- {id: 5, cat: Audio, desc: "Music"}
- {id: 6, cat: Other, desc: "Other"}
- {id: 7, cat: TV, desc: "Series / TV Shows"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: sort
type: select
label: Sort requested from site
default: "pdd"
options:
"pdd": "created desc"
"pd": "created asc"
"sdsd": "seeders desc"
"sds": "seeders asc"
"szd": "size desc"
"sz": "size asc"
"td": "title desc"
"t": "title asc"
download:
selector: a[ href^="magnet:?xt="]
attribute: href
search:
paths:
- path: "{{ if .Keywords }}search.php?kwds={{ .Keywords }}&ord={{ .Config.sort }}&cat=100{{else}}/{{end}}"
rows:
selector: table.torrentsTable:has(tr.r) tbody tr.r
fields:
category:
text: 6
title:
selector: td:nth-child(3) a
details:
selector: td:nth-child(3) a
attribute: href
download:
selector: td:nth-child(3) a
attribute: href
date:
selector: td:nth-child(1)
filters:
- name: dateparse
args: "02 Jan 2006"
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(5)
filters:
- name: replace
args: ["-", "1"]
leechers:
selector: td:nth-child(6)
filters:
- name: replace
args: ["-", "0"]
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -6,8 +6,8 @@
type: private
encoding: UTF-8
links:
- http://www.bitturk.net/
- http://www.bitturk.net/ # site does not support https ERR_CONNECTION_REFUSED
caps:
categorymappings:
- {id: 69, cat: Movies, desc: "BiTTuRK Altın"}
@@ -20,6 +20,7 @@
- {id: 67, cat: XXX, desc: "XxX"}
- {id: 68, cat: Movies, desc: "Dual (TR-~)"}
- {id: 58, cat: Movies, desc: "Film"}
- {id: 72, cat: Movies, desc: "Belgesel"}
- {id: 60, cat: Movies/3D, desc: "3D"}
- {id: 45, cat: Movies, desc: "Eğitim / Prog "}
- {id: 1, cat: Movies, desc: "Filmler"}
@@ -52,12 +53,12 @@
- {id: 50, cat: TV, desc: "Yab@ncı Dizi"}
- {id: 51, cat: TV, desc: "Yerli Dizi"}
- {id: 44, cat: Books, desc: "E-BooK"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
@@ -69,14 +70,29 @@
type: info
label: Layout
default: "<ol><li>Only the English Classic profile is supported.<li>Make sure to set the <b>Torrent Listing (Listeleme Biçimi)</b> option in your profile to <b>Classic (Klasik)</b><li>And set the <b>Language (Dil)</b> to <b>English</b><li>Using the <i>Modern</i> theme will prevent results, and using <i>Turkish</i> will prevent upload dates.</ol>"
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seeders": "seeders"
"size": "size"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: ?p=home&pid=1
method: form
form: form#loginbox_form
submitpath: ajax/login.php
inputs:
action: "login"
action: login
loginbox_membername: "{{ .Config.username }}"
loginbox_password: "{{ .Config.password }}"
loginbox_remember: 1
@@ -91,24 +107,28 @@
test:
path: ?p=home&pid=1
selector: a[href*="/?p=logout&"]
search:
paths:
- path: /
keywordsfilters:
keywordsfilters:
- name: re_replace
args: ["[^a-zA-Z0-9]+", "%25"]
inputs:
p: "torrents"
pid: "32"
$raw: "{{range .Categories}}cid[]={{.}}&{{end}}"
p: torrents
pid: 32
$raw: "{{ range .Categories }}cid[]={{.}}&{{end}}"
keywords: "{{ .Keywords }}"
search_type: "name"
searchin: "title"
search_type: name
searchin: title
"sortOptions[sortBy]": "{{ .Config.sort }}"
"sortOptions[sortOrder]": "{{ .Config.type }}"
error:
- selector: div.error:not(:contains("Gösterilecek sonuç bulunamadı."))
rows:
selector: table#torrents_table_classic tr:has(td.torrent_name)
fields:
title:
selector: a[href*="?p=torrents&pid=10&action=details"]
@@ -126,7 +146,7 @@
attribute: href
date:
optional: true
# Uploaded 30-01-2019 15:02 by
# Uploaded 30-01-2019 15:02 by
selector: td.torrent_name:not(:contains(" at "))
filters:
- name: regexp
@@ -158,9 +178,10 @@
attribute: href
downloadvolumefactor:
case:
"img[src$=\"/torrent_free.png\"]": "0.5"
"*": "1"
"img[src$=\"/torrent_free.png\"]": 0.5
"*": 1
uploadvolumefactor:
case:
"img[src$=\"/torrent_multiple_upload.png\"]": "2"
"*": "1"
"img[src$=\"/torrent_multiple_upload.png\"]": 2
"*": 1
# TSUE 2.2

View File

@@ -1,4 +1,4 @@
---
---
site: bluebirdhd
name: BlueBird
description: "BlueBird is a RUSSIAN Private Torrent Tracker for HD MOVIES"

View File

@@ -13,27 +13,47 @@
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Movies, desc: "FANRES"}
- {id: 6, cat: TV/Anime, desc: "Anime"}
- {id: 7, cat: Movies/Other, desc: "Trailer"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: cookie
type: text
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<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>"
- 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
method: cookie
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
error:
- selector: script[nonce]:contains("Error")
message:
selector: script[nonce]:contains("Error")
cookie: "{{ .Config.cookie }}"
test:
path: /
selector: a[href$="/logout"]
ratio:
path: /
selector: li:has(i.fa-sync-alt)
@@ -45,8 +65,8 @@
paths:
- path: torrents/filter
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
description: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
@@ -54,11 +74,14 @@
tmdb: ""
mal: ""
igdb: ""
sort: created_at
direction: desc
sorting: "{{ .Config.sort }}"
sort: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
@@ -102,29 +125,37 @@
date:
selector: time
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portoguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
- name: re_replace
args: ["(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|hace|il y a|vor|преди)", "ago"]
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
- name: re_replace
args: ["(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut)", "minute"]
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
- name: re_replace
args: ["(dakika|minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟)", " minute"]
- name: re_replace
args: ["(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur)", "hour"]
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
- name: re_replace
args: ["(saat|tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时)", " hour"]
- name: re_replace
args: ["(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден)", "day"]
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
- name: re_replace
args: ["(gün|päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天)", " day"]
- name: re_replace
args: ["(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица)", "week"]
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
- name: re_replace
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周)", " week"]
- name: re_replace
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
args: ["(?i) (ay)", "month"]
- name: re_replace
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月)", " 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"]
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
@@ -141,4 +172,4 @@
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
# UNIT3D 2.2.0
# UNIT3D 2.3.0

View File

@@ -1,4 +1,4 @@
---
---
site: booktracker
name: BookTracker
description: "BookTracker is a RUSSIAN Semi-Private Torrent Tracker for EBOOKS"
@@ -15,6 +15,30 @@
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "1"
options:
"1": "created"
"10": "seeders"
"7": "size"
"2": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: login.php
method: form
@@ -39,8 +63,8 @@
- path: tracker.php
inputs:
nm: "{{ .Keywords }}"
o: 1
s: 2
o: "{{ .Config.sort }}"
s: "{{ .Config.type }}"
tm: -1
sns: -1
@@ -69,6 +93,7 @@
date:
selector: td:last-child > u
downloadvolumefactor:
text: "1"
text: 1
uploadvolumefactor:
text: "1"
text: 1
# TorrentPier

View File

@@ -0,0 +1,133 @@
---
site: boxingtorrents
name: Boxing Torrents
description: "Boxing Torrents is a Private Torrent Tracker for BOXING"
language: en-us
type: private
encoding: UTF-8
links:
- https://tc-boxing.com/
caps:
categorymappings:
- {id: 15, cat: TV/Sport, desc: "3D"}
- {id: 9, cat: TV/Sport, desc: "Amateur - Full"}
- {id: 16, cat: TV/Sport, desc: "Blu-ray"}
- {id: 13, cat: TV/Sport, desc: "Career Set"}
- {id: 8, cat: TV/Sport, desc: "DVD"}
- {id: 10, cat: TV/Sport, desc: "Foreign - Excellent"}
- {id: 11, cat: TV/Sport, desc: "Foreign - Fair"}
- {id: 6, cat: TV/Sport, desc: "Foreign - Good"}
- {id: 12, cat: TV/Sport, desc: "Foreign - Poor"}
- {id: 1, cat: TV/Sport, desc: "Full - Excellent"}
- {id: 3, cat: TV/Sport, desc: "Full - Fair"}
- {id: 2, cat: TV/Sport, desc: "Full - Good"}
- {id: 4, cat: TV/Sport, desc: "Full - Poor"}
- {id: 14, cat: TV/Sport, desc: "HD"}
- {id: 7, cat: TV/Sport, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seeders": "seeders"
"size": "size"
"name": "title"
- name: type
type: select
label: Order requested from site
default: "DESC"
options:
"DESC": "desc"
"ASC": "asc"
- name: info_download
type: info
label: "Download Restrictions"
default: "You must have uploaded at least 10GB before you are able to access all torrent sizes. Until then, you are restricted to torrents no larger than 2.5GB."
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:contains("Login failed!")
test:
path: browse.php
selector: a[href="logout.php"]
download:
selector: a[href^="download.php"]
attribute: href
search:
paths:
# https://tc-boxing.com/browse.php?c16=1&c8=1&c14=1&incldead=1
# https://tc-boxing.com/browse.php?search=tyson&cat=0&incldead=1
- path: browse.php
inputs:
$raw: "{{ if .Categories }}{{ range .Categories }}c{{.}}=1&{{end}}{{else}}cat=0{{end}}"
# 0 active 1 incldead 2 onlydead
incldead: 1
search: "{{ .Keywords }}"
sort: "{{ .Config.sort }}"
d: "{{ .Config.type }}"
rows:
selector: table[border="1"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="details.php?id="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="details.php?id="]
attribute: href
files:
selector: td:nth-last-child(8)
date:
selector: td:nth-last-child(6)
filters:
- name: dateparse
args: "2006-01-0215:04:05"
size:
selector: td:nth-last-child(5)
grabs:
selector: td:nth-last-child(4)
filters:
- name: regexp
args: (\d+)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
downloadvolumefactor:
case:
"b:contains(\"FreeLeech\")": 0
"*": 1
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -0,0 +1,118 @@
---
site: brasiltracker
name: BrasilTracker
description: "BrasilTracker is a BRAZILIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-us
encoding: UTF-8
type: private
links:
- https://brasiltracker.org/
caps:
categorymappings:
- {id: 1, cat: Other, desc: "Filmes/Series/Música"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "time"
options:
"time": "created"
"seeders": "seeders"
"size": "size"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
- name: info_results
type: info
label: "Search results"
default: "This indexer does not support <b>Torrent Groups</b><br />Un-tick the <b>Torrent grouping</b><i> (Habilitar Grupo de Torrents)</i> checkbox in your <b>Configurações</b>."
- name: info_categories
type: info
label: "About categories"
default: "BrasilTracker does not show <b>Categories</b> in its Search Results.<br />To use this indexer with Sonarr/Radarr set your indexer category to <b>7000</b>."
login:
path: login.php
method: form
form: form#loginform
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
error:
- selector: form#loginform:contains("incorretos")
test:
path: index.php
selector: a[href^="logout.php?auth="]
search:
paths:
- path: torrents.php
inputs:
# torrents.php?searchstr=mandalorain&order_by=size&order_way=desc&action=basic&searchsubmit=1
searchstr: "{{ .Keywords }}"
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
category:
text: 1
title:
selector: a[href^="torrents.php?id="]
details:
selector: a[href^="torrents.php?id="]
attribute: href
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.tags
banner:
selector: img[alt="Cover"]
attribute: src
files:
selector: td:nth-child(3)
date:
selector: span.time
attribute: title
filters:
- name: dateparse
args: "Jan 2 2006, 15:04"
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
strong.tl_free: 0
"*": 1
uploadvolumefactor:
case:
"*": 1
# engine n/a

View File

@@ -0,0 +1,147 @@
---
site: broadcity
name: BroadCity
description: "BroadCity is a TURKISH Private Torrent Tracker for MOVIES and TV"
language: tr
type: private
encoding: UTF-8
links:
- https://broadcity.in/
legacylinks:
- http://broadcity.in/
caps:
categorymappings:
- {id: 1, cat: Movies/UHD, desc: "UHD"}
- {id: 2, cat: Movies/HD, desc: "BluRay"}
- {id: 8, cat: Movies/HD, desc: "TV"}
- {id: 6, cat: Movies/HD, desc: "WEB-DL"}
- {id: 16, cat: Movies/HD, desc: "WEBRip"}
- {id: 3, cat: Movies/HD, desc: "Movies HD"}
- {id: 25, cat: Movies/3D, desc: "Movies 3D"}
- {id: 4, cat: Movies/HD, desc: "BluRay"}
- {id: 7, cat: Movies/HD, desc: "TV"}
- {id: 5, cat: Movies/HD, desc: "WEB-DL"}
- {id: 14, cat: Movies/HD, desc: "WEBRip"}
- {id: 27, cat: Movies/HD, desc: "LORD Rips"}
- {id: 9, cat: Movies/SD, desc: "SD"}
- {id: 23, cat: Movies/SD, desc: "BluRay"}
- {id: 10, cat: Movies/SD, desc: "DVD"}
- {id: 12, cat: Movies/SD, desc: "TV"}
- {id: 13, cat: Movies/SD, desc: "WEB-DL"}
- {id: 15, cat: Movies/SD, desc: "WEBRip"}
- {id: 17, cat: TV, desc: "TV"}
- {id: 26, cat: TV/Other, desc: "TV Program"}
- {id: 19, cat: TV, desc: "Yabanci Dizi"}
- {id: 18, cat: TV, desc: "Yerli Dizi"}
- {id: 20, cat: Movies/HD, desc: "VIP"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info
type: info
label: Captcha Text Note
default: The <i>Captcha Text</i> code is <b>case sensitive</b>.
login:
path: login.php
method: form
form: form[action$="takelogin.php"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
selector: img#regimage
input: imagestring
error:
- selector: table:contains("Bir Hata oluştu!")
- selector: table:contains("Bir Hata Oluştu!")
- selector: table:contains("Login Giriş Kilitlendi!")
test:
path: index.php
selector: a[href*="/logout.php?logouthash="]
ratio:
path: index.php
selector: div#top div:nth-child(2) span:nth-child(2)
filters:
- name: regexp
args: "Ratio: (.+?) Bonus:"
search:
paths:
- path: browse.php
keywordsfilters:
- name: re_replace # E01 to BL01
args: ["(?i)\\bE(\\d+)\\b", "E$1"]
inputs:
# does not support multi categories so defaulting to ALL
do: search
keywords: "{{ .Keywords }}"
category: 0
search_type: t_name
include_dead_torrents: yes
rows:
selector: table#sortabletable tbody tr:has(div[id^="port-target-"])
fields:
title:
selector: div[id^="port-target-"] a
filters:
- name: re_replace # BL01 to E01
args: ["(?i)\\bBL(\\d+)\\b", " E$1 "]
details:
selector: div[id^="port-target-"] a
attribute: href
category:
selector: a[href*="browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
banner:
selector: div[id^="port-content-"] img
attribute: src
date:
selector: td:nth-child(2)
filters:
- name: regexp
args: (\d{2}-\d{2}-\d{4} \d{2}:\d{2})
filters:
- name: dateparse
args: "02-01-2006 15:04"
download:
selector: a[href*="download.php?id="]
attribute: href
comments:
selector: td:nth-child(4) a
attribute: href
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[src$="/freedownload.gif"]: 0
img[src$="/silverdownload.gif"]: 0.5
"*": 1
uploadvolumefactor:
case:
img[src$="/x2.gif"]: 2
"*": 1

View File

@@ -0,0 +1,141 @@
---
site: brobits
name: BRObits
description: "BRObits is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://brobits.cc/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 410, cat: TV, desc: "TV Series/剧集"}
modes:
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: cookie
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>"
- name: sort
type: select
label: Sort requested from site
default: "4"
options:
"4": "created"
"7": "seeders"
"5": "size"
"1": "title"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 incldead 1 active 2 dead
incldead: 0
# 0 all 1 normal 2 free 3 2x 4 2xfree 5 50% 6 2x50% 7 30%
spstate: 0
# 0 title 1 descr 3 uploader 4 imdburl
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
# 0 AND 1 OR 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[href^="details.php?id="]
title:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdb:
optional: true
selector: div.imdb_100 > a
attribute: href
date:
# time type: time elapsed (default)
selector: td:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date:
# time added
selector: td:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
description:
selector: td:nth-child(2)
remove: a, img
# NexusPHP Standard v1.5 Beta 4

View File

@@ -6,10 +6,11 @@
type: public
encoding: UTF-8
links:
- https://btdb.eu/
- https://btdb.io/
legacylinks:
- https://btdb.to/
- https://btdb.unblocked.app/
- https://btdb.eu/
caps:
categorymappings:
@@ -25,43 +26,68 @@
type: info
label: Category for Sonarr and Radarr
default: BTDB does not use categories. In your Sonarr or Radarr Torznab Indexer settings, set the category to 100001.
- name: sort
type: select
label: Sort requested from site
default: "time"
options:
"time": "created"
"length": "size"
"seeders": "seeders"
search:
paths:
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time{{else}}recent{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=2{{else}}recent?page=2{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=3{{else}}recent?page=3{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=4{{else}}recent?page=4{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=5{{else}}recent?page=5{{end}}"
- path: "{{ if .Keywords }}search/{{ .Keywords }}/{{else}}recent{{end}}?sort={{ .Config.sort }}"
- path: "{{ if .Keywords }}search/{{ .Keywords }}/{{else}}recent{{end}}?sort={{ .Config.sort }}&page=2"
- path: "{{ if .Keywords }}search/{{ .Keywords }}/{{else}}recent{{end}}?sort={{ .Config.sort }}&page=3"
- path: "{{ if .Keywords }}search/{{ .Keywords }}/{{else}}recent{{end}}?sort={{ .Config.sort }}&page=4"
- path: "{{ if .Keywords }}search/{{ .Keywords }}/{{else}}recent{{end}}?sort={{ .Config.sort }}&page=5"
rows:
selector: li[class$="item"]
selector: div.media
fields:
title:
selector: h2[class$="title"] a[href*="/torrent/"]
attribute: title
category:
text: "1"
text: 1
title:
selector: a[href*="/torrent/"]
details:
selector: h2[class$="title"] a[href*="/torrent/"]
selector: a[href*="/torrent/"]
attribute: href
download:
# download can be missing despite icon being present. Fortunately the magnet is always there
selector: a[href$=".torrent"]
attribute: href
optional: true
magnet:
selector: div[class$="info"] a[href^="magnet:?xt="]
selector: a[href^="magnet:?xt="]
attribute: href
banner:
selector: a.img-thumbnail img
attribute: src
filters:
- name: replace
args: ["https://btdb.io/assets/img/placeholder.png", ""]
size:
selector: div[class$="info"] span:nth-of-type(1)
selector: small:nth-of-type(1) strong
files:
selector: div[class$="info"] span:nth-of-type(2)
selector: small:nth-of-type(2) strong
seeders:
selector: small:nth-of-type(3) strong
filters:
- name: replace
args: [",", ""]
leechers:
selector: small:nth-of-type(4) strong
filters:
- name: replace
args: [",", ""]
date:
selector: div[class$="info"] span:nth-of-type(3)
selector: small:nth-of-type(5) strong
filters:
- name: timeago
grabs:
selector: div[class$="info"] span:nth-of-type(4)
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# engine n/a

View File

@@ -20,7 +20,14 @@
settings:
- name: info
type: info
default: BTDigg does not use categories. In your software Indexer settings, set the category to 100001.
default: BTDigg does not use categories. In your software Indexer settings, set the category to 7000.
- name: sort
type: select
label: Sort requested from site
default: "2"
options:
"2": "created"
"3": "size"
search:
# https://btdig.com/search?q=test&order=2
@@ -28,12 +35,15 @@
paths:
- path: search
inputs:
q: "{{if .Keywords }}{{.Keywords}}{{else}}test{{end}}"
order: 2
q: "{{ if .Keywords }}{{ .Keywords }}{{else}}test{{end}}"
# 0 relevance 2 age 3 size 4 files
order: "{{ .Config.sort }}"
rows:
selector: div.one_result
filters:
- name: andmatch
fields:
title:
selector: div.torrent_name a
@@ -62,6 +72,7 @@
leechers:
text: 1
downloadvolumefactor:
text: "0"
text: 0
uploadvolumefactor:
text: "1"
text: 1
# dhtcrawler2

View File

@@ -0,0 +1,81 @@
---
site: btetree
name: BT.etree
description: "BT.etree is a Public Tracker dedicated to Bootleg FLAC MUSIC"
language: en-us
type: public
encoding: UTF-8
links:
- https://bt.etree.org/
legacylinks:
- http://bt.etree.org/
caps:
categories:
"Music": Audio/Lossless
modes:
search: [q]
music-search: [q, album, artist, label, year]
settings:
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seeders": "seeders"
"name": "title"
search:
paths:
# http://bt.etree.org/?searchzzzz=&cat=0
- path: /
inputs:
searchzzzz: "{{ if .Query.Artist }}{{ .Query.Artist }}{{else}}{{ .Keywords }}{{end}}"
cat: 0
sort: "{{ .Config.sort }}"
rows:
selector: table[bgcolor="#CCCCCC"] tbody tr:has(a[href^="download.php"])
filters:
- name: andmatch
fields:
category:
text: "Music"
title:
selector: a.details_link
details:
selector: a.details_link
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(4)
comments:
selector: td:nth-child(5) a
attribute: href
date:
selector: td:nth-child(6)
filters:
- name: dateparse
args: "01/02 15:04"
size:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: (\d+)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -0,0 +1,68 @@
---
site: bteye
name: BTeye
description: "BTeye is a Public BitTorrent DHT search engine."
language: en-us
type: public
encoding: UTF-8
links:
- https://www.bteye.org/
caps:
categories:
1: Other
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: info
type: info
default: BTeye does not use categories. In your software Indexer settings, set the category to 7000.
download:
selector: a[href^="magnet:?xt="]
attribute: href
search:
# https://www.bteye.org/q/2020
paths:
- path: "q/{{ if .Keywords }}{{ .Keywords }}{{else}}2020{{end}}"
rows:
selector: div.plist
filters:
- name: andmatch
fields:
category:
text: 1
title:
selector: div.pname a
attribute: title
details:
selector: div.pname a
attribute: href
download:
selector: div.pname a
attribute: href
date:
selector: div.plink b:nth-of-type(3)
filters:
- name: dateparse
args: "2006-01-02"
files:
selector: div.plink b:nth-of-type(2)
size:
selector: div.plink b:nth-of-type(1)
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -39,7 +39,7 @@
movie-search: [q]
login:
path: takelogin__akcja.php
path: takelogin_action.php
method: post
inputs:
username_dupa: "{{ .Config.username }}"
@@ -114,4 +114,4 @@
"img[src=\"pic/ico_disk2.png\"]": 1
"*": 1
uploadvolumefactor:
text: "1"
text: "1"

View File

@@ -1,4 +1,4 @@
---
---
site: btnext
name: BTNext
description: "BTNext (BTNT) is a PORTUGUESE Private Torrent Tracker for 0DAY / GENERAL"
@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://tracker.btnext.com/
- http://tracker.btnext.com/ # site forces http, https is not supported
caps:
categorymappings:
@@ -15,67 +15,76 @@
- {id: 89, cat: Console, desc: "Games"}
- {id: 87, cat: TV, desc: "Series"}
- {id: 93, cat: Audio, desc: "Musica"}
- {id: 108, cat: Movies, desc: "ViP"}
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 70, cat: Movies/3D, desc: "3D"}
- {id: 71, cat: Movies/Sd, desc: "480p"}
- {id: 72, cat: Movies/BluRay, desc: "BD-R"}
- {id: 31, cat: Movies/HD, desc: "BDRIP/BRRip"}
- {id: 16, cat: Movies/SD, desc: "CAM"}
- {id: 74, cat: Movies/DVD, desc: "DvD-R"}
- {id: 17, cat: Movies/HD, desc: "HD"}
- {id: 91, cat: Movies/Other, desc: "Kids"}
- {id: 76, cat: Movies, desc: "Packs"}
- {id: 77, cat: Movies/WEBDL, desc: "WEB-DL"}
- {id: 14, cat: Movies/SD, desc: "DVDRip/XViD"}
- {id: 85, cat: Movies/DVD, desc: "Custom-DVDR"}
- {id: 96, cat: Movies/HD, desc: "4K"}
- {id: 6, cat: PC, desc: "Applications"}
- {id: 18, cat: PC/ISO, desc: "PC Applications"}
- {id: 19, cat: PC/Mac, desc: "Macintosh Applications"}
- {id: 34, cat: PC/ISO, desc: "Linux Applications"}
- {id: 7, cat: Audio, desc: "Music"}
- {id: 20, cat: Audio/Video, desc: "MVideo"}
- {id: 21, cat: Audio/MP3, desc: "Mp3"}
- {id: 33, cat: Audio/Other, desc: "Mp4"}
- {id: 32, cat: Audio/Lossless, desc: "FLAC"}
- {id: 2, cat: Console, desc: "Games"}
- {id: 78, cat: PC/Games, desc: "Linux"}
- {id: 79, cat: PC/Mac, desc: "MacOSX"}
- {id: 28, cat: Console/NDS, desc: "Nintendo DS"}
- {id: 27, cat: PC/Games, desc: "PC/Windows"}
- {id: 80, cat: Console/PS3, desc: "PS2"}
- {id: 81, cat: Console/PS3, desc: "PS3"}
- {id: 82, cat: Console/PS4, desc: "PS4"}
- {id: 83, cat: Console/PSP, desc: "PSP"}
- {id: 95, cat: Console/PSVita, desc: "PSVITA"}
- {id: 4, cat: Console/Wii, desc: "Wii"}
- {id: 26, cat: Console/Xbox360, desc: "XBOX360"}
- {id: 84, cat: Console/Xbox, desc: "XONE"}
- {id: 70, cat: Movies/3D, desc: "Movies 3D"}
- {id: 71, cat: Movies/SD, desc: "Movies 480p"}
- {id: 72, cat: Movies/BluRay, desc: "Movies BD-R"}
- {id: 31, cat: Movies/HD, desc: "Movies BDRIP/BRRip"}
- {id: 16, cat: Movies/SD, desc: "Movies CAM"}
- {id: 74, cat: Movies/DVD, desc: "Movies DvD-R"}
- {id: 76, cat: Movies, desc: "Movies Packs"}
- {id: 91, cat: Movies/Other, desc: "Movies Kids"}
- {id: 77, cat: Movies/WEBDL, desc: "Movies WEB-DL"}
- {id: 85, cat: Movies/DVD, desc: "Movies Custom-DVDR"}
- {id: 14, cat: Movies/SD, desc: "Movies DVDRip/XViD"}
- {id: 98, cat: Movies/Other, desc: "Movies Juvenil"}
- {id: 104, cat: Movies/UHD, desc: "Movies Bluray-UHD"}
- {id: 102, cat: Movies/HD, desc: "Movies HD-720p"}
- {id: 101, cat: Movies/HD, desc: "Movies HD-1080p"}
- {id: 103, cat: Movies/UHD, desc: "Movies HD-2160p"}
- {id: 42, cat: TV, desc: "TV Series"}
- {id: 45, cat: TV/Documentary, desc: "Documentaries"}
- {id: 46, cat: TV/Sport, desc: "Sports"}
- {id: 47, cat: TV/HD, desc: "TV-Bluray"}
- {id: 48, cat: TV/SD, desc: "TV-Dvd-R"}
- {id: 49, cat: TV/SD, desc: "TV-DVDRiP"}
- {id: 50, cat: TV, desc: "TV-Packs"}
- {id: 92, cat: TV/Anime, desc: "TV-Kids"}
- {id: 52, cat: TV/SD, desc: "TV-SDx264"}
- {id: 53, cat: TV/WEB-DL, desc: "TV-WEB-DL"}
- {id: 55, cat: TV/HD, desc: "TV-X264"}
- {id: 47, cat: TV/HD, desc: "TV Bluray"}
- {id: 48, cat: TV/SD, desc: "TV Dvd-R"}
- {id: 49, cat: TV/SD, desc: "TV DVDRiP"}
- {id: 50, cat: TV, desc: "TV Packs"}
- {id: 92, cat: TV, desc: "TV Kids"}
- {id: 112, cat: TV, desc: "TV Juvenil"}
- {id: 52, cat: TV/SD, desc: "TV SDx264"}
- {id: 53, cat: TV/WEB-DL, desc: "TV WEB-DL"}
- {id: 55, cat: TV/HD, desc: "TV X264"}
- {id: 56, cat: TV/SD, desc: "TV-XViD"}
- {id: 44, cat: TV, desc: "Miscellaneous"}
- {id: 51, cat: TV/Anime, desc: "Anime"}
- {id: 54, cat: Audio/Audiobook, desc: "Audiobook"}
- {id: 57, cat: Books, desc: "E-Books"}
- {id: 58, cat: Books/Comics, desc: "Comics"}
- {id: 59, cat: Books, desc: "Educational"}
- {id: 60, cat: Books, desc: "Magazines/Journals"}
- {id: 7, cat: Audio, desc: "Music"}
- {id: 20, cat: Audio/Video, desc: "Music MVideo"}
- {id: 21, cat: Audio/MP3, desc: "Music MP3"}
- {id: 33, cat: Audio/Other, desc: "Music MP4"}
- {id: 32, cat: Audio/Lossless, desc: "Music FLAC"}
- {id: 2, cat: Console, desc: "Games"}
- {id: 78, cat: PC/Games, desc: "Games Linux"}
- {id: 79, cat: PC/Mac, desc: "Games MacOSX"}
- {id: 28, cat: Console/NDS, desc: "Games Nintendo DS"}
- {id: 27, cat: PC/Games, desc: "Games PC/Windows"}
- {id: 80, cat: Console/PS3, desc: "Games PS2"}
- {id: 81, cat: Console/PS3, desc: "Games PS3"}
- {id: 82, cat: Console/PS4, desc: "Games PS4"}
- {id: 83, cat: Console/PSP, desc: "Games PSP"}
- {id: 95, cat: Console/PSVita, desc: "Games PSVITA"}
- {id: 4, cat: Console/Wii, desc: "Games Wii"}
- {id: 26, cat: Console/Xbox360, desc: "Games XBOX360"}
- {id: 84, cat: Console/Xbox, desc: "Games XONE"}
- {id: 6, cat: PC, desc: "Applications"}
- {id: 18, cat: PC/ISO, desc: "Applications PC"}
- {id: 19, cat: PC/Mac, desc: "Applications Macintosh"}
- {id: 34, cat: PC/ISO, desc: "Applications Linux"}
- {id: 44, cat: Other, desc: "Miscellaneous"}
- {id: 54, cat: Audio/Audiobook, desc: "Books Audiobook"}
- {id: 57, cat: Books, desc: "Books E-Books"}
- {id: 58, cat: Books/Comics, desc: "Books Comics"}
- {id: 59, cat: Books, desc: "Books Educational"}
- {id: 60, cat: Books, desc: "Books Magazines/Journals"}
- {id: 61, cat: Other, desc: "Pics/Wallpapers"}
- {id: 62, cat: PC/Phone-Android, desc: "Android"}
- {id: 63, cat: PC/Phone-IOS, desc: "iOS"}
- {id: 66, cat: PC/Phone-Other, desc: "WindowsPhone"}
- {id: 90, cat: Other, desc: "GPS"}
- {id: 68, cat: Other, desc: "Others"}
- {id: 100, cat: Other, desc: "Revistas"}
- {id: 109, cat: TV/Anime, desc: "Anime"}
- {id: 51, cat: TV/Anime, desc: "Anime Filmes"}
- {id: 99, cat: TV/Anime, desc: "Anime Hentai"}
- {id: 110, cat: TV/Anime, desc: "Anime TV Séries"}
- {id: 41, cat: XXX, desc: "XXX"}
- {id: 64, cat: XXX, desc: "XXX-Magazines"}
- {id: 65, cat: XXX, desc: "XXX-Movies"}
@@ -85,6 +94,34 @@
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info
type: info
label: Layout
default: "<ol><li>Only the English Classic profile is supported.<li>Make sure to set the <b>Torrent Listing (Lista de Torrents)</b> option in your profile to <b>Classic (Clássico)</b><li>Using the <i>Moderna</i> theme will prevent results.</ol>"
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "created"
"seeders": "seeders"
"size": "size"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
login:
path: ?p=home&pid=1
@@ -92,7 +129,7 @@
form: form#loginbox_form
submitpath: /ajax/login.php
inputs:
action: "login"
action: login
loginbox_membername: "{{ .Config.username }}"
loginbox_password: "{{ .Config.password }}"
loginbox_remember: 1
@@ -111,20 +148,24 @@
search:
paths:
- path: /
keywordsfilters:
keywordsfilters:
- name: re_replace
args: ["[^a-zA-Z0-9]+", "%25"]
inputs:
p: "torrents"
pid: "32"
$raw: "{{range .Categories}}cid[]={{.}}&{{end}}"
p: torrents
pid: 32
$raw: "{{ range .Categories }}cid[]={{.}}&{{end}}"
keywords: "{{ .Keywords }}"
search_type: "name"
searchin: "title"
search_type: name
searchin: title
"sortOptions[sortBy]": "{{ .Config.sort }}"
"sortOptions[sortOrder]": "{{ .Config.type }}"
error:
- selector: div.error:not(:contains("Não existem resultados encontrados."))
- selector: div.error:not(:contains("Não existem resultados encontrados.")):not(:contains("There are no results found."))
rows:
selector: table#torrents_table_classic > tbody > tr:has(td.torrent_name)
fields:
title:
selector: a[href*="?p=torrents&pid=10&action=details"]
@@ -154,11 +195,11 @@
attribute: href
downloadvolumefactor:
case:
"img[title=\"FREE!\"]": "0"
"*": "1"
"img[title=\"FREE!\"]": 0
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1
date:
selector: td.torrent_name > abbr.timeago
optional: true
@@ -194,3 +235,4 @@
args: ["Domingo", "Sunday"]
- name: dateparse
args: "02-01-2006 15:04"
# TSUE 2.2

View File

@@ -1,4 +1,4 @@
---
---
site: btschool
name: BTSCHOOL
description: "BTSCHOOL is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -23,34 +23,33 @@
- {id: 415, cat: Other, desc: "其他/Other"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: cookie
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>"
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 }}"
error:
- selector: td.embedded:has(h2:contains("登錄失敗"))
- selector: td.embedded:has(h2:contains("失败"))
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 incldead 1 active 2 justdead
incldead: 0
# promotion: 0 all 1 normal 2 free 3 2x 4 2xfree 5 50% 6 2x 50% 7 30%
@@ -63,8 +62,10 @@
search_mode: 0
sort: 4
type: desc
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
category:
selector: a[href^="?cat="]
@@ -77,7 +78,7 @@
attribute: title
details:
selector: a[title][href^="details.php?id="]
attribute: href
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
@@ -99,19 +100,19 @@
selector: td.rowfollow:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: "0"
img.pro_free2up: "0"
img.pro_50pctdown: "0.5"
img.pro_50pctdown2up: "0.5"
img.pro_30pctdown: "0.3"
"*": "1"
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: "2"
img.pro_free2up: "2"
img.pro_2up: "2"
"*": "1"
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
description:
selector: td:nth-child(2)
remove: a, img
# NexusPHP
# NexusPHP Standard v1.5 Beta 4

View File

@@ -0,0 +1,61 @@
---
site: btsow
name: BTSOW
description: "BTSOW is a Public torrent indexer"
language: en-us
type: public
encoding: UTF-8
links:
- https://btsow.club/
legacylinks:
- https://btos.pw/
- https://btio.pw/
caps:
categories:
"other": Other
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
download:
selector: a#magnetOpen
attribute: href
search:
paths:
- path: "search/{{ if .Keywords }}{{ .Keywords }}{{else}}2019{{end}}"
rows:
selector: div.row:has(a[href*="/detail/hash/"])
fields:
category:
text: other
title:
selector: a[href*="/detail/hash/"]
attribute: title
details:
selector: a[href*="/detail/hash/"]
attribute: href
download:
selector: a[href*="/detail/hash/"]
attribute: href
date:
selector: div.date
filters:
- name: dateparse
args: "2006-01-02"
size:
selector: div.size
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -1,4 +1,4 @@
---
---
site: carpathians
name: Carpathians
description: "Carpathians is a HUNGARIAN Private Torrent Tracker for 0DAY / GENERAL"

View File

@@ -1,4 +1,4 @@
---
---
site: cartoonchaos
name: CartoonChaos
description: "CartoonChaos (CC) is a Private Torrent Tracker for ANIMATED MOVIES / TV"
@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://www.cartoonchaos.org/
- http://www.cartoonchaos.org/ # site does not support https NET::ERR_CERT_AUTHORITY_INVALID
settings:
- name: username
@@ -19,6 +19,22 @@
type: info
label: "Search results"
default: "Only the <b>xBtit_Default</b> style is supported with this indexer.<br />For best results, increase the torrents number in your profile to 100.<br />Default is 15."
- name: sort
type: select
label: Sort requested from site
default: "3"
options:
"3": "created"
"5": "seeders"
"4": "size"
"2": "title"
- name: type
type: select
label: Order requested from site
default: "2"
options:
"2": "desc"
"1": "asc"
caps:
categorymappings:
@@ -43,6 +59,7 @@
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
login:
path: index.php?page=login
@@ -63,14 +80,18 @@
- path: index.php
inputs:
page: torrents
search: "{{if .Query.IMDBID}}{{.Query.IMDBID}}{{else}}{{.Keywords}}{{end}}"
category: "{{if .Categories}}{{range .Categories}}{{.}};{{end}}{{else}}0{{end}}"
# options: 0=title, 1=title&descr, 2=descr
options: "{{if .Query.IMDBID}}1{{else}}0{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{else}}0{{end}}"
# 0=title, 1=title&descr, 2=descr
options: "{{ if .Query.IMDBID }}2{{else}}0{{end}}"
# 0 all 1 activeonly 2 deadonly
active: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
rows:
selector: table.lista tr td table.lista tr:has(a[href^="index.php?page=torrent-details"])
fields:
title:
selector: td a[href^="index.php?page=torrent-details"]
@@ -96,6 +117,14 @@
args: [" http://anonym.to?javascript:popdetails('", ""]
- name: replace
args: ["');", ""]
banner:
selector: td a[href^="index.php?page=torrent-details"]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) width"
- name: replace
args: ["torrentimg/nocover.jpg", ""]
size:
selector: td:nth-child(10)
# two flavours of dates
@@ -123,7 +152,8 @@
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[src="gold/gold.gif"]: "0"
"*": "1"
img[src="gold/gold.gif"]: 0
"*": 1
uploadvolumefactor:
text: "1"
text: 1
# xbtit 2.0.0

View File

@@ -1,4 +1,4 @@
---
---
site: casatorrent
name: Casa-Torrent
description: "Casa-Torrent is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -15,53 +15,53 @@
categorymappings:
- {id: 65, cat: Movies/HD, desc: "BD: BD"}
- {id: 68, cat: Books/Magazines, desc: "Ebooks: Presse"}
- {id: 56, cat: Books/Ebook, desc: "Ebooks: Ebooks"}
- {id: 90, cat: Audio/Audiobook, desc: "Ebooks: Audio books"}
- {id: 84, cat: XXX, desc: "Ebooks: XXX"}
- {id: 56, cat: Books/Ebook, desc: "Ebooks: Ebooks"}
- {id: 95, cat: Books/Comics, desc: "Ebooks: Mangas"}
- {id: 53, cat: Movies/HD, desc: "Films: 4K"}
- {id: 50, cat: Movies/UHD, desc: "Films: 4K-Remux"}
- {id: 72, cat: Movies/HD, desc: "Films: x265"}
- {id: 84, cat: XXX, desc: "Ebooks: XXX"}
- {id: 54, cat: Movies/3D, desc: "Films: 3D"}
- {id: 71, cat: Movies/BluRay, desc: "Films: Full Bluray"}
- {id: 96, cat: Movies, desc: "Films: Remux"}
- {id: 53, cat: Movies/HD, desc: "Films: 4K"}
- {id: 77, cat: Movies/UHD, desc: "Films: 4K-HDR"}
- {id: 82, cat: Movies/UHD, desc: "Films: 4K-light"}
- {id: 50, cat: Movies/UHD, desc: "Films: 4K-Remux"}
- {id: 61, cat: Movies, desc: "Films: Animation"}
- {id: 48, cat: Movies/BluRay, desc: "Films: BDRip / BRRip"}
- {id: 78, cat: Movies/DVD, desc: "Films: DVD-R"}
- {id: 47, cat: Movies/DVD, desc: "Films: DVDRip"}
- {id: 71, cat: Movies/BluRay, desc: "Films: Full Bluray"}
- {id: 63, cat: Movies/HD, desc: "Films: HD TV"}
- {id: 52, cat: Movies/HD, desc: "Films: HD.1080p"}
- {id: 51, cat: Movies/HD, desc: "Films: HD.720p"}
- {id: 80, cat: Movies/HD, desc: "Films: HDLiGHT / M-HD"}
- {id: 87, cat: Movies/HD, desc: "Films: HDRiP"}
- {id: 60, cat: Movies, desc: "Films: Pack"}
- {id: 47, cat: Movies/DVD, desc: "Films: DVDRip"}
- {id: 48, cat: Movies/BluRay, desc: "Films: BDRip / BRRip"}
- {id: 80, cat: Movies/HD, desc: "Films: HDLiGHT / M-HD"}
- {id: 63, cat: Movies/HD, desc: "Films: HD TV"}
- {id: 58, cat: Movies/WEBDL, desc: "Films: Web - DL"}
- {id: 96, cat: Movies, desc: "Films: Remux"}
- {id: 75, cat: TV, desc: "Films: TVRiP"}
- {id: 61, cat: Movies, desc: "Films: Animation"}
- {id: 82, cat: TV/Anime, desc: "Films: Mangas"}
- {id: 55, cat: Movies, desc: "Films: VOSTFR"}
- {id: 89, cat: Movies, desc: "Films: VO"}
- {id: 57, cat: Movies/WEBDL, desc: "Films: WebRip"}
- {id: 98, cat: Movies, desc: "Films: VFSTFR"}
- {id: 89, cat: Movies, desc: "Films: VO"}
- {id: 55, cat: Movies, desc: "Films: VOSTFR"}
- {id: 58, cat: Movies/WEBDL, desc: "Films: Web - DL"}
- {id: 57, cat: Movies/WEBDL, desc: "Films: WebRip"}
- {id: 72, cat: Movies/HD, desc: "Films: x265"}
- {id: 1, cat: XXX, desc: "Films: XXX"}
- {id: 97, cat: Console, desc: "Jeux : Android"}
- {id: 81, cat: Console, desc: "Jeux : Consoles"}
- {id: 66, cat: PC/Games, desc: "Jeux: PC"}
- {id: 97, cat: Console/PSP, desc: "Jeux : Jeux PS"}
- {id: 81, cat: Console/Xbox, desc: "Jeux : XboX"}
- {id: 62, cat: PC/0day, desc: "Logiciels: Windows"}
- {id: 99, cat: Other, desc: "Logiciels: Graph / Wallpaper"}
- {id: 77, cat: PC/Phone-Android, desc: "Logiciels: Android"}
- {id: 94, cat: PC/Mac, desc: "Logiciels: MAC"}
- {id: 93, cat: TV/Anime, desc: "Mangas: Animés"}
- {id: 94, cat: TV/HD, desc: "Series: 4K HDR"}
- {id: 93, cat: TV/Anime, desc: "Series: Animés"}
- {id: 86, cat: TV/HD, desc: "Series: Episode HD"}
- {id: 85, cat: TV/SD, desc: "Series: Episode SD"}
- {id: 59, cat: TV/SD, desc: "Series: Tv - Pack SD"}
- {id: 100, cat: TV/HD, desc: "Series: Tv - Pack HD"}
- {id: 101, cat: TV/HD, desc: "Series: Episode HD Vostfr"}
- {id: 85, cat: TV/SD, desc: "Series: Episode SD"}
- {id: 102, cat: TV/SD, desc: "Series: Episode SD Vostfr"}
- {id: 100, cat: TV/HD, desc: "Series: Tv - Pack HD"}
- {id: 103, cat: TV/HD, desc: "Series: Tv - Pack HD Vostfr"}
- {id: 59, cat: TV/SD, desc: "Series: Tv - Pack SD"}
- {id: 104, cat: TV/SD, desc: "Series: Tv - Pack SD Vostfr"}
- {id: 88, cat: TV, desc: "Spectacles: Tous"}
- {id: 73, cat: TV/Documentary, desc: "TV: Documentaires"}
- {id: 83, cat: TV, desc: "TV: Emissions"}
- {id: 73, cat: TV/Documentary, desc: "TV: Documentaires"}
- {id: 74, cat: TV/Sport, desc: "TV: Sports"}
modes:
@@ -69,6 +69,30 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "id"
options:
"id": "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: account-login.php
method: post
@@ -89,14 +113,20 @@
paths:
- path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
freeleech: 0
lang: 0
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["(\\w+)", " +$1"] # prepend + to each word
rows:
selector: table.ttable_headinner > tbody > tr.t-row
fields:
title:
selector: a[href^="torrents-details.php?id="] b
@@ -137,8 +167,9 @@
args: "02-01-2006"
downloadvolumefactor:
case:
img[src="images/free.gif"]: "0"
"*": "1"
img[src="images/free.gif"]: 0
"*": 1
uploadvolumefactor:
case:
"*": "1"
"*": 1
# engine n/a

View File

@@ -1,8 +1,8 @@
---
---
site: casstudiotv
name: CasStudioTV
description: "CasStudioTV is a RUSSIAN Semi-Private Torrent Tracker for TV"
language: ru
language: ru-ru
type: semi-private
encoding: UTF-8
links:
@@ -12,226 +12,248 @@
caps:
categorymappings:
- {id: 259, cat: TV, desc: "Сериалы (TV Series)"}
- {id: 56, cat: TV, desc: "Зарубежные сериалы (Foreign series)"}
- {id: 310, cat: TV, desc: "9-1-1"}
- {id: 246, cat: TV, desc: "11.22.63"}
- {id: 158, cat: TV, desc: "4400 / The 4400"}
- {id: 86, cat: TV, desc: "12 Обезьян / 12 Monkeys"}
- {id: 120, cat: TV, desc: "Агенты Щ.И.Т. / Agents of S.H.I.E.L.D."}
- {id: 259, cat: TV, desc: "Сериалы"}
- {id: 372, cat: TV, desc: "Австралийские сериалы"}
- {id: 375, cat: TV, desc: "Американские сериалы"}
- {id: 343, cat: TV, desc: "A&E"}
- {id: 126, cat: TV, desc: "Мотель Бейтс / Bates Motel"}
- {id: 317, cat: TV, desc: "ABC"}
- {id: 72, cat: TV, desc: "Агент Картер / Agent Carter"}
- {id: 103, cat: TV, desc: "Ад На Колёсах / Hell On Wheels"}
- {id: 120, cat: TV, desc: "Агенты Щ.И.Т. / Agents of S.H.I.E.L.D."}
- {id: 110, cat: TV, desc: "Американская семейка / Modern Family"}
- {id: 62, cat: TV, desc: "Американцы / The Americans"}
- {id: 70, cat: TV, desc: "Анатомия страсти / Анатомия Грей / Grey's Anatomy"}
- {id: 210, cat: TV, desc: "База Куантико / Quantico"}
- {id: 305, cat: TV, desc: "Беглецы / Runaways"}
- {id: 122, cat: TV, desc: "Безумцы / Mad Men"}
- {id: 134, cat: TV, desc: "Белый воротничок / White Collar"}
- {id: 281, cat: TV, desc: "Барыги / Narcos"}
- {id: 239, cat: TV, desc: "Баскетс / Baskets"}
- {id: 155, cat: TV, desc: "Бешеные псы / Mad Dogs"}
- {id: 243, cat: TV, desc: "Библиотекари / The Librarians"}
- {id: 154, cat: TV, desc: "Блудливая Калифорния / Californication"}
- {id: 208, cat: TV, desc: "Бойтесь ходячих мертвецов / Fear the Walking Dead"}
- {id: 150, cat: TV, desc: "Больница Никербокер / The Knick"}
- {id: 119, cat: TV, desc: "Бывает и хуже / The Middle"}
- {id: 87, cat: TV, desc: "В поле зрения / Person of Interest"}
- {id: 219, cat: TV, desc: "В пустыне смерти / Into the Badlands"}
- {id: 118, cat: TV, desc: "Веб терапия / Web Therapy"}
- {id: 123, cat: TV, desc: "Ведьмы Ист-Энда / Witches of East End"}
- {id: 309, cat: TV, desc: "Видоизмененный углерод / Altered Carbon"}
- {id: 241, cat: TV, desc: "Винил / Vinyl"}
- {id: 91, cat: TV, desc: "Викинги / Vikings"}
- {id: 172, cat: TV, desc: "Вице-Президент / Veep"}
- {id: 204, cat: TV, desc: "Власть в ночном городе / Power"}
- {id: 228, cat: TV, desc: "Волшебники / The Magicians"}
- {id: 220, cat: TV, desc: "Восприятие / Perception"}
- {id: 254, cat: TV, desc: "Восстание / Rebellion"}
- {id: 248, cat: TV, desc: "Вместе / Togetherness"}
- {id: 192, cat: TV, desc: "Водолей / Aquarius"}
- {id: 65, cat: TV, desc: "Возмездие / Revenge"}
- {id: 121, cat: TV, desc: "Все Ненавидят Криса / Everybody Hates Chris"}
- {id: 166, cat: TV, desc: "Ганнибал / Hannibal"}
- {id: 211, cat: TV, desc: "Герои: Возрождение / Heroes Reborn"}
- {id: 293, cat: TV, desc: "Голубая кровь / Blue Bloods"}
- {id: 119, cat: TV, desc: "Бывает и хуже / The Middle"}
- {id: 145, cat: TV, desc: "Город Хищниц / Cougar Town"}
- {id: 61, cat: TV, desc: "Готэм / Gotham"}
- {id: 117, cat: TV, desc: "Гримм / Grimm"}
- {id: 108, cat: TV, desc: "Две девицы на мели / 2 Broke Girls"}
- {id: 66, cat: TV, desc: "Девочки / Girls"}
- {id: 271, cat: TV, desc: "Девушка по вызову / The Girlfriend Experience"}
- {id: 176, cat: TV, desc: "Декстер / Dexter"}
- {id: 232, cat: TV, desc: "Десница Божья / Hand of God"}
- {id: 307, cat: TV, desc: "Династия / Dynasty"}
- {id: 102, cat: TV, desc: "Дневники вампира / The Vampire Diaries"}
- {id: 229, cat: TV, desc: "Джессика Джонс / Jessica Jones"}
- {id: 282, cat: TV, desc: "Дорожная команда / Roadies"}
- {id: 205, cat: TV, desc: "До смерти красива / Drop Dead Diva"}
- {id: 104, cat: TV, desc: "Древние / The Originals"}
- {id: 278, cat: TV, desc: "Загадочные события / Stranger Things"}
- {id: 182, cat: TV, desc: "Задержка в развитии / Arrested Development"}
- {id: 201, cat: TV, desc: "За пределами / Выжившая / Род человеческий / Extant"}
- {id: 301, cat: TV, desc: "Защитники / The Defenders"}
- {id: 314, cat: TV, desc: "Звёздный путь / Star Trek"}
- {id: 167, cat: TV, desc: "Зов крови / Потерянная / Фейри / Lost Girl"}
- {id: 116, cat: TV, desc: "Зовите меня Фитц / Call Me Fitz"}
- {id: 74, cat: TV, desc: "Империя / Empire"}
- {id: 75, cat: TV, desc: "Как избежать наказания за убийство / How to Get Away with Murder"}
- {id: 203, cat: TV, desc: "Как бы счастье / Happyish"}
- {id: 141, cat: TV, desc: "Как Я Встретил Вашу Маму / How I Met Your Mother"}
- {id: 277, cat: TV, desc: "Карантин / Containment"}
- {id: 306, cat: TV, desc: "Каратель / The Punisher"}
- {id: 174, cat: TV, desc: "Карточный домик / House of Cards"}
- {id: 63, cat: TV, desc: "Касл / Castle"}
- {id: 285, cat: TV, desc: "Квантовый скачок / Quantum Leap"}
- {id: 169, cat: TV, desc: "Кей и Пил / Key and Peele"}
- {id: 195, cat: TV, desc: "Киллджойс / Killjoys"}
- {id: 222, cat: TV, desc: "Клуб жен астронавтов / The Astronaut Wives Club"}
- {id: 197, cat: TV, desc: "Коварные горничные / Devious Maids"}
- {id: 230, cat: TV, desc: "Колония / Colony"}
- {id: 170, cat: TV, desc: "Континуум / Continuum"}
- {id: 233, cat: TV, desc: "Конец детства / Childhood's End"}
- {id: 147, cat: TV, desc: "Копы-новобранцы / Rookie Blue"}
- {id: 291, cat: TV, desc: "Королева Юга / Queen of the South"}
- {id: 193, cat: TV, desc: "Красавица и чудовище / Beauty and the Beast"}
- {id: 132, cat: TV, desc: "Крах / The Fall"}
- {id: 146, cat: TV, desc: "Красотки в Кливленде / Hot in Cleveland"}
- {id: 171, cat: TV, desc: "Красавцы / Антураж / Entourage"}
- {id: 207, cat: TV, desc: "Кремниевая долина / Silicon Valley"}
- {id: 238, cat: TV, desc: "Легенды завтрашнего дня / Legends of Tomorrow"}
- {id: 300, cat: TV, desc: "Легион / Legion"}
- {id: 294, cat: TV, desc: "Лемони Сникет: 33 несчастья / A Series of Unfortunate Events"}
- {id: 130, cat: TV, desc: "Лиллехаммер / Lilyhammer"}
- {id: 276, cat: TV, desc: "Любовницы / Mistresses US"}
- {id: 198, cat: TV, desc: "Люди / Humans"}
- {id: 165, cat: TV, desc: "Лютер / Luther"}
- {id: 247, cat: TV, desc: "Люцифер / Lucifer"}
- {id: 313, cat: TV, desc: "МакГайвер / MacGyver"}
- {id: 127, cat: TV, desc: "Майк и Молли / Mike & Molly"}
- {id: 156, cat: TV, desc: "Мастера Секса / Masters of Sex"}
- {id: 245, cat: TV, desc: "Медики Чикаго / Chicago Med"}
- {id: 180, cat: TV, desc: "Миллеры в разводе / The Millers"}
- {id: 244, cat: TV, desc: "Миллиарды / Billions"}
- {id: 234, cat: TV, desc: "Мистер Робинсон / Mr. Robinson"}
- {id: 200, cat: TV, desc: "Мистер робот / Mr. Robot"}
- {id: 173, cat: TV, desc: "Мост / Broen / Bron"}
- {id: 126, cat: TV, desc: "Мотель Бейтс / Bates Motel"}
- {id: 231, cat: TV, desc: "Моцарт в джунглях / Mozart in the Jungle"}
- {id: 69, cat: TV, desc: "Мушкетеры / The Musketeers"}
- {id: 76, cat: TV, desc: "Мыслить как преступник / Criminal Minds"}
- {id: 202, cat: TV, desc: "На грани / The Brink"}
- {id: 175, cat: TV, desc: "Налёт / Braquo"}
- {id: 125, cat: TV, desc: "Настоящая кровь / True Blood"}
- {id: 152, cat: TV, desc: "Настоящий детектив / True Detective"}
- {id: 79, cat: TV, desc: "Не те парни / The Wrong Mans"}
- {id: 308, cat: TV, desc: "Хороший доктор / The Good Doctor"}
- {id: 189, cat: TV, desc: "Шёпот / The Whispers"}
- {id: 164, cat: TV, desc: "Нэшвилл / Nashville"}
- {id: 58, cat: TV, desc: "Обитель лжи / House of Lies"}
- {id: 137, cat: TV, desc: "Оборотень / Teen Wolf"}
- {id: 303, cat: TV, desc: "Одаренные / The Gifted"}
- {id: 92, cat: TV, desc: "Однажды в сказке / Once Upon A Time"}
- {id: 279, cat: TV, desc: "Однажды ночью / The Night Of"}
- {id: 275, cat: TV, desc: "Оранжевый - хит сезона / Orange is the New Black"}
- {id: 304, cat: TV, desc: "Орвилл / The Orville"}
- {id: 212, cat: TV, desc: "Оставленные / The Leftovers"}
- {id: 139, cat: TV, desc: "Острые козырьки / Peaky Blinders"}
- {id: 163, cat: TV, desc: "Отчаянные домохозяйки / Desperate Housewives"}
- {id: 138, cat: TV, desc: "Отбросы / Misfits"}
- {id: 80, cat: TV, desc: "Пересекающиеся линии / Пересекая черту / Crossing Lines"}
- {id: 218, cat: TV, desc: "Плоть и кости / Flesh and Bone"}
- {id: 99, cat: TV, desc: "Под куполом / Under The Dome"}
- {id: 149, cat: TV, desc: "Подпольная Империя / Boardwalk Empire"}
- {id: 78, cat: TV, desc: "Помнить все / Незабываемое / Unforgettable"}
- {id: 272, cat: TV, desc: "Поворот / TURN"}
- {id: 90, cat: TV, desc: "Пожарные Чикаго / Chicago Fire"}
- {id: 236, cat: TV, desc: "Полицейские на велосипедах / Pacific Blue"}
- {id: 144, cat: TV, desc: "Полиция Гавайев / Hawaii Five-0"}
- {id: 77, cat: TV, desc: "Полиция Чикаго / Chicago PD"}
- {id: 162, cat: TV, desc: "Последователи / The Following"}
- {id: 287, cat: TV, desc: "Приговор / Conviction"}
- {id: 135, cat: TV, desc: "ПригорАД / Suburgatory"}
- {id: 274, cat: TV, desc: "Проповедник / Preacher"}
- {id: 113, cat: TV, desc: "Просветленная / Enlightened"}
- {id: 235, cat: TV, desc: "Пространство / The Expanse"}
- {id: 290, cat: TV, desc: "Радиоволна / Frequency"}
- {id: 112, cat: TV, desc: "Революция / Revolution"}
- {id: 83, cat: TV, desc: "Родина / Homeland"}
- {id: 128, cat: TV, desc: "Рэй Донован / Ray Donovan"}
- {id: 136, cat: TV, desc: "Риццоли и Айлc / Rizzoli & Isles"}
- {id: 160, cat: TV, desc: "Рухнувшие Небеса / Falling Skies"}
- {id: 199, cat: TV, desc: "Салем / Salem"}
- {id: 111, cat: TV, desc: "Сверхъестественное / Supernatural"}
- {id: 157, cat: TV, desc: "Секретные материалы / X-Files"}
- {id: 267, cat: TV, desc: "Семья / The Family"}
- {id: 311, cat: TV, desc: "Сирена / Siren"}
- {id: 64, cat: TV, desc: "Скандал / Scandal"}
- {id: 213, cat: TV, desc: "Слепое пятно / Blindspot"}
- {id: 129, cat: TV, desc: "Служба новостей / Новости / The Newsroom"}
- {id: 286, cat: TV, desc: "Смертельное Оружие / Lethal Weapon"}
- {id: 93, cat: TV, desc: "Сообщество / Community"}
- {id: 179, cat: TV, desc: "Сопрано / The Sopranos"}
- {id: 194, cat: TV, desc: "Сорвиголова / Daredevil"}
- {id: 106, cat: TV, desc: "Шпионка / Alias"}
- {id: 358, cat: TV, desc: "Adult Swim"}
- {id: 323, cat: TV, desc: "Amazon"}
- {id: 232, cat: TV, desc: "Десница Божья / Hand of God"}
- {id: 231, cat: TV, desc: "Моцарт в джунглях / Mozart in the Jungle"}
- {id: 280, cat: TV, desc: "Тик / The Tick"}
- {id: 328, cat: TV, desc: "AMC"}
- {id: 103, cat: TV, desc: "Ад На Колёсах / Hell On Wheels"}
- {id: 122, cat: TV, desc: "Безумцы / Mad Men"}
- {id: 208, cat: TV, desc: "Бойтесь ходячих мертвецов / Fear the Walking Dead"}
- {id: 219, cat: TV, desc: "В пустыне смерти / Into the Badlands"}
- {id: 198, cat: TV, desc: "Люди / Humans"}
- {id: 274, cat: TV, desc: "Проповедник / Preacher"}
- {id: 95, cat: TV, desc: "Убийство / The Killing"}
- {id: 59, cat: TV, desc: "Ходячие мертвецы / The Walking Dead"}
- {id: 356, cat: TV, desc: "Audience"}
- {id: 320, cat: TV, desc: "CBS"}
- {id: 87, cat: TV, desc: "В поле зрения / Person of Interest"}
- {id: 293, cat: TV, desc: "Голубая кровь / Blue Bloods"}
- {id: 108, cat: TV, desc: "Две девицы на мели / 2 Broke Girls"}
- {id: 201, cat: TV, desc: "За пределами / Выжившая / Род человеческий / Extant"}
- {id: 314, cat: TV, desc: "Звёздный путь / Star Trek"}
- {id: 141, cat: TV, desc: "Как Я Встретил Вашу Маму / How I Met Your Mother"}
- {id: 127, cat: TV, desc: "Майк и Молли / Mike & Molly"}
- {id: 313, cat: TV, desc: "МакГайвер / MacGyver"}
- {id: 180, cat: TV, desc: "Миллеры в разводе / The Millers"}
- {id: 76, cat: TV, desc: "Мыслить как преступник / Criminal Minds"}
- {id: 144, cat: TV, desc: "Полиция Гавайев / Hawaii Five-0"}
- {id: 99, cat: TV, desc: "Под куполом / Under The Dome"}
- {id: 78, cat: TV, desc: "Помнить все / Незабываемое / Unforgettable"}
- {id: 107, cat: TV, desc: "Теория Большого Взрыва / The Big Bang Theory"}
- {id: 105, cat: TV, desc: "Элементарно / Elementary"}
- {id: 318, cat: TV, desc: "CW"}
- {id: 307, cat: TV, desc: "Династия / Dynasty"}
- {id: 102, cat: TV, desc: "Дневники вампира / The Vampire Diaries"}
- {id: 104, cat: TV, desc: "Древние / The Originals"}
- {id: 277, cat: TV, desc: "Карантин / Containment"}
- {id: 193, cat: TV, desc: "Красавица и чудовище / Beauty and the Beast"}
- {id: 238, cat: TV, desc: "Легенды завтрашнего дня / Legends of Tomorrow"}
- {id: 290, cat: TV, desc: "Радиоволна / Frequency"}
- {id: 111, cat: TV, desc: "Сверхъестественное / Supernatural"}
- {id: 109, cat: TV, desc: "Сотня / 100 / The Hundred"}
- {id: 153, cat: TV, desc: "Спартак / Spartacus"}
- {id: 266, cat: TV, desc: "Страна чудес / Wonderland"}
- {id: 191, cat: TV, desc: "Страшные сказки / Penny Dreadful"}
- {id: 131, cat: TV, desc: "Стрела / Arrow"}
- {id: 190, cat: TV, desc: "Супергёрл / Supergirl"}
- {id: 82, cat: TV, desc: "Сыны Анархии / Sons of Anarchy"}
- {id: 295, cat: TV, desc: "Табу / Taboo"}
- {id: 273, cat: TV, desc: "Тайны Лауры / The Mysteries of Laura"}
- {id: 178, cat: TV, desc: "Твин Пикс / Twin Peaks"}
- {id: 107, cat: TV, desc: "Теория Большого Взрыва / The Big Bang Theory"}
- {id: 196, cat: TV, desc: "Тёмная материя / Dark Matter"}
- {id: 280, cat: TV, desc: "Тик / The Tick"}
- {id: 181, cat: TV, desc: "Тугая струна / Wire in the Blood"}
- {id: 95, cat: TV, desc: "Убийство / The Killing"}
- {id: 81, cat: TV, desc: "Убить скуку / Bored to Death"}
- {id: 98, cat: TV, desc: "Уилфред / Wilfred"}
- {id: 187, cat: TV, desc: "Уэйуорд Пайнс / Wayward Pines"}
- {id: 142, cat: TV, desc: "Флэш / Flash"}
- {id: 168, cat: TV, desc: "Форс-мажоры / Костюмы / Suits"}
- {id: 59, cat: TV, desc: "Ходячие мертвецы / The Walking Dead"}
- {id: 308, cat: TV, desc: "Хороший доктор / The Good Doctor"}
- {id: 143, cat: TV, desc: "Хранилище 13 / Warehouse 13"}
- {id: 237, cat: TV, desc: "Хроники Шаннары / The Shannara Chronicles"}
- {id: 94, cat: TV, desc: "Хэйвен / Haven"}
- {id: 124, cat: TV, desc: "Царство / Reign"}
- {id: 268, cat: TV, desc: "Час пик / Rush Hour"}
- {id: 115, cat: TV, desc: "Чёрное зеркало / Black Mirror"}
- {id: 73, cat: TV, desc: "Черные Паруса / Black Sails"}
- {id: 177, cat: TV, desc: "Черный список / The Blacklist"}
- {id: 189, cat: TV, desc: "Шёпот / The Whispers"}
- {id: 106, cat: TV, desc: "Шпионка / Alias"}
- {id: 85, cat: TV, desc: "Штамм / The Strain"}
- {id: 288, cat: TV, desc: "Экзорцист / The Exorcist"}
- {id: 105, cat: TV, desc: "Элементарно / Elementary"}
- {id: 217, cat: TV, desc: "Эш против Зловещих мертвецов / Ash vs Evil Dead"}
- {id: 270, cat: TV, desc: "яЗомби / iZombie"}
- {id: 53, cat: TV, desc: "Другие сериалы (Other TV series)"}
- {id: 240, cat: TV, desc: "Клим (Klim)"}
- {id: 283, cat: TV, desc: "Amazon"}
- {id: 284, cat: TV, desc: "Amazon English"}
- {id: 88, cat: TV, desc: "Мультсериалы (Cartoons)"}
- {id: 336, cat: TV, desc: "DC"}
- {id: 316, cat: TV, desc: "FOX"}
- {id: 310, cat: TV, desc: "9-1-1"}
- {id: 61, cat: TV, desc: "Готэм / Gotham"}
- {id: 182, cat: TV, desc: "Задержка в развитии / Arrested Development"}
- {id: 74, cat: TV, desc: "Империя / Empire"}
- {id: 247, cat: TV, desc: "Люцифер / Lucifer"}
- {id: 157, cat: TV, desc: "Секретные материалы / X-Files"}
- {id: 286, cat: TV, desc: "Смертельное Оружие / Lethal Weapon"}
- {id: 304, cat: TV, desc: "Орвилл / The Orville"}
- {id: 162, cat: TV, desc: "Последователи / The Following"}
- {id: 187, cat: TV, desc: "Уэйуорд Пайнс / Wayward Pines"}
- {id: 288, cat: TV, desc: "Экзорцист / The Exorcist"}
- {id: 327, cat: TV, desc: "FX"}
- {id: 62, cat: TV, desc: "Американцы / The Americans"}
- {id: 239, cat: TV, desc: "Баскетс / Baskets"}
- {id: 300, cat: TV, desc: "Легион / Legion"}
- {id: 85, cat: TV, desc: "Штамм / The Strain"}
- {id: 82, cat: TV, desc: "Сыны Анархии / Sons of Anarchy"}
- {id: 98, cat: TV, desc: "Уилфред / Wilfred"}
- {id: 337, cat: TV, desc: "History"}
- {id: 91, cat: TV, desc: "Викинги / Vikings"}
- {id: 324, cat: TV, desc: "HULU"}
- {id: 246, cat: TV, desc: "11.22.63"}
- {id: 305, cat: TV, desc: "Беглецы / Runaways"}
- {id: 345, cat: TV, desc: "MTV, Sprike"}
- {id: 137, cat: TV, desc: "Оборотень / Teen Wolf"}
- {id: 237, cat: TV, desc: "Хроники Шаннары / The Shannara Chronicles"}
- {id: 319, cat: TV, desc: "NBC"}
- {id: 192, cat: TV, desc: "Водолей / Aquarius"}
- {id: 166, cat: TV, desc: "Ганнибал / Hannibal"}
- {id: 211, cat: TV, desc: "Герои: Возрождение / Heroes Reborn"}
- {id: 117, cat: TV, desc: "Гримм / Grimm"}
- {id: 285, cat: TV, desc: "Квантовый скачок / Quantum Leap"}
- {id: 245, cat: TV, desc: "Медики Чикаго / Chicago Med"}
- {id: 234, cat: TV, desc: "Мистер Робинсон / Mr. Robinson"}
- {id: 80, cat: TV, desc: "Пересекающиеся линии / Пересекая черту / Crossing Lines"}
- {id: 90, cat: TV, desc: "Пожарные Чикаго / Chicago Fire"}
- {id: 77, cat: TV, desc: "Полиция Чикаго / Chicago PD"}
- {id: 112, cat: TV, desc: "Революция / Revolution"}
- {id: 213, cat: TV, desc: "Слепое пятно / Blindspot"}
- {id: 93, cat: TV, desc: "Сообщество / Community"}
- {id: 273, cat: TV, desc: "Тайны Лауры / The Mysteries of Laura"}
- {id: 177, cat: TV, desc: "Черный список / The Blacklist"}
- {id: 321, cat: TV, desc: "NETFLIX"}
- {id: 281, cat: TV, desc: "Барыги / Narcos"}
- {id: 309, cat: TV, desc: "Видоизмененный углерод / Altered Carbon"}
- {id: 229, cat: TV, desc: "Джессика Джонс / Jessica Jones"}
- {id: 278, cat: TV, desc: "Загадочные события / Stranger Things"}
- {id: 301, cat: TV, desc: "Защитники / The Defenders"}
- {id: 306, cat: TV, desc: "Каратель / The Punisher"}
- {id: 174, cat: TV, desc: "Карточный домик / House of Cards"}
- {id: 130, cat: TV, desc: "Лиллехаммер / Lilyhammer"}
- {id: 294, cat: TV, desc: "Лемони Сникет: 33 несчастья / A Series of Unfortunate Events"}
- {id: 275, cat: TV, desc: "Оранжевый - хит сезона / Orange is the New Black"}
- {id: 194, cat: TV, desc: "Сорвиголова / Daredevil"}
- {id: 115, cat: TV, desc: "Чёрное зеркало / Black Mirror"}
- {id: 333, cat: TV, desc: "Showtime"}
- {id: 154, cat: TV, desc: "Блудливая Калифорния / Californication"}
- {id: 118, cat: TV, desc: "Веб терапия / Web Therapy"}
- {id: 176, cat: TV, desc: "Декстер / Dexter"}
- {id: 282, cat: TV, desc: "Дорожная команда / Roadies"}
- {id: 203, cat: TV, desc: "Как бы счастье / Happyish"}
- {id: 156, cat: TV, desc: "Мастера Секса / Masters of Sex"}
- {id: 244, cat: TV, desc: "Миллиарды / Billions"}
- {id: 58, cat: TV, desc: "Обитель лжи / House of Lies"}
- {id: 83, cat: TV, desc: "Родина / Homeland"}
- {id: 128, cat: TV, desc: "Рэй Донован / Ray Donovan"}
- {id: 191, cat: TV, desc: "Страшные сказки / Penny Dreadful"}
- {id: 330, cat: TV, desc: "STARZ"}
- {id: 204, cat: TV, desc: "Власть в ночном городе / Power"}
- {id: 271, cat: TV, desc: "Девушка по вызову / The Girlfriend Experience"}
- {id: 218, cat: TV, desc: "Плоть и кости / Flesh and Bone"}
- {id: 217, cat: TV, desc: "Эш против Зловещих мертвецов / Ash vs Evil Dead"}
- {id: 153, cat: TV, desc: "Спартак / Spartacus"}
- {id: 73, cat: TV, desc: "Черные Паруса / Black Sails"}
- {id: 326, cat: TV, desc: "SyFy"}
- {id: 86, cat: TV, desc: "12 Обезьян / 12 Monkeys"}
- {id: 228, cat: TV, desc: "Волшебники / The Magicians"}
- {id: 195, cat: TV, desc: "Киллджойс / Killjoys"}
- {id: 233, cat: TV, desc: "Конец детства / Childhood's End"}
- {id: 235, cat: TV, desc: "Пространство / The Expanse"}
- {id: 196, cat: TV, desc: "Тёмная материя / Dark Matter"}
- {id: 143, cat: TV, desc: "Хранилище 13 / Warehouse 13"}
- {id: 94, cat: TV, desc: "Хэйвен / Haven"}
- {id: 351, cat: TV, desc: "TBS"}
- {id: 334, cat: TV, desc: "TNT"}
- {id: 243, cat: TV, desc: "Библиотекари / The Librarians"}
- {id: 220, cat: TV, desc: "Восприятие / Perception"}
- {id: 136, cat: TV, desc: "Риццоли и Айлc / Rizzoli & Isles"}
- {id: 160, cat: TV, desc: "Рухнувшие Небеса / Falling Skies"}
- {id: 341, cat: TV, desc: "TV Land"}
- {id: 146, cat: TV, desc: "Красотки в Кливленде / Hot in Cleveland"}
- {id: 325, cat: TV, desc: "USA"}
- {id: 158, cat: TV, desc: "4400 / The 4400"}
- {id: 134, cat: TV, desc: "Белый воротничок / White Collar"}
- {id: 230, cat: TV, desc: "Колония / Colony"}
- {id: 291, cat: TV, desc: "Королева Юга / Queen of the South"}
- {id: 200, cat: TV, desc: "Мистер робот / Mr. Robot"}
- {id: 236, cat: TV, desc: "Полицейские на велосипедах / Pacific Blue"}
- {id: 168, cat: TV, desc: "Форс-мажоры / Костюмы / Suits"}
- {id: 352, cat: TV, desc: "YouTube"}
- {id: 370, cat: TV, desc: "Британские сериалы"}
- {id: 69, cat: TV, desc: "Мушкетеры / The Musketeers"}
- {id: 139, cat: TV, desc: "Острые козырьки / Peaky Blinders"}
- {id: 165, cat: TV, desc: "Лютер / Luther"}
- {id: 272, cat: TV, desc: "Поворот / TURN"}
- {id: 373, cat: TV, desc: "Датские и Шведские сериалы"}
- {id: 381, cat: TV, desc: "Ирландские сериалы"}
- {id: 367, cat: TV, desc: "Испанские сериалы"}
- {id: 380, cat: TV, desc: "Итальянские сериалы"}
- {id: 371, cat: TV, desc: "Канадские сериалы"}
- {id: 368, cat: TV, desc: "Немецкие сериалы"}
- {id: 376, cat: TV, desc: "Нидерландские сериалы"}
- {id: 379, cat: TV, desc: "Норвежские сериалы"}
- {id: 377, cat: TV, desc: "Российские сериалы"}
- {id: 369, cat: TV, desc: "Французкие сериалы"}
- {id: 374, cat: TV, desc: "Швейцарские сериалы"}
- {id: 382, cat: TV, desc: "Японские сериалы"}
- {id: 357, cat: TV, desc: "Сериалы только с субтитрами"}
- {id: 378, cat: TV, desc: "Сериалы производства нескольких стран"}
- {id: 88, cat: TV, desc: "Мультсериалы"}
- {id: 101, cat: TV, desc: "Южный Парк / South Park"}
- {id: 89, cat: TV, desc: "Спецагент Арчер / Archer"}
- {id: 225, cat: TV, desc: "Стендап / Stand Up"}
- {id: 54, cat: TV, desc: "Особый раздел (Special section)"}
- {id: 100, cat: TV, desc: "Короткометражки (Short films)"}
- {id: 60, cat: TV, desc: "Документальные (Documentaries)"}
- {id: 159, cat: TV, desc: "Разное (Misc.)"}
- {id: 261, cat: TV, desc: "Спорт (Sport)"}
- {id: 262, cat: TV, desc: "Автомотоспорт (Autosport)"}
- {id: 54, cat: TV, desc: "Особый раздел"}
- {id: 100, cat: TV, desc: "Короткометражки"}
- {id: 60, cat: TV, desc: "Документальные и научно-популярные передачи"}
- {id: 159, cat: TV, desc: "Разное"}
- {id: 261, cat: TV, desc: "Спорт"}
- {id: 262, cat: TV, desc: "Автомотоспорт"}
- {id: 263, cat: TV, desc: "Формула 1 / Formula 1"}
- {id: 264, cat: TV, desc: "MotoGP / SBK"}
- {id: 265, cat: TV, desc: "V8 supercars"}
- {id: 31, cat: TV, desc: "Пользователи (Users)"}
- {id: 188, cat: TV, desc: "Поздравления (Congratulations)"}
- {id: 31, cat: TV, desc: "Пользователи"}
- {id: 188, cat: TV, desc: "Поздравления"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "t"
options:
"t": "created"
"ts": "seeders"
"sz": "size"
"i": "title"
- name: type
type: select
label: Order requested from site
default: "d"
options:
"d": "desc"
"a": "asc"
login:
path: ucp.php?mode=login
method: form
@@ -245,30 +267,28 @@
path: /
selector: :has(a[href^="./ucp.php?mode=logout&sid="])
# download:
# selector: a[href^="./download/file.php?id="]:not(img)
search:
paths:
#https://casstudio.tv/search.php?tracker_search=torrent&keywords=star&terms=all&author=&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search
- path: search.php
inputs:
tracker_search: "torrent"
keywords: "{{if .Keywords }}{{.Keywords}}{{else}}star{{end}}"
terms: "all"
tracker_search: torrent
keywords: "{{ if .Keywords }}{{ .Keywords }}{{else}}2019{{end}}"
terms: all
author: ""
sc: "1"
sf: "titleonly"
sr: "topics"
sk: "t"
sd: "d"
st: "0"
ch: "300"
t: "0"
submit: "Search"
sc: 1
sf: titleonly
sr: topics
sk: "{{ .Config.sort }}"
sd: "{{ .Config.type }}"
st: 0
ch: 300
t: 0
submit: Search
rows:
selector: tr.row
fields:
title:
selector: a.topictitle
@@ -336,6 +356,7 @@
- name: dateparse
args: "02 Jan 06, 15:04"
downloadvolumefactor:
text: "1"
text: 1
uploadvolumefactor:
text: "1"
text: 1
# phpBB

View File

@@ -42,14 +42,37 @@
- {id: 22, cat: Other, desc: "杂项"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: "added"
options:
"added": "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.php
method: form
form: form[action="takelogin.php"]
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
@@ -61,15 +84,18 @@
search:
paths:
- path: browse.php
method: get
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: "1"
d: DESC
sort: added
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 active 1 incldead 2 deadonly
incldead: 1
fullsearch: "{{ if .Query.IMDBID }}1{{else}}{{end}}"
sort: "{{ .Config.sort }}"
d: "{{ .Config.sort }}"
rows:
selector: table[border="1"][cellpadding="5"] > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[title][href^="details.php?id="]
@@ -85,7 +111,7 @@
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
@@ -116,12 +142,15 @@
args: "2006-01-0215:04:05 -07:00"
downloadvolumefactor:
case:
"font[color=\"#C20603\"]:contains(\"免费\")": "0"
"font:has([src=\"/pic/arrowdown1.gif\"]):contains(\"0.5x\")": "0.5"
"*": "1"
"font[color=\"#C20603\"]:contains(\"免费\")": 0
"font:has([src=\"/pic/arrowdown1.gif\"]):contains(\"0.5x\")": 0.5
"*": 1
uploadvolumefactor:
case:
"*": "1"
"font:has([src=\"/pic/arrowup1.gif\"]):contains(\"1.5x\")": 1.5
"font:has([src=\"/pic/arrowup1.gif\"]):contains(\"2x\")": 2
"*": 1
description:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2)
remove: a, img
# Discuz! 7.2

Some files were not shown because too many files have changed in this diff Show More