Compare commits

...

262 Commits

Author SHA1 Message Date
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
477 changed files with 11870 additions and 6686 deletions

View File

@@ -123,7 +123,7 @@ dotnet_style_prefer_compound_assignment=true:suggestion
###############################
# Style Definitions
dotnet_naming_style.pascal_case_style.capitalization=pascal_case
# Use PascalCase for constant fields
# 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
@@ -161,11 +161,11 @@ dotnet_naming_rule.asyncmethods_should_be_ends_with_async.style = ends_with_asyn
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.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_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
@@ -173,11 +173,11 @@ dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = stat
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.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.non_field_members.required_modifiers =
dotnet_naming_symbols.asyncmethods.applicable_kinds = delegate, method, local_function
dotnet_naming_symbols.asyncmethods.applicable_accessibilities = *
@@ -185,29 +185,29 @@ 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.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.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 = s_
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.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.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_prefix =
dotnet_naming_style.ends_with_async.required_suffix = Async
dotnet_naming_style.ends_with_async.word_separator =
dotnet_naming_style.ends_with_async.word_separator =
dotnet_naming_style.ends_with_async.capitalization = pascal_case
###############################

4
.gitattributes vendored
View File

@@ -1,15 +1,13 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
* text eol=lf
# 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
# Denote all files that are truly binary and should not be modified.
*.png binary

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

220
README.md
View File

@@ -2,8 +2,7 @@
[![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)
[![Build Status](https://dev.azure.com/Jackett-project/Jackett/_apis/build/status/Jackett.Jackett?branchName=master)](https://dev.azure.com/Jackett-project/Jackett/_build/latest?definitionId=1&branchName=master)
[![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)
@@ -19,7 +18,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
#### Supported Systems
* Windows 7SP1 or greater using .NET 4.6.1 or above [Download here](https://www.microsoft.com/net/framework/versions/net461)
* Windows 7SP1 or greater using .NET 4.6.1 or above [Download here](https://dotnet.microsoft.com/download/dotnet-framework/net461)
* 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
@@ -27,6 +26,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 1337x
* 7torrents
* AcademicTorrents
* ACG.RIP
* ACGsou
* Anidex
@@ -37,9 +37,10 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* BigFANGroup
* BitRu
* BitTorrent.AM
* BT.etree
* BTDB
* BTDIGG
* BT.etree
* BTeye
* BTSOW
* Cili180
* ConCen
@@ -48,11 +49,11 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* cpasbienClone
* Demonoid
* dmhy
* ETTV
* EliteTorrent.biz
* EstrenosDTL
* ExtraTorrent.cd
* ETTV
* EXT Torrents
* ExtraTorrent.cd
* EZTV
* Filebase
* FireBit
@@ -64,16 +65,17 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 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
@@ -81,28 +83,37 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 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
@@ -110,6 +121,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Torlock
* TOROS
* Torrent Downloads (TD)
* Torrent Oyun indir
* torrent-pirat
* Torrent4You
* Torrent9
* Torrent9Clone
@@ -119,49 +132,57 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* TorrentKitty
* TorrentParadise
* TorrentProject2
* TorrentRex
* TorrentQuest
* Torrents.csv
* TorrentWal
* Torrentv
* TorrentView
* Torrentz2
* Underverse
* UnionDHT
* xxxtor
* YourBittorrent
* YTS.ag
* zetorrents
* Zooqle
</details>
<details> <summary> <b> Supported Semi-Private Trackers </b> </summary>
* Alein
* AlexFilm
* AniDUB
* ArenaBG
* BaibaKo
* BookTracker
* CasStudioTV
* Crazy's Corner
* CzTorrent
* Deildu
* DXP (Deaf Experts)
* Deildu
* EniaHD
* Erzsebet
* ExKinoRay
* ExtremlymTorrents
* FilmsClub
* Gay-Torrents.net
* Gay-Torrents.org
* HamsterStudio
* HD Dolby
* HamsterStudio
* IV-Torrents
* KinoNaVse100
* Kinozal
* Korsar
* LostFilm.tv
* MVGroup Forum
* MVGroup Main
* Marine Tracker
* Metal Tracker
* MuziekFrabriek
* MVGroup Forum
* MVGroup Main
* NetHD (VietTorrent)
* Pornolab
* RiperAM
* RockBox
* Rustorka
* RuTracker
* Rustorka
* Sharewood
* SkTorrent
* SoundPark
@@ -183,6 +204,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 4thD (4th Dimension)
* 52PT
* 720pier
* AST4u
* Abnormal
* Acid Lounge (A-L)
* Aftershock
@@ -194,54 +216,56 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Araba Fenice (Phoenix)
* Asgaard (AG)
* AsianCinema
* AST4u
* Audiobook Torrents (ABT)
* AudioNews (AN)
* Awesome-HD (AHD)
* Audiobook Torrents (ABT)
* Avistaz (AsiaTorrents)
* Back-ups
* BakaBT
* BaconBits (bB)
* BeiTai
* BeyondHD (BHD)
* Bibliotik
* Awesome-HD (AHD)
* BaibaKo
* BIGTorrent
* BigTower
* Bit-City Reloaded
* BIT-HDTV
* BiT-TiTAN
* Bithorlo (BHO)
* BitHUmen
* Bitspyder
* BitTorrentFiles
* BitTurk
* BJ-Share (BJ)
* BlueBird
* Blutopia (BLU)
* Brasil Tracker
* BroadcastTheNet (BTN)
* BroadCity
* BRObits
* BrokenStones
* 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
* Cinemageddon
* CinemaMovies
* Cinematik
* CinemaZ (EuTorrents)
* Cinemageddon
* Cinematik
* Classix
* Concertos
* CrazyHD
* CrazySpirits
* CrnaBerza
* DXDHD
* DanishBits (DB)
* Das Unerwartete
* DataScene (DS)
@@ -255,18 +279,16 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* DocumentaryTorrents (DT)
* Downloadville
* Dragonworld Reloaded
* DXDHD
* EbookParadijs
* Ebooks-Shares
* EfectoDoppler
* EggMeOn
* Elite-Tracker
* Empornium (EMP)
* eShareNet
* eStone (XiDER, BeLoad)
* Ethor.net (Thor's Land)
* ExoticaZ (YourExotic)
* ExtremeTorrents
* FANO.IN
* Fantastic Heaven
* FeedUrNeed (FuN)
* Femdomcult
* FileList (FL)
@@ -278,24 +300,22 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 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 Legends
* 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
@@ -312,23 +332,25 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* HDTurk
* HDU
* HDZone
* HQSource (HQS)
* HacheDe
* Hebits
* Hon3y HD
* HQSource (HQS)
* HuSh
* ICE Torrent
* IPTorrents (IPT)
* ImmortalSeed (iS)
* Immortuos
* inPeril
* Insane Tracker
* IPTorrents (IPT)
* JPopsuki
* Kapaki
* Karagarga
* LegacyHD (HD4Free)
* LastFiles
* Le Saloon
* LeChaudron
* LeagueHD
* LearnFlakes
* LegacyHD (HD4Free)
* LibraNet (LN)
* LinkoManija
* LosslessClub
@@ -336,11 +358,11 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Magico (Trellas)
* Majomparádé (TurkDepo)
* MicroBit (µBit)
* MMA-Torrents
* MoeCat
* Mononoké-BT
* MoreThanTV (MTV)
* MyAnonamouse (MAM)
* myAmity
* MySpleen
* NBTorrents
* NCore
@@ -350,57 +372,54 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* New Real World
* Norbits
* NordicBits (NB)
* NORDiCHD
* Nostalgic (The Archive)
* notwhat.cd
* Nostalgic (The Archive / VHSTAPES)
* OnlineSelfEducation
* Orpheus
* Ourbits (HDPter)
* P2PBG
* 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
* Pornbay
* 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
* RoDVD (Cinefiles)
* Romanian Metal Torrent (RMT)
* RPTorrents
* SDBits
* SceneFZ
* SceneHD
* ScenePalace (SP)
* SceneRush
* SceneTime
* SceneXpress
* SDBits
* Secret Cinema
* SeedFile (SF)
* Shareisland
* ShareSpaceDB
* ShareUniversity
* Shareisland
* Shazbat
* Shellife (SL)
* SiamBIT
@@ -408,61 +427,63 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 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
* TeamHD
* TeamOS
* TEKNO3D
* TellyTorrent
* TenYardTorrents (TYT)
* TheAudioScene
* TheEmpire (TE)
* The Falling Angels (TFA)
* The Geeks
* The Horror Charnel (THC)
* The New Retro
* The Occult
* The Place
* The Resurrection
* The Shinning (TsH)
* The Show
* The-Madhouse
* The Vault
* TLFBits
* 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)
* TorrentFactory
* TorrentHeaven
* TorrentHR
* Torrenting (TT)
* Torrentland
* TorrentHeaven
* TorrentLeech (TL)
* TorrentLeech.pl
* TorrentSeeds (TS)
* Torrent-Syndikat
* TOrrent-tuRK (TORK)
* Torrentech (TTH)
* Torrenting (TT)
* Torrentland
* TotallyKids (TK)
* ToTheGlory
* TranceTraffic
* Trezzor
* TurkTorrent (TT)
* TV Chaos UK (TVCUK)
* TV-Vault
* TVstore
* Twilight Torrents
* Twilights Zoom
* u-torrents (SceneFZ)
* U-Torrents
* U2 (U2分享園@動漫花園)
* UHDBits
* UnionGang
* UnlimitZ
@@ -470,17 +491,22 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* WDT (Wrestling Desires Torrents / Ultimate Wrestling Torrents)
* World-In-HD
* World-of-Tomorrow
* x-ite.me (XM)
* xBytesV2
* XSpeeds (XS)
* XWTorrents (XWT)
* 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 garfieldsixtynine -at- gmail.com to get them fixed/improved.

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,12 +1,19 @@
name: $(majorVersion).$(minorVersion).$(patchVersion)
variables:
majorVersion: 0
minorVersion: 13
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
@@ -352,17 +359,40 @@ stages:
patterns: '**/Jackett*'
path: $(Build.ArtifactStagingDirectory)
- task: GitHubRelease@0
- task: GitHubRelease@1
displayName: Create Github release
inputs:
gitHubConnection: github.com_jackett
repositoryName: '$(Build.Repository.Name)'
action: create
target: $(Build.SourceVersion)
tagSource: manual
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,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,11 +25,11 @@ 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)
{
var t = date_time - new DateTime(1970, 1, 1);
var t = dateTime - new DateTime(1970, 1, 1);
var ss = (int)t.TotalSeconds;
if (ss < 0)
return 0;
@@ -44,19 +48,19 @@ namespace DateTimeRoutines
/// <summary>
/// Index of first char of a date substring found in the string
/// </summary>
public readonly int IndexOfDate = -1;
public readonly int IndexOfDate;
/// <summary>
/// Length a date substring found in the string
/// </summary>
public readonly int LengthOfDate = -1;
public readonly int LengthOfDate;
/// <summary>
/// Index of first char of a time substring found in the string
/// </summary>
public readonly int IndexOfTime = -1;
public readonly int IndexOfTime;
/// <summary>
/// Length of a time substring found in the string
/// </summary>
public readonly int LengthOfTime = -1;
public readonly int LengthOfTime;
/// <summary>
/// DateTime found in the string
/// </summary>
@@ -82,45 +86,45 @@ namespace DateTimeRoutines
/// </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
{
var 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,13 +142,7 @@ namespace DateTimeRoutines
_DefaultDate = value;
DefaultDateIsNow = false;
}
get
{
if (DefaultDateIsNow)
return DateTime.Now;
else
return _DefaultDate;
}
get => DefaultDateIsNow ? DateTime.Now : _DefaultDate;
}
private static DateTime _DefaultDate = DateTime.Now;
@@ -157,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>
@@ -178,79 +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>
public static bool TryParseDateTime(this string str, DateTimeFormat default_format, out DateTime date_time)
public static bool TryParseDateTime(this string str, DateTimeFormat defaultFormat, out DateTime dateTime)
{
if (!TryParseDateTime(str, default_format, out ParsedDateTime 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>
public static bool TryParseDateOrTime(this string str, DateTimeFormat default_format, out DateTime date_time)
public static bool TryParseDateOrTime(this string str, DateTimeFormat defaultFormat, out DateTime dateTime)
{
if (!TryParseDateOrTime(str, default_format, out ParsedDateTime 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)
{
if (!TryParseTime(str, default_format, out var 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>
public static bool TryParseDate(this string str, DateTimeFormat default_format, out DateTime date)
public static bool TryParseDate(this string str, DateTimeFormat defaultFormat, out DateTime date)
{
if (!TryParseDate(str, default_format, out ParsedDateTime 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;
}
@@ -259,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>
public static 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>
public static 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>
public static 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_time;
if (!TryParseDate(str, default_format, out
ParsedDateTime 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;
var 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))
{
var 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
{
var 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);
}
}
@@ -339,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)
@@ -398,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;
var 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)
{
var offset_hh = int.Parse(m.Groups["offset_hh"].Value);
var 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);
var 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)
//{
@@ -450,17 +444,17 @@ 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>
public static 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;
@@ -470,17 +464,17 @@ namespace DateTimeRoutines
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;
}
@@ -488,9 +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)
{
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out var 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;
}
@@ -511,8 +505,8 @@ namespace DateTimeRoutines
if (m.Success)
{
var month = -1;
var index_of_date = m.Index;
var length_of_date = m.Length;
var indexOfDate = m.Index;
var lengthOfDate = m.Length;
switch (m.Groups["month"].Value)
{
@@ -565,22 +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;
if (!convert_to_date(year, month, int.Parse(m.Groups["day"].Value), out var 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;
}
private 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)
{

View File

@@ -1,7 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<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;
}
}

View File

@@ -183,6 +183,12 @@ hr {
border-bottom: 1px solid #ddd;
}
.jackettlog-narrowcol {
width: 1px;
white-space: nowrap;
vertical-align: top;
}
.jackettlogWarn {
background-color: #FFFF8E !important;
}
@@ -210,11 +216,15 @@ pre {
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: transparent;
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 {

View File

@@ -241,9 +241,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");
}
});
});

View File

@@ -175,6 +175,12 @@ hr {
border-bottom: 1px solid #ddd;
}
.jackettlog-narrowcol {
width: 1px;
white-space: nowrap;
vertical-align: top;
}
.jackettlogWarn {
background-color: #FFFF8E !important;
}
@@ -202,11 +208,15 @@ pre {
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: transparent;
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 {
@@ -276,7 +286,7 @@ table td.fit{
.tooltip-inner img {
max-width: 250px;
height: auto;
height: auto;
}
.type-public {

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>
@@ -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=20200220" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20200102" 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">
@@ -616,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}}
@@ -691,6 +691,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=20200222"></script>
<script type="text/javascript" src="../custom.js?changed=20200301"></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"

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"

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:
@@ -60,7 +60,7 @@
- selector: span.errormsg
test:
path: index.php
search:
paths:
- path: index.php

View File

@@ -1,4 +1,4 @@
---
---
site: 3evils
name: 3evils
description: "3evils is a Private Torrent Tracker for MOVIES / TV / GENERAL"

View File

@@ -22,7 +22,7 @@
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -103,7 +103,7 @@
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href

View File

@@ -20,7 +20,7 @@
settings:
- name: info
type: info
default: 7torrents does not use categories. In your software Indexer settings, set the category to 100001.
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

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

@@ -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"
@@ -170,4 +170,4 @@
case:
span.icon_upload: 2
"*": 1
# XBT v3
# XBT v3

View File

@@ -1,146 +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
- 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"
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: a[href="logout.php"]
search:
paths:
# http://alein.org/index.php?page=torrents&category=1;15;41;14;48;39;20;16;5;21;22;11&search=venom&active=1
- path: index.php
inputs:
page: torrents
category: "{{ range .Categories }}{{.}};{{end}}"
search: "{{ .Keywords }}"
# 0 all 1 active only 2 dead only
active: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
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
# xbtit 2.3

View File

@@ -1,4 +1,4 @@
---
---
site: alexfilm
name: AlexFilm
description: "AlexFilm is a RUSSIAN Semi-Private Torrent Tracker for TV"

View File

@@ -158,8 +158,10 @@
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")
@@ -196,69 +198,70 @@
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$=\"/Seriados.png\"]": "120"
"[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:
@@ -284,5 +287,5 @@
"span.badge-success:contains(\"FREE\")": 0
"*": 1
uploadvolumefactor:
case:
"*": 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,7 +65,7 @@
- {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]

View File

@@ -1,4 +1,4 @@
---
---
site: arenabg
name: ArenaBG
description: "ArenaBG is a BULGARIAN Semi-Private Torrent Tracker for 0DAY / GENERAL"

View File

@@ -1,4 +1,4 @@
---
---
site: asgaard
name: Asgaard
description: "Asgaard (AG) is a NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -57,7 +57,7 @@
- {id: 43, cat: Books/Technical, desc: "Books Education"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -104,7 +104,7 @@
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
@@ -178,6 +178,5 @@
img[src="./images/gold.png"]: 0
"*": 1
uploadvolumefactor:
case:
"*": 1
text: 1
# Midgaard

View File

@@ -15,7 +15,7 @@
- {id: 3, cat: Audio, desc: "Music"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]

View File

@@ -6,7 +6,7 @@
type: public
encoding: UTF-8
links:
- http://audiobookbay.nl/
- http://audiobookbay.nl/ # site forces http, does not support https
legacylinks:
- https://audiobookbay.la/

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"

View File

@@ -40,6 +40,10 @@
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
@@ -65,7 +69,7 @@
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:
@@ -94,4 +98,4 @@
"*": 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

@@ -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:

View File

@@ -21,7 +21,7 @@
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -96,7 +96,7 @@
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
@@ -148,4 +148,4 @@
description:
selector: td:nth-child(2)
remove: a, img
# NexusPHP Standard v1.5 Beta 4
# NexusPHP Standard v1.5 Beta 4

View File

@@ -35,7 +35,7 @@
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -50,8 +50,8 @@
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 }}"
@@ -114,6 +114,5 @@
i[data-original-title="75% Promo"]: 0.25
"*": 1
uploadvolumefactor:
case:
"*": 1
# UNIT3D
text: 1
# UNIT3D

View File

@@ -14,7 +14,7 @@
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -126,6 +126,5 @@
i[data-original-title="75% Promo"]: 0.25
"*": 1
uploadvolumefactor:
case:
"*": 1
# UNIT3D
text: 1
# UNIT3D

View File

@@ -1,4 +1,4 @@
---
---
site: bigfangroup
name: BigFANGroup
description: "BigFANGroup is a RUSSIAN Public Torrent Tracker for MOVIES / TV"

View File

@@ -6,6 +6,8 @@
type: private
encoding: UTF-8
links:
- https://www.bigtorrent.eu/
legacylinks:
- http://www.bigtorrent.eu/
caps:
@@ -96,4 +98,4 @@
"*": "1"
uploadvolumefactor:
case:
"*": "1"
"*": "1"

View File

@@ -6,14 +6,16 @@
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: 11, cat: Movies/HD, desc: "DSS"}
- {id: 1, cat: Movies, desc: "Screener"}
- {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"}
@@ -25,10 +27,10 @@
# MUSIC
- {id: 8, cat: Audio, desc: "Musica"}
# SOFTWARE
- {id: 9, cat: PC/0day, desc: "Software"}
# PHONE
- {id: 12, cat: PC/Phone-Other, desc: "Applicazioni"}

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"

View File

@@ -1,4 +1,4 @@
---
---
site: bithorlo
name: Bithorlo
description: "Bithorlo (BHO) is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"

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

@@ -6,7 +6,7 @@
type: public
encoding: UTF-8
links:
- http://bitru.org/
- http://bitru.org/ # site forces http, https is not supported
caps:
categories:
@@ -84,8 +84,8 @@
- name: regexp
args: "src=(.*?) "
date:
# Сегодня в 09:09 от
# Вчера в 22:47 от
# Сегодня в 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:
@@ -96,7 +96,7 @@
- name: replace
args: ["Вчера в", "Yesterday"]
date:
# 08 ноября 2019 в 23:53 от
# 08 ноября 2019 в 23:53 от
selector: td:nth-child(2) div.b-info div span:nth-child(2):not(:contains("Сегодня")):not(:contains("Вчера"))
optional: true
filters:
@@ -134,7 +134,7 @@
selector: td:nth-child(3)
filters:
- name: replace
args: ["ТБ", "TB"]
args: ["ТБ", "TB"]
- name: replace
args: ["ГБ", "GB"]
- name: replace
@@ -145,12 +145,12 @@
selector: td:nth-child(4)
filters:
- name: replace
args: ["?", "1"]
args: ["?", "1"]
leechers:
selector: td:nth-child(5)
selector: td:nth-child(5)
filters:
- name: replace
args: ["?", "0"]
args: ["?", "0"]
downloadvolumefactor:
text: 0
uploadvolumefactor:

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
@@ -84,7 +85,7 @@
options:
"desc": "desc"
"asc": "asc"
login:
path: ?p=home&pid=1
method: form
@@ -106,11 +107,11 @@
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:
@@ -145,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

View File

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

View File

@@ -13,9 +13,11 @@
- {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]
@@ -51,7 +53,7 @@
test:
path: /
selector: a[href$="/logout"]
ratio:
path: /
selector: li:has(i.fa-sync-alt)

View File

@@ -1,4 +1,4 @@
---
---
site: booktracker
name: BookTracker
description: "BookTracker is a RUSSIAN Semi-Private Torrent Tracker for EBOOKS"

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

@@ -6,6 +6,8 @@
type: private
encoding: UTF-8
links:
- https://broadcity.in/
legacylinks:
- http://broadcity.in/
caps:

View File

@@ -15,7 +15,7 @@
- {id: 410, cat: TV, desc: "TV Series/剧集"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -43,7 +43,7 @@
options:
"desc": "desc"
"asc": "asc"
login:
method: cookie
inputs:
@@ -86,7 +86,7 @@
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href

View File

@@ -33,39 +33,59 @@
options:
"time": "created"
"length": "size"
"popular": "seeders"
"seeders": "seeders"
search:
paths:
- path: "{{ if .Keywords }}?s={{ .Keywords }}&sort={{ .Config.sort }}{{else}}recent?sort={{ .Config.sort }}{{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
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
seeders:
selector: div[class$="info"] span:nth-of-type(4)
leechers:
selector: div[class$="info"] span:nth-of-type(5)
downloadvolumefactor:
text: 0
uploadvolumefactor:

View File

@@ -20,7 +20,7 @@
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

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

@@ -1,4 +1,4 @@
---
---
site: btnext
name: BTNext
description: "BTNext (BTNT) is a PORTUGUESE Private Torrent Tracker for 0DAY / GENERAL"
@@ -6,8 +6,7 @@
type: private
encoding: UTF-8
links:
- http://tracker.btnext.com/
# note: the site forces http, https is not supported
- http://tracker.btnext.com/ # site forces http, https is not supported
caps:
categorymappings:
@@ -149,7 +148,7 @@
search:
paths:
- path: /
keywordsfilters:
keywordsfilters:
- name: re_replace
args: ["[^a-zA-Z0-9]+", "%25"]
inputs:

View File

@@ -1,4 +1,4 @@
---
---
site: btschool
name: BTSCHOOL
description: "BTSCHOOL is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -23,7 +23,7 @@
- {id: 415, cat: Other, desc: "其他/Other"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -78,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

View File

@@ -6,9 +6,10 @@
type: public
encoding: UTF-8
links:
- https://btio.pw/
- https://btsow.club/
legacylinks:
- https://btos.pw/
- https://btio.pw/
caps:
categories:

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
@@ -115,6 +115,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
@@ -146,4 +154,4 @@
"*": 1
uploadvolumefactor:
text: 1
# xbtit 2.0.0
# 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"

View File

@@ -1,4 +1,4 @@
---
---
site: casstudiotv
name: CasStudioTV
description: "CasStudioTV is a RUSSIAN Semi-Private Torrent Tracker for TV"

View File

@@ -42,9 +42,33 @@
- {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: takelogin.php
@@ -60,13 +84,14 @@
search:
paths:
- path: browse.php
method: get
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 active 1 incldead 2 deadonly
incldead: 1
sort: added
d: DESC
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="])
@@ -86,7 +111,7 @@
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
@@ -122,7 +147,10 @@
"*": 1
uploadvolumefactor:
case:
"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

View File

@@ -18,7 +18,7 @@
- {id: 4, cat: TV/Sport, desc: "Sports"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -85,8 +85,10 @@
sort: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]

View File

@@ -6,9 +6,10 @@
type: public
encoding: UTF-8
links:
- http://www.cilijj.xyz/
- https://www.cilijj.xyz/
legacylinks:
- http://www.cili180.com/
- http://www.cilijj.xyz/
caps:
categories:

View File

@@ -6,6 +6,8 @@
type: private
encoding: UTF-8
links:
- https://cinemageddon.net/
legacylinks:
- http://cinemageddon.net/
caps:
@@ -45,7 +47,7 @@
- selector: table:contains("Login failed!")
test:
path: index.php
search:
paths:
- path: browse.php
@@ -94,4 +96,4 @@
"*": "1"
uploadvolumefactor:
case:
"*": "1"
"*": "1"

View File

@@ -117,4 +117,4 @@
uploadvolumefactor:
case:
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": 2
"*": 1
"*": 1

View File

@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://classix-unlimited.co.uk/
- http://classix-unlimited.co.uk/ # site does not support https ERR_CONNECTION_CLOSED
caps:
categorymappings:
@@ -63,4 +63,4 @@
"*": "1"
uploadvolumefactor:
case:
"*": "1"
"*": "1"

View File

@@ -1,4 +1,4 @@
---
---
site: cpasbien
name: cpasbien
description: "cpasbien is a FRENCH Public site for TV / MOVIES / GENERAL"
@@ -7,7 +7,7 @@
encoding: UTF-8
followredirect: true
links:
- https://vww.cpasbien-fr.fr/
- https://wvw.cpasbien-fr.fr/
legacylinks:
- http://www.cpasbiens.cc/
- http://www.cpabien.cm/
@@ -38,6 +38,7 @@
- https://www.cpasbien.vg/
- https://www.cpasbien.lol/
- https://www.gktorrent.biz/
- https://vww.cpasbien-fr.fr/
caps:
categorymappings:

View File

@@ -1,4 +1,4 @@
---
---
site: crazyscorner
name: Crazy's Corner
description: "Crazy's Corner is a Private Torrent Tracker for MUSIC"
@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://crazys-corner.info/
- http://crazys-corner.info/ # site does not support https ERR_CONNECTION_REFUSED
caps:
categorymappings:
@@ -132,9 +132,6 @@
download:
selector: a[href*="/details.php?id="]
attribute: href
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
banner:
selector: img[src*="/torrents/images/"]
attribute: src

View File

@@ -1,4 +1,4 @@
---
---
site: crazyspirits
name: CrazySpirits
description: "Crazy Spirits is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -208,4 +208,4 @@
uploadvolumefactor:
case:
"*": 1
# TT3.0
# TT3.0

View File

@@ -1,4 +1,4 @@
---
---
site: crnaberza
name: CrnaBerza
description: "Crna Berza is a BALKAN Private Torrent Tracker for MOVIES / TV / GENERAL"

View File

@@ -1,4 +1,4 @@
 site: cztorrent
site: cztorrent
name: CzTorrent
description: "CzTorrent is a Czech Semi-Private site for TV / MOVIES / GENERAL"
language: cs-cz
@@ -79,6 +79,10 @@
rows:
selector: tr.torr_hover
keywordsfilters:
- name: re_replace
args: ["S[0-9]{2}([^E]|$)", ""] # remove season tag without episode (search doesn't support it)
fields:
title:

View File

@@ -1,4 +1,4 @@
---
---
site: datascene
name: DataScene
description: "DataScene (DS) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -54,9 +54,33 @@
- {id: 12, cat: XXX, desc: "XxX"}
modes:
search: [q]
movie-search: [q]
tv-search: [q, season, ep]
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
@@ -68,7 +92,7 @@
- selector: td.embedded:has(h2:contains("failed"))
test:
path: browse.php
ratio:
path: browse.php
selector: font:contains("Ratio:") > span
@@ -77,9 +101,14 @@
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
$raw: "{{ if .Categories}}{{ range .Categories }}c{{.}}=1&{{end}}{{else}}cat=0{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 1 active 2 incldead 3 onlydead 4 free
incldead: 2
# 0 name 1 genre 2 descr 3 imdb
blah: "{{ if .Query.IMDBID }}3{{else}}0{{end}}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: div.ncls > table > tbody > tr:has(a.tname)

View File

@@ -17,7 +17,7 @@
- {id: 5, cat: Console, desc: "Game"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]

View File

@@ -1,4 +1,4 @@
---
---
site: divteam
name: DivTeam
description: "DivTeam is a SPANISH Private Torrent Tracker for MOVIES / GENERAL"

View File

@@ -1,4 +1,4 @@
---
---
site: documentarytorrents
name: DocumentaryTorrents
description: "Documentary Torrents (DT) is a Private Torrent Tracker for E-LEARNING MOVIES / TV"
@@ -88,7 +88,7 @@
label: Sort requested from site
default: "id"
options:
"is": "created"
"id": "created"
"seeders": "seeders"
"size": "size"
"name": "title"

View File

@@ -1,4 +1,4 @@
---
---
site: downloadville
name: Downloadville
description: "Downloadville is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -34,6 +34,8 @@
- {id: 40, cat: Movies, desc: "Films V.O. SD"}
- {id: 41, cat: Movies, desc: "Films V.O. HD"}
- {id: 42, cat: Movies, desc: "Films TV-Rip"}
# 4K LIGHT
- {id: 95, cat: Movies, desc: "4K LIGHT"}
# Séries-Télé
- {id: 16, cat: TV, desc: "Séries-Télé"}
- {id: 17, cat: TV, desc: "Séries-Télé TV Pack SD"}
@@ -138,7 +140,7 @@
default: FRENCH
options:
FRENCH : "FRENCH"
MULTI.FRENCH : "MULTI.FRENCH"
MULTI.FRENCH : "MULTI.FRENCH"
ENGLISH: "ENGLISH"
- name: sort
type: select
@@ -169,7 +171,7 @@
uid: "{{ .Config.uid }}"
pwd: "{{ .Config.pwd }}"
error:
- selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td
- selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td
message:
selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td span
test:
@@ -190,6 +192,8 @@
search:
paths:
- path: tracker/index.php
headers:
Referer: ["https://downloadville.net/tracker/index.php?page=torrents&search=fake_referer&active=0"]
inputs:
page: torrents
search: "{{ .Keywords }}"
@@ -210,7 +214,7 @@
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["[\\.\\s\\[\\-][Mm][Uu][Ll][Tt][Ii][\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
args: ["[\\.\\s\\[\\-][Mm][Uu][Ll][Tt][Ii][\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
title:
text: "{{if .Config.multilang }}{{ .Result.title_multilang }}{{else}}{{ .Result.title_phase1 }}{{end}}"
details:

View File

@@ -1,4 +1,4 @@
---
---
site: dragonworldreloaded
name: Dragonworld Reloaded
description: "Dragonworld Reloaded is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"

View File

@@ -24,7 +24,7 @@
- {id: 12, cat: TV/Anime, desc: "Anime-Movie"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]

View File

@@ -1,4 +1,4 @@
---
---
site: ebookparadijs
name: EbookParadijs
description: "EbookParadijs is a DUTCH Private Tracker for EBOOKS"

View File

@@ -352,4 +352,4 @@
"*": 1
uploadvolumefactor:
case:
"*": 1
"*": 1

View File

@@ -1,4 +1,4 @@
---
---
site: efectodoppler
name: Efecto Doppler
description: "Efecto Doppler is a SPANISH Private Torrent Tracker for MUSIC"

View File

@@ -1,140 +0,0 @@
---
site: eggmeon
name: EggMeOn
description: "EggMeOn is a Private Torrent Tracker for nostalgic TV / CONSOLE / PODCASTS"
language: en-us
type: private
encoding: UTF-8
links:
- https://www.eggmeon.xyz/
caps:
categorymappings:
- {id: 1, cat: TV, desc: "AdultSwim"}
- {id: 2, cat: TV/Anime, desc: "Animation"}
- {id: 14, cat: Audio, desc: "Audio"}
- {id: 3, cat: TV, desc: "Cartoon Network"}
- {id: 4, cat: TV, desc: "Comedy"}
- {id: 5, cat: TV, desc: "Disney"}
- {id: 6, cat: Console, desc: "Games"}
- {id: 7, cat: TV, desc: "MST3K"}
- {id: 8, cat: Audio/Video, desc: "MTV"}
- {id: 9, cat: TV, desc: "Nickelodeon"}
- {id: 10, cat: Movies, desc: "Other"}
- {id: 13, cat: Audio/Other, desc: "Podcast"}
- {id: 11, cat: Books, desc: "Publication"}
- {id: 12, cat: Movies, desc: "Star Wars"}
modes:
search: [q]
tv-search: [q]
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
method: form
form: form[action="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
cinfo: "1536|864|24|-780"
iplocked: 0
keeploggedin: 1
submit: login
selectorinputs:
token:
selector: input[name="token"]
attribute: value
error:
- selector: table#maincontent tr td div div#messagebarA
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
searchtext: ""
action: advanced
title: "{{ .Keywords }}"
sizeall: ""
sizetype: gb
sizerange: 0.01
filelist: ""
taglist: ""
autocomplete_toggle: 1
rows:
selector: table#torrent_table tr:has(a[href^="torrents.php?action=download"])
fields:
category:
selector: a[href^="/torrents.php?filter_cat"]
attribute: href
filters:
- name: regexp
args: "(\\d+)]=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"]
attribute: href
description:
selector: div.tags
banner:
selector: td:nth-child(2) > script
filters:
- name: regexp
args: "src=\\\\\"(.*?)\\\\\">"
- name: re_replace
args: ["\\\\(.)", "$1"]
- name: replace
args: ["/static/common/noartwork/noimage.png", ""]
files:
selector: td:nth-last-child(8)
date:
selector: td:nth-last-child(6)
filters:
- name: timeago
size:
selector: td:nth-last-child(5)
grabs:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
downloadvolumefactor:
case:
"img[alt=\"Freeleech\"]": 0
"*": 1
uploadvolumefactor:
text: 1
# luminance

View File

@@ -6,7 +6,7 @@
type: public
encoding: UTF-8
links:
- https://www.elitetorrent.bz/
- https://www.elitetorrent.nl/
legacylinks:
- https://www.elitetorrent.biz/
- https://www.elitetorrent.io/
@@ -15,6 +15,7 @@
- https://www.elitetorrent.nu/
- https://www.elitetorrent.tv/
- https://www.elitetorrent.li/
- https://www.elitetorrent.bz/
caps:
categories:
@@ -73,6 +74,9 @@
download:
selector: .meta a
attribute: href
banner:
selector: .imagen img
attribute: data-src
category:
selector: .meta a
attribute: href

View File

@@ -1,4 +1,4 @@
---
---
site: eniahd
name: EniaHD
description: "EniaHD is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV"

View File

@@ -0,0 +1,199 @@
---
site: erzsebet
name: Erzsebet
description: "Erzsebet is a RUSSIAN Semi-Private Torrent Tracker for 3X"
language: ru-ru
type: semi-private
encoding: UTF-8
links:
- https://erzsebet.org/
caps:
categorymappings:
- {id: 9, cat: XXX, desc: "Feature, Vignettes, Classic / Фильмы с сюжетом и Классичес..."}
- {id: 11, cat: XXX, desc: "Gonzo & All Sex / Гонзо-фильмы и Фильмы без сюжета"}
- {id: 13, cat: XXX, desc: "All Girl & Solo / Лесбо-фильмы"}
- {id: 12, cat: XXX, desc: "Ethnic-Themed / Этнические фильмы"}
- {id: 176, cat: XXX, desc: "Mobile, Pocket РС & Phone / Фильмы для моби..."}
- {id: 157, cat: XXX, desc: "Full Length Movies Packs / Паки фильмов"}
- {id: 16, cat: XXX, desc: "Feature, Vignettes, Classic (HD) / Фильмы с сюжет..."}
- {id: 18, cat: XXX, desc: "Gonzo & All Sex, All Girl & Solo, Ethnic-Themed..."}
- {id: 180, cat: XXX, desc: "Full Length Movies (DVD) / Фильмы (DVD)"}
- {id: 246, cat: XXX, desc: "Full Length Movies (Blu-Ray) / Фильмы (Blu-Ray)"}
- {id: 48, cat: XXX, desc: "Clips (various) / Порно Разное"}
- {id: 32, cat: XXX, desc: "SiteRip's & Movie Scenes / Сайтрипы и сцены ..."}
- {id: 45, cat: XXX, desc: "SiteRip's & Movie Scenes (HD) / Сайтрипы и сцены..."}
- {id: 177, cat: XXX, desc: "3D & Virtual Reality Videos (VR) / Видео в 3D и..."}
- {id: 43, cat: XXX, desc: "Actresses Clips Packs / Паки по актрисам"}
- {id: 39, cat: XXX, desc: "SiteRip's Packs / Паки сайтрипов"}
- {id: 52, cat: XXX, desc: "Russian Clips (various) / Порно Разное с русскими актрисам..."}
- {id: 53, cat: XXX, desc: "Russian SiteRip's & Movie Scenes / Сайтрип..."}
- {id: 54, cat: XXX, desc: "Russian SiteRip's & Movie Scenes (HD) / Сайтрипы..."}
- {id: 56, cat: XXX, desc: "Russian Full Length Movies / Русские полнометражные фильмы"}
- {id: 50, cat: XXX, desc: "Russian Clips Packs / Паки русского и по русским актрисам"}
- {id: 59, cat: XXX, desc: "Amateur Picture / Любительское фото"}
- {id: 58, cat: XXX, desc: "Amateur Video & WebCams / Любительское видео"}
- {id: 128, cat: XXX, desc: "Amateur Packs / Паки любительского"}
- {id: 129, cat: XXX, desc: "Bukkake, Glory Hole, Cumshot Compilation, BlowGangBang ..."}
- {id: 130, cat: XXX, desc: "Squirting & Lesbian Bukkake / Лесбо и соло сквиртинг"}
- {id: 120, cat: XXX, desc: "Fisting, Dildo & Toys / Фистинг, фаллоимита..."}
- {id: 131, cat: XXX, desc: "LegalPorno.com / Сайтрипы студии Legal Porno "}
- {id: 64, cat: XXX, desc: "BDSM / БДСМ"}
- {id: 65, cat: XXX, desc: "Fetish / Фетиш"}
- {id: 66, cat: XXX, desc: "Peeing / Мочеиспускание"}
- {id: 67, cat: XXX, desc: "Pregnant / Беременные"}
- {id: 68, cat: XXX, desc: "Femdom & Strapon / Женское доминирование и страпон"}
- {id: 71, cat: XXX, desc: "Kaviar Movies / Копрофилия"}
- {id: 81, cat: XXX, desc: "Picture Gallery / Порнофотографии"}
- {id: 80, cat: XXX, desc: "Misc & Special Interest Picture / Тематичес..."}
- {id: 79, cat: XXX, desc: "Magazines, Comix & Artwork / Журналы, ком..."}
- {id: 78, cat: XXX, desc: "Picture Packs / Паки фотографий"}
- {id: 178, cat: XXX, desc: "Erotic Video Library / Эротические студии (видео)"}
- {id: 85, cat: XXX, desc: "Adult Games / Порноигры"}
- {id: 83, cat: XXX, desc: "Hentai, Manga & Cartoons / Хентай, Манга и Мультфильм..."}
- {id: 89, cat: XXX, desc: "Japanese Porn / Японское порно"}
- {id: 188, cat: XXX, desc: "Erotic Movies, Documentary & Reality / Эротически..."}
- {id: 219, cat: XXX, desc: "Cinema / Зарубежный Кинематограф"}
- {id: 218, cat: XXX, desc: "Cinema Series / Зарубежные сериалы"}
- {id: 217, cat: XXX, desc: "Cinema (Russian) / Кинематограф СССР, России и бы..."}
- {id: 216, cat: XXX, desc: "Russian Series / Русские сериалы"}
- {id: 215, cat: XXX, desc: "Cartoons & Anime / Мультфильмы и Аниме"}
- {id: 214, cat: XXX, desc: "Music (Audio) / Музыка (Аудио)"}
- {id: 213, cat: XXX, desc: "Music (Video) / Музыка (Видео)"}
- {id: 212, cat: XXX, desc: "Games / Игры"}
- {id: 211, cat: XXX, desc: "Soft / Софт"}
- {id: 210, cat: XXX, desc: "Various / Разное"}
- {id: 205, cat: XXX, desc: "Shemale Transsexual / Транссексуалы"}
- {id: 204, cat: XXX, desc: "Bisexual / Бисексуалы"}
- {id: 206, cat: XXX, desc: "Gay Clips & Movie Scenes / Ролики, SiteRip'ы..."}
- {id: 208, cat: XXX, desc: "Full Length Gay Movies / Полнометражные гей-фильмы"}
- {id: 209, cat: XXX, desc: "Gay Magazines, Photo, Rest / Гей-журналы, фото, разное"}
- {id: 125, cat: XXX, desc: "Archive / Архив"}
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: form
form: form[action="login.php"]
inputs:
login_username: "{{ .Config.username }}"
login_password: "{{ .Config.password }}"
autologin: 1
error:
- selector: table.error
test:
path: index.php
selector: a[href="./login.php?logout=1"]
search:
paths:
- path: tracker.php
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:
$raw: "{{ if .Categories }}{{ range .Categories }}f[]={{.}}&{{end}}{{else}}f[]=-1{{end}}"
prev_allw: 1
prev_a: 0
prev_dla: 0
prev_dlc: 0
prev_dld: 0
prev_dlw: 0
prev_my: 0
prev_new: 0
prev_sd: 0
prev_da: 1
prev_dc: 0
prev_df: 1
prev_ds: 0
prev_tor_type: 0
o: "{{ .Config.sort }}"
s: "{{ .Config.type }}"
# show category
dc: 0
# show forum
df: 1
# show author
da: 1
# show speed
ds: 0
# -1=all time
tm: -1
# seed not seen -1=disregard
sns: -1
# group releases -1=not selected
srg: -1
# title search
nm: "{{ .Keywords }}"
# find a username
pn: ""
# search by partial word
allw: 0
rows:
selector: tr[id^="tor_"]:has(a[href^="./dl.php?id="])
fields:
category:
selector: a.gen
attribute: href
filters:
- name: querystring
args: f
title:
selector: a.tLink
details:
selector: a.tLink
attribute: href
download:
selector: a[href^="./dl.php?id="]
attribute: href
magnet:
optional: true
selector: a[href^="magnet:?xt="]
attribute: href
size:
selector: td:nth-child(6) > u
seeders:
selector: td.seedmed > b
leechers:
selector: td.leechmed > b
grabs:
selector: td:nth-child(9)
date:
selector: td:last-child > u
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 1
# TorrentPier

View File

@@ -41,7 +41,7 @@
- {id: 31, cat: TV, desc: "Subtitles - english subs"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]

View File

@@ -1,4 +1,4 @@
---
---
site: estone
name: eStone
description: "eStone (XiDER, BeLoad) is a HUNGARIAN Private Torrent Tracker for 0DAY / GENERAL"
@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://estone.cc/
- http://estone.cc/ # site does not support https ERR_CONNECTION_REFUSED
caps:
categorymappings:

View File

@@ -36,8 +36,8 @@
- {id: 9, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
@@ -57,9 +57,9 @@
default: MULTI.FRENCH
options:
FRENCH : "FRENCH"
MULTI.FRENCH : "MULTI.FRENCH"
MULTI.FRENCH : "MULTI.FRENCH"
ENGLISH: "ENGLISH"
login:
path: login3.php
method: form
@@ -85,15 +85,17 @@
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
advcat: "0"
incldead: "1"
stype: "b"
dp: "0"
isUserClick: "0"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
advcat: 0
incldead: 1
stype: b
dp: 0
isUserClick: 0
rows:
selector: p + table > tbody > tr:has(a[href^="/details.php"])
fields:
download:
selector: a[href^="/details.php"]:has(b)
@@ -154,9 +156,9 @@
args: "2006-01-0215:04:05 -07:00"
downloadvolumefactor:
case:
"img[title^=\"Freeleech: \"]": "0"
"img[title^=\"Half Freeleech: \"]": "0.5"
"*": "1"
"img[title^=\"Freeleech: \"]": 0
"img[title^=\"Half Freeleech: \"]": 0.5
"*": 1
uploadvolumefactor:
case:
"*": "1"
text: 1
# engine tbd

View File

@@ -1,4 +1,4 @@
---
---
site: ettv
name: ETTV
description: "ETTV is a Public torrent site for TV / MOVIES, home of the ETTV, ETHD and DTOne groups."

View File

@@ -0,0 +1,186 @@
---
site: exkinoray
name: ExKinoRay
description: "ExKinoRay is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV"
language: ru-ru
type: semi-private
encoding: UTF-8
links:
- http://exkinoray.tv/ # site forces http, does not support https
caps:
categorymappings:
- {id: 92, cat: TV, desc: "Кино Сериал"}
- {id: 46, cat: Movies, desc: "Кино Комедия"}
- {id: 47, cat: Movies, desc: "Кино Боевик"}
- {id: 48, cat: Movies, desc: "Кино Военный"}
- {id: 49, cat: Movies, desc: "Кино Вестерн"}
- {id: 50, cat: Movies, desc: "Кино Триллер"}
- {id: 51, cat: Movies, desc: "Кино Детектив"}
- {id: 52, cat: Movies, desc: "Кино Драма"}
- {id: 53, cat: Movies, desc: "Кино Мелодрама"}
- {id: 54, cat: Movies, desc: "Кино Индийское"}
- {id: 55, cat: Movies, desc: "Кино Азиатское"}
- {id: 59, cat: Movies, desc: "Кино Фантастика"}
- {id: 60, cat: Movies, desc: "Кино Фэнтези"}
- {id: 61, cat: Movies, desc: "Кино Ужас"}
- {id: 62, cat: Movies, desc: "Кино Мистика"}
- {id: 63, cat: Movies, desc: "Кино Приключения"}
- {id: 64, cat: Movies, desc: "Кино Наше кино"}
- {id: 65, cat: Movies, desc: "Кино Исторический"}
- {id: 66, cat: TV/Documentary, desc: "Кино Документальный"}
- {id: 67, cat: TV/Sport, desc: "Кино Спорт"}
- {id: 68, cat: Movies, desc: "Кино Семейный"}
- {id: 69, cat: Movies, desc: "Кино Детский"}
- {id: 70, cat: Movies, desc: "Кино Классика"}
- {id: 71, cat: Movies, desc: "Кино Концерт"}
- {id: 72, cat: TV, desc: "Кино ТВ-шоу"}
- {id: 73, cat: Movies, desc: "Кино Театр, опера"}
- {id: 74, cat: Movies, desc: "Кино Мюзикл"}
- {id: 75, cat: Movies, desc: "Кино Эротика"}
- {id: 77, cat: TV, desc: "Мульт Буржуйский"}
- {id: 78, cat: TV, desc: "Мульт Русский"}
- {id: 79, cat: TV/Anime, desc: "Мульт Аниме"}
- {id: 80, cat: Audio, desc: "Музыка Буржуйская"}
- {id: 81, cat: Audio, desc: "Музыка Русская"}
- {id: 82, cat: Audio, desc: "Музыка Сборники"}
- {id: 83, cat: Audio/Audiobook, desc: "Другое Аудио книги"}
- {id: 84, cat: Audio/Video, desc: "Другое Видеоклипы"}
- {id: 85, cat: PC/Games, desc: "Другое Игры"}
- {id: 86, cat: PC/0day, desc: "Другое Программы"}
- {id: 87, cat: Console/Xbox, desc: "Другое XBox"}
- {id: 88, cat: Console/PSP, desc: "Другое PSP"}
- {id: 89, cat: Books/Magazines, desc: "Другое Журналы"}
- {id: 90, cat: Other, desc: "Другое Графика"}
- {id: 93, cat: Other, desc: "Другое Библиотека"}
- {id: 94, cat: Console/PS3, desc: "Другое PS3"}
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: striprussian
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"
- name: type
type: select
label: Order requested from site
default: "desc"
options:
"desc": "desc"
"asc": "asc"
- name: info_search
type: info
label: "Searching with Season / Episode (S01E01)"
default: "The web site does support season/episode searching. To allow some results for Sonarr, these are stripped from the keywords."
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
autologin: 1
returnto: "index.php"
error:
- selector: td.embedded:contains("Ошибка входа")
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
# http://exkinoray.tv/browse.php?search=&incldead=1&cat=0
- path: browse.php
keywordsfilters:
# the site does not support season/episode searching in the title.
- name: re_replace # strip S01
args: ["(?i)\\bS0*(\\d+)\\b", ""]
- name: re_replace # strip S01E01
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", ""]
inputs:
$raw: "{{ if .Categories }}{{ range .Categories }}c{{.}}=1&{{end}}{{else}}cat=0{{end}}"
# 0 active 1 incldead 2 onlydead 4 noseeds (isn't this == onlydead?)
incldead: 1
search: "{{ .Keywords }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.begins > tbody > 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="]
filters:
# Женские секреты (1 сезон: 1-4 серии из 12) Жіночі секрети | 2020 | HDTVRip (720p)
# Мандалорец (1 сезон: 1-8 серии из 8) | The Mandalorian | 2019 | WEB-DL (720p)
# Война семей (1-14 серии из 20) | 2019 | WEB-DLRip (AVC)
# normalize to SXXEYY format
- name: replace
args: [" | ", " "]
- name: re_replace
args: ["\\((\\d+)\\s+[Сс]езон:\\s+(?:(\\d+-*\\d*)\\s+[Сс]ери[ия]\\s+.*\\d+)\\)(.*)\\s([12][0-9]{3})\\s(.*)", "$3 - S$1E$2 - rus $5"]
- name: re_replace
args: ["\\((?:(\\d+-*\\d*)\\s+[Сс]ери[ия]\\s+.*\\d+)\\)(.*)\\s([12][0-9]{3})\\s(.*)", "$2 - S1E$1 - rus $4"]
- name: re_replace
args: ["(\\([А-Яа-яЁё\\W]+\\))|(^[А-Яа-яЁё\\W\\d]+\\/ )|([а-яА-ЯЁё \\-]+,+)|([а-яА-ЯЁё]+)", "{{ if .Config.striprussian }}{{ else }}$1$2$3$4{{ end }}"]
- name: re_replace
args: ["\\((\\d+p)\\)", "$1"]
- name: re_replace
args: [" - ", " "]
- name: replace
args: ["-Rip", "Rip"]
- name: replace
args: ["WEB-DL", "WEBDL"]
- name: replace
args: ["WEBDLRip", "WEBDL"]
- name: replace
args: ["HDTVRip", "HDTV"]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
date:
selector: td:nth-child(2) i
filters:
- name: dateparse
args: "2006-01-02 15:04:03"
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

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