Compare commits

...

171 Commits

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

* Check if no results Resolves #7596
2020-03-15 22:49:31 +01:00
Cory
ba9710cd7c hdspace: add imdb search support (#7665) 2020-03-15 22:38:54 +01:00
Garfield69
44c814417c ztracker: add imdb search. #4859
add silver DLVF
correct a couple cats
2020-03-16 09:15:32 +13:00
Diego Heras
d1290fc226 epublibre: add new spanish public tracker. resolves #6309 (#7669) 2020-03-15 18:42:14 +01:00
junglebus
fa88fa8af8 Readme: Full framework now no longer needed (#7667)
Since we are now running self contained .NET Core, no .NET is required on the host system
2020-03-16 06:24:36 +13:00
Diego Heras
318b3667ff core: add more binary formats in .gitattributes (#7670) 2020-03-16 06:23:28 +13:00
Garfield69
7b0adc7e45 torrentwal: gone. removed. resolves #7286 2020-03-15 16:35:05 +13:00
Diego Heras
d27ab11d8c elitetracker: add imdb search and fix categories (#7657) 2020-03-15 00:18:42 +01:00
Cory
5b6c9fee49 Fix proxy in all cases (#7631) resolves #7411
Co-authored-by: Diego Heras <ngosang@hotmail.es>
2020-03-14 17:53:16 -05:00
Garfield69
594959c858 torrent.lt: add config sort options
add movie-search
add freeleech
2020-03-15 11:08:20 +13:00
Garfield69
5b570b5cec torrentland: fix ULVF 2020-03-15 11:07:10 +13:00
Garfield69
875be5dde9 spiritofrevolution: fix imdbsearch. #4859 2020-03-15 08:59:11 +13:00
Garfield69
ffd1600226 bitturk, blutopia: update categories 2020-03-15 08:58:39 +13:00
Garfield69
07ef45b637 datascene: add imdb search support. #4859
also add config sort options
incldead
2020-03-15 08:58:02 +13:00
Cory
24f7fa461d bithdtv: improve imdb search. resolves #7596 (#7629) 2020-03-14 19:16:03 +01:00
Garfield69
8ebeb2bb17 icetorrent: fix imdbid searches. resolves #7651
also drop searching with both browse and browseadult
now use one or the other via config checkbox.
2020-03-15 06:33:08 +13:00
Diego Heras
fe3fcda356 style: improve date utils code style (#7632) 2020-03-15 05:05:10 +13:00
Diego Heras
b689b4581e funfile: fix parsing error. resolves #7633 (#7639) 2020-03-15 05:04:05 +13:00
Garfield69
623da8f70d readme: update net461 link 2020-03-14 21:30:06 +13:00
Garfield69
6afaf39d5a .gitattributes default eol=lf for all text source
used mainly by my win10 desktop github, it would pop up a warning that lf was going to be converting LF to CRLF
https://github.com/desktop/desktop/issues/3841 provided this solve
2020-03-14 21:29:43 +13:00
Garfield69
55bd19dc45 moecat: add 2FA to config. resollves #7644 2020-03-14 19:40:47 +13:00
junglebus
0979b0c86d Pipeline: Get text after list of commits #3 2020-03-14 17:20:38 +11:00
junglebus
f4c8677091 Fix Pipeline: Get text after list of commits 2020-03-14 16:57:34 +11:00
junglebus
1123e9d101 Pipeline: Get text after list of commits 2020-03-14 16:43:40 +11:00
junglebus
9a39fcc310 Test build from master 2020-03-14 16:18:44 +11:00
junglebus
e8fc2c758f Update build triggers 2020-03-14 15:57:57 +11:00
junglebus
b8cdf9f929 No longer needed now that Cake is not used 2020-03-14 15:45:54 +11:00
junglebus
89c860a16d Update for GitHubRelease@1 2020-03-14 15:21:54 +11:00
junglebus
ee5255b24a Update README.md 2020-03-14 15:10:51 +11:00
junglebus
674e6e37ad Update pipeline for new Azure organization 2020-03-14 15:05:49 +11:00
Garfield69
082e761d0d add * Torrent Oyun indir a public Turkish games site. resolves #7636 2020-03-14 07:16:11 +13:00
Garfield69
6e8726c197 baibako: switch to private. 2020-03-14 05:39:25 +13:00
Garfield69
3a8ed21d75 amigosshare: handle missing cat 2020-03-13 20:23:49 +13:00
Garfield69
eda0205dcd add u-torrents a private Romanian site. resolves #7626 2020-03-13 06:54:35 +13:00
Garfield69
bd250ff971 add lastfiles a Romanian privat esite. resolves #7580 2020-03-12 21:20:55 +13:00
Garfield69
1c63e9444d zetorrents: refining title. #7574 2020-03-12 19:18:24 +13:00
Garfield69
57a5959751 add zetorrents a public french site. resolves #7574 2020-03-12 18:18:59 +13:00
Garfield69
9e005c4c0b Merge branch 'master' of https://github.com/Jackett/Jackett 2020-03-12 18:14:49 +13:00
Garfield69
c6d4746e85 assorted public trackers: info about cat 100001 -> 7000 2020-03-12 18:14:41 +13:00
Diego Heras
e9851a1dbc funfile: handle disabled download links. resolves #7436 (#7620) 2020-03-12 17:34:07 +13:00
Garfield69
96d23ca19a add torrentv a public movie site. resolves #7575 2020-03-12 17:31:03 +13:00
Garfield69
733494a8a3 scenefz: update for new engine. resolves #7625 2020-03-12 15:25:00 +13:00
Garfield69
ed763fe7e1 scenefz: domain change. #7625 2020-03-12 12:36:52 +13:00
Garfield69
1ef146eea4 add rapidzona a Russian public 3x site. resolves #7561 2020-03-12 09:15:48 +13:00
Diego Heras
ed884f507d puntotorrent: fix missing categories. resolves #7592 (#7623) 2020-03-12 08:53:25 +13:00
fnk93
ec6ed23ecc torrentseeds: fix re-login and add imdb id (#7611) 2020-03-11 19:34:02 +01:00
Garfield69
9d5456e370 add torrent-pirat a public Russian 3x site. resolves #7560 2020-03-12 06:03:28 +13:00
Garfield69
ad08e28aa9 add sosulki a public Russian 3X site. resolves #7559 2020-03-11 20:48:38 +13:00
Diego Heras
34dcdd3332 core: add trace running in docker (#7565) 2020-03-11 19:02:55 +13:00
Cory
628944cb59 TorrentHeaven: Update with user provided HTML. Resolves #7586 (related to #7387) (#7616) 2020-03-11 18:20:53 +13:00
Diego Heras
08bc5cca75 shazbat: fix parser. resolves #7604 (#7619) 2020-03-11 17:58:45 +13:00
Diego Heras
5c16161bfc morethantv: add banner and description. resolves #7594 (#7621) 2020-03-11 12:53:12 +13:00
Diego Heras
4eb7392678 core: improve linux install scripts. resolves #5533 #6098 #5407 (#7614) 2020-03-10 21:49:26 +01:00
halali
0448193ecd cztorrent: Fix for Sonarr Season pack search (#7607) 2020-03-11 08:41:11 +13:00
Garfield69
dc27463826 lesaloon: revert https switching. #7221 2020-03-11 07:53:07 +13:00
Celedhrim
d3ef94c8db Downloadville: add a fake referer in search (#7609) resolves #7514 2020-03-11 07:26:45 +13:00
cadatoiva
74e3dec4ed Revert "Update TorrentHeaven with user provided html. Resolves #7586"
This reverts commit 0b45557292.
2020-03-10 12:05:57 -05:00
cadatoiva
0b45557292 Update TorrentHeaven with user provided html. Resolves #7586 2020-03-10 12:02:03 -05:00
halali
0387de3c67 trezzor: Fix some selectors in search page (#7608) 2020-03-10 21:56:54 +13:00
Garfield69
6358e62741 awsomehd: add info about 90 day mandatory password change 2020-03-10 21:42:23 +13:00
Garfield69
b012502f87 rns: add info about unread PM preventing searches. 2020-03-10 21:41:29 +13:00
Garfield69
608bb7d9e4 sdbits: switch to https: resolves #7221 2020-03-10 20:43:17 +13:00
fnk93
5f4206608e TorrentSeeds: Convert to csharp (#7603) 2020-03-10 20:11:35 +13:00
Garfield69
aef10d1246 eggmeon: gone. removed. resolves #7133 2020-03-10 20:07:03 +13:00
Garfield69
6fc972aa08 onejav: description can be missing. resovles #7602 2020-03-10 19:22:41 +13:00
Garfield69
271dcda7aa cartoonchaos: add posters. resolves #7598 2020-03-10 18:20:21 +13:00
Garfield69
94656892f8 totallykids: add posters. resolves #7589 2020-03-10 18:10:18 +13:00
Diego Heras
5fedb9c613 moviesdvdr: fix banner and size (#7599) 2020-03-10 16:04:04 +13:00
snamds
538fa6a38d Newpct: optionally remove year from movies (#7597) 2020-03-10 15:53:57 +13:00
Garfield69
4bd4d9cb0f add imdbid to modes for any yaml that supports .Query.IMDBID 2020-03-10 15:35:59 +13:00
RicardoVelaC
a353af2ee5 vizuk: Update categories (#7605) resolves #7588 2020-03-10 14:34:27 +13:00
Garfield69
565a368689 hdarea: fix imdb lookup. resolves #7368 2020-03-10 14:23:14 +13:00
Garfield69
972d4c9485 bittower: revert back to http. #7221 2020-03-10 10:25:45 +13:00
Garfield69
45b77de6b2 torrentland: add UHD categories. resolves #7591 2020-03-10 07:42:24 +13:00
Garfield69
a27c641bcb torrentleech: update categories. resolves #7590 2020-03-10 06:52:40 +13:00
Garfield69
00cd1bd81c xbytes2: update categories. resolves #7587 2020-03-10 05:30:37 +13:00
Garfield69
80493b7fa1 add ParnuXi a Russian Public 3x site. resolves #7558 2020-03-09 20:11:02 +13:00
Garfield69
925471fa0c add pornolive a Russian Public 3x site. resolves #7557 2020-03-09 18:22:17 +13:00
Garfield69
9ae16dea57 add iv-torrents a Russian semi-private site. resolves #7556 2020-03-09 17:19:53 +13:00
Garfield69
1aa3a256eb add rutracker-ru a Russian Puiblic site. resolves #7526 2020-03-09 15:51:25 +13:00
Garfield69
89d12c6fa9 zelka: add info note about bulgarian ip filter 2020-03-09 11:31:36 +13:00
Garfield69
ab6ca013d3 yaml: switch from http to https #7221 2020-03-09 11:31:04 +13:00
Garfield69
20d6e3eb09 yaml: add note about sites not supporting https 2020-03-09 11:28:43 +13:00
Garfield69
37a50f8374 pleasuredome: fix details selector
also switch to https
2020-03-09 10:57:01 +13:00
Diego Heras
fac07933a2 solidtorrents: remove retries (#7584) 2020-03-08 22:26:50 +01:00
Garfield69
8b77c6b483 greeklegends: gone. removed. resolves #6369 2020-03-09 08:21:26 +13:00
Garfield69
f1414eeeec alein: gone. removed. resolves #4021 2020-03-09 08:14:16 +13:00
jshessen
7a7bf83d98 add MMA-Torrents, a private site. (#7567) 2020-03-09 07:05:38 +13:00
Diego Heras
1d48eb2dd7 avistaz, cinemaz, privatehd: add imdb search and banner (#7579) 2020-03-08 16:28:43 +01:00
Diego Heras
e3956e123e bakabt: fix optional tag. resolves #7571 #7420 (#7578) 2020-03-08 14:50:38 +01:00
Diego Heras
1cfe4f9226 bithdtv: add imdb search (#7576) 2020-03-08 14:12:08 +01:00
Diego Heras
2cc601c5a9 piratethenet: add imdb search and fix categories. resolves #7381 (#7562) 2020-03-08 12:45:10 +01:00
Diego Heras
a69664428a morethantv: add imdb search and others category (#7553) 2020-03-08 12:32:37 +01:00
Diego Heras
389daf9957 hdolimpo: add banner image (#7568) 2020-03-08 12:31:58 +01:00
Garfield69
93d200895b cartookchaos, totallykids: note https unsupported 2020-03-08 21:06:39 +13:00
Garfield69
43414bc9ed cartoonchaos: switch to https albeit with invalid ca 2020-03-08 20:54:49 +13:00
Garfield69
e630390c3f rustorka: note https unsupported 2020-03-08 20:54:08 +13:00
Diego Heras
eb59c0bd51 nostalgic: add vhstapes in the name (#7563) 2020-03-08 16:16:44 +13:00
Diego Heras
e743f8b3aa elitetorrent: add banner image (#7569) 2020-03-08 16:06:56 +13:00
Garfield69
6aaf12f1de documentarytorrents: fix typo in config sort options 2020-03-08 15:40:23 +13:00
Garfield69
bd5e407b53 galeriens: switch to cookie method. resolves #7544 2020-03-08 08:13:11 +13:00
Garfield69
c93d2821b1 torrentview: new domain *5.net resolves #7548 2020-03-08 07:56:21 +13:00
Garfield69
f65d2ba9e9 cpabien: new domain wvw. resolves #7547 2020-03-08 07:55:53 +13:00
Diego Heras
0f5655ce0d core: fix CloudflareSolverRe library. Resolves #7397 (#7546) 2020-03-08 07:21:23 +13:00
Garfield69
5484d05291 bigtower, hqsource, inperil: switch to https. #7221 2020-03-08 07:07:39 +13:00
Garfield69
fcc4168f54 xtremezone: add imdb to results. #4859 2020-03-08 07:04:04 +13:00
Garfield69
905a52a82b pornorip: andmatch 2020-03-07 17:47:28 +13:00
Garfield69
86fd318211 add pornorip a 3x site. resolves #7524 2020-03-07 17:43:33 +13:00
Garfield69
e66beb64f4 add pornotor a 3x site. resolves #7523 2020-03-07 16:20:03 +13:00
Garfield69
4b507a3cbb add torrentrex a public search engine. resolves #7515 2020-03-07 15:09:10 +13:00
junglebus
5033171c54 azure-pipeline: Add debug logging (#7541)
Hopefully will help with github publish failures, quite a few debug statements there...
https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/GitHubReleaseV0/operations/Action.ts
2020-03-07 14:51:06 +13:00
Garfield69
8faf1c94dc ccfbits: add imdb support. #4859
also add config sort options
update ULVF
add engine tag
2020-03-07 12:55:48 +13:00
Garfield69
d05ad1ccb5 ilcorsaroblu: now semi-private resolves #7528 2020-03-07 09:54:41 +13:00
Cory
9a1562ef8b readme: Sort trackers alphabetically (#7537) 2020-03-07 09:53:34 +13:00
Garfield69
b5aee501e2 legittorrents: add missing sort 2020-03-07 09:49:09 +13:00
Cory
dc9519c451 XtremeZone: add imdb search support (#7536) resolves #7520 2020-03-07 07:41:31 +13:00
fnk93
692d006078 Torrent-Explosiv: Remove [Group Tag] in title (#7532) 2020-03-07 07:35:33 +13:00
Cory
7aac4fcfcb TorrentBytes: fix title bug (#7529) resolves #7527 2020-03-07 07:35:10 +13:00
Garfield69
81e5589707 filmsclub: optional (TVShows) label for tv titles. #7289 2020-03-06 20:51:46 +13:00
Cory
c36e3356e2 PassThePopcorn: Fix Freeleech check (#7522) resolves #6951 2020-03-06 19:03:42 +13:00
fnk93
d477f01f84 Speedtorrent Reloaded: Update to new tracker source (#7519) resolves #7517 2020-03-06 17:25:28 +13:00
Cory
d080c4a2ac Fuzer: Fix parse error (#7521) resolves #7502 2020-03-06 17:21:28 +13:00
Garfield69
6252c73cf2 xtremezone: new layout et.al. resolves #7520
also add missing cats
add config sort options
add imdb support #4859
2020-03-06 17:13:31 +13:00
Cory
3f9d182083 core: Remove warning suppression (#7513) 2020-03-06 14:57:59 +13:00
Garfield69
0cabbd68c5 spiritofevolution: fix login. resolves #7512 2020-03-06 14:35:03 +13:00
Garfield69
c42027842b downloadville: add cat 95 2020-03-06 14:34:18 +13:00
Garfield69
66b433bde1 torrentdownloads: drop .me domain 2020-03-05 20:01:01 +13:00
garfield69
ae303a5d4e Fix parse errors in Fuzer and Hebits (#7506) resolves #7502 2020-03-05 19:45:27 +13:00
Garfield69
ca19d2219e pornolab: add new categories 2020-03-05 19:44:22 +13:00
Garfield69
28a85d6426 add spiritofrevolution a Private German site. resolves #7503 2020-03-05 17:37:08 +13:00
Garfield69
bd1d95ade5 filmsclub: massage TV titles for sonarr. #7289 2020-03-05 13:32:31 +13:00
Garfield69
6634c5a036 ilcorsaronero: new domain .pw 2020-03-05 12:58:06 +13:00
Garfield69
cc671dfab5 btdb: download can be missing. resolves #7508 2020-03-05 12:53:32 +13:00
Garfield69
dccdd89299 cinemageddon: switch to https #7221 2020-03-05 12:12:00 +13:00
Garfield69
c23370b5fc limetorrents: drop .zone as an alternate domain. #7496 2020-03-05 09:08:28 +13:00
garfield69
d53a0ae4b9 Fix parse errors with Shazbat (#7493) resolves #7492 2020-03-05 08:00:06 +13:00
Garfield69
4e8c52e16a uniondht: fix typo category wiiware #7409 2020-03-05 07:38:45 +13:00
Garfield69
eaae440c66 add xxxtor a Russian public 3x site. resolves #7471 2020-03-05 07:06:22 +13:00
Garfield69
c7e288a372 add KinoNaVse100 a Russian Semi-rpivate site. resolves #7425 2020-03-04 19:19:40 +13:00
Garfield69
a8375e8cfe add uniondht a Public Russian site. resolves #7409 2020-03-04 16:00:12 +13:00
Garfield69
4ed5507e4d audiobooktorrents: add info about unread PM. resolves #7422
fix files selector
add engine tag
2020-03-04 11:01:00 +13:00
Diego Heras
682304d186 animetosho: change feed url. resolves #7456 (#7487) 2020-03-04 10:06:02 +13:00
Garfield69
1455a905f1 elitetorrent-biz: new domain .nl resolves #7486 2020-03-04 09:38:25 +13:00
Diego Heras
64f066839d TorrentSyndikat: fix error caused by #7386 Resolves #7481 (#7485) 2020-03-04 09:35:13 +13:00
Diego Heras
cf676b4a3f SceneTime: fix error caused by #7394 Resolves #7475 (#7484) 2020-03-04 09:16:11 +13:00
Diego Heras
8bd74a2cc9 Filelist: fix error caused by #7360 and added grabs. Resolves #7474 (#7483) 2020-03-04 09:15:07 +13:00
Garfield69
77837b7483 filmclub: optional config to strip year from title. #7289 2020-03-04 08:40:52 +13:00
Garfield69
96e5e259e9 lechaudron: fix download link. #5559 2020-03-04 07:29:56 +13:00
Diego Heras
6999410617 core: fix file permissions (#7479) 2020-03-03 10:29:01 -06:00
Diego Heras
e55e92f9ac Core: Fix line endings to match style guide(#7476) 2020-03-03 10:28:26 -06:00
367 changed files with 7804 additions and 3421 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
###############################

19
.gitattributes vendored
View File

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

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

View File

@@ -2,7 +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://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)
@@ -18,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
* 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
@@ -26,32 +26,35 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 1337x
* 7torrents
* AcademicTorrents
* ACG.RIP
* ACGsou
* AcademicTorrents
* AniRena
* Anidex
* Anime Tosho
* AniRena
* AudioBook Bay (ABB)
* BT.etree
* BTDB
* BTDIGG
* BTSOW
* BTeye
* Badass Torrents
* BigFANGroup
* BitRu
* BitTorrent.AM
* BT.etree
* BTDB
* BTDIGG
* BTeye
* BTSOW
* Cili180
* ConCen
* Corsaro.red
* cpasbien
* cpasbienClone
* Demonoid
* ETTV
* EXT Torrents
* EZTV
* dmhy
* EliteTorrent.biz
* EstrenosDTL
* ETTV
* EXT Torrents
* ExtraTorrent.cd
* EZTV
* Filebase
* FireBit
* Frozen Layer
@@ -62,14 +65,15 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Horrible Subs
* IBit
* Idope
* Il Corsaro Blu
* Il CorSaRo Blu
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Internet Archive (archive.org)
* Isohunt2
* KickAssTorrent (KATcr)
* iTorrent
* KickAssTorrent (kat.li)
* LePorno
* KickAssTorrent (KATcr)
* Legit Torrents
* LePorno
* LimeTorrents
* LinuxTracker
* MacTorrents
@@ -80,33 +84,45 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* MovCr
* MoviesDVDR
* MyPornClub
* NNTT
* Newpct (aka: tvsinpagar, descargas2020, torrentlocura, torrentrapid, tumejortorrent, pctnew, etc)
* Newstudio
* Nitro
* NNTT
* NoName Club (NNM-Club)
* Nyaa-Pantsu
* Nyaa.si
* OneJAV
* OxTorrent
* ParnuXi
* PiratBit
* Pirateiro
* PornLeech
* PornoLive
* PornoRip
* PornoTor
* ProStyleX
* Rapidzona
* RARBG
* RuTor
* Rus-media
* RuTor
* RuTracker.RU
* Seedpeer
* shokweb
* ShowRSS
* SkyTorrentsClone
* SolidTorrents
* sosulki
* sukebei-Pantsu
* sukebei.Nyaa.si
* TFile
* TOROS
* The Pirate Bay (TPB)
* Tokyo Tosho
* TopNow
* Torlock
* TOROS
* Torrent Downloads (TD)
* Torrent Oyun indir
* torrent-pirat
* Torrent4You
* Torrent9
* Torrent9Clone
@@ -116,31 +132,26 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* TorrentKitty
* TorrentParadise
* TorrentProject2
* TorrentRex
* TorrentQuest
* TorrentView
* TorrentWal
* Torrents.csv
* Torrentv
* TorrentView
* Torrentz2
* Underverse
* YTS.ag
* UnionDHT
* xxxtor
* YourBittorrent
* YTS.ag
* zetorrents
* Zooqle
* cpasbien
* cpasbienClone
* dmhy
* iTorrent
* shokweb
* sukebei-Pantsu
* sukebei.Nyaa.si
</details>
<details> <summary> <b> Supported Semi-Private Trackers </b> </summary>
* Alein
* AlexFilm
* AniDUB
* ArenaBG
* BaibaKo
* BookTracker
* CasStudioTV
* Crazy's Corner
@@ -156,6 +167,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Gay-Torrents.org
* HD Dolby
* HamsterStudio
* IV-Torrents
* KinoNaVse100
* Kinozal
* Korsar
* LostFilm.tv
@@ -207,6 +220,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Audiobook Torrents (ABT)
* Avistaz (AsiaTorrents)
* Awesome-HD (AHD)
* BaibaKo
* BIGTorrent
* BIT-HDTV
* BJ-Share (BJ)
@@ -268,9 +282,9 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* EbookParadijs
* Ebooks-Shares
* EfectoDoppler
* EggMeOn
* Elite-Tracker
* Empornium (EMP)
* EpubLibre
* Ethor.net (Thor's Land)
* ExoticaZ (YourExotic)
* ExtremeTorrents
@@ -293,9 +307,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* GazelleGames (GGn)
* Generation-Free
* GigaTorrents
* GimmePeers (formerly ILT) <!-- maintained by jamesb2147 -->
* GimmePeers (formerly ILT)
* GiroTorrent
* Greek Legends
* Greek Team
* HD-Bits.com
* HD-Forever (HDF)
@@ -333,6 +346,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* JPopsuki
* Kapaki
* Karagarga
* LastFiles
* Le Saloon
* LeChaudron
* LeagueHD
@@ -345,6 +359,7 @@ 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)
@@ -358,7 +373,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* New Real World
* Norbits
* NordicBits (NB)
* Nostalgic (The Archive)
* Nostalgic (The Archive / VHSTAPES)
* OnlineSelfEducation
* Orpheus
* Ourbits (HDPter)
@@ -413,6 +428,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* SpaceTorrent
* SpeedCD
* SpeedTorrent Reloaded
* Spirit of Revolution
* SportHD
* SportsCult
* SpringSunday
@@ -467,6 +483,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* TurkTorrent (TT)
* Twilight Torrents
* Twilights Zoom
* U-Torrents
* U2 (U2分享園@動漫花園)
* UHDBits
* UnionGang

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,18 @@ 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
@@ -372,17 +380,18 @@ stages:
inputs:
targetType: inline
script: |
$json = Invoke-WebRequest 'https://dev.azure.com/jackett-project/jackett/_apis/build/builds/$(Build.BuildId)/logs?api-version=5.0' | ConvertFrom-Json
$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-Host $logUrl
Write-Output $logUrl
$logText = Invoke-WebRequest $logUrl
if ($logText -like '*: GitHub Release*')
if ($logText -like '*Creating a release for tag:*')
{
$successCount = (Select-String "Uploaded file successfully:" -InputObject $logText -AllMatches).Matches.Count
$failureCount = (Select-String "Duplicate asset found:" -InputObject $logText -AllMatches).Matches.Count
Write-Host "Success count is: $successCount and failure count is: $failureCount"
$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,69 +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)
=> 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);
}
}
@@ -337,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)
@@ -396,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)
//{
@@ -448,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;
@@ -468,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;
}
@@ -486,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;
}
@@ -509,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)
{
@@ -563,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,8 +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

@@ -182,6 +182,7 @@ function displayConfiguredIndexersList(indexers) {
indexersTable.find("table").dataTable(
{
"stateSave": true,
"stateDuration": 0,
"pageLength": -1,
"lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]],
"order": [[0, "asc"]],
@@ -253,6 +254,7 @@ function displayUnconfiguredIndexersList() {
indexersTable.find("table").DataTable(
{
"stateSave": true,
"stateDuration": 0,
"fnStateSaveParams": function (oSettings, sValue) {
sValue.search.search = ""; // don't save the search filter content
return sValue;
@@ -955,6 +957,7 @@ function updateSearchResultTable(element, results) {
"dom": "lfr<\"dataTables_deadfilter\">tip",
"stateSave": true,
"stateDuration": 0,
"bAutoWidth": false,
"pageLength": 20,
"lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]],
@@ -1082,6 +1085,7 @@ function bindUIButtons() {
table.DataTable(
{
"stateSave": true,
"stateDuration": 0,
"bAutoWidth": false,
"pageLength": 20,
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "All"]],

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
@@ -691,6 +691,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=20200301"></script>
<script type="text/javascript" src="../custom.js?changed=20200316"></script>
</body>
</html>

View File

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

View File

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

View File

@@ -1,4 +1,4 @@

Handlebars.registerHelper('dateFormat', function (context, block) {
if (window.moment) {
var f = block.hash.format || "YYYY-MM-DD HH:mm:ss";

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<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

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

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

@@ -55,8 +55,10 @@
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: a[href^="magnet:?xt="]
attribute: href

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

@@ -20,7 +20,7 @@
settings:
- name: info
type: info
default: BTeye does not use categories. In your software Indexer settings, set the category to 100001.
default: BTeye does not use categories. In your software Indexer settings, set the category to 7000.
download:
selector: a[href^="magnet:?xt="]

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

@@ -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
@@ -59,6 +59,7 @@
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
login:
path: index.php?page=login
@@ -81,8 +82,9 @@
page: torrents
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{else}}0{{end}}"
# options: 0=title, 1=title&descr, 2=descr
options: "{{ if .Query.IMDBID }}1{{else}}0{{end}}"
# 0=title, 1=title&descr, 2=descr
options: "{{ if .Query.IMDBID }}2{{else}}0{{end}}"
# 0 all 1 activeonly 2 deadonly
active: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
@@ -115,6 +117,14 @@
args: [" http://anonym.to?javascript:popdetails('", ""]
- name: replace
args: ["');", ""]
banner:
selector: td a[href^="index.php?page=torrent-details"]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) width"
- name: replace
args: ["torrentimg/nocover.jpg", ""]
size:
selector: td:nth-child(10)
# two flavours of dates
@@ -146,4 +156,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

@@ -31,9 +31,9 @@
- {id: 21, cat: Books, desc: "Book"}
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: cookie
@@ -67,17 +67,19 @@
test:
path: index.php
selector: a[href^="/logout.php"]
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# 0 onlyactive 1 all 4 requests 5 onlydead 6 polish 8 free 10 doubleup 11 premier 13 VOD
incldead: 1
# 0 title 1 descr
blah: 0
blah: "{{ if .Query.IMDBID }}1{{else}}0{{end}}"
gatunek: 0
quality: none
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
@@ -98,13 +100,17 @@
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
attribute: href
banner:
selector: a[href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) "
imdb:
optional: true
selector: a[href*="www.imdb.com/title/tt"]
attribute: href
description:
optional: true
selector: img[src="pic/Poland.png"]

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:

View File

@@ -1,4 +1,4 @@
---
---
site: crazyspirits
name: CrazySpirits
description: "Crazy Spirits is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
@@ -12,20 +12,21 @@
categorymappings:
# Documentaire
- {id: 96, cat: TV/Documentary, desc: "Docus TV"}
- {id: 124, cat: TV/Documentary, desc: "Docus Formation Video"}
# Films
- {id: 49, cat: Movies/3D, desc: "Films 3D"}
- {id: 1, cat: XXX, desc: "3X"}
- {id: 48, cat: XXX, desc: "3X HD1080p"}
- {id: 47, cat: XXX, desc: "3X HD720p"}
- {id: 50, cat: Movies/UHD, desc: "Films 4K"}
- {id: 51, cat: Movies/UHD, desc: "Films 4K UHDTV"}
- {id: 51, cat: TV/UHD, desc: "Films 4K UHDTV"}
- {id: 57, cat: Movies/BluRay, desc: "Films BDRip"}
- {id: 56, cat: Movies/BluRay, desc: "Films Blu-Ray"}
- {id: 58, cat: Movies/BluRay, desc: "Films BRRip"}
- {id: 66, cat: Movies, desc: "Films CamTS"}
- {id: 59, cat: Movies/DVD, desc: "Films DVDR"}
- {id: 60, cat: Movies/DVD, desc: "Films DVDRip"}
- {id: 98, cat: Movies, desc: "Films Film Animées"}
- {id: 98, cat: TV/Anime, desc: "Films Film Animées"}
- {id: 65, cat: Movies, desc: "Films FSCR"}
- {id: 52, cat: Movies/HD, desc: "Films HD 720p"}
- {id: 53, cat: Movies/HD, desc: "Films HD1080p"}
@@ -124,7 +125,7 @@
options:
"desc": "desc"
"asc": "asc"
login:
method: cookie
inputs:
@@ -149,13 +150,17 @@
# http://crazyspirits.com/torrents-search.php?c101=1&c102=1&c103=1&c104=1&c105=1&c106=1&search=&cat=0&incldead=0&freeleech=0&lang=0
- path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 active 1 incldead 2 onlydead
incldead: 1
# 0 all 1 inclfree 2 onlyfree
freeleech: 0
# 0 all 1 french 2 english etc
lang: 0
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
# imdb search not supported and imdb links not in results.
rows:
selector: table.border_table > tbody > tr.t-row
@@ -192,13 +197,13 @@
attribute: onmouseover
filters:
- name: regexp
args: "Taille : </b>(.*?)<br"
args: "Taille : </b>(.*?)<br"
date:
selector: a[onmouseover][href^="torrents-details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: " Le : </b>(.*?)<br"
args: " Le : </b>(.*?)<br"
- name: dateparse
args: "02-01-2006"
downloadvolumefactor:
@@ -206,6 +211,5 @@
img[src="images/Torrents/free.png"]: 0
"*": 1
uploadvolumefactor:
case:
"*": 1
# TT3.0
text: 1
# 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"
@@ -100,15 +100,17 @@
search:
paths:
# http://www.crnaberza.com/browse.php?c52=1&c20=1&c34=1&incldead=1&search=star+trek
- path: browse.php
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
searchin: title
# 0 title 1 descr 2 both
blah: 0
# 0 active 1 incldead 2 onlydead
incldead: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# does not support searching imdbid and does not return imdb links
rows:
selector: tr:has(td.trowtorrent)

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
@@ -22,7 +22,7 @@
- {id: 38, cat: Movies/HD, desc: "HD-LQ"}
- {id: 3, cat: PC/Games, desc: "Hry"}
- {id: 2, cat: Audio, desc: "Hudba"}
- {id: 34, cat: Audio/Video, desc: "Hudba DVD/HD"}
- {id: 34, cat: Audio/Video, desc: "Hudební video"}
- {id: 6, cat: Books, desc: "Knihy"}
- {id: 13, cat: Console, desc: "Konzole"}
- {id: 32, cat: Audio, desc: "Mluvené slovo"}
@@ -30,7 +30,6 @@
- {id: 4, cat: Other, desc: "Ostatní"}
- {id: 25, cat: TV, desc: "Seriály"}
- {id: 29, cat: Audio, desc: "Soundtrack"}
- {id: 19, cat: Audio/Video, desc: "Videoklipy"}
- {id: 24, cat: XXX, desc: "xXx"}
modes:
@@ -74,12 +73,18 @@
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
s: "{{ .Keywords }}"
# 0 approved 1 all 2 not approved
t: 1
o: "{{ .Config.sort }}"
# does not support imdbid search and does not return imdb links
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:
selector: td.detaily a
@@ -89,17 +94,17 @@
- name: diacritics
args: replace
- name: replace
args: ["1080i", "1080p"]
args: ["1080i", "1080p"]
- name: replace
args: ["720i", "720p"]
args: ["720i", "720p"]
- name: replace
args: ["pLQ", "p"]
args: ["pLQ", "p"]
- name: replace
args: ["pHD", "p"]
args: ["pHD", "p"]
- name: replace
args: ["serie", ""]
args: ["serie", ""]
- name: replace
args: ["Serie", ""]
args: ["Serie", ""]
- name: re_replace
args: ["(\\d{2})\\.", "S$1"]
- name: re_replace
@@ -148,7 +153,7 @@
args: [ "|", 2 ]
- name: append
args: " +02:00"
- name: dateparse
- name: dateparse
args: "2.1.2006 15:04 -07:00"
seeders:
selector: td:nth-child(7) span

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

@@ -26,9 +26,9 @@
- {id: 8, cat: TV, desc: "TV shows"}
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
@@ -69,10 +69,14 @@
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# active 1 incldead 2 onlydead
incldead: 1
# 1 = look in description
Lysing: "{{ if .Query.IMDBID }}1{{else}}{{end}}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# does not return imdb links
rows:
selector: table[class="torrentlist"] > tbody > tr:has(a[href*="details.php?id="])

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"
@@ -12,7 +12,7 @@
categorymappings:
- {id: 60, cat: Movies/HD, desc: "MicroHD 720p"}
- {id: 77, cat: Movies/HD, desc: "MicroHD 1080p"}
- {id: 78, cat: Movies/HD, desc: "MicroHD 4k"}
- {id: 78, cat: Movies/HD, desc: "MicroHD 4K"}
- {id: 64, cat: TV/HD, desc: "Pack Series"}
- {id: 65, cat: TV/HD, desc: "Pack Series VOSE"}
- {id: 80, cat: Movies/BluRay, desc: "BDRip X265 1080p"}
@@ -43,13 +43,13 @@
- {id: 48, cat: Movies/BluRay, desc: "BR-Rip/HD-Rip"}
- {id: 17, cat: Movies/BluRay, desc: "BD-Rip"}
- {id: 5, cat: TV/Anime, desc: "Anime"}
- {id: 34, cat: PC/Games, desc: "Juegos Pc"}
- {id: 7, cat: PC/0day, desc: "Software Pc"}
- {id: 34, cat: PC/Games, desc: "Juegos PC"}
- {id: 7, cat: PC/0day, desc: "Software PC"}
- {id: 35, cat: Console, desc: "Juegos Sony"}
- {id: 36, cat: PC/Games, desc: "Juegos Microsoft"}
- {id: 37, cat: Console/NDS, desc: "Juegos Nintendo"}
- {id: 45, cat: Audio/MP3, desc: "Music MP3"}
- {id: 44, cat: Audio/Lossless, desc: "Music flac"}
- {id: 44, cat: Audio/Lossless, desc: "Music FLAC"}
modes:
search: [q]
@@ -84,7 +84,7 @@
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
method: cookie
inputs:
@@ -99,11 +99,14 @@
inputs:
page: "torrents"
category: "{{ range .Categories }}{{.}};{{end}}"
search: "{{ if .Keywords }}{{ .Keywords }}{{else}}{{end}}"
search: "{{ .Keywords }}"
# 0 all 1 activeonly 2 deadonly
active: 0
# 0 title 1 title&desc 2 descr 3 uploaders 5 gold 6 silver 9 2x 10 3x 11 4x
options: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
# does not support imdbid search and does not supply imdb link in results.
rows:
selector: table.table.table-bordered > tbody > tr:has(a[href^="download.php?id="])

View File

@@ -1,4 +1,4 @@
---
---
site: documentarytorrents
name: DocumentaryTorrents
description: "Documentary Torrents (DT) is a Private Torrent Tracker for E-LEARNING MOVIES / TV"
@@ -74,7 +74,8 @@
modes:
search: [q]
tv-search: [q, season, ep]
tv-search: [q]
movie-search: [q]
settings:
- name: username
@@ -88,7 +89,7 @@
label: Sort requested from site
default: "id"
options:
"is": "created"
"id": "created"
"seeders": "seeders"
"size": "size"
"name": "title"
@@ -125,11 +126,15 @@
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
cat: 0
# 0 active 1 incldead 2 onlydead
incldead: 1
# 0 all 1 notfree 2 onlyfree
freeleech: 0
# 0 all 1 english 2 french etc
lang: 0
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
# does not support imdbid search and does not return imdb link in results
rows:
selector: table.ttable_headinner tr.t-row

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,15 +192,19 @@
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 }}"
category: "{{ range .Categories }}{{.}};{{end}}"
# 0 title 1 title&descr 2 descr
options: 0
active: "{{ .Config.active }}"
gold: "{{ .Config.gold }}"
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
# does not support imdbid search and does not ruturn imdb link in results
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(td[onmouseover="this.className='post'"])
@@ -210,7 +216,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

@@ -1,4 +1,4 @@
---
---
site: erzsebet
name: Erzsebet
description: "Erzsebet is a RUSSIAN Semi-Private Torrent Tracker for 3X"

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:
@@ -81,11 +81,16 @@
search:
paths:
# http://estone.cc/letoltes.php?kereses_nev=wide&miben=0&cimke=&cat=0&submit.x=40&submit.y=9
- path: letoltes.php
method: get
inputs:
$raw: "{{ range .Categories }}kat[]={{.}}&{{end}}{{ .Config.sort }}={{ .Config.type }}"
kereses_nev: "{{ .Keywords }}"
# 0 name 1 performer 2 director
miben: 0
# genre
cimke: ""
# does not support imdbid search and does not return imdb link in results
rows:
selector: body > div[id^="torrent_"]

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

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

View File

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

View File

@@ -1,4 +1,4 @@
---
---
site: extremlymtorrents
name: ExtremlymTorrents
description: "ExtremlymTorrents is a Semi-Private tracker for MOVIES / TV / GENERAL"

View File

@@ -1,4 +1,4 @@
---
---
site: fanoin
name: FANO.IN
description: "Fano.in is a LATVIAN Private Torrent Tracker for 0DAY / GENERAL"

View File

@@ -1,4 +1,4 @@
---
---
site: feedurneed
name: FeedUrNeed
description: "FeedUrNeed (FuN) is a ratioless Private Torrent Tracker for MOVIES / TV"

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