Compare commits

...

611 Commits

Author SHA1 Message Date
kaso17
d071f19654 Owin: set HttpListener.IgnoreWriteExceptions = true 2017-01-25 18:40:40 +01:00
kaso17
88c865e8c9 dependency updates 2017-01-25 17:58:12 +01:00
kaso17
df340f8f84 x264: enable direct IMDB search 2017-01-25 17:48:40 +01:00
kaso17
0db80e9cc1 UHDBits: enable direct IMDB search 2017-01-25 17:00:03 +01:00
kaso17
3ea9bc7493 TorznabQuery: add ImdbIDShort 2017-01-25 16:59:36 +01:00
kaso17
290a51ff56 Add Isohunt tracker
Based on 53666ebe73
2017-01-25 15:43:38 +01:00
kaso17
3dddb02cb4 HD-torrents: fix typo 2017-01-25 14:17:38 +01:00
kaso17
c9b5710111 HD-Torrents: enable direct IMDB search and update cats 2017-01-25 14:10:28 +01:00
kaso17
0a292cf929 HD4Free: fix bannerurl and enable IMDB search 2017-01-25 13:44:55 +01:00
kaso17
22a8ee83bf Torrent411: add andmatch 2017-01-25 13:19:03 +01:00
kaso17
92c6ceb565 Superbits: Enable direct IMDB search 2017-01-25 12:17:58 +01:00
kaso17
de421f081f FileList: enable direct imdb search & fix description 2017-01-25 12:10:35 +01:00
kaso17
3553626bbf Ethor.net (Thor's Land): enable direct IMDB search 2017-01-25 10:59:15 +01:00
kaso17
2b200384df manual search: Add support for direct IMDB search 2017-01-25 10:58:49 +01:00
kaso17
a0dae306c1 Torznab: use GetFullImdbID() 2017-01-25 10:56:56 +01:00
kaso17
91a619e0f6 ParseUtil: add GetFullImdbID() 2017-01-25 10:56:33 +01:00
kaso17
27df6fbe02 Cardigann: add support for imdb movie-search 2017-01-25 10:56:06 +01:00
kaso17
4ca87d3871 EZTV: make size optional 2017-01-25 09:31:16 +01:00
kaso17
ef09d9828a Add 2 Fast 4 You tracker 2017-01-24 18:45:34 +01:00
kaso17
36e90f2fa0 WoP2P: remove ratio 2017-01-24 17:20:44 +01:00
kaso17
a1a685000b set encoding 2017-01-24 17:20:30 +01:00
kaso17
3e5f46f7d0 Add openSUSE to mono-locale-extras note 2017-01-24 17:07:59 +01:00
kaso17
7830b42641 Add EZTV/KickAssTorrent/The Pirate Bay/Torrent411 from cardigann 2017-01-24 16:57:38 +01:00
kaso17
3bbf8f4c35 Fix WorldOfP2P 2017-01-24 16:32:19 +01:00
kaso17
342b80e714 Add LimeTorrents tracker 2017-01-24 15:57:03 +01:00
kaso17
55b5064e28 DateTimeUtils: add support for today/yesterday/tomorrow without time 2017-01-24 15:49:36 +01:00
kaso17
9a3f113bf4 Cardigann: make trim args optional 2017-01-24 15:49:10 +01:00
kaso17
3b7a6ad038 Fix updater for update locations with spaces in the path 2017-01-24 14:04:03 +01:00
kaso17
dd6b284ed8 Cardigann: use correct encoding for query strings 2017-01-23 18:14:20 +01:00
kaso17
571a5a073e Update Sonarr/Radarr/CouchPotato instructions 2017-01-23 17:15:42 +01:00
kaso17
19a3078203 torznab movie-search: normalize imdbid 2017-01-23 16:16:13 +01:00
kaso17
6a3cb442e3 remove "only private trackers" note 2017-01-23 15:55:09 +01:00
flightlevel
9bc7e58f16 Update ISSUE_TEMPLATE.md 2017-01-21 17:08:47 +11:00
flightlevel
7e0c2fedae Create ISSUE_TEMPLATE.md (#974) 2017-01-21 16:56:30 +11:00
majorearnest
750f857fb7 Fix TV search for MoreThanTV (#970) 2017-01-21 16:39:12 +11:00
flightlevel
e7527ae786 Add Docker to readme (#973)
Fixes #537
2017-01-21 16:36:04 +11:00
flightlevel
7fa90289ef IMDB validation fix (#972)
Fixes #971
2017-01-21 14:17:54 +11:00
kaso17
120ac9f82c Add BlueBird tracker 2017-01-20 18:34:24 +01:00
kaso17
c0e3066f32 Hon3y HD: cleanup 2017-01-20 18:29:56 +01:00
kaso17
0e15673161 Add Hon3y HD 2017-01-20 18:07:50 +01:00
kaso17
9c971b0dab Add Dream Team tracker 2017-01-20 17:35:44 +01:00
kaso17
cc4337b588 EliteTracker: relogin if necessary 2017-01-20 14:25:17 +01:00
kaso17
073c23c177 Disable mono specific code 2017-01-20 14:03:03 +01:00
kaso17
daa96313ef Update apps list 2017-01-20 13:50:50 +01:00
kaso17
16ef8061a3 Add --NoRestart command line flag and pass pids to the updater (--KillPids) 2017-01-20 13:50:23 +01:00
kaso17
bbff25fd54 Delete JackettUpdate temp files 2017-01-19 15:03:44 +01:00
kaso17
f96a493c08 Cardigann: fix form login 2017-01-19 14:22:26 +01:00
kaso17
3d17b736c5 log environment details during startup 2017-01-19 14:19:18 +01:00
kaso17
3439654059 FunkTorrents: add MP3+Lossless mapping 2017-01-19 12:59:08 +01:00
kaso17
12c421b6db Add Magico tracker 2017-01-18 21:43:22 +01:00
kaso17
32725357a1 LinkoManija: fix cat 58 2017-01-18 21:42:16 +01:00
kaso17
c80b3f8590 Cardigann: add support for submitpath 2017-01-18 21:41:57 +01:00
kaso17
43381a9851 Cardigann: Add support for selector inputs 2017-01-18 21:17:45 +01:00
kaso17
08ef126c01 Add LinkoManija tracker 2017-01-18 19:59:35 +01:00
kaso17
173e8e83b8 Mononoké-BT: cleanup 2017-01-18 19:40:42 +01:00
kaso17
94bf9a146b Add Mononoké-BT tracker 2017-01-18 19:17:52 +01:00
kaso17
fb3065a919 Add PiXELHD tracker 2017-01-17 19:47:47 +01:00
kaso17
93e1022269 Superbits: remove dupe argument 2017-01-17 17:50:11 +01:00
kaso17
61a7bb4d10 Add Hardbay tracker 2017-01-17 17:49:43 +01:00
kaso17
cf4b3eb2c1 Add AOX tracker 2017-01-17 17:12:01 +01:00
kaso17
8e1b2feaec Cardigann: add prepend filter 2017-01-17 17:10:50 +01:00
kaso17
bba11aae9b Add GODS tracker 2017-01-17 16:05:57 +01:00
kaso17
d46fe3f3c7 Add eStone tracker 2017-01-17 15:01:39 +01:00
kaso17
ccf5112211 Cardigann: add support for filters on error messages 2017-01-17 15:00:59 +01:00
kaso17
208761f28c Bitspyder: add support for alternative style 2017-01-17 13:28:18 +01:00
kaso17
6972103891 Ethor.net (Thor's Land): use username/password/captcha login 2017-01-17 12:33:36 +01:00
kaso17
7c0d619f2f Cardigann: set referer on captcha request 2017-01-17 12:32:11 +01:00
kaso17
7bdbc4a025 IPTorrents: Don't set the Description 2017-01-17 08:32:44 +01:00
kaso17
b4e5009b2f IPTorrents: update categories 2017-01-17 08:28:36 +01:00
kaso17
77841cd4c4 IPTorrents: fix link selector 2017-01-17 08:19:25 +01:00
kaso17
df85d334a3 don't set publish_date if it's not available 2017-01-16 18:52:56 +01:00
kaso17
0846ea6a98 use ISO 8601 strict for publish_date and make it UTC 2017-01-16 18:45:18 +01:00
Devin Buhl
945f3f9c7f Add PublishDate to Potato feed for Radarr (#934) 2017-01-16 18:25:22 +01:00
kaso17
8b1381aba6 improve imdbid validation 2017-01-16 18:17:13 +01:00
kaso17
be74b3af7c AnimeBytes: fix warning 2017-01-16 18:14:41 +01:00
kaso17
ef7902b378 IPTorrents: add support for imdb search 2017-01-16 18:14:28 +01:00
kaso17
c2e3d0e225 Add imdbid validation 2017-01-16 18:08:02 +01:00
kaso17
0c02767d8f TorrentDay: enable IMDB search 2017-01-16 17:31:41 +01:00
kaso17
33c5ce86f7 TehConnection: enable IMDB search & fix BannerUrl 2017-01-16 17:30:31 +01:00
kaso17
1c9213e7f1 PassThePopcorn: enable IMDB search 2017-01-16 17:23:51 +01:00
kaso17
af1aa408c9 Add support for movie-search 2017-01-16 17:23:19 +01:00
kaso17
716fe0e6b6 Torznab: change content type for t=caps to xml only 2017-01-16 16:10:21 +01:00
kaso17
3a40e73d43 Abnormal: set encoding 2017-01-16 15:16:05 +01:00
kaso17
b6accb02dc DigitalHive: automatically re-login 2017-01-16 12:29:51 +01:00
kaso17
5599b05fb3 Cardigann: improve search URL handling 2017-01-16 12:25:16 +01:00
kaso17
54b14090dd Cardgainn: add support for login input field selectors 2017-01-16 12:24:45 +01:00
kaso17
ad921afe94 AnimeBytes: automatically re-login 2017-01-16 12:23:40 +01:00
kaso17
9b0a03d002 AnimeBytes: Fix DL links 2017-01-16 12:23:15 +01:00
kaso17
29d3930baa AnimeBytes: fix missing encodings 2017-01-16 12:15:18 +01:00
kaso17
29c1ee3cac update mono v3 note 2017-01-13 17:09:36 +01:00
kaso17
33aac7e602 Add WebAPIExceptionHandler 2017-01-13 17:00:02 +01:00
kaso17
331de4247b Bitspyder: use and filter 2017-01-13 13:30:48 +01:00
kaso17
9cecc38189 Rockhard Lossless: use and filter 2017-01-13 13:30:36 +01:00
kaso17
0965274184 Shellift: use and filter 2017-01-13 13:30:14 +01:00
kaso17
ef49f304de The Shinning: remove [TsH] prefix 2017-01-13 13:29:53 +01:00
kaso17
547a607dff Add Bitspyder tracker 2017-01-12 19:13:36 +01:00
kaso17
486760a211 Rockhard Lossless: improve login error handling 2017-01-12 18:36:19 +01:00
kaso17
97a4cd6a1f Add Rockhard Lossless tracker 2017-01-12 18:32:33 +01:00
kaso17
7cb48969be Nachtwerk: fix cats 2017-01-12 18:11:17 +01:00
kaso17
c3d2659b7f Add Nachtwerk tracker 2017-01-12 17:22:34 +01:00
kaso17
9689ea7881 Cardigann: add support for redirects on download selector 2017-01-12 17:18:50 +01:00
kaso17
cba4fe074f Fix New Real World order 2017-01-12 15:31:53 +01:00
kaso17
821e796678 Add Hyperay tracker 2017-01-12 15:31:07 +01:00
kaso17
582784c547 Superbits: cleanup 2017-01-12 13:37:14 +01:00
kaso17
538c455c6a IPTorrents: Add category 65 2017-01-12 13:36:31 +01:00
kaso17
82eaa15537 Add Infinity-T tracker 2017-01-12 12:18:22 +01:00
kaso17
0e7ce1d38d Add Freedom-HD tracker 2017-01-11 18:59:11 +01:00
kaso17
106ce8aa58 Shellife: fix login error selector 2017-01-11 18:24:49 +01:00
kaso17
2baf645351 Add Shellife tracker 2017-01-11 18:17:40 +01:00
kaso17
d9d935c267 Cardigann: add support for append modifier and trim early 2017-01-11 18:16:25 +01:00
kaso17
ef3dfad4aa BeyondHD: add leading/tailing wildcard to search 2017-01-11 17:07:06 +01:00
kaso17
6d275244ef Revert "BeyondHD: strip and filter for specific keywords later"
This reverts commit 40978fbce1.
2017-01-11 17:04:47 +01:00
kaso17
7a25d94b95 Set encoding for omdbapi calls 2017-01-11 14:48:50 +01:00
kaso17
81c9828e4c Add ShareSpaceDB tracker 2017-01-10 19:06:47 +01:00
kaso17
23b0378d2a Revert "Remove Tspate"
This reverts commit ecf295873f.
2017-01-10 18:55:10 +01:00
kaso17
dd029db392 Add FunkyTorrents tracker 2017-01-10 18:52:13 +01:00
kaso17
40978fbce1 BeyondHD: strip and filter for specific keywords later 2017-01-10 17:54:45 +01:00
kaso17
2cc451ebef Shareisland: fix categories and use url encoded wildcard 2017-01-10 16:58:45 +01:00
kaso17
2f6e1e29b1 nCore: set DL/UL factors 2017-01-10 16:18:10 +01:00
kaso17
99c0de285e Revert "Remove nostream"
This reverts commit 1215548b31.
2017-01-09 13:47:53 +01:00
Ashleigh Hopkins
d9afee215d Add support for gzip'd content (affects an IPTorrents alt URL) (#1) (#920) 2017-01-09 13:12:31 +01:00
kaso17
dc8f85d33d Add Superbits tracker 2017-01-06 19:04:46 +01:00
kaso17
1134ef71da Cardigann: add support for GET login 2017-01-06 19:04:26 +01:00
kaso17
c9e5f14687 Add Torrenting tracker 2017-01-06 17:07:52 +01:00
kaso17
dbe7561642 BeyondHD: replace special characters with wildcards 2017-01-06 16:09:22 +01:00
kaso17
9fcb16e535 Remove Freaks Tracking System 2017-01-06 15:17:47 +01:00
kaso17
1215548b31 Remove nostream 2017-01-06 15:16:30 +01:00
kaso17
ecf295873f Remove Tspate 2017-01-06 15:15:07 +01:00
kaso17
8dcc2aedc9 Cardigann: improve resolvePath usage 2017-01-06 15:05:51 +01:00
kaso17
08b3ba0f02 Elite Tracker: Add support for releases without tooltip and guess time for releases with PRE time 2017-01-06 13:30:21 +01:00
kaso17
f587ae3084 Cardigann: add optional field modifier 2017-01-05 19:15:39 +01:00
kaso17
58206b0d33 Add BitHUmen tracker 2017-01-05 19:14:41 +01:00
kaso17
8e5538a11e Avoid concurrent config file writes 2017-01-05 18:08:10 +01:00
kaso17
175bea9269 Automatically load the backup config if the primary one is corrupted 2017-01-05 18:05:14 +01:00
kaso17
33cbc71817 Add RuTracker 2017-01-05 17:36:49 +01:00
kaso17
f7014f4ca2 Add RuTracker 2017-01-05 17:36:36 +01:00
kaso17
874e14018e Add RuTracker 2017-01-05 17:36:05 +01:00
kaso17
922c08da19 Add support for empty captcha images 2017-01-05 17:31:52 +01:00
adamwinn
5fe89a85e9 tenyardtracker: minor changes (#827)
* minor changes for tenyardtracker
2017-01-04 16:20:52 +01:00
kaso17
0bcf922f37 Elite Tracker: improve search 2017-01-04 15:09:58 +01:00
Tentacule
eb485bfa60 Implement Elite-Tracker (#911)
Fixes #782
2017-01-04 12:35:49 +01:00
kaso17
74d0e022ae 7tor: add category mapping 2017-01-04 12:21:43 +01:00
kaso17
0a8675ea7c Add 7tor tracker 2017-01-03 19:01:05 +01:00
kaso17
eed8cb70a3 GFTracker: fix and improve search 2017-01-03 16:09:07 +01:00
kaso17
e476233f07 HttpWebClient: add support for Referrer 2017-01-03 15:04:49 +01:00
kaso17
b8d40b5259 Add M-Team - TP tracker 2017-01-03 14:54:36 +01:00
kaso17
a399e8d0a5 Demonoid: add more detailed audio category mapping 2017-01-03 14:01:11 +01:00
kaso17
db049b2478 Add HDSky tracker 2017-01-03 13:21:07 +01:00
kaso17
03ab411d68 Cardigann: make download method configurable 2017-01-03 13:19:23 +01:00
kaso17
20b9b692f0 x264: upgrade to recaptcha V2 2017-01-02 21:45:15 +01:00
kaso17
f99e104755 Make site link configurable for all indexers 2017-01-02 21:39:28 +01:00
kaso17
8a9648d347 Demonoid: improve search results 2017-01-02 16:27:56 +01:00
kaso17
3ca760145c Torrentech: Add support for AAC category mapping 2017-01-02 15:46:09 +01:00
kaso17
3cf09f5b0f TVChaos UK: Fix and improve search 2017-01-02 15:45:01 +01:00
kaso17
657bb15282 CleanTitle: remove brackets 2016-12-30 17:12:32 +01:00
kaso17
069c64f504 TorrentBD: fix comments field 2016-12-30 16:39:48 +01:00
kaso17
65c1aed251 Add CHBits tracker 2016-12-30 15:20:11 +01:00
kaso17
e8e4289b20 Hounddawgs: fix category handling 2016-12-30 14:10:33 +01:00
Frederik Nielsen
0838a0b258 Add movie categories to HoundDawgs (#902) 2016-12-30 13:50:04 +01:00
kaso17
8e8f143b02 Torrentech: Add compatibility for all themes 2016-12-30 13:39:56 +01:00
kaso17
2e56f662cd Shareisland: fix date parsing 2016-12-29 19:56:52 +01:00
kaso17
440d59a30e Add Torrentech indexer 2016-12-29 19:56:35 +01:00
kaso17
286ef8396a Make FuzzyTime date format selectable 2016-12-29 19:56:18 +01:00
kaso17
772df7a4c1 x264: no longer have to set PublishDate 2016-12-29 15:54:27 +01:00
kaso17
134fd3f4cf Torznap feed: always set pubDate 2016-12-29 15:51:08 +01:00
kaso17
ae8f8f7ccd BitHQ: fix definition 2016-12-29 15:47:39 +01:00
kaso17
f8637051fa PotatoController: set freeleech correctly 2016-12-29 15:47:16 +01:00
kaso17
eb0e82494c Add BitHQ tracker 2016-12-29 15:31:12 +01:00
kaso17
265b949de9 SceneFZ: Fix category parsing for parent categories 2016-12-29 14:39:48 +01:00
kaso17
34acbed7f0 Bit-City Reloaded: cleanup 2016-12-29 12:47:58 +01:00
kaso17
42eb68ba76 Bit-City Reloaded: fix category mapping 2016-12-29 12:39:42 +01:00
kaso17
37591c6da6 MySpleen: add global freeleech check 2016-12-29 12:35:05 +01:00
kaso17
f5a8ad61b9 FANO/New Retro/Secret Cinema/Shareisland/Horror Charnel/Shinning/TSpate/WorldOfP2P: use andmatch filter 2016-12-29 12:21:46 +01:00
kaso17
e064fd8ccd Add support for andmatch Rows filter 2016-12-29 12:19:49 +01:00
kaso17
8a9949ac93 MatchQueryStringAND: add support for character limit 2016-12-29 12:19:25 +01:00
kaso17
40dde036d6 Torrent Syndikat: remove articles from search 2016-12-29 12:15:17 +01:00
kaso17
171205bdee TorrentLeech: Update categories 2016-12-29 12:14:35 +01:00
kaso17
03e0c6d67e TorrentLeech: use AND filter 2016-12-29 12:01:42 +01:00
kaso17
91500c95e6 Secret Cinema: Exclude Secret Pills from search results 2016-12-29 11:36:57 +01:00
kaso17
8a082b0668 Remove FunFile definition (use C# implementation) 2016-12-29 11:07:45 +01:00
kaso17
650b6986f9 TranceTraffic: fix selector for single page search results 2016-12-28 06:56:23 +01:00
kaso17
82fd53226c Add TranceTraffic tracker 2016-12-27 19:13:01 +01:00
kaso17
77fd3e206b Cardigann: improve exception readability 2016-12-27 19:07:32 +01:00
kaso17
3989f35827 Cardigann: Don't use any default cats 2016-12-27 19:06:37 +01:00
kaso17
82376a508a RapideTracker: add details link 2016-12-27 17:09:05 +01:00
kaso17
4f9ce14e2f TorrentSyndikat: use long title 2016-12-26 15:52:26 +01:00
kaso17
60a2ffbe41 TorrentSyndikat: Add global freeleech check 2016-12-26 15:50:08 +01:00
kaso17
15598e3d66 Andraste: Add global freeleech check 2016-12-24 13:12:36 +01:00
kaso17
357be7dda9 HDClub: fix links+login 2016-12-24 08:17:27 +01:00
kaso17
a0aa77519b Add HDClub tracker 2016-12-23 17:35:30 +01:00
kaso17
f3ef590d3f Cardigann: Add support for image captchas 2016-12-23 17:18:37 +01:00
kaso17
d347ea71b8 Abnormal: attempt to fix parsing 2016-12-23 14:57:00 +01:00
kaso17
62f0bdc19c Add RapideTracker tracker 2016-12-23 14:56:31 +01:00
kaso17
e92b925eab Add FANO.IN tracker 2016-12-21 18:18:25 +01:00
kaso17
e8239f4899 IPTorrents: use encoding during login 2016-12-21 17:32:24 +01:00
kaso17
5c855d3b50 HD-Torrents: Allow alternative URLs 2016-12-20 19:45:57 +01:00
kaso17
6dfaff6aad Torrent.Md: remove description 2016-12-20 19:44:24 +01:00
kaso17
849b9e9765 Add Torrents.Md tracker 2016-12-20 19:43:08 +01:00
kaso17
eacfd53466 Add u-Torrent tracker 2016-12-20 13:20:12 +01:00
kaso17
4459697fe5 Cardigann: Don't use empty banner URLs 2016-12-20 13:18:48 +01:00
kaso17
94872affa9 Add DataScene tracker 2016-12-20 12:39:57 +01:00
kaso17
a29064e7fb Add imdb/banner/description to cached results view 2016-12-20 12:07:43 +01:00
kaso17
679cba4297 Avoid line wraps in the size column 2016-12-20 12:05:53 +01:00
kaso17
f155a21ee8 Add banner/description tooltip 2016-12-20 11:50:04 +01:00
kaso17
0913ee4934 Xtreme Zone: add banner 2016-12-20 11:48:53 +01:00
kaso17
1fa0384eb8 Add IMDB label 2016-12-20 10:01:53 +01:00
kaso17
59727fe8fc Xtreme Zone: Fix description 2016-12-20 09:40:08 +01:00
kaso17
28707fa146 ICE Torrent: fix seedersm, leechers, description imdb and add banner 2016-12-20 09:39:53 +01:00
kaso17
f408abe7a4 Cardigann: Add support for minimumratio/minimumseedtime/rageid/tvdbid/banner fields 2016-12-20 09:38:01 +01:00
kaso17
42434c35a1 Add Xtreme Zone tracker 2016-12-19 20:57:38 +01:00
kaso17
df941c54ce IPTorrents: change default URL 2016-12-19 20:25:18 +01:00
kaso17
f2eb4dacd0 ICE Torrent: Fix timezone and add details link 2016-12-19 20:24:58 +01:00
kaso17
9795587e4d Add ICE Torrent tracker 2016-12-19 19:51:54 +01:00
kaso17
15064810f8 Add TorViet tracker 2016-12-18 15:32:46 +01:00
kaso17
fbfee66c7b Shareisland: replace special characters with wildcards 2016-12-18 12:21:53 +01:00
kaso17
53e2d9e9cd Cardigann: Add support for re_replace template function
Example: {{ re_replace .Query.Keywords "[^a-zA-Z0-9]+" "%" }}
2016-12-18 12:20:33 +01:00
kaso17
49fd078a4c Add nostream tracker 2016-12-18 11:46:29 +01:00
kaso17
3dfba7c204 Add notwhat.cd tracker 2016-12-18 11:36:11 +01:00
kaso17
0e59621650 Add QcTorrent tracker 2016-12-17 17:33:34 +01:00
kaso17
c2f4cc97ab Add PassTheHeadphones tracker 2016-12-17 16:49:52 +01:00
kaso17
5fc7fca5c6 CategoryMapping: Add support for the tracker category description 2016-12-17 16:42:50 +01:00
kaso17
7b2dd93f2f TVChaosUK: relogin if necessary 2016-12-17 13:57:40 +01:00
kaso17
a8ddf21081 TVChaosUK: test RSS and scrape search 2016-12-17 13:39:52 +01:00
kaso17
7db50dba49 AlphaReign: Fix category selectors 2016-12-17 13:32:54 +01:00
kaso17
9d30f833da TorrentLeech: Fix date selector 2016-12-17 13:24:57 +01:00
kaso17
bf959f1c29 Apollo: Add uppercase global freeleech selector 2016-12-15 09:52:03 +01:00
kaso17
1cde5c5142 Add Gormogon tracker 2016-12-15 09:32:11 +01:00
kaso17
58a7de145a Cardigann: Add support for non-direct download links 2016-12-15 09:12:28 +01:00
kaso17
9a66289a26 Add more debug output on Download error 2016-12-15 06:56:41 +01:00
kaso17
6201712ce9 HD Torrents: add support for NO RATIO label 2016-12-14 08:55:05 +01:00
kaso17
f921df948c House of Torrents: reset cookies on login 2016-12-14 08:45:40 +01:00
kaso17
059701fbf6 Cardigann: fix re-login caching issue for login method=form indexers 2016-12-14 08:44:56 +01:00
kaso17
addf98e9a3 TorrentDay: change default url back to torrentday.it 2016-12-12 08:34:06 +01:00
kaso17
f124b7e30b TorrentLeech: avoid unnecessary login checks 2016-12-12 08:24:18 +01:00
kaso17
0fc2a3083c TorrentLeech: Fix login parameters/error parsing 2016-12-12 08:16:46 +01:00
kaso17
01141b8cc1 NetHD: fix rows selector 2016-12-12 07:34:03 +01:00
kaso17
be542272d1 BitMeTV: include dead torrents 2016-12-12 07:21:30 +01:00
kaso17
2c4f18128a TorrentLeech: fix relogin detection 2016-12-12 06:48:55 +01:00
kaso17
adbd6c9d0d TorrentLeech: fix DL link 2016-12-11 16:41:02 +01:00
kaso17
a854771950 TorrentLeech: adjust to new design 2016-12-11 16:36:48 +01:00
kaso17
b4fafe2845 bB: normalize spaces in title 2016-12-11 16:12:47 +01:00
kaso17
1050157546 Curl: Fix Bad Request errors 2016-12-11 15:43:39 +01:00
kaso17
6f54958ec0 The Horror Charnel: fix rows selector 2016-12-11 06:18:32 +01:00
kaso17
a53fc1e8cb IWebClient: minor cleanup 2016-12-11 05:57:39 +01:00
kaso17
e0e81ff52b TorrentDay: update to latest URLs/redirect scheme 2016-12-11 05:50:08 +01:00
kaso17
4f86272074 IWebClient: log redirect target 2016-12-11 05:48:43 +01:00
kaso17
d909d0cb60 Norbits: fix language 2016-12-11 05:21:32 +01:00
kaso17
6a18ec23b2 ToTheGloy: fix categories and add IMDB 2016-12-11 05:17:34 +01:00
kaso17
c40c176b72 PreToMe: automatic re-login is necessary 2016-12-10 22:32:41 +01:00
kaso17
55f2951694 House Of Torrents: automatic re-login is necessary 2016-12-10 22:32:31 +01:00
kaso17
5b641a5efc AlphaRatio: automatic re-login is necessary 2016-12-10 22:32:17 +01:00
kaso17
d259f3df0d bB: Add quality to title 2016-12-10 21:32:06 +01:00
kaso17
2ad44cd79b TorrentDay: Add error message on invalid cookies 2016-12-10 18:39:20 +01:00
kaso17
2ffdc1678b Make Cardigann indexers deletable 2016-12-10 18:20:04 +01:00
kaso17
db4717b714 XSpeeds: Login again only if it's necessary 2016-12-10 18:01:45 +01:00
kaso17
6d26fb8f43 LoadValuesFromJson: allow null as input 2016-12-10 17:53:41 +01:00
kaso17
ca2b4110bb Curl: Fix cloudflare challenges 2016-12-10 15:01:35 +01:00
kaso17
606e629cc6 Add ToTheGlory tracker 2016-12-10 13:49:39 +01:00
kaso17
0fd925e945 CurlHelper: FailOnError 2016-12-10 12:54:14 +01:00
kaso17
c3033db8fb Cardigann: cleanup 2016-12-10 11:56:58 +01:00
kaso17
e312a4da09 Curl: add support for request headers 2016-12-10 11:56:23 +01:00
kaso17
467eb453db IWebClient: disable warning 2016-12-10 11:17:56 +01:00
kaso17
7c0e22258a Cardigann: Add support for form login with enctype=multipart/form-data 2016-12-10 11:17:21 +01:00
kaso17
bfdc5043eb JackettUpdater: create missing directories and remove legacy files 2016-12-10 10:48:24 +01:00
kaso17
c2520c86d7 Fix CloudFlare challenges for mono/libcurl 2016-12-10 10:36:42 +01:00
kaso17
fb41b2a543 Fix indexer main categories 2016-12-09 18:31:41 +01:00
kaso17
384c76e27d Add missing languages/encodings 2016-12-09 18:20:58 +01:00
kaso17
eaf84e201f Attempt to fix #820 2016-12-09 17:45:37 +01:00
kaso17
9862ca408a Update PassThePopcorn URLs and encoding 2016-12-09 17:17:19 +01:00
kaso17
fbc48848d6 Add total configured/unconfigured indexers counters (#830) 2016-12-09 17:12:09 +01:00
kaso17
894688337e Add MySpleen tracker (#829) 2016-12-09 17:01:01 +01:00
kaso17
bae4752cad Update README.md 2016-12-09 16:26:21 +01:00
kaso17
58987e3e38 Add NetHD tracker (#828) 2016-12-09 16:21:56 +01:00
kaso17
e63d98acfc SceneFZ: fix and improve search (#825) 2016-12-08 09:47:47 +01:00
kaso17
c44385e9b7 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2016-12-08 07:31:40 +01:00
kaso17
0dd2dcf497 MTV: Fix size 2016-12-08 07:31:31 +01:00
adamwinn
8f8a1af9d9 Add tenyardtracker (#824) 2016-12-08 06:38:18 +01:00
kaso17
369640b464 Add Norbits tracker (#819) 2016-12-06 18:39:21 +01:00
kaso17
a908cec280 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2016-12-06 18:25:32 +01:00
kaso17
aab478e378 XSpeeds: test RSS and search 2016-12-06 18:25:21 +01:00
kaso17
67bf46ccb6 TorznabQuery: add IsTest flag 2016-12-06 18:24:40 +01:00
kaso17
36ccdd287c BIT-HDTV: Fix and improve search (#817) 2016-12-06 15:19:23 +01:00
kaso17
d499c291b9 WebRequest: make encoding configurable (#816) 2016-12-06 14:56:47 +01:00
kaso17
7835da2ea8 Indexer Download: UrlEncode some special chars 2016-12-06 11:13:18 +01:00
kaso17
2b77ca4322 Allow ', [ and ] in search queries 2016-12-06 11:09:10 +01:00
kaso17
d801808270 HD-Torrents: fix and improve search (#815) 2016-12-06 09:52:40 +01:00
kaso17
3f629ba7d2 automatically decode CloudFlare protected emails 2016-12-06 09:40:38 +01:00
kaso17
e34ffcbaa6 WebResult: Add support for headers 2016-12-06 09:39:32 +01:00
kaso17
047bdda088 Allow @ in search 2016-12-06 09:04:40 +01:00
kaso17
777f357cec update screenshot 2016-12-05 18:43:04 +01:00
kaso17
599d1c9c91 Fix Test 2016-12-05 18:25:56 +01:00
kaso17
37dae02a1b Add search buttons for indexers (#812) 2016-12-05 18:20:56 +01:00
kaso17
441023a336 Add Secret Cinema tracker (#811) 2016-12-05 18:01:11 +01:00
kaso17
56d7d42836 TorrentLeech: include 0day and music (#809) 2016-12-05 15:31:17 +01:00
kaso17
59b90d3896 Add SDBits tracker (#807) 2016-12-05 15:14:16 +01:00
kaso17
4283ea5e67 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2016-12-05 15:09:46 +01:00
kaso17
32fa8cf5fd Cardigann: Add support for IMDB 2016-12-05 15:09:43 +01:00
kaso17
412df7c6f6 Sort indexers once all are loaded 2016-12-05 13:03:30 +01:00
kaso17
e275ebba87 UHDBits: genre tags have been removed (#805) 2016-12-05 12:44:49 +01:00
kaso17
c38a2533e1 replace card view with list view (#803) 2016-12-05 12:32:26 +01:00
kaso17
bb6f56bfa6 Add LastError to indexer API (#802) 2016-12-05 11:43:07 +01:00
kaso17
82ae611c81 Cardigann: Fix relogin for method=form (#800) 2016-12-04 20:58:50 +01:00
kaso17
64e537e77d Cardigann: no login needed if there's no login definition (#799) 2016-12-04 20:49:07 +01:00
kaso17
245855c2ab DanishBits: Fix DL link (#798) 2016-12-04 20:37:36 +01:00
kaso17
186136cc86 MyAnonamouse: fix and improve search (#797) 2016-12-04 20:15:01 +01:00
kaso17
0295bc68ab TehConnection: Add new attributes 2016-12-03 19:14:45 +01:00
kaso17
9da7866321 TehConnection: Use release link for details 2016-12-03 19:14:45 +01:00
kaso17
9930430026 TehConnection: Generate title for releases without scene title 2016-12-03 19:14:45 +01:00
kaso17
e56ff204f8 Add language field to indexers (#788) 2016-12-02 18:58:10 +01:00
savahu
6a3374ea86 Corrected ordering of supported trackers (#787) 2016-12-02 18:32:25 +01:00
kaso17
c134e72979 DanishBits: Add new attributes 2016-12-02 14:43:29 +01:00
kaso17
d84bd074c0 Apollo: Add support for global freeleech (#785) 2016-12-02 13:29:45 +01:00
kaso17
51b4326920 Cardigann: Add support for :root pseudo selector 2016-12-02 13:05:00 +01:00
kaso17
253bda68e9 Apollo: Update URL 2016-12-01 08:14:29 +01:00
kaso17
7fa558c743 SceneAccess: Fix login (#776) 2016-12-01 08:02:33 +01:00
kaso17
b01bf3e669 x264: Use now as PublishDate (#775) 2016-12-01 07:49:12 +01:00
kaso17
dd4eaed4fa BeyondHD: Use Login Link (#772) 2016-11-30 18:33:09 +01:00
kaso17
ac4787e292 Fix typo 2016-11-30 06:50:23 +01:00
kaso17
88002d4b53 Add TorrentBD tracker 2016-11-29 19:35:49 +01:00
kaso17
f30ba7fd59 Cardigann: Add basic support for ReCaptcha V2 (#769) 2016-11-29 19:32:50 +01:00
kaso17
470b212f32 Add The Shinning tracker (#767) 2016-11-29 14:20:23 +01:00
kaso17
3ab45960da Add Freaks Tracking System tracker (#762) 2016-11-28 19:41:57 +01:00
kaso17
870c0592fe Cardigann: Make encoding configurable 2016-11-28 19:31:12 +01:00
kaso17
da2a252848 FileList: fix download link and some more improvements (#760) 2016-11-28 16:03:22 +01:00
kaso17
88f73f185c UHDBits: Add details URL (#759) 2016-11-28 08:51:01 +01:00
kaso17
d3cef38f15 Cardigann: Prefere details over comments URL (#758) 2016-11-28 08:50:08 +01:00
kaso17
5292e8f342 IPTorrents: Add TV/x265 category (#757) 2016-11-28 08:28:37 +01:00
kaso17
ef637792c8 Add Blu-bits tracker (#749) 2016-11-27 19:07:33 +01:00
kaso17
09a2e8c084 Add support for parsing "now" time strings (#748) 2016-11-27 15:39:40 +01:00
kaso17
d3161823ad Add Apollo/XANAX tracker (#747)
* AlphaReign: add login test selector

* Add Apollo/XANAX tacker

* Add Apollo/XANAX tracker

* fix readme
2016-11-27 15:22:05 +01:00
kaso17
289844099c AlphaReign: add login test selector 2016-11-26 18:12:15 +01:00
kaso17
98a916b4c1 Cardigann: login again if necessary (#744) 2016-11-26 18:00:53 +01:00
kaso17
69ff142596 ImmortalSeed & FunFile: login again if necessary (#743) 2016-11-26 17:21:50 +01:00
kaso17
80fd717970 XSpeeds: dump feed in case of error (#742) 2016-11-26 16:57:49 +01:00
kaso17
ab083cdec8 CurlHelper: Add NotImplemented/InternalServerError debugging (#730) 2016-11-24 09:17:24 +01:00
kaso17
e16454f30c Add AlphaReign tracker (#729) 2016-11-24 08:40:49 +01:00
kaso17
23c13969ae Cardigann enhancements (#728)
* Cardigann: Use GET for landing site request

* Cardigann: Add support for magnet links
2016-11-24 08:31:39 +01:00
kaso17
dcc3f2df63 Add Ethor tracker (#726) 2016-11-23 10:19:38 +01:00
kaso17
10f7f83ecf Add EoT-Forum tracker (#723) 2016-11-21 19:07:09 +01:00
kaso17
b5e6eac3e3 Cardigann: Add support for DateHeaders (#722) 2016-11-21 18:48:36 +01:00
kaso17
9df337c3c2 Add Tspate tracker (#720) 2016-11-21 17:10:53 +01:00
flightlevel
d2f0e5ada7 MoreThanTv: Fix Times (#719)
Times are UTC, convert to local time
2016-11-21 19:46:53 +11:00
kaso17
d3aa897b1a Torrent Sector Crew: Fix rows selector for people with "Empfohlene Torrents in der Liste anzeigen" disabled. (#718) 2016-11-21 09:24:15 +01:00
kaso17
0abcf401bb Add UHDBits to README (#715) 2016-11-20 13:58:29 +01:00
kaso17
560d257f5b Remove BlueTigers tracker (#714)
https://twitter.com/hashtag/bluetigers
2016-11-20 13:50:57 +01:00
kaso17
1a619e698a Update readme (#713) 2016-11-20 13:22:59 +01:00
kaso17
52aea3de5a Add The Horror Charnel tracker (#712) 2016-11-20 13:09:25 +01:00
kaso17
8fa1268de2 Cardigann: Add support for After rows selector (#711) 2016-11-20 12:49:56 +01:00
kaso17
5a4c1282ef Cardigann: automatically solve simpleCaptchas (#710) 2016-11-20 11:24:29 +01:00
kaso17
3aecc53b5f Hebits: set comments Url (#709) 2016-11-20 10:22:17 +01:00
kaso17
328f652e1b Cardigann: make sure GUID get's set (#708) 2016-11-20 10:15:48 +01:00
kaso17
52a56f5088 TSC: fix ratio (#704) 2016-11-19 13:22:38 +01:00
kaso17
5e4c64bf68 TSC: Add ratio support (#703) 2016-11-19 13:18:22 +01:00
kaso17
930e9db67a Add Torrent Sector Crew tracker (#702) 2016-11-19 12:57:13 +01:00
kaso17
27627aa79e Cardigann: Implement form based login (#701) 2016-11-19 12:46:31 +01:00
kaso17
ddb94e3f92 ParseDateTimeGoLang: normalize spaces first (#700) 2016-11-19 12:39:22 +01:00
kaso17
f1f5b7028d Add TV-Vault tracker (#698) 2016-11-19 11:33:00 +01:00
kaso17
90959c1fc3 Best Friends: Fix parsing for users with waiting time (#696) 2016-11-17 18:57:34 +01:00
kaso17
3f79aa62d9 TorrentHeaven: Make captcha optional and fix login detection (#693) 2016-11-17 07:06:47 +01:00
kaso17
cd1d30fc4f TorrentHeaven: Use long title (#688) 2016-11-16 09:05:23 +01:00
kaso17
3093651f89 The New Retro: fix date parsing (#687) 2016-11-16 08:51:27 +01:00
kaso17
d969305cbe Cardigann: Add support for timeparse/dateparse filters (#686) 2016-11-16 08:45:32 +01:00
kaso17
22119dab16 Add The New Retro tracker (#685) 2016-11-15 19:37:13 +01:00
kaso17
23958ffba7 bB: add new attributes and login again if necessary (#684) 2016-11-15 17:50:22 +01:00
kaso17
d9673501fc Add HD4Free tracker (#683) 2016-11-15 09:17:55 +01:00
kaso17
f9341818da Merge branch 'master' of https://github.com/Jackett/Jackett.git 2016-11-15 08:32:56 +01:00
kaso17
22ab8aca3d DateTimeUtil: Improve FromUnknown parsing 2016-11-15 08:32:40 +01:00
kaso17
dd79de1321 IPTorrents: Add ipt-update.com as alternative and make it the default (#682)
* IPTorrents: Add iptorrents.eu alternative

* Add ipt-update.com as alternative and make it the default

* Add ipt-update.com as alternative and make it the default
2016-11-14 08:34:06 +01:00
kaso17
d8035d4245 UHDBits: add tab filter for URLs 2016-11-14 08:29:30 +01:00
kaso17
4642fa4da0 IPTorrents: Add iptorrents.eu alternative (#678) 2016-11-13 10:23:42 +01:00
kaso17
58ee30aa99 Fix Cardigann definition loading if HOME is not set (#673) 2016-11-10 18:24:35 +01:00
kaso17
5922795587 Fix NULL check for #668 (#672) 2016-11-10 09:16:00 +01:00
kaso17
5eccf08690 IIndexerManagerService: fix typo (#671) 2016-11-10 09:10:16 +01:00
kaso17
037d907028 Make the config saving process more robust (#670) 2016-11-10 09:06:35 +01:00
kaso17
7cfdaf4b41 Make cookie merging more robust (#669) 2016-11-10 08:37:52 +01:00
kaso17
e7918bddbc Add Windows support for the IgnoreSslErrors option (#594) 2016-11-09 18:26:32 +01:00
kaso17
6b253178b6 Transmitthe.Net: add support for new attributes (files/grabs/down-/up-loadvolumefactor) (#665) 2016-11-09 08:58:17 +01:00
kaso17
87448eea31 GetBytes(): add support for TB and default to bytes (#666)
* Default to Bytes if there's no unit

* GetBytes(): add support for TB
2016-11-09 08:57:59 +01:00
kaso17
5e2fa1408e AnimeTorrents: Fix DL link for newbie users (#657) 2016-11-08 06:59:47 +01:00
kaso17
809362e08c Dump DL response if there's an error (#653) 2016-11-06 18:14:15 +01:00
kaso17
c8831b157e TorrentBytes: Login again if the cookies became invalid (#651) 2016-11-06 17:41:22 +01:00
kaso17
2198aebf73 Demonoid: Fix login (#648) 2016-11-05 20:05:45 +01:00
kaso17
f3f8c2aea5 AnimeTorrents: Skip releases which newbie user's can't download yet (#647) 2016-11-05 19:33:44 +01:00
kaso17
83c231749d IPTorrents: Add support for optional captcha (#645) 2016-11-05 19:25:38 +01:00
kaso17
79f3b96c1d XSpeeds: Fix empty search results (#646) 2016-11-05 19:22:32 +01:00
darknessgp
fb1c016704 Comicbooks id is now 7 at Bb. (#640)
Changes the comic book id to use category id 7 to match Bb site.
2016-11-05 18:51:21 +01:00
d2dyno
a3febf8b85 Detailed Windows install help (#642)
Add more detailed instructions for installing on Windows
2016-11-05 18:50:51 +01:00
kaso17
254cec98ad Update XSpeeds categories (#639) 2016-11-04 18:59:58 +01:00
kaso17
9a2ae6aa24 Add missing animetorrents logo (#638) 2016-11-04 18:36:33 +01:00
kaso17
840037aa7f Don't try to unistall service if it isn't installed (#637) 2016-11-04 18:31:19 +01:00
kaso17
dd24f12eac Fix TorrentDay categories (#636) 2016-11-04 18:26:58 +01:00
Jay Otterbein
d1e767bd41 Added method in ParseUtil that strips out every invalid XML character from a string.
Added test for ParseUtil.RemoveInvalidXmlChars() using a snippet of rss from XSeeds that was originally causing problems.
2016-11-04 18:26:39 +01:00
Jay Otterbein
72d3f2ea49 normalized line endings and removed unused usings 2016-11-04 18:26:39 +01:00
Jay Otterbein
5e8e620df9 Code cleanup without changing logic 2016-11-04 18:26:39 +01:00
Jay Otterbein
0a61887474 Removed unused usings 2016-11-04 18:26:39 +01:00
kaso17
2002b9db9d Fix Shareisland encoding and categories (#630) 2016-11-02 20:15:19 +01:00
kaso17
e54e99d8d6 Add Shareisland tracker (#629) 2016-11-02 19:18:33 +01:00
kaso17
c3a5c7afa3 DateTimeUtils: Add support for parsing unix timestamps (#628) 2016-11-02 19:04:56 +01:00
kaso17
6f38081cf1 Cardigann fixes (#627)
* Cardigann: Fix url parsing for absolut urls

* Cardigann: normalize selector result value

* Add support for parsing unix Timestamps

* Revert "Add support for parsing unix Timestamps"

This reverts commit dba033b5a5.
2016-11-02 19:02:39 +01:00
kaso17
58b35b290b Update README.md
Add mono package details
2016-11-02 08:23:35 +01:00
kaso17
8c1086719d Improve error handling on corrupt indexer config files (#624) 2016-11-01 23:13:59 +01:00
kaso17
4074ae197b Add WorldOfP2P tracker 2016-11-01 22:50:38 +01:00
kaso17
3381d67565 Fix Cardigann querystring filter 2016-11-01 22:50:38 +01:00
kaso17
e3c7f3de28 Add support for parsing AM/PM TimeSpans 2016-11-01 22:50:38 +01:00
kaso17
70dfe3a021 Use long title from tooltip if available 2016-11-01 19:52:33 +01:00
kaso17
377dc3f586 Fix Xspeeds torrents with >= 1000 seeders/leechers 2016-11-01 19:52:33 +01:00
kaso17
b1a4a98563 ImmortalSeed: Add support for torrents without tooltip (#620) 2016-11-01 19:51:27 +01:00
kaso17
366b1ff80b Support XSpeeds releases without tooltip (#619) 2016-11-01 19:01:23 +01:00
kaso17
05abb0151e Update CloudFlareUtilities to version 0.3.3 (#618) 2016-11-01 19:01:13 +01:00
kaso17
1bf52b8c1e Add support for SXXEXX search (#615) 2016-11-01 09:22:52 +01:00
kaso17
f0a302f7f4 Fix group_torrent files parsding (#614) 2016-11-01 08:55:49 +01:00
kaso17
a027bfae54 Change TorrentShack to HTTPS (#607) 2016-10-30 20:36:03 +01:00
kaso17
6576770fa0 Add Grabs/DownloadVolumeFactor/UploadVolumeFactor attributes to AnimeTorrents 2016-10-30 20:27:14 +01:00
kaso17
45f6b9f768 Allow empty DL links to support newbie users 2016-10-30 20:27:14 +01:00
kaso17
3dc7aabb6e Add UHDBits tracker (#605) 2016-10-30 20:13:50 +01:00
kaso17
0f5e18492c Load definitions from multiple directories 2016-10-30 19:46:50 +01:00
kaso17
2f140fd2c0 use full exception 2016-10-30 19:46:50 +01:00
kaso17
661c5f2120 Fix UploadVolumeFactor 2016-10-30 19:46:50 +01:00
kaso17
28043e0070 Add support for Case selectors 2016-10-30 19:46:50 +01:00
kaso17
e6bf8918a3 add support for new attributes 2016-10-30 19:46:50 +01:00
kaso17
4737abcf58 remove debugging 2016-10-30 19:46:50 +01:00
kaso17
f7d96c108a default to POST login 2016-10-30 19:46:50 +01:00
kaso17
96017dd3bc Update AngleSharp (#603)
* Update AngleSharp
2016-10-30 17:54:40 +01:00
kaso17
94fd201507 Update AngleSharp (#602) 2016-10-30 17:51:04 +01:00
Jason Light
3dbe5774d7 Re-added AnimeTorrents (#600)
* Fixed cookies not ending in ";" being ignored.
* Re-add AnimeTorrents tracker

* Forgot Project File ~_~

* Updated README.md
2016-10-30 16:24:49 +01:00
kaso17
0a577e64d1 Fix TorrentLeech (#599) 2016-10-30 13:21:32 +01:00
kaso17
64bed2a8b3 Add BJ-Share tracker (#596) 2016-10-29 22:14:38 +02:00
kaso17
2b9b4282f4 Gracefully fail on Cardigann definitions Exceptions (#595) 2016-10-29 18:01:43 +02:00
kaso17
595f006f22 Change definition to Content (#593)
* Change definition to Content

This might fix the System.IO.DirectoryNotFoundException: Directory '.../Definitions' not found issues.
2016-10-29 17:29:13 +02:00
saffroncanoe
0abec9c1b6 Fix IPTorrents POST url (#587) 2016-10-28 07:51:50 +02:00
kaso17
6867c4a234 Add HDME logo 2016-10-27 20:22:54 +02:00
kaso17
4d2759bcd2 Add support for categories to TorrentShack (#585)
* Add support for categories to TorrentShack
2016-10-27 19:25:37 +02:00
kaso17
982c3df1ac Add support for categories to HD-Space (#584)
* Add support for categories to HD-Space
2016-10-27 18:50:58 +02:00
kaso17
3dfe2faa6b Add new attributes to various trackers (#583)
* Use AvistazTracker base

* Revert "Use AvistazTracker base"

This reverts commit 9eba02c758.

* Add new attributes to various trackers

* more DL factors for HDSpace

* new attributes for Fuzer

* add new attributes for ImmortalSeed

* set UploadVolumeFactor for myAmity

* add new attributes to bitmetv
2016-10-27 18:35:31 +11:00
kaso17
21cffe2d35 Add basic support for Cardigann definitions (#571)
* Add basic support for Cardigann definitions

* Add HDME definition

* Fix tests

* support split with negative indexes

* allow FromTimeAgo formats without spaces betwen value and unit

Example: 2h 3m

* Add basic support for Cardigann definitions

* Add HDME definition

* Fix tests

* support split with negative indexes

* allow FromTimeAgo formats without spaces betwen value and unit

Example: 2h 3m
2016-10-27 18:30:03 +11:00
kaso17
fa9bbaa18c Fix ConfigurationDataRecaptchaLogin usage (#579)
Use the existing/loaded configData instead of using blank instances.
2016-10-27 18:26:11 +11:00
kaso17
769ceb016f Use AvistazTracker base (#582) 2016-10-26 17:00:22 +02:00
kaso17
51cb8762b1 Allow AlternateLink configuration for TorrentDay (#577)
* Allow AlternateLink configuration for TorrentDay

* Allow AlternateLink configuration for TorrentDay
2016-10-26 04:25:51 +02:00
RageInvader
f04a97f237 Update TorrentDay.cs (#576) 2016-10-25 19:04:55 +02:00
kaso17
2a020f691c Add missing torznab attributes files, grabs, downloadvolumefactor, uploadvolumefactor (#565)
* Add missing torznap attributes files, grabs, downloadvolumefactor, uploadvolumefactor

* Fix typo
2016-10-25 18:40:46 +02:00
kaso17
5abdd35e1f Allow _, (, ) characters in the search query (#566) 2016-10-25 10:56:13 +02:00
larsjohnsen
5a04e66abe Manual search: Focus text field when opened (#568) 2016-10-25 10:07:31 +02:00
kaso17
0c02c22654 Make TorrentBytes row selector more rebust (#573) 2016-10-25 09:41:30 +02:00
kaso17
cd68d06dc3 Strip special chars from XSpeeds RSS feed (#564) 2016-10-25 09:30:58 +02:00
kaso17
465e607415 Fix ImmortalSeed login (#563) 2016-10-25 08:49:35 +02:00
kaso17
cbf6e45f64 Several small fixes (#562)
* Fix PreToMe search results if no category is specified

* AND filter Andraste results

* AND filter Best Friends results

* AND filter Bit City Reloaded results

* AND filter Freshon results

* AND filter myAmity results

* AND filter SceneTime results

* AND filter NewRealWorld results

* Remove dashes from TorrentLeech queries as they exclude search strings
2016-10-25 08:46:06 +02:00
TouchMyBox
c95d5fd9e2 add digitalhive to Jackett.csproj (#556) 2016-10-17 09:10:46 +02:00
kaso17
5991fd62c1 Update CloudFlareUtilities to version 0.3.2-alpha and remove the UnixLibCurlWebClient reflections and add DigitalHive tracker (#553)
* Update CloudFlareUtilities to 0.3.2-alpha

* Remove CloudFlareUtilities reflections

With CloudFlareUtilities version 0.3.2-alpha reflections are no longer needed

* Add DigitalHive tracker
2016-10-16 16:09:49 +02:00
kaso17
5384f85b5a Allow CloudFlareUtilities loading to fail (#547) 2016-10-12 21:32:41 +02:00
Don Fanning
c33315f59c update demonoid url (#541)
just updating the demonoid url to the current.
2016-10-08 19:00:06 +02:00
kaso17
7eaff55955 Support CloudFlare challenges with mono/libcurl (#538)
* Add CloudFlare support for the libcurl WebClient

* Save config if cookies are updated

If the cookieheader/config isn't updated with e.g. the cf_clearance cookie jackett has to recompute the challenge on every request.
2016-10-07 08:50:15 +02:00
Scott McKenzie
71414b805b Fix typo in SaveConfig (#532) 2016-10-01 19:53:43 +02:00
kaso17
50a06f640f Add SceneTime captcha support (#529)
* Add optional instruction message to RecaptchaLogin

* Add recaptcha support for Scene Time

* Fix Scene Time captcha handling from a remote host
2016-09-29 21:09:20 +02:00
d2dyno
6cab5fbba8 Update Demonoid URL (#527)
Update Demonoid URL. Fix for #522
2016-09-29 21:07:32 +02:00
kaso17
66e3f8eea5 Add TorrentHeaven, Andraste, Torrent Network, myAmity trackers and remove PtN AND filtering (#520)
* Add TorrentHeaven tracker

* Add Andraste tracker

* Remove PtN AND filtering

Not needed anymore.
The torrent search is now using AND by default

* Add Torrent Network tracker

* Add myAmity tracker
2016-09-22 12:27:35 +02:00
kaso17
a26e07210f Add House-of-Torrents, Best Friends New Real World trackers and fix HeBits encoding (#519)
* Add House-of-Torrents tracker

* Add Best Friends tracker

* Fix Hebits encoding

* Add New Real World tracker
2016-09-20 18:41:39 +02:00
flightlevel
e612a826d0 Merge pull request #516 from kaso17/master
Add support for AND filtering search results, use it for the PtN indexer, fix an AvistaZ exception, improve TVChaos UK search, add FunFile tracker
2016-09-19 21:09:20 +10:00
kaso17
4d2240ec6e Fix newznab_api_specification.txt link 2016-09-18 16:31:30 +02:00
kaso17
50fb9ccb5f EuTorrents is now CinemaZ 2016-09-18 16:27:21 +02:00
kaso17
28d3f22fef Add FunFile Tracker 2016-09-18 16:22:59 +02:00
kaso17
8612387e39 Add support for "wk" and "hr" ago format 2016-09-18 16:22:43 +02:00
kaso17
7d93361839 Use wildcards in TVChaos UK search queries
The TVChaos UK search requires an exact match of the search string.
But it seems like they just send the unfiltered search to the SQL server in a like query (LIKE '%$searchstring%').
So we replace any whitespace/special character with % to make the search more usable.
2016-09-18 14:23:04 +02:00
kaso17
9c7ce468ee Fix AvistaZ exception 2016-09-16 19:25:53 +02:00
kaso17
1ad0e93d01 AND filter the title to avoid getting unwanted results 2016-09-16 19:05:10 +02:00
kaso17
b53cbce24a Add MatchQueryStringAND() to AND filter search result titles 2016-09-16 19:03:54 +02:00
kaso17
087635f22a Add reCAPTCHA API version 1 support and add x264 tracker (#507)
* Add reCAPTCHA API version 1 support

* Add x264 tracker
2016-09-13 14:15:51 +02:00
kaso17
0263a5f869 euTorrents is now CinemaZ and PtN/HeBits title bug fix (#498)
* Always return the full release name.

* euTorrents is now CinemaZ

* fix HeBits title parsing

Should fix #500
2016-09-11 19:52:51 +02:00
flightlevel
b910e42668 Merge pull request #495 from flightlevel/germantime
German Time
2016-09-09 15:36:30 +10:00
flightlevel
33b3740fca German Time
German Time on Mono
2016-09-09 15:34:28 +10:00
flightlevel
6d1d78cb92 Merge pull request #494 from flightlevel/german_time
German Timezone
2016-09-09 15:14:04 +10:00
flightlevel
d4c9c6d82b German Timezone
Mono doesn't seem to like Windows Timezone names
2016-09-09 15:11:44 +10:00
flightlevel
485d2705b5 Merge pull request #493 from kaso17/master
Add Torrent-Syndikat, Bit-City Reloaded and PirateTheNet trackers and fix AvistaZ based trackers
2016-09-09 14:50:57 +10:00
kaso17
ecd2b33dfc Add PirateTheNet tracker 2016-09-08 16:52:08 +02:00
kaso17
c12736716d fix AvistaZ tracker 2016-09-07 19:46:03 +02:00
kaso17
c0bdedbae1 Add Bit-City Reloaded tracker 2016-09-07 17:34:36 +02:00
kaso17
2abf4f0ee6 Add Torrent-Syndikat tracker 2016-09-07 14:00:25 +02:00
flightlevel
1fdd165d2e CloudFlare support for Windows (#489)
CloudFlare support for Windows
2016-09-06 21:55:18 +10:00
kaso17
55818f9cb6 Add Ghost City tracker (#488) 2016-09-06 21:50:16 +10:00
betamax2021
a4c670df78 Added Indexer BakaBT (#482) 2016-09-04 18:25:33 +10:00
flightlevel
c8d558c1eb Add BakaBT (#484)
Add BakaBT
2016-09-04 18:24:21 +10:00
flightlevel
f56b51e9e3 TorrentDay: Add HEVC category (#483)
TorrentDay: Add HEVC category
2016-09-04 18:24:02 +10:00
flightlevel
2e966b674c PTP: Add logo (#480)
PTP: Add logo
2016-09-03 12:12:22 +10:00
Mike
aa1e31a110 Rewrote MoreThanTV indexer (#477)
* MTV: Rewrote searching for torrents. Modified title output so sonarr can actually download seasons.

* MTV: Add individual torrent parsing and cleanup.

* MTV: Remove TODO as it's already done.
2016-09-03 12:04:08 +10:00
d2dyno
79418d3b1f Update screenshot (#472)
Use screenshot from more recent version.
2016-08-26 20:12:25 +02:00
d2dyno
76f01273d3 HDSpace category mappings (#469)
* HDSpace category mappings

Add category mappings for HDSpace.

* Fix derp

Remove plus signs (from sloppy copy) and extra comas.

* Fix typo and comma
2016-08-26 18:22:02 +10:00
flightlevel
ef99687187 AlphaRatio: Fix Time (#471)
AlphaRatio: Fix Time
2016-08-26 17:21:04 +10:00
flightlevel
5d03e6ec99 PrivateHD: Date Parsing (#470)
PrivateHD: Date Parsing
2016-08-26 16:27:46 +10:00
flightlevel
3e9165ce4a TorrentDay: Add IMDB search (#466)
TorrentDay: Add IMDB search
2016-08-24 23:02:25 +10:00
flightlevel
2a7a950d63 PrivateHd: Fix parsing (#465)
PrivateHd: Fix parsing
2016-08-24 22:39:26 +10:00
flightlevel
d3d78e48cb TorrentLeech: Add setup info (#460)
TorrentLeech: Add setup info
2016-08-22 20:47:36 +10:00
flightlevel
791471a716 Update Packages (#459)
* Revert "Update packages (#453)"

This reverts commit 593c2f083e.

* Package Update

Package Update
2016-08-22 20:37:49 +10:00
flightlevel
7f7f6680b2 Animebytes: Fix warning (#455)
Animebytes: Fix warning
2016-08-20 19:52:39 +10:00
flightlevel
128591d355 TTN: Fix Parsing (#454)
TTN: Fix Parsing
2016-08-20 19:44:02 +10:00
flightlevel
593c2f083e Update packages (#453)
Update packages
2016-08-20 19:29:26 +10:00
flightlevel
7743267501 Remove FrenchAdn (#452)
Remove FrenchAdn
2016-08-20 18:30:14 +10:00
flightlevel
268f5a8ae5 Demonoid: Fix Parsing (#451)
Demonoid: Fix Parsing
2016-08-20 18:16:59 +10:00
flightlevel
121736358b Revert "Pretome: Remove" (#446) 2016-08-18 20:55:58 +10:00
flightlevel
1b0ea00c88 TTN: Update Login (#445)
TTN: Update Login
2016-08-18 17:29:56 +10:00
flightlevel
4be1c19c50 Enter to search (#444)
Enter to search
2016-08-18 17:23:43 +10:00
flightlevel
aa55849e62 Pretome: Remove (#443)
Pretome: Remove
2016-08-18 17:09:16 +10:00
flightlevel
1d2093fc32 Bluetigers: Add category (#442)
Bluetigers: Add category
2016-08-18 16:15:50 +10:00
flightlevel
5a5d83e5c1 Remove Phxbit (#441)
Remove Phxbit
2016-08-18 16:05:58 +10:00
flightlevel
155632e85d IPT: Update Parsing (#440)
IPT: Update Parsing
2016-08-18 16:05:32 +10:00
Joel Gillman
cac185f747 Update README.md for Linux/OSX installation (#424) 2016-08-05 21:58:56 +10:00
Thomas Gillen
6d0d502bd3 Add music categories to AnimeBytes indexer (#418) 2016-08-05 21:58:29 +10:00
Superpiffer
ccde6fb53b TorrentLeech: Fix login (#412) (#414)
* Fix login #412

* Update TorrentLeech.cs
2016-08-05 21:57:43 +10:00
flightlevel
2afce9f2d9 BeyondHD; Fix Recaptcha (#409)
BeyondHD; Fix Recaptcha
2016-07-27 14:50:53 +10:00
flightlevel
2647457706 SpeedCd: Update URL (#408)
SpeedCd: Update URL
2016-07-27 14:14:57 +10:00
kobik
ac5e69a3b2 New indexer - Hebits.net (#406)
* Added Hebits.net as an indexer - a private Israel tracker

* Added new indexer Hebits to the readme file

* Deleted debug messages leftovers
2016-07-27 14:08:06 +10:00
d2dyno
45fb2a27c3 Updated BeyondHD URL (#390)
Updated BeyondHD to new URL.
2016-07-04 21:58:33 +10:00
Umur Kontacı
fb3d7ae81b Fix builds on case-sensitive filesystems (#377) 2016-06-26 20:32:48 +10:00
Codehhh
9b62e8af71 Add PTP as a new Indexer (#373)
* Added PassThePopcorn Indexer

* Fixed PTP Indexer
2016-06-23 20:34:19 +10:00
flightlevel
3f292b5e47 Freshon: Fix Urls (#374)
Freshon: Fix Urls
2016-06-23 20:28:08 +10:00
Chris Mattera
bd2abddb09 Modified to use new download URL format (#369) 2016-06-21 19:28:55 +10:00
Joel Gillman
5135748d1d Update "issues page" link in README (#358)
The "issues page" link in the Contributing section was pointing to the old repo! I just updated.
2016-06-08 08:53:38 +02:00
flightlevel
0fc3d224ab Allow Custom Data Folder (#355)
Allow Custom Data Folder
2016-05-28 19:40:55 +10:00
flightlevel
ac07cc34cd SpeedCD: Fix Login (#354)
SpeedCD: Fix Login
2016-05-28 19:40:39 +10:00
flightlevel
3730e05f20 TorrentDay: Add Audio (#353)
TorrentDay: Add Audio
2016-05-28 19:40:16 +10:00
flightlevel
2644fd813e Bluetigers fix SSL issue (#346) 2016-05-18 20:33:37 +10:00
flightlevel
ece16d1075 TransmitheNet: Fix Titles with extension (#343) 2016-05-17 23:25:26 +10:00
Fredrik Löwenhamn
3b13fa84a4 Fixed saving alphaRatio json (#342) 2016-05-17 23:04:15 +10:00
flightlevel
cda5ea3207 Update README.md 2016-05-14 22:44:49 +10:00
flightlevel
0746616b43 Revert "SSL Fix by default, Now use TLS (1.2, 1.1, 1) by default" (#339) 2016-05-14 22:42:16 +10:00
JigSaw
28199ab4be SSL Fix by default, Added support of TLS 1.1 & 1.2 (#337)
* SSL Fix by default, Now use TLS (1.2, 1.1, 1) by default
* Workaround to use TLS 1.2 & 1.1 on Mono < 4.3
2016-05-14 00:46:56 +02:00
JigSaw
b29c578adb Fixed FADN Provider (#336)
New Search Engine Template
2016-05-13 23:41:10 +02:00
smarshallsay
b42f2a0972 Deal with carriage return in date string (#325) 2016-04-30 21:48:52 +10:00
hex
040deb2bfb Added SceneFZ tracker (#319)
* Added SceneFZ tracker
* SceneFZ tracker new logo size and updated README
2016-04-26 12:40:54 +02:00
flightlevel
ef8b4e685e Update README.md 2016-04-20 20:14:55 +10:00
flightlevel
364860199c Merge pull request #316 from flightlevel/ttn_url2
TTN: Update search string
2016-04-20 20:11:55 +10:00
flightlevel
3f2a6fd3f7 Merge pull request #313 from coolius/myanonamouse
Added MyAnonamouse tracker
2016-04-19 21:37:15 +10:00
flightlevel
2671cf00e0 Merge pull request #312 from coolius/ipt_alternatelink
Added AlternateLink to IPTorrents
2016-04-19 20:38:20 +10:00
coolius
6a6941d01c Copy myanonamouse logo to output directory 2016-04-18 15:22:50 +01:00
coolius
5b3862bc3d Added MyAnonamouse tracker 2016-04-18 15:02:15 +01:00
coolius
0452f5ad06 Added AlternateLink to IPTorrents 2016-04-18 14:42:53 +01:00
flightlevel
264fc995b2 Merge pull request #307 from flightlevel/ttn_url
TTN: Update search url
2016-04-13 21:51:34 +10:00
flightlevel
acc75acb9c TTN: Update search url
TTN: Update search url
2016-04-13 21:33:14 +10:00
JigSaw
a5b1332f95 Optimized & Fixed FADN Provider
LoginCheck, New Logo, Optimized
2016-04-05 14:52:35 +02:00
JigSaw
8871a631b1 Fix Manga Anime Category for PhxBit Provider
Wrong category fixed
2016-04-03 20:55:37 +02:00
JigSaw
bfb58f53f5 Xthor Provider
French Private Tracker
2016-04-03 20:31:44 +02:00
JigSaw
d14717c88e Merge pull request #294 from JigSawFr/providers/phxbit-fix
Download FIX for PhxBit
2016-04-03 18:57:23 +02:00
JigSawFr
d8ff110d8b DownloadBase & DownloadUrl FIX for PHX 2016-04-03 18:46:46 +02:00
flightlevel
23737d3b19 Add Fuzer to readme 2016-04-01 22:39:37 +11:00
flightlevel
b11516760b Merge pull request #288 from OneBigGuy/master
Add Fuzer.me tracker
2016-04-01 22:38:47 +11:00
JigSaw
3a7f8ce268 Merge pull request #291 from JigSawFr/readme-fix
Cleanup README
2016-03-30 09:37:57 +02:00
JigSawFr
7a5b2e5c6a Cleanup README 2016-03-30 09:36:59 +02:00
OneBigGuy
ead129eda9 Add Fuzer.me tracker 2016-03-30 10:10:46 +03:00
JigSaw
b7cd0aeca8 Merge pull request #290 from Jackett/providers/phxbit
PhxBit Provider
2016-03-30 00:14:56 +02:00
JigSawFr
708b45b02f PHXBIT Provider 2016-03-29 23:54:19 +02:00
OneBigGuy
75f4342499 Merge https://github.com/Jackett/Jackett 2016-03-27 16:51:15 +03:00
OneBigGuy
24ad51ad15 Add Fuzer.me tracker 2016-03-27 16:50:02 +03:00
flightlevel
ecc3dd26db Merge pull request #284 from Jackett/revert-273-freshon--refactor
Revert "Freshon: Use AngleSharp for parsing"
2016-03-25 10:29:05 +11:00
flightlevel
aecee29219 Revert "Freshon: Use AngleSharp for parsing" 2016-03-25 10:16:35 +11:00
flightlevel
bda73dc9c1 Merge pull request #279 from flightlevel/tehconnection
TehConnection: Fix IMDB ID searches
2016-03-20 20:45:59 +11:00
flightlevel
63d2407e4f TehConnection: Fix IMDB ID searches
TehConnection: Fix IMDB ID searches
2016-03-20 20:40:54 +11:00
flightlevel
baf44314e9 Merge pull request #278 from flightlevel/transmithenet
Add Transmithe.Net tracker
2016-03-19 22:43:21 +11:00
flightlevel
29ef28b6d7 Add Transmithe.Net tracker
Add Transmithe.Net tracker
2016-03-19 22:40:00 +11:00
flightlevel
86dad52919 Merge pull request #277 from flightlevel/imdbid--match
Fix IMDB Matching
2016-03-19 22:32:56 +11:00
flightlevel
6ff05656ef Fix IMDB Matching
Comparing number to string was failing when imdb id had a leading zero
2016-03-19 19:13:06 +11:00
flightlevel
71c195cafb Merge pull request #273 from flightlevel/freshon--refactor
Freshon: Use AngleSharp for parsing
2016-03-17 20:56:29 +11:00
flightlevel
dda0ae2485 Freshon: Use AngleSharp for parsing
Freshon: Use AngleSharp for parsing
2016-03-17 20:52:29 +11:00
flightlevel
69dc63c726 Merge pull request #272 from flightlevel/anglesharp-update
Update Anglesharp
2016-03-17 20:51:02 +11:00
flightlevel
ee65721da1 Update Anglesharp
Update Anglesharp
2016-03-17 20:40:17 +11:00
Azerelat
8ffb91f414 Merge pull request #264 from lowet84/master
Updated encryption service for better use with Docker
2016-03-13 10:46:53 +00:00
Fredrik Löwenhamn
50d931b4fb Updated encryptioon service for better use with Docker 2016-03-04 10:05:47 +01:00
flightlevel
6f475b18f3 Merge pull request #259 from flightlevel/ipturl
Fix IPTorrents url encoding
2016-02-27 21:13:30 +11:00
flightlevel
782211d06a Fix IPTorrents url encoding
Fix IPTorrents url encoding
Issue https://github.com/Jackett/Jackett/issues/256
2016-02-27 21:09:19 +11:00
Azerelat
4f5d7a3d54 Make category mapping a little less confusing #255 2016-02-24 18:40:16 +00:00
flightlevel
f26f2d6f25 Merge pull request #249 from flightlevel/tehconnection
TehConnection: Attempt to fix cookie expiration
2016-02-17 23:36:04 +11:00
flightlevel
6ccbfd6443 TehConnection: Attempt to fix cookie expiration
TehConnection: Attempt to fix cookie expiration
2016-02-17 23:30:04 +11:00
flightlevel
c896ed8238 Merge pull request #248 from flightlevel/danishbits
DanishBits: Fix publish time
2016-02-17 22:17:00 +11:00
flightlevel
1879ed89df DanishBits: Fix publish time
DanishBits: Fix publish time
2016-02-17 22:10:36 +11:00
flightlevel
11f99a44d3 Merge pull request #247 from flightlevel/ilovetorrents
ILoveTorrents: Add to readme
2016-02-16 19:42:08 +11:00
flightlevel
f8fcf2fb79 ILoveTorrents: Add to readme
ILoveTorrents: Add to readme
2016-02-16 19:32:18 +11:00
flightlevel
c36a3f558a Merge pull request #246 from lowet84/master
Fixed a bug in the download link.
2016-02-16 19:22:10 +11:00
Fredrik Löwenhamn
07a88919b4 Fixed a bug in the download link.
Added more categories.
2016-02-16 08:02:12 +01:00
Azerelat
d02cb3fefc Merge pull request #245 from lowet84/master
Added support for ILoveTorrents.me
2016-02-15 20:22:45 +00:00
Fredrik Löwenhamn
f05eca3a9f Added support for ILoveTorrents.me 2016-02-15 13:10:06 +01:00
flightlevel
ccc2441a55 Merge pull request #243 from flightlevel/scenetime
SceneTime: Add category mapping and fix search
2016-02-14 15:19:29 +11:00
flightlevel
5aaa402287 SceneTime: Add category mapping and fix search
SceneTime: Add category mapping and fix search
2016-02-14 15:15:09 +11:00
flightlevel
97849dfcaf Merge pull request #242 from flightlevel/scenetime
SceneTime: Fix Column parsing
2016-02-13 17:01:23 +11:00
flightlevel
f2a899eea3 SceneTime: Fix Column parsing
SceneTime: Column numbers seem to be related to user settings, use
column names instead. Add category mapping support
2016-02-13 16:55:23 +11:00
flightlevel
80686c81ee Merge pull request #236 from flightlevel/bitmetvinfo
BitMeTv: Add instructions
2016-02-07 16:49:42 +11:00
flightlevel
189483b2b7 BitMeTv: Add instructions
BitMeTv: Add instructions to turn on SSL
2016-02-07 16:39:20 +11:00
flightlevel
e7cc147121 Merge pull request #235 from flightlevel/scenetimefix
Scenetime: Fix parsing
2016-02-07 16:38:18 +11:00
flightlevel
73f044c0f2 Scenetime: Fix parsing
Scenetime: Fix parsing as per
https://github.com/Jackett/Jackett/issues/231#issuecomment-180289081
2016-02-07 16:22:33 +11:00
flightlevel
a268893475 Merge pull request #227 from Jackett/revert-226-freshonrefactor
Revert "Freshon: Changed parser to AngleSharp"
2016-01-29 23:56:03 +11:00
flightlevel
c20e4d0dfa Revert "Freshon: Changed parser to AngleSharp" 2016-01-29 23:50:23 +11:00
flightlevel
73536b11e2 Merge pull request #226 from flightlevel/freshonrefactor
Freshon: Changed parser to AngleSharp
2016-01-29 23:38:11 +11:00
flightlevel
a35695358d Merge pull request #225 from flightlevel/BasicIndexerMessage
Allow instructions on the basic indexer
2016-01-29 23:31:47 +11:00
flightlevel
7312c8c230 Freshon: Changed parser to AngleSharp
Freshon: Changed parser to AngleSharp
2016-01-29 23:30:12 +11:00
flightlevel
04fea52956 Allow instructions on the basic indexer
Allow instructions on the basic indexer
2016-01-29 23:28:14 +11:00
flightlevel
cd642a48b6 Merge pull request #224 from flightlevel/AddAnglesharp
Add AngleSharp package
2016-01-29 21:36:49 +11:00
flightlevel
89e0498224 Add AngleSharp package 2016-01-29 21:31:23 +11:00
flightlevel
35f9c05cb9 Merge pull request #223 from flightlevel/urlencodetorznabresponse
URL Encode File Name
2016-01-29 21:19:42 +11:00
flightlevel
8a54f9d825 URL Encode File Name
URL Encode file names in proxy link
Issue https://github.com/Jackett/Jackett/issues/222
2016-01-29 21:15:30 +11:00
Azerelat
34caa78de1 Merge pull request #218 from some-guy-23/patch-1
Switched favicon to relative URL
2016-01-28 17:57:27 +00:00
some-guy-23
e28fadbd68 Merge pull request #2 from some-guy-23/patch-2
Switched favicon to relative URL
2016-01-27 14:23:41 -05:00
some-guy-23
0930048d8b Switched favicon to relative URL 2016-01-27 14:22:12 -05:00
some-guy-23
42495e36e5 Switched favicon to relative URL 2016-01-27 14:21:32 -05:00
flightlevel
4f36d19b00 Merge pull request #201 from flightlevel/speedcd
SpeedCd: Fix Query String
2016-01-20 19:50:21 +11:00
flightlevel
2f682ca53f SpeedCd: Fix Query String
SpeedCd: Fix Query String
2016-01-20 19:45:39 +11:00
flightlevel
aa7a33496c Merge pull request #199 from flightlevel/torrentbytesfix
TorrentBytes: Allow for missing category and fix time
2016-01-20 00:29:20 +11:00
flightlevel
1f94dec089 Merge pull request #198 from flightlevel/speedcd
SpeedCd: Change API to parsing
2016-01-20 00:28:38 +11:00
flightlevel
e57cbe3b44 TorrentBytes: Allow for missing category and fix time
TorrentBytes: Allow for missing category and fix time
2016-01-20 00:20:19 +11:00
flightlevel
7b74f981e3 SpeedCd: Change API to parsing
SpeedCD API no longer working, changed to parsing
2016-01-20 00:08:00 +11:00
Azerelat
2901cceea9 Fix cache items not expiring and change redirect to a temp one as we can now change the base path 2016-01-17 13:19:18 +00:00
Azerelat
ea4d0fe701 AnimeBytes Sonarr Fix (Will only fix season 1 but we don't have season info). 2016-01-16 22:36:56 +00:00
Azerelat
02a57533f9 Merge pull request #193 from raspdealer/patch-4
Change below to above inside steps
2016-01-16 21:07:24 +00:00
Azerelat
99f0e9c9f6 Merge pull request #192 from raspdealer/patch-3
Enable SSL on Bluetigers
2016-01-16 21:07:13 +00:00
Raspdealer
d1225c17b2 Change below to above inside steps 2016-01-16 11:47:01 +01:00
Raspdealer
2adecae9bf Enable SSL on Bluetigers 2016-01-16 11:41:51 +01:00
262 changed files with 25942 additions and 3215 deletions

9
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,9 @@
**Please use the search bar** at the top of the page and make sure you are not creating an already submitted issue. Duplicating issues makes it more difficult for everyone to follow. Your issue may have already been solved in the past as well.
Provide a description of the feature request or bug, the more details the better.
If you are experiencing an issue with a tracker, a **full log must be included**. Instructions for obtaining logs are here: https://github.com/Jackett/Jackett#troubleshooting
Jackett version:
Mono version (if not using Windows):
-------------------------------

143
README.md
View File

@@ -1,77 +1,190 @@
## Jackett
[![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)
[![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/)
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
Jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/master/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
#### Supported Systems
* Windows using .NET 4.5
* Linux and OSX using Mono 4 (v3 should work but you may experience crashes).
* Linux and OSX using Mono 4 (With v3 you'll experience crashes).
#### Supported Private Trackers
* 2 Fast 4 You
* 7tor
* Abnormal
* AlphaRatio
* AlphaReign
* Andraste
* AnimeBytes
* AnimeTorrents
* AOX
* Apollo (XANAX)
* Avistaz
* BakaBT
* bB
* Best Friends
* BeyondHD
* Bit-City Reloaded
* BIT-HDTV
* BitHQ
* BitHUmen
* BitMeTV
* BitSoup
* BlueTigers
* Bitspyder
* Blu-bits
* BlueBird
* BTN
* CHDBits
* CinemaZ
* DanishBits
* DataScene
* Demonoid
* EuTorrents
* DigitalHive
* Dream Team
* EoT-Forum
* eStone
* Ethor.net (Thor's Land)
* EZTV
* FANO.IN
* FileList
* Fnt
* French-ADN
* Freedom-HD
* Freshon
* FunFile
* FunkyTorrents
* Fuzer
* Ghost City
* GODS
* Gormogon
* Hardbay
* HD4Free
* HD-Space
* HD-Torrents
* HDClub
* HDSky
* Hebits
* Hon3y HD
* Hounddawgs
* House-of-Torrents
* Hyperay
* ICE Torrent
* ILoveTorrents
* Immortalseed
* Infinity-T
* IPTorrents
* Isohunt
* LimeTorrents
* LinkoManija
* M-Team - TP
* Magico
* Mononok<6F>-BT
* MoreThanTV
* MyAnonamouse
* myAmity
* MySpleen
* Nachtwerk
* NCore
* NetHD
* New Real World
* NextGen
* Norbits
* nostream
* notwhat.cd
* PassTheHeadphones
* PassThePopcorn
* PirateTheNet
* Pretome
* PrivateHD
* QcTorrent
* RapideTracker
* RevolutionTT
* KickAssTorrent
* Rockhard Lossless
* RuTracker
* SceneAccess
* SceneFZ
* SceneTime
* SDBits
* Secret Cinema
* Shareisland
* ShareSpaceDB
* Shazbat
* Shellife
* SpeedCD
* Superbits
* The Horror Charnel
* The New Retro
* The Pirate Bay
* The Shinning
* TehConnection
* TenYardTracker
* Torrent Network
* Torrent Sector Crew
* Torrent411
* TorrentBD
* TorrentBytes
* TorrentDay
* TorrentHeaven
* Torrenting
* TorrentLeech
* Torrents.Md
* TorrentShack
* Torrent-Syndikat
* ToTheGlory
* TranceTraffic
* TransmitheNet
* TV Chaos UK
* TV-Vault
* u-Torrent
* UHDBits
* World-In-HD
* WorldOfP2P
* x264
* XSpeeds
* Xthor
* Xtreme Zone
#### Installation on Windows
We recommend you install Jackett as a Windows service using the supplied installer. When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
We recommend you install Jackett as a Windows service using the supplied installer. You may also download the zipped version if you would like to configure everything manually.
Jackett can also be run from the command line using JackettConsole.exe if you would like to see log messages (Ensure the server isn't already running from the tray/service).
To get started with using the installer for Jackett, follow the steps below:
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
2. When prompted if you would like this app to make changes to your computer, select "yes".
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
4. Once the installation has finished, check the "Launch Jackett" box to get started.
5. Navigate your web browser to: http://127.0.0.1:9117
6. You're now ready to begin adding your trackers and using Jackett.
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
Jackett can also be run from the command line if you would like to see log messages (Ensure the server isn't already running from the tray/service). This can be done by using "JackettConsole.exe" (for Command Prompt), found in the Jackett data folder: "%ProgramData%\Jackett".
#### Installation on Linux/OSX
1. Install [Mono 4](http://www.mono-project.com/download/) or better
* Follow the instructions on the mono website and install the `mono-devel` package.
* On Red Hat/CentOS/openSUSE the `mono-locale-extras` package is also required
2. Install libcurl:
* Debian/Ubunutu: apt-get install libcurl-dev
* Redhat/Fedora: yum install libcurl-devel
* Debian/Ubunutu: `apt-get install libcurl-dev`
* Redhat/Fedora: `yum install libcurl-devel`
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
3. Download and extract the latest ```.tar.gz``` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command "mono JackettConsole.exe".
3. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono JackettConsole.exe`.
Detailed instructions for [Ubuntu 14.x](http://www.htpcguides.com/install-jackett-on-ubuntu-14-x-for-custom-torrents-in-sonarr/) and [Ubuntu 15.x](http://www.htpcguides.com/install-jackett-ubuntu-15-x-for-custom-torrents-in-sonarr/)
#### Installation using Docker
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
#### Installation on Synology
Jackett is available as beta package from [SynoCommuniy](https://synocommunity.com/)
@@ -93,9 +206,9 @@ You can get additional logging with the switches "-t -l". Please post logs if y
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
### Contributing
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/zone117x/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project. We currently only support private trackers.
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
### Screenshots
![screenshot](http://i.imgur.com/t1sVva6.png "screenshot")
![screenshot](https://i.imgur.com/0d1nl7g.png "screenshot")

View File

@@ -7,7 +7,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -15,7 +15,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -33,6 +33,14 @@
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac.Integration.WebApi" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -57,9 +57,15 @@ namespace Jackett.Console
[Option('f', "SSLFix", HelpText = "[true/false] Linux Libcurl NSS Missing ECC Ciphers workaround (Use if you can't access some trackers) .")]
public bool? SSLFix { get; set; }
[Option('n', "IgnoreSslErrors", HelpText = "[true/false] Linux Libcurl - Ignores invalid SSL certificates")]
[Option('n', "IgnoreSslErrors", HelpText = "[true/false] Ignores invalid SSL certificates")]
public bool? IgnoreSslErrors { get; set; }
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\"")]
public string DataFolder { get; set; }
[Option(HelpText = "Don't restart after update")]
public bool NoRestart { get; set; }
[ParserState]
public IParserState LastParserState { get; set; }
}

View File

@@ -42,24 +42,24 @@
<StartupObject>JackettConsole.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
<Reference Include="Autofac, Version=4.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.3.0\lib\net45\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.3.1.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.4.0.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi, Version=3.4.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.3.4.0\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.4.0.1\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.3.3.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.4.0.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="AutoMapper, Version=4.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll</HintPath>
<Reference Include="AutoMapper, Version=4.2.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="CommandLine, Version=1.9.71.2, Culture=neutral, PublicKeyToken=de6f01bd326f8c32, processorArchitecture=MSIL">
@@ -94,12 +94,12 @@
<HintPath>..\packages\Microsoft.Owin.StaticFiles.3.0.1\lib\net45\Microsoft.Owin.StaticFiles.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.2-beta2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.0-beta05-test\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
@@ -107,7 +107,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
<Private>True</Private>
@@ -121,6 +123,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
<Private>True</Private>

View File

@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
@@ -96,7 +97,14 @@ namespace JackettConsole
Startup.IgnoreSslErrors = options.IgnoreSslErrors;
if (options.IgnoreSslErrors == true)
{
Engine.Logger.Info("Curl will ignore SSL certificate errors.");
Engine.Logger.Info("Jackett will ignore SSL certificate errors.");
}
// Choose Data Folder
if (!string.IsNullOrWhiteSpace(options.DataFolder))
{
Startup.CustomDataFolder = options.DataFolder.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(@"\\", @"\");
Engine.Logger.Info("Jackett Data will be stored in: " + Startup.CustomDataFolder);
}
/* ====== Actions ===== */
@@ -209,6 +217,8 @@ namespace JackettConsole
Engine.Server.SaveConfig();
}
}
Startup.NoRestart = options.NoRestart;
}
Engine.Server.Initalize();

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.5.2" targetFramework="net45" />
<package id="Autofac.Owin" version="3.1.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="3.4.0" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net45" />
<package id="AutoMapper" version="4.1.1" targetFramework="net45" />
<package id="Autofac" version="4.3.0" targetFramework="net45" />
<package id="Autofac.Owin" version="4.0.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="4.0.1" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="4.0.0" targetFramework="net45" />
<package id="AutoMapper" version="4.2.1" targetFramework="net45" />
<package id="CommandLineParser" version="1.9.71" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
@@ -21,7 +21,7 @@
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.StaticFiles" version="3.0.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="NLog" version="4.2.3" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.2-beta2" targetFramework="net45" />
<package id="NLog" version="5.0.0-beta05-test" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>

View File

@@ -23,7 +23,19 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac.Integration.WebApi" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -39,20 +39,20 @@
<ApplicationIcon>jackett.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
<Reference Include="Autofac, Version=4.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.3.0\lib\net45\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.3.1.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.4.0.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi, Version=3.4.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.3.4.0\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.4.0.1\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.3.3.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.4.0.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -75,12 +75,12 @@
<HintPath>..\packages\Microsoft.Owin.StaticFiles.3.0.1\lib\net45\Microsoft.Owin.StaticFiles.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.2-beta2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.0-beta05-test\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
@@ -88,7 +88,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
<Private>True</Private>
@@ -102,6 +104,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
<Private>True</Private>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.5.2" targetFramework="net45" />
<package id="Autofac.Owin" version="3.1.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="3.4.0" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net45" />
<package id="Autofac" version="4.3.0" targetFramework="net45" />
<package id="Autofac.Owin" version="4.0.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="4.0.1" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="4.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net45" />
@@ -17,7 +17,7 @@
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.StaticFiles" version="3.0.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="NLog" version="4.2.3" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.2-beta2" targetFramework="net45" />
<package id="NLog" version="5.0.0-beta05-test" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>

View File

@@ -38,36 +38,36 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
<Reference Include="Autofac, Version=4.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.3.0\lib\net45\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.3.1.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.4.0.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi, Version=3.4.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.3.4.0\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.4.0.1\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.3.3.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.4.0.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="AutoMapper, Version=4.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll</HintPath>
<Reference Include="AutoMapper, Version=4.2.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="CsQuery, Version=1.3.3.249, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\CsQuery.1.3.4\lib\net40\CsQuery.dll</HintPath>
<Reference Include="CsQuery, Version=1.3.5.124, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\CsQuery.1.3.5-beta5\lib\net40\CsQuery.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="FluentAssertions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.1.1\lib\net45\FluentAssertions.dll</HintPath>
<Reference Include="FluentAssertions, Version=4.18.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.18.0\lib\net45\FluentAssertions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="FluentAssertions.Core, Version=4.1.1.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.1.1\lib\net45\FluentAssertions.Core.dll</HintPath>
<Reference Include="FluentAssertions.Core, Version=4.18.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.18.0\lib\net45\FluentAssertions.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -87,12 +87,12 @@
<HintPath>..\packages\Microsoft.Owin.Hosting.3.0.1\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.2-beta2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.0-beta05-test\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
@@ -103,8 +103,8 @@
<HintPath>..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.interfaces.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.framework, Version=3.0.5813.39031, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.0.1\lib\net45\nunit.framework.dll</HintPath>
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.util, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
@@ -120,6 +120,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
@@ -134,6 +137,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
<Private>True</Private>
@@ -164,6 +170,7 @@
<Compile Include="TestIIndexerManagerServiceHelper.cs" />
<Compile Include="TestUtil.cs" />
<Compile Include="TestWebClient.cs" />
<Compile Include="Util\ParseUtilTests.cs" />
<Compile Include="Util\ServerUtilTests.cs" />
<Compile Include="Util\TvCategoryParserTests.cs" />
</ItemGroup>
@@ -182,6 +189,9 @@
<ItemGroup>
<Folder Include="Indexers\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Util\Invalid-RSS.xml" />
</ItemGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
<ItemGroup>

View File

@@ -42,5 +42,15 @@ namespace JackettTest
{
throw new NotImplementedException();
}
public void InitCardigannIndexers(string path)
{
throw new NotImplementedException();
}
public void SortIndexers()
{
throw new NotImplementedException();
}
}
}

View File

@@ -1,4 +1,6 @@
using Jackett.Utils.Clients;
using Jackett.Services;
using Jackett.Utils.Clients;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -12,6 +14,13 @@ namespace JackettTest
private Dictionary<WebRequest, Func<WebRequest, WebClientByteResult>> byteCallbacks = new Dictionary<WebRequest, Func<WebRequest, WebClientByteResult>>();
private Dictionary<WebRequest, Func<WebRequest, WebClientStringResult>> stringCallbacks = new Dictionary<WebRequest, Func<WebRequest, WebClientStringResult>>();
public TestWebClient(IProcessService p, Logger l, IConfigurationService c)
: base(p: p,
l: l,
c: c)
{
}
public void RegisterByteCall(WebRequest req, Func<WebRequest, WebClientByteResult> f)
{
byteCallbacks.Add(req, f);
@@ -22,17 +31,17 @@ namespace JackettTest
stringCallbacks.Add(req, f);
}
public Task<WebClientByteResult> GetBytes(WebRequest request)
override public Task<WebClientByteResult> GetBytes(WebRequest request)
{
return Task.FromResult< WebClientByteResult>(byteCallbacks.Where(r => r.Key.Equals(request)).First().Value.Invoke(request));
}
public Task<WebClientStringResult> GetString(WebRequest request)
override public Task<WebClientStringResult> GetString(WebRequest request)
{
return Task.FromResult<WebClientStringResult>(stringCallbacks.Where(r => r.Key.Equals(request)).First().Value.Invoke(request));
}
public void Init()
override public void Init()
{
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>RSS Syndicator</title>
<link>http://somewebsite.com</link>
<description>
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
 group info&lt;br /&gt;
&lt;br /&gt;
Know Your Role and Shut Your Mouth!&lt;br /&gt;
&lt;br /&gt;
 we are now looking for...&lt;br /&gt;
&lt;br /&gt;
</description>
</channel>
</rss>

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Xml.XPath;
using FluentAssertions;
using Jackett.Utils;
using NUnit.Framework;
namespace JackettTest.Util
{
[TestFixture]
public class ParseUtilTests
{
private static string InvalidRssXml
{
get
{
var type = typeof(ParseUtilTests);
using (var resourceStream = type.Assembly.GetManifestResourceStream($"{type.Namespace}.Invalid-RSS.xml"))
using (var sr = new StreamReader(resourceStream))
{
return sr.ReadToEnd();
}
}
}
[Test]
public void Invalid_RSS_should_parse_after_removing_invalid_chars()
{
var invalidRss = InvalidRssXml;
Action parseAction = () => XDocument.Parse(invalidRss);
parseAction.ShouldThrow<Exception>().WithMessage("'\a', hexadecimal value 0x07, is an invalid character. Line 12, position 7.");
var validRSs = ParseUtil.RemoveInvalidXmlChars(invalidRss);
var rssDoc = XDocument.Parse(validRSs);
rssDoc.Root.Should().NotBeNull();
var description = rssDoc.Root.XPathSelectElement("//description");
description.Value.Should().Contain("Know Your Role and Shut Your Mouth!");
}
}
}

View File

@@ -20,12 +20,24 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac.Integration.WebApi" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup></configuration>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.5.2" targetFramework="net45" />
<package id="Autofac.Owin" version="3.1.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="3.4.0" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net45" />
<package id="AutoMapper" version="4.1.1" targetFramework="net45" />
<package id="CsQuery" version="1.3.4" targetFramework="net45" />
<package id="FluentAssertions" version="4.1.1" targetFramework="net45" />
<package id="Autofac" version="4.3.0" targetFramework="net45" />
<package id="Autofac.Owin" version="4.0.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="4.0.1" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="4.0.0" targetFramework="net45" />
<package id="AutoMapper" version="4.2.1" targetFramework="net45" />
<package id="CsQuery" version="1.3.5-beta5" targetFramework="net45" />
<package id="FluentAssertions" version="4.18.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
@@ -18,9 +18,9 @@
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="3.0.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="NLog" version="4.2.3" targetFramework="net45" />
<package id="NUnit" version="3.0.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.2-beta2" targetFramework="net45" />
<package id="NLog" version="5.0.0-beta05-test" targetFramework="net45" />
<package id="NUnit" version="3.6.0" targetFramework="net45" />
<package id="NUnitTestAdapter" version="2.0.0" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>

View File

@@ -23,12 +23,24 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac.Integration.WebApi" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -39,24 +39,24 @@
<ApplicationIcon>jackett.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
<Reference Include="Autofac, Version=4.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.3.0\lib\net45\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.3.1.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.Owin.4.0.0\lib\net45\Autofac.Integration.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi, Version=3.4.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.3.4.0\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.4.0.1\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.3.3.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Reference Include="Autofac.Integration.WebApi.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.Owin.4.0.0\lib\net45\Autofac.Integration.WebApi.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="AutoMapper, Version=4.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll</HintPath>
<Reference Include="AutoMapper, Version=4.2.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -79,12 +79,12 @@
<HintPath>..\packages\Microsoft.Owin.StaticFiles.3.0.1\lib\net45\Microsoft.Owin.StaticFiles.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.2-beta2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.0-beta05-test\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
@@ -92,7 +92,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
<Private>True</Private>
@@ -106,6 +108,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
<Private>True</Private>

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.5.2" targetFramework="net45" />
<package id="Autofac.Owin" version="3.1.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="3.4.0" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net45" />
<package id="AutoMapper" version="4.1.1" targetFramework="net45" />
<package id="Autofac" version="4.3.0" targetFramework="net45" />
<package id="Autofac.Owin" version="4.0.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="4.0.1" targetFramework="net45" />
<package id="Autofac.WebApi2.Owin" version="4.0.0" targetFramework="net45" />
<package id="AutoMapper" version="4.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net45" />
@@ -18,7 +18,7 @@
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.StaticFiles" version="3.0.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="NLog" version="4.2.3" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.2-beta2" targetFramework="net45" />
<package id="NLog" version="5.0.0-beta05-test" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>

View File

@@ -23,7 +23,19 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac.Integration.WebApi" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -39,20 +39,22 @@
<ApplicationIcon>jackett.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
<Reference Include="Autofac, Version=4.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.3.0\lib\net45\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="CommandLine, Version=1.9.71.2, Culture=neutral, PublicKeyToken=de6f01bd326f8c32, processorArchitecture=MSIL">
<HintPath>..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.0-beta05-test\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
<Private>True</Private>
@@ -62,6 +64,10 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

View File

@@ -9,6 +9,13 @@ using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
/*
// no supported by appveyor, disabeling for now
#if __MonoCS__
using Mono.Unix.Native;
#endif
*/
namespace Jackett.Updater
{
@@ -23,7 +30,7 @@ namespace Jackett.Updater
{
Engine.SetupLogging(null, "updater.txt");
Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
Engine.Logger.Info("Options " + string.Join(" ", args));
Engine.Logger.Info("Options \"" + string.Join("\" \"", args) + "\"");
try {
var options = new UpdaterConsoleOptions();
if (Parser.Default.ParseArguments(args, options))
@@ -32,7 +39,7 @@ namespace Jackett.Updater
}
else
{
Engine.Logger.Error("Failed to process update arguments!: " + string.Join(" ", args));
Engine.Logger.Error("Failed to process update arguments!");
Console.ReadKey();
}
}
@@ -49,6 +56,38 @@ namespace Jackett.Updater
return fvi.FileVersion;
}
private void KillPids(int[] pids)
{
foreach (var pid in pids)
{
try
{
var proc = Process.GetProcessById(pid);
Engine.Logger.Info("Killing process " + proc.Id);
proc.Kill();
var exited = proc.WaitForExit(5000);
if (!exited)
Engine.Logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds");
/*
// no supported by appveyor, disabeling for now
#if __MonoCS__
Engine.Logger.Info("Sending SIGKILL to process " + pid.ToString());
Syscall.kill(proc.Id, Signum.SIGKILL);
#endif
*/
}
catch (ArgumentException e)
{
Engine.Logger.Info("Process " + pid.ToString() + " is already dead");
}
catch (Exception e)
{
Engine.Logger.Info("Error killing process " + pid.ToString());
Engine.Logger.Info(e);
}
}
}
private void ProcessUpdate(UpdaterConsoleOptions options)
{
var updateLocation = GetUpdateLocation();
@@ -57,6 +96,13 @@ namespace Jackett.Updater
updateLocation += Path.DirectorySeparatorChar;
}
var pids = new int[] { };
if (options.KillPids != null)
{
var pidsStr = options.KillPids.Split(',').Where(pid => !string.IsNullOrWhiteSpace(pid)).ToArray();
pids = Array.ConvertAll(pidsStr, pid => int.Parse(pid));
}
var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
var trayRunning = false;
var trayProcesses = Process.GetProcessesByName("JackettTray");
@@ -75,10 +121,11 @@ namespace Jackett.Updater
catch { }
}
}
}
Engine.Logger.Info("Waiting for Jackett to close..");
Thread.Sleep(2000);
// on unix we don't have to wait (we can overwrite files which are in use)
// On unix we kill the PIDs after the update so e.g. systemd can automatically restart the process
KillPids(pids);
}
Engine.Logger.Info("Finding files in: " + updateLocation);
var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
foreach(var file in files)
@@ -94,6 +141,12 @@ namespace Jackett.Updater
try {
Engine.Logger.Info("Copying " + fileName);
var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
var destDir = Path.GetDirectoryName(dest);
if (!Directory.Exists(destDir))
{
Engine.Logger.Info("Creating directory " + destDir);
Directory.CreateDirectory(destDir);
}
File.Copy(file, dest, true);
}
catch(Exception e)
@@ -102,49 +155,76 @@ namespace Jackett.Updater
}
}
if (trayRunning)
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettTray.exe"),
UseShellExecute = true
};
// delete old files
string[] oldDirs = new string[] { "Content/logos" };
Process.Start(startInfo);
foreach (var oldDir in oldDirs)
{
try
{
var deleteDir = Path.Combine(options.Path, oldDir);
if (Directory.Exists(deleteDir))
{
Engine.Logger.Info("Deleting directory " + deleteDir);
Directory.Delete(deleteDir, true);
}
}
catch (Exception e)
{
Engine.Logger.Error(e);
}
}
if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
{
var serviceHelper = new ServiceConfigService(null, null);
if (serviceHelper.ServiceExists())
{
serviceHelper.Start();
}
} else
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettConsole.exe"),
UseShellExecute = true
};
// kill pids after the update on UNIX
if (!isWindows)
KillPids(pids);
if (!isWindows)
if (options.NoRestart == false)
{
if (trayRunning)
{
startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
startInfo.FileName = "mono";
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettTray.exe"),
UseShellExecute = true
};
Process.Start(startInfo);
}
Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
Process.Start(startInfo);
if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
{
var serviceHelper = new ServiceConfigService(null, null);
if (serviceHelper.ServiceExists())
{
serviceHelper.Start();
}
} else
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettConsole.exe"),
UseShellExecute = true
};
if (!isWindows)
{
startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
startInfo.FileName = "mono";
}
Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
Process.Start(startInfo);
}
}
}
private string GetUpdateLocation()
{
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
return new FileInfo(location.AbsolutePath).DirectoryName;
return new FileInfo(HttpUtility.UrlDecode(location.AbsolutePath)).DirectoryName;
}
}
}

View File

@@ -13,9 +13,15 @@ namespace Jackett.Updater
public string Path { get; set; }
[Option('t', "Type", HelpText = "Install type")]
public string Type { get; set; }
public string Type { get; set; }
[Option('a', "Args", HelpText = "Launch arguments")]
public string Args { get; set; }
[Option(HelpText = "Don't restart after update")]
public bool NoRestart { get; set; }
[Option(HelpText = "PIDs which will be killed before (Windows) or after (Unix) the update")]
public string KillPids { get; set; }
}
}

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.5.2" targetFramework="net45" />
<package id="Autofac" version="4.3.0" targetFramework="net45" />
<package id="CommandLineParser" version="1.9.71" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net45" />
<package id="NLog" version="4.2.3" targetFramework="net45" />
<package id="NLog" version="5.0.0-beta05-test" targetFramework="net45" />
</packages>

View File

@@ -9,7 +9,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -17,7 +17,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -31,6 +31,14 @@
<assemblyIdentity name="System.Web.Http.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac.Integration.WebApi" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -20,69 +20,25 @@
display: none;
}
.card {
background-color: #f9f9f9;
border-radius: 6px;
box-shadow: 1px 1px 5px 2px #cdcdcd;
width: 270px;
display: inline-block;
vertical-align: top;
margin: 5px;
overflow: hidden;
position: relative;
}
#indexers {
text-align: center;
margin-top: 30px;
}
#unconfigured-indexers{
text-align: center;
.indexer-table {
text-align: left;
}
#unconfigured-indexers .card {
width: 200px;
position: relative;
.test-success {
color: #449d44;
}
.unconfigured-indexer {
height: 70px;
.test-error {
color: #c9302c;
}
.indexer {
height: 252px;
}
.add-indexer {
border: 0;
}
.indexer-logo {
padding-bottom: 5px;
}
.indexer-logo > .hidden-name {
position: absolute;
color: rgba(255, 255, 255, 0);
left: 0;
}
.indexer-logo img {
width: 100%;
border-bottom: 1px solid #FFF;
}
#unconfigured-indexers .indexer-logo img {
cursor: pointer;
}
.indexer-name > h3 {
margin-top: 13px;
text-align: center;
.test-inprogress {
color: #286090;
}
.indexer-buttons {
@@ -94,33 +50,7 @@
}
.indexer-button-test {
width: 60px;
}
.indexer-add-content {
color: gray;
text-align: center;
}
.indexer-add-content > .glyphicon {
font-size: 50px;
vertical-align: bottom;
}
.indexer-add-content > .light-text {
margin-top: 11px;
font-size: 18px;
margin-left: -5px;
}
.indexer-host {
padding-left: 5px;
padding-right: 5px;
}
.indexer-host > input {
font-size: 12px;
padding: 2px;
width: 60px;
}
.setup-item-inputstring {
@@ -293,3 +223,24 @@ pre {
width: 80px;
}
.setup-item-displayinfo:empty {
display: none;
}
table td.fit{
white-space: nowrap;
width: 1%;
}
.label-imdb {
background-color: #d0ab44;
}
.tooltip-inner {
max-width: 500px !important;
}
.tooltip-inner img {
max-width: 250px;
height: auto;
}

View File

@@ -1,5 +1,9 @@
var basePath = '';
var indexers = [];
var configuredIndexers = [];
var unconfiguredIndexers = [];
$(document).ready(function () {
$.ajaxSetup({ cache: false });
window.jackettIsLocal = window.location.hostname === 'localhost' ||
@@ -22,6 +26,7 @@ function getJackettConfig(callback) {
function loadJackettSettings() {
getJackettConfig(function (data) {
$("#api-key-input").val(data.config.api_key);
$(".api-key-text").text(data.config.api_key);
$("#app-version").html(data.app_version);
$("#jackett-port").val(data.config.port);
$("#jackett-basepathoverride").val(data.config.basepathoverride);
@@ -47,54 +52,151 @@ function loadJackettSettings() {
function reloadIndexers() {
$('#indexers').hide();
$('#indexers > .indexer').remove();
$('#unconfigured-indexers').empty();
var jqxhr = $.get("get_indexers", function (data) {
displayIndexers(data.items);
indexers = data;
configuredIndexers = [];
unconfiguredIndexers = [];
for (var i = 0; i < data.items.length; i++) {
var item = data.items[i];
item.torznab_host = resolveUrl(basePath + "/torznab/" + item.id);
item.potato_host = resolveUrl(basePath + "/potato/" + item.id);
if (item.last_error)
item.state = "error";
else
item.state = "success";
var main_cats_list = [];
for (var catID in item.caps) {
var cat = item.caps[catID];
var mainCat = cat.split("/")[0];
main_cats_list.push(mainCat);
}
item.mains_cats = $.unique(main_cats_list).join(", ");
if (item.configured)
configuredIndexers.push(item);
else
unconfiguredIndexers.push(item);
}
displayConfiguredIndexersList(configuredIndexers);
displayUnconfiguredIndexersList(unconfiguredIndexers);
}).fail(function () {
doNotify("Error loading indexers, request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
});
}
function displayIndexers(items) {
var indexerTemplate = Handlebars.compile($("#configured-indexer").html());
var unconfiguredIndexerTemplate = Handlebars.compile($("#unconfigured-indexer").html());
function displayConfiguredIndexersList(indexers) {
var indexersTemplate = Handlebars.compile($("#configured-indexer-table").html());
var indexersTable = $(indexersTemplate({ indexers: indexers, total_configured_indexers: indexers.length }));
indexersTable.find('table').DataTable(
{
"pageLength": 100,
"lengthMenu": [[10, 20, 50, 100, 200, -1], [10, 20, 50, 100, 200, "All"]],
"order": [[0, "desc"]],
"columnDefs": [
{
"targets": 0,
"visible": true,
"searchable": true
},
{
"targets": 1,
"visible": true,
"searchable": false
}
]
});
$('#indexers').empty();
$('#indexers').append(indexersTable);
prepareTestButtons();
$('#indexers').fadeIn();
prepareSearchButtons();
prepareSetupButtons();
prepareDeleteButtons();
prepareCopyButtons();
}
function displayUnconfiguredIndexersList(indexers) {
var indexersTemplate = Handlebars.compile($("#unconfigured-indexer-table").html());
var indexersTable = $(indexersTemplate({ indexers: indexers, total_unconfigured_indexers: indexers.length }));
indexersTable.find('table').DataTable(
{
"pageLength": 100,
"lengthMenu": [[10, 20, 50, 100, 200, -1], [10, 20, 50, 100, 200, "All"]],
"order": [[0, "desc"]],
"columnDefs": [
{
"targets": 0,
"visible": true,
"searchable": true
},
{
"targets": 1,
"visible": true,
"searchable": true
},
{
"targets": 2,
"visible": true,
"searchable": true
},
{
"targets": 3,
"visible": true,
"searchable": false
}
]
});
$('#unconfigured-indexers-template').empty();
for (var i = 0; i < items.length; i++) {
var item = items[i];
item.torznab_host = resolveUrl(basePath + "/torznab/" + item.id);
item.potato_host = resolveUrl(basePath + "/potato/" + item.id);
if (item.configured)
$('#indexers').append(indexerTemplate(item));
else
$('#unconfigured-indexers-template').append($(unconfiguredIndexerTemplate(item)));
$('#unconfigured-indexers-template').append(indexersTable);
}
function copyToClipboard(text) {
// create hidden text element, if it doesn't already exist
var targetId = "_hiddenCopyText_";
// must use a temporary form element for the selection and copy
target = document.getElementById(targetId);
if (!target) {
var target = document.createElement("textarea");
target.style.position = "absolute";
target.style.left = "-9999px";
target.style.top = "0";
target.id = targetId;
document.body.appendChild(target);
}
target.textContent = text;
// select the content
var currentFocus = document.activeElement;
target.focus();
target.setSelectionRange(0, target.value.length);
// copy the selection
var succeed;
try {
succeed = document.execCommand("copy");
} catch (e) {
succeed = false;
}
// restore original focus
if (currentFocus && typeof currentFocus.focus === "function") {
currentFocus.focus();
}
var addIndexerButton = $($('#add-indexer').html());
addIndexerButton.appendTo($('#indexers'));
target.textContent = "";
addIndexerButton.click(function () {
$("#modals").empty();
var dialog = $($("#select-indexer").html());
dialog.find('#unconfigured-indexers').html($('#unconfigured-indexers-template').html());
$("#modals").append(dialog);
dialog.modal("show");
$('.indexer-setup').each(function (i, btn) {
var $btn = $(btn);
var id = $btn.data("id");
var link = $btn.data("link");
$btn.click(function () {
$('#select-indexer-modal').modal('hide').on('hidden.bs.modal', function (e) {
displayIndexerSetup(id, link);
});
});
return succeed;
}
function prepareCopyButtons() {
$(".indexer-button-copy").each(function (i, btn) {
var $btn = $(btn);
var title = $btn[0].title;
$btn.click(function () {
copyToClipboard(title);
});
});
$('#indexers').fadeIn();
prepareSetupButtons();
prepareTestButtons();
prepareDeleteButtons();
}
function prepareDeleteButtons() {
@@ -118,6 +220,16 @@ function prepareDeleteButtons() {
});
}
function prepareSearchButtons() {
$('.indexer-button-search').each(function (i, btn) {
var $btn = $(btn);
var id = $btn.data("id");
$btn.click(function() {
showSearch(id);
});
});
}
function prepareSetupButtons() {
$('.indexer-setup').each(function (i, btn) {
var $btn = $(btn);
@@ -129,22 +241,55 @@ function prepareSetupButtons() {
});
}
function updateTestState(id, state, message)
{
var btn = $(".indexer-button-test[data-id=" + id + "]");
if (message) {
btn.tooltip("hide");
btn.data('bs.tooltip', false).tooltip({ title: message });
}
var icon = btn.find("span");
icon.removeClass("glyphicon-ok test-success glyphicon-alert test-error glyphicon-refresh spinner test-inprogres");
if (state == "success") {
icon.addClass("glyphicon-ok test-success");
} else if (state == "error") {
icon.addClass("glyphicon-alert test-error");
} else if (state == "inprogres") {
icon.addClass("glyphicon-refresh test-inprogres spinner");
}
}
function testIndexer(id, notifyResult) {
updateTestState(id, "inprogres", null);
if (notifyResult)
doNotify("Test started for " + id, "info", "glyphicon glyphicon-transfer");
var jqxhr = $.post("test_indexer", JSON.stringify({ indexer: id }), function (data) {
if (data.result == "error") {
updateTestState(id, "error", data.error);
if (notifyResult)
doNotify("Test failed for " + id + ": \n" + data.error, "danger", "glyphicon glyphicon-alert");
}
else {
updateTestState(id, "success", "Test successful");
if (notifyResult)
doNotify("Test successful for " + id, "success", "glyphicon glyphicon-ok");
}
}).fail(function () {
doNotify("Error testing indexer, request to Jackett server error", "danger", "glyphicon glyphicon-alert");
});
}
function prepareTestButtons() {
$(".indexer-button-test").each(function (i, btn) {
var $btn = $(btn);
var id = $btn.data("id");
var state = $btn.data("state");
$btn.tooltip();
updateTestState(id, state, null);
$btn.click(function () {
doNotify("Test started for " + id, "info", "glyphicon glyphicon-transfer");
var jqxhr = $.post("test_indexer", JSON.stringify({ indexer: id }), function (data) {
if (data.result == "error") {
doNotify("Test failed for " + id + ": \n" + data.error, "danger", "glyphicon glyphicon-alert");
}
else {
doNotify("Test successful for " + id, "success", "glyphicon glyphicon-ok");
}
}).fail(function () {
doNotify("Error testing indexer, request to Jackett server error", "danger", "glyphicon glyphicon-alert");
});
testIndexer(id, true);
});
});
}
@@ -157,7 +302,7 @@ function displayIndexerSetup(id, link) {
return;
}
populateSetupForm(id, data.name, data.config, data.caps, link);
populateSetupForm(id, data.name, data.config, data.caps, link, data.alternativesitelinks);
}).fail(function () {
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
@@ -200,19 +345,52 @@ function populateConfigItems(configForm, config) {
var template = setupItemTemplate(item);
$formItemContainer.append(template);
if (item.type === 'recaptcha') {
grecaptcha.render($('.jackettrecaptcha')[0], {
'sitekey': item.sitekey
});
var jackettrecaptcha = $('.jackettrecaptcha');
jackettrecaptcha.data("version", item.version);
switch (item.version) {
case "1":
// The v1 reCAPTCHA code uses document.write() calls to write the CAPTCHA to the location where the script was loaded.
// As it's loaded async this doesn't work.
// We use an iframe to work around this problem.
var html = '<script type="text/javascript" src="https://www.google.com/recaptcha/api/challenge?k='+encodeURIComponent(item.sitekey)+'"></script>';
var frame = document.createElement('iframe');
frame.id = "jackettrecaptchaiframe";
frame.style.height = "145px";
frame.style.weight = "326px";
frame.style.border = "none";
frame.onload = function () {
// auto resize iframe to content
frame.style.height = frame.contentWindow.document.body.scrollHeight + 'px';
frame.style.width = frame.contentWindow.document.body.scrollWidth + 'px';
}
jackettrecaptcha.append(frame);
frame.contentDocument.open();
frame.contentDocument.write(html);
frame.contentDocument.close();
break;
case "2":
grecaptcha.render(jackettrecaptcha[0], {
'sitekey': item.sitekey
});
break;
}
}
}
}
}
function newConfigModal(title, config, caps, link) {
function newConfigModal(title, config, caps, link, alternativesitelinks) {
var configTemplate = Handlebars.compile($("#jackett-config-setup-modal").html());
var configForm = $(configTemplate({ title: title, caps: caps, link:link }));
$("#modals").append(configForm);
populateConfigItems(configForm, config);
if (alternativesitelinks.length >= 1) {
var AlternativeSiteLinksTemplate = Handlebars.compile($("#setup-item-alternativesitelinks").html());
var template = $(AlternativeSiteLinksTemplate({ "alternativesitelinks": alternativesitelinks }));
configForm.find("div[data-id='sitelink']").after(template);
}
return configForm;
}
@@ -235,7 +413,18 @@ function getConfigModalJson(configForm) {
break;
case "recaptcha":
if (window.jackettIsLocal) {
itemEntry.value = $('.g-recaptcha-response').val();
var version = $el.find('.jackettrecaptcha').data("version");
switch (version) {
case "1":
var frameDoc = $("#jackettrecaptchaiframe")[0].contentDocument;
itemEntry.version = version;
itemEntry.challenge = $("#recaptcha_challenge_field", frameDoc).val()
itemEntry.value = $("#recaptcha_response_field", frameDoc).val()
break;
case "2":
itemEntry.value = $('.g-recaptcha-response').val();
break;
}
} else {
itemEntry.cookie = $el.find(".setup-item-recaptcha input").val();
}
@@ -246,8 +435,8 @@ function getConfigModalJson(configForm) {
return configJson;
}
function populateSetupForm(indexerId, name, config, caps, link) {
var configForm = newConfigModal(name, config, caps, link);
function populateSetupForm(indexerId, name, config, caps, link, alternativesitelinks) {
var configForm = newConfigModal(name, config, caps, link, alternativesitelinks);
var $goButton = configForm.find(".setup-indexer-go");
$goButton.click(function () {
var data = { indexer: indexerId, name: name };
@@ -308,6 +497,188 @@ function clearNotifications() {
$('[data-notify="container"]').remove();
}
function updateReleasesRow(row)
{
var labels = $(row).find("span.release-labels");
var TitleLink = $(row).find("td.Title > a");
var IMDBId = $(row).data("imdb");
var Banner = $(row).data("banner");
var Description = $(row).data("description");
var DownloadVolumeFactor = parseFloat($(row).find("td.DownloadVolumeFactor").html());
var UploadVolumeFactor = parseFloat($(row).find("td.UploadVolumeFactor").html());
var TitleTooltip = "";
if (Banner)
TitleTooltip += "<img src='" + Banner + "' /><br />";
if (Description)
TitleTooltip += Description;
if (TitleTooltip) {
TitleLink.data("toggle", "tooltip");
TitleLink.tooltip({
title: TitleTooltip,
html: true
});
}
labels.empty();
if (IMDBId) {
labels.append('\n<a href="http://www.imdb.com/title/tt' + IMDBId + '/" class="label label-imdb" alt="IMDB" title="IMDB">IMDB</a>');
}
if (!isNaN(DownloadVolumeFactor)) {
if (DownloadVolumeFactor == 0) {
labels.append('\n<span class="label label-success">FREELEECH</span>');
} else if (DownloadVolumeFactor < 1) {
labels.append('\n<span class="label label-primary">' + DownloadVolumeFactor * 100 + '%DL</span>');
} else if (DownloadVolumeFactor > 1) {
labels.append('\n<span class="label label-danger">' + DownloadVolumeFactor * 100 + '%DL</span>');
}
}
if (!isNaN(UploadVolumeFactor)) {
if (UploadVolumeFactor == 0) {
labels.append('\n<span class="label label-warning">NO UPLOAD</span>');
} else if (UploadVolumeFactor != 1) {
labels.append('\n<span class="label label-info">' + UploadVolumeFactor * 100 + '%UL</span>');
}
}
}
function showSearch(selectedIndexer) {
$('#select-indexer-modal').remove();
var releaseTemplate = Handlebars.compile($("#jackett-search").html());
var releaseDialog = $(releaseTemplate({
indexers: configuredIndexers
}));
$("#modals").append(releaseDialog);
releaseDialog.on('shown.bs.modal', function () {
releaseDialog.find('#searchquery').focus();
});
var setCategories = function (tracker, items) {
var cats = {};
for (var i = 0; i < items.length; i++) {
if (items[i].configured === true && (items[i].id === tracker || tracker === '')) {
indexers["'" + items[i].id + "'"] = items[i].name;
for (var prop in items[i].caps) {
cats[prop] = items[i].caps[prop];
}
}
}
var select = $('#searchCategory');
select.html("<option value=''>-- All --</option>");
$.each(cats, function (value, key) {
select.append($("<option></option>")
.attr("value", value).text(key + ' (' + value + ')'));
});
};
$('#searchTracker').change(jQuery.proxy(function () {
var trackerId = $('#searchTracker').val();
setCategories(trackerId, this.items);
}, { items: configuredIndexers }));
document.getElementById("searchquery")
.addEventListener("keyup", function (event) {
event.preventDefault();
if (event.keyCode == 13) {
document.getElementById("jackett-search-perform").click();
}
});
$('#jackett-search-perform').click(function () {
if ($('#jackett-search-perform').text().trim() !== 'Search trackers') {
// We are searchin already
return;
}
var queryObj = {
Query: releaseDialog.find('#searchquery').val(),
Category: releaseDialog.find('#searchCategory').val(),
Tracker: releaseDialog.find('#searchTracker').val().replace("'", "").replace("'", ""),
};
$('#searchResults').empty();
$('#jackett-search-perform').html($('#spinner').html());
var jqxhr = $.post("search", queryObj, function (data) {
$('#jackett-search-perform').html('Search trackers');
var resultsTemplate = Handlebars.compile($("#jackett-search-results").html());
var results = $('#searchResults');
results.html($(resultsTemplate(data)));
results.find('tr.jackett-search-results-row').each(function () { updateReleasesRow(this); });
results.find('table').DataTable(
{
"pageLength": 20,
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "All"]],
"order": [[0, "desc"]],
"columnDefs": [
{
"targets": 0,
"visible": false,
"searchable": false,
"type": 'date'
},
{
"targets": 1,
"visible": true,
"searchable": false,
"iDataSort": 0
},
{
"targets": 4,
"visible": false,
"searchable": false,
"type": 'num'
},
{
"targets": 5,
"visible": true,
"searchable": false,
"iDataSort": 4
}
],
initComplete: function () {
var count = 0;
this.api().columns().every(function () {
count++;
if (count === 3 || count === 8) {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo($(column.footer()).empty())
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>')
});
}
});
}
});
}).fail(function () {
$('#jackett-search-perform').html('Search trackers');
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
});
});
var searchTracker = releaseDialog.find("#searchTracker");
if (selectedIndexer)
searchTracker.val(selectedIndexer);
searchTracker.trigger("change");
releaseDialog.modal("show");
}
function bindUIButtons() {
$('body').on('click', '.downloadlink', function (e, b) {
@@ -330,11 +701,38 @@ function bindUIButtons() {
return false;
});
$('#jackett-add-indexer').click(function () {
$("#modals").empty();
var dialog = $($("#select-indexer").html());
dialog.find('#unconfigured-indexers').html($('#unconfigured-indexers-template').html());
$("#modals").append(dialog);
dialog.modal("show");
$('.indexer-setup').each(function (i, btn) {
var $btn = $(btn);
var id = $btn.data("id");
var link = $btn.data("link");
$btn.click(function () {
$('#select-indexer-modal').modal('hide').on('hidden.bs.modal', function (e) {
displayIndexerSetup(id, link);
});
});
});
});
$("#jackett-test-all").click(function () {
$(".indexer-button-test").each(function (i, btn) {
var $btn = $(btn);
var id = $btn.data("id");
testIndexer(id, false);
});
});
$("#jackett-show-releases").click(function () {
var jqxhr = $.get("GetCache", function (data) {
var releaseTemplate = Handlebars.compile($("#jackett-releases").html());
var item = { releases: data, Title: 'Releases' };
var releaseDialog = $(releaseTemplate(item));
releaseDialog.find('tr.jackett-releases-row').each(function () { updateReleasesRow(this); });
releaseDialog.find('table').DataTable(
{
"pageLength": 20,
@@ -382,7 +780,7 @@ function bindUIButtons() {
var count = 0;
this.api().columns().every(function () {
count++;
if (count === 5 || count === 9) {
if (count === 5 || count === 10) {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo($(column.footer()).empty())
@@ -412,135 +810,7 @@ function bindUIButtons() {
});
$("#jackett-show-search").click(function () {
$('#select-indexer-modal').remove();
var jqxhr = $.get("get_indexers", function (data) {
var scope = {
items: data.items
};
var indexers = [];
indexers.push({ id: '', name: '-- All --' });
for (var i = 0; i < data.items.length; i++) {
if (data.items[i].configured === true) {
indexers.push(data.items[i]);
}
}
var releaseTemplate = Handlebars.compile($("#jackett-search").html());
var releaseDialog = $(releaseTemplate({ indexers: indexers }));
$("#modals").append(releaseDialog);
releaseDialog.modal("show");
var setCategories = function (tracker, items) {
var cats = {};
for (var i = 0; i < items.length; i++) {
if (items[i].configured === true && (items[i].id === tracker || tracker === '')) {
indexers["'" + items[i].id + "'"] = items[i].name;
for (var prop in items[i].caps) {
cats[prop] = items[i].caps[prop];
}
}
}
var select = $('#searchCategory');
select.html("<option value=''>-- All --</option>");
$.each(cats, function (value, key) {
select.append($("<option></option>")
.attr("value", value).text(key + ' (' + value + ')'));
});
};
setCategories('', data.items);
$('#searchTracker').change(jQuery.proxy(function () {
var trackerId = $('#searchTracker').val();
setCategories(trackerId, this.items);
}, scope));
$('#jackett-search-perform').click(function () {
if ($('#jackett-search-perform').text().trim() !== 'Search trackers') {
// We are searchin already
return;
}
var queryObj = {
Query: releaseDialog.find('#searchquery').val(),
Category: releaseDialog.find('#searchCategory').val(),
Tracker: releaseDialog.find('#searchTracker').val().replace("'", "").replace("'", ""),
};
$('#searchResults').empty();
$('#jackett-search-perform').html($('#spinner').html());
var jqxhr = $.post("search", queryObj, function (data) {
$('#jackett-search-perform').html('Search trackers');
var resultsTemplate = Handlebars.compile($("#jackett-search-results").html());
var results = $('#searchResults');
results.html($(resultsTemplate(data)));
results.find('table').DataTable(
{
"pageLength": 20,
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "All"]],
"order": [[0, "desc"]],
"columnDefs": [
{
"targets": 0,
"visible": false,
"searchable": false,
"type": 'date'
},
{
"targets": 1,
"visible": true,
"searchable": false,
"iDataSort": 0
},
{
"targets": 4,
"visible": false,
"searchable": false,
"type": 'num'
},
{
"targets": 5,
"visible": true,
"searchable": false,
"iDataSort": 4
}
],
initComplete: function () {
var count = 0;
this.api().columns().every(function () {
count++;
if (count === 3 || count === 7) {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo($(column.footer()).empty())
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>')
});
}
});
}
});
}).fail(function () {
$('#jackett-search-perform').html('Search trackers');
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
});
});
}).fail(function () {
doNotify("Error loading indexers, request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
});
showSearch(null);
});
$("#view-jackett-logs").click(function () {
@@ -622,4 +892,4 @@ function bindUIButtons() {
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
});
});
}
}

View File

@@ -3,7 +3,7 @@
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico' />
<link rel='shortcut icon' type='image/x-icon' href='../favicon.ico' />
<script src="../libs/filesize.min.js"></script>
<script src="../libs/jquery.min.js"></script>
<script src="../libs/jquery.dataTables.min.js"></script>
@@ -32,11 +32,17 @@
</div>
<hr />
<div class="pull-right">
<button id="jackett-add-indexer" class="btn btn-success btn-sm">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add indexer
</button>
<button id="jackett-show-search" class="btn btn-success btn-sm">
<i class="fa fa-search"></i> Manual Search <span class="glyphicon glyphicon-ok-wrench" aria-hidden="true"></span>
<span class="glyphicon glyphicon-search" aria-hidden="true"></span> Manual Search
</button>
<button id="jackett-show-releases" class="btn btn-primary btn-sm">
<i class="fa fa-database"></i> View cached releases <span class="glyphicon glyphicon-ok-wrench" aria-hidden="true"></span>
<i class="fa fa-database"></i> View cached releases
</button>
<button id="jackett-test-all" class="btn btn-warning btn-sm">
<span class="glyphicon glyphicon-screenshot" aria-hidden="true"></span> Test All
</button>
</div>
<h3>Configured Indexers</h3>
@@ -44,17 +50,18 @@
<hr />
<div class="input-area">
<h4>Adding a Jackett indexer in Sonarr</h4>
<h4>Adding a Jackett indexer in Sonarr or Radarr</h4>
<ol>
<li>Go to <b>Settings > Indexers > Add > Torznab > Custom</b>.</li>
<li>For <b>URL</b> enter the <b>Torznab Host</b> of one of the indexers.</li>
<li>For the <b>API key</b> using the key below.</li>
<li>Click on the indexers corresponding <button type="button" class="btn btn-xs btn-info">Copy Torznab Feed</button> button and past it into the Sonarr/Radarr <b>URL</b> field.</li>
<li>For the <b>API key</b> use <b class="api-key-text"></b>.</li>
</ol>
<h4>Adding a Jackett indexer in CouchPotato</h4>
<ol>
<li>Go to <b>Settings > Searchers</b>.</li>
<li>Enable <b>TorrentPotato</b> and in the host field enter the <b>TorrentPotato host</b> of one of the indexers.</li>
<li>For the <b>Passkey</b> use the <b>API key</b>. Leave username blank.</li>
<li>Enable <b>TorrentPotato</b>.
<li>Click on the indexers corresponding <button type="button" class="btn btn-xs btn-info">Copy Potato Feed</button> button and past it into the CouchPotato <b>host</b> field.</li>
<li>For the <b>Passkey</b> use <b class="api-key-text"></b>. Leave the <b>username</b> field blank.</li>
</ol>
</div>
@@ -159,7 +166,7 @@
</div>
</script>
<script id="setup-item-displayimage" type="text/x-handlebars-template">
<img class="setup-item-displayimage" src="{{{value}}}" />
<img class="setup-item-displayimage" src="{{{value}}}" alt="No image available" />
</script>
<script id="setup-item-displayinfo" type="text/x-handlebars-template">
<div class="setup-item-displayinfo alert alert-info" role="alert">{{{value}}}</div>
@@ -169,50 +176,93 @@
<input class="form-control" type="text" value="{{{value}}}" />
</div>
</script>
<script id="configured-indexer" type="text/x-handlebars-template">
<div class="configured-indexer indexer card">
<div class="indexer-logo">
<!-- Make section browser searchable -->
<span class="hidden-name">{{name}}</span>
<img alt="{{name}}" title="{{name}}" src="../logos/{{id}}.png" />
</div>
<div class="indexer-buttons">
<button class="btn btn-primary btn-sm indexer-setup" data-id="{{id}}" data-link="{{site_link}}">
<span class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
</button>
<button class="btn btn-danger btn-sm indexer-button-delete" data-id="{{id}}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
</button>
<a class="btn btn-info btn-sm" target="_blank" href="{{site_link}}">
<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
</a>
<button class="btn btn-warning btn-sm indexer-button-test" data-id="{{id}}">
Test <span class="glyphicon glyphicon-screenshot" aria-hidden="true"></span>
</button>
</div>
<div class="indexer-host">
<b>Torznab Host:</b>
<input class="form-control" type="text" value="{{torznab_host}}" placeholder="Torznab Host" readonly="">
<b>CouchPotato Host:</b>
{{#if potatoenabled}}
<input class="form-control" type="text" value="{{potato_host}}" placeholder="Torznab Host" readonly="">
{{else}}
<input class="form-control" type="text" value="Not available" placeholder="Torznab Host" readonly="">
{{/if}}
</div>
<script id="setup-item-alternativesitelinks" type="text/x-handlebars-template">
<div class="setup-item-alternativesitelinks alert alert-info" role="alert">
This indexer has multiple known URLs which you can change above:
<ul>
{{#each alternativesitelinks}}
<li>{{this}}</li>
{{/each}}
</ul>
</div>
</script>
<script id="unconfigured-indexer" type="text/x-handlebars-template">
<div class="unconfigured-indexer card">
<div class="indexer-logo indexer-setup" data-id="{{id}}" data-link="{{site_link}}">
<!-- Make section browser searchable -->
<span class="hidden-name">{{name}}</span>
<img alt="{{name}}" title="{{name}}" src="../logos/{{id}}.png" />
</div>
</div>
<script id="configured-indexer-table" type="text/x-handlebars-template">
<table class="indexer-table configured-indexer-table dataTable compact cell-border hover stripe table table-responsive">
<thead>
<tr>
<th>Indexer</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{{#each indexers}}
<tr class="configured-indexer-row">
<td><a target="_blank" href="{{site_link}}" title="{{description}}">{{name}}</a></td>
<td class="fit">
<div class="indexer-buttons">
<button title="{{torznab_host}}" type="button" class="indexer-button-copy btn btn-xs btn-info">Copy Torznab Feed</button>
<button title="{{potato_host}}" type="button" class="indexer-button-copy btn btn-xs btn-info{{#unless potatoenabled}} disabled{{/unless}}">Copy Potato Feed</button>
<button title="Search" class="btn btn-success btn-xs indexer-button-search" data-id="{{id}}">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button>
<button title="Configure" class="btn btn-primary btn-xs indexer-setup" data-id="{{id}}" data-link="{{site_link}}">
<span class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
</button>
<button title="Delete" class="btn btn-danger btn-xs indexer-button-delete" data-id="{{id}}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
</button>
<button title="{{last_error}}" class="btn btn-warning btn-xs indexer-button-test" data-toggle="tooltip" data-id="{{id}}" data-state="{{state}}">
Test
<span class="glyphicon" aria-hidden="true"></span>
</button>
</div>
</td>
</tr>
{{/each}}
</tbody>
<tfoot>
<tr>
<td colspan="2">Total configured indexers: {{total_configured_indexers}}</td>
</tr>
</tfoot>
</table>
</script>
<script id="unconfigured-indexer-table" type="text/x-handlebars-template">
<table class="indexer-table configured-indexer-table dataTable compact cell-border hover stripe table table-responsive">
<thead>
<tr>
<th>Indexer</th>
<th>Categories</th>
<th>Language</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each indexers}}
<tr class="unconfigured-indexer-row">
<td><a target="_blank" href="{{site_link}}" title="{{description}}">{{name}}</a></td>
<td>{{mains_cats}}</td>
<td>{{language}}</td>
<td class="fit">
<div class="indexer-buttons">
<button title="Configure" class="btn btn-success btn-xs indexer-setup" data-id="{{id}}" data-link="{{site_link}}">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
</button>
</div>
</td>
</tr>
{{/each}}
</tbody>
<tfoot>
<tr>
<td colspan="4">Total unconfigured indexers: {{total_unconfigured_indexers}}</td>
</tr>
</tfoot>
</table>
</script>
<script id="jackett-releases" type="text/x-handlebars-template">
@@ -236,26 +286,34 @@
<th>Name</th>
<th>Size</th>
<th>Size</th>
<th>Files</th>
<th>Category</th>
<th>Grabs</th>
<th>Seeds</th>
<th>Leechers</th>
<th>DL Factor</th>
<th>UL Factor</th>
<th>Download</th>
</tr>
</thead>
<tbody>
{{#each releases}}
<tr>
<tr class="jackett-releases-row" data-imdb="{{Imdb}}" data-banner="{{BannerUrl}}" data-description="{{Description}}">
<td>{{PublishDate}}</td>
<td>{{FirstSeen}}</td>
<td>{{jacketTimespan PublishDate}}</td>
<td>{{jacketTimespan FirstSeen}}</td>
<td>{{Tracker}}</td>
<td><a href="{{Comments}}">{{Title}}</a></td>
<td class="Title"><a href="{{Comments}}">{{Title}}</a> <span class="release-labels"></span></td>
<td>{{Size}}</td>
<td>{{jacketSize Size}}</td>
<td class="fit">{{jacketSize Size}}</td>
<td>{{Files}}</td>
<td>{{CategoryDesc}}</td>
<td>{{Grabs}}</td>
<td>{{Seeders}}</td>
<td>{{Peers}}</td>
<td class="DownloadVolumeFactor">{{DownloadVolumeFactor}}</td>
<td class="UploadVolumeFactor">{{UploadVolumeFactor}}</td>
<td class="downloadcolumn">
<a class="downloadlink" title="Download locally" href="{{Link}}"><i class="fa fa-download"></i></a>
{{#if BlackholeLink}}
@@ -277,6 +335,12 @@
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tfoot>
</table>
@@ -305,6 +369,7 @@
<select name="category" id="searchCategory"></select>
<label>Tracker</label>
<select name="tracker" id="searchTracker">
<option value="">-- All --</option>
{{#each indexers}}
<option value="{{id}}">{{name}}</option>
{{/each}}
@@ -334,24 +399,32 @@
<th>Name</th>
<th>Size</th>
<th>Size</th>
<th>Files</th>
<th>Category</th>
<th>Grabs</th>
<th>Seeds</th>
<th>Leechers</th>
<th>DL Factor</th>
<th>UL Factor</th>
<th>Download</th>
</tr>
</thead>
<tbody>
{{#each Results}}
<tr>
<tr class="jackett-search-results-row" data-imdb="{{Imdb}}" data-banner="{{BannerUrl}}" data-description="{{Description}}">
<td>{{PublishDate}}</td>
<td>{{jacketTimespan PublishDate}}</td>
<td>{{Tracker}}</td>
<td><a href="{{Comments}}">{{Title}}</a></td>
<td class="Title"><a href="{{Comments}}">{{Title}}</a> <span class="release-labels"></span></td>
<td>{{Size}}</td>
<td>{{jacketSize Size}}</td>
<td class="fit">{{jacketSize Size}}</td>
<td>{{Files}}</td>
<td>{{CategoryDesc}}</td>
<td>{{Grabs}}</td>
<td>{{Seeders}}</td>
<td>{{Peers}}</td>
<td class="DownloadVolumeFactor">{{DownloadVolumeFactor}}</td>
<td class="UploadVolumeFactor">{{UploadVolumeFactor}}</td>
<td class="downloadcolumn">
<a class="downloadlink" title="Download locally" href="{{Link}}"><i class="fa fa-download"></i></a>
{{#if BlackholeLink}}
@@ -371,6 +444,12 @@
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tfoot>
</table>
@@ -469,14 +548,7 @@
</div>
</div>
</script>
<script id="add-indexer" type="text/x-handlebars-template">
<button class="indexer card add-indexer" data-toggle="modal">
<div class="indexer-add-content">
<span class="glyphicon glyphicon glyphicon-plus" aria-hidden="true"></span>
<div class="light-text">Add</div>
</div>
</button>
</script>
<script id="spinner" type="text/x-handlebars-template">
<span class="spinner glyphicon glyphicon-refresh"></span>
</script>

View File

@@ -4,7 +4,7 @@
<head>
<meta charset="utf-8" />
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico' />
<link rel='shortcut icon' type='image/x-icon' href='../favicon.ico' />
<script src="../libs/jquery.min.js"></script>
<script src="../libs/jquery.dataTables.min.js"></script>
@@ -38,4 +38,4 @@
</form>
</div>
</body>
</html>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -161,6 +161,7 @@ namespace Jackett.Controllers
jsonReply["config"] = config.ToJson(null);
jsonReply["caps"] = indexer.TorznabCaps.CapsToJson();
jsonReply["name"] = indexer.DisplayName;
jsonReply["alternativesitelinks"] = JToken.FromObject(indexer.AlternativeSiteLinks);
jsonReply["result"] = "success";
}
catch (Exception ex)
@@ -232,6 +233,8 @@ namespace Jackett.Controllers
item["description"] = indexer.DisplayDescription;
item["configured"] = indexer.IsConfigured;
item["site_link"] = indexer.SiteLink;
item["language"] = indexer.Language;
item["last_error"] = indexer.LastError;
item["potatoenabled"] = indexer.TorznabCaps.Categories.Select(c => c.ID).Any(i => PotatoController.MOVIE_CATS.Contains(i));
var caps = new JObject();
@@ -256,19 +259,24 @@ namespace Jackett.Controllers
public async Task<IHttpActionResult> Test()
{
JToken jsonReply = new JObject();
IIndexer indexer = null;
try
{
var postData = await ReadPostDataJson();
string indexerString = (string)postData["indexer"];
indexer = indexerService.GetIndexer(indexerString);
await indexerService.TestIndexer(indexerString);
jsonReply["name"] = indexerService.GetIndexer(indexerString).DisplayName;
jsonReply["name"] = indexer.DisplayName;
jsonReply["result"] = "success";
indexer.LastError = null;
}
catch (Exception ex)
{
logger.Error(ex, "Exception in test_indexer");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
if (indexer != null)
indexer.LastError = ex.Message;
}
return Json(jsonReply);
}
@@ -473,13 +481,25 @@ namespace Jackett.Controllers
public ManualSearchResult Search([FromBody]AdminSearch value)
{
var results = new List<TrackerCacheResult>();
var query = new TorznabQuery()
var stringQuery = new TorznabQuery()
{
SearchTerm = value.Query,
Categories = value.Category == 0 ? new int[0] : new int[1] { value.Category }
};
stringQuery.ExpandCatsToSubCats();
query.ExpandCatsToSubCats();
// try to build an IMDB Query
var imdbID = ParseUtil.GetFullImdbID(stringQuery.SanitizedSearchTerm);
TorznabQuery imdbQuery = null;
if (imdbID != null)
{
imdbQuery = new TorznabQuery()
{
ImdbID = imdbID,
Categories = stringQuery.Categories
};
imdbQuery.ExpandCatsToSubCats();
}
var trackers = indexerService.GetAllIndexers().Where(t => t.IsConfigured).ToList();
if (!string.IsNullOrWhiteSpace(value.Tracker))
@@ -496,6 +516,11 @@ namespace Jackett.Controllers
{
try
{
var query = stringQuery;
// use imdb Query for trackers which support it
if (imdbQuery != null && indexer.TorznabCaps.SupportsImdbSearch)
query = imdbQuery;
var searchResults = indexer.PerformQuery(query).Result;
searchResults = indexer.CleanLinks(searchResults);
cacheService.CacheRssResults(indexer, searchResults);
@@ -536,7 +561,7 @@ namespace Jackett.Controllers
if (manualResult.Indexers.Count == 0)
manualResult.Indexers = new List<string>() { "None" };
logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", query.GetQueryString(), string.Join(", ", manualResult.Indexers), manualResult.Results.Count));
logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", stringQuery.GetQueryString(), string.Join(", ", manualResult.Indexers), manualResult.Results.Count));
return manualResult;
}
}

View File

@@ -83,7 +83,9 @@ namespace Jackett.Controllers
if (string.IsNullOrWhiteSpace(request.search))
{
// We are searching by IMDB id so look up the name
var response = await webClient.GetString(new Utils.Clients.WebRequest("http://www.omdbapi.com/?type=movie&i=" + request.imdbid));
var omdbapiRequest = new Utils.Clients.WebRequest("http://www.omdbapi.com/?type=movie&i=" + request.imdbid);
omdbapiRequest.Encoding = Encoding.UTF8;
var response = await webClient.GetString(omdbapiRequest);
if (response.Status == HttpStatusCode.OK)
{
JObject result = JObject.Parse(response.Content);
@@ -99,7 +101,9 @@ namespace Jackett.Controllers
{
ApiKey = request.passkey,
Categories = MOVIE_CATS,
SearchTerm = request.search
SearchTerm = request.search,
ImdbID = request.imdbid,
QueryType = "TorrentPotato"
};
IEnumerable<ReleaseInfo> releases = new List<ReleaseInfo>();
@@ -138,11 +142,12 @@ namespace Jackett.Controllers
details_url = release.Comments.ToString(),
download_url = release.Link.ToString(),
imdb_id = release.Imdb.HasValue ? "tt" + release.Imdb : null,
freeleech = false,
freeleech = (release.DownloadVolumeFactor == 0 ? true : false),
type = "movie",
size = (long)release.Size / (1024 * 1024), // This is in MB
leechers = (int)release.Peers - (int)release.Seeders,
seeders = (int)release.Seeders
seeders = (int)release.Seeders,
publish_date = r.PublishDate == DateTime.MinValue ? null : release.PublishDate.ToUniversalTime().ToString("s")
});
}
}

View File

@@ -1,6 +1,7 @@
using AutoMapper;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using NLog;
using System;
using System.Collections.Generic;
@@ -12,7 +13,8 @@ using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Xml.Linq;
namespace Jackett.Controllers
{
[AllowAnonymous]
@@ -32,6 +34,24 @@ namespace Jackett.Controllers
cacheService = c;
}
public HttpResponseMessage GetErrorXML(int code, string description)
{
var xdoc = new XDocument(
new XDeclaration("1.0", "UTF-8", null),
new XElement("error",
new XAttribute("code", code.ToString()),
new XAttribute("description", description)
)
);
var xml = xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString();
return new HttpResponseMessage()
{
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
};
}
[HttpGet]
public async Task<HttpResponseMessage> Call(string indexerID)
{
@@ -42,7 +62,7 @@ namespace Jackett.Controllers
{
return new HttpResponseMessage()
{
Content = new StringContent(indexer.TorznabCaps.ToXml(), Encoding.UTF8, "application/rss+xml")
Content = new StringContent(indexer.TorznabCaps.ToXml(), Encoding.UTF8, "application/xml")
};
}
@@ -62,6 +82,34 @@ namespace Jackett.Controllers
{
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer is not configured.");
}
if (torznabQuery.ImdbID != null)
{
if (torznabQuery.QueryType != "movie")
{
logger.Warn(string.Format("A non movie request with an imdbid was made from {0}.", Request.GetOwinContext().Request.RemoteIpAddress));
return GetErrorXML(201, "Incorrect parameter: only movie-search supports the imdbid parameter");
}
if (!string.IsNullOrEmpty(torznabQuery.SearchTerm))
{
logger.Warn(string.Format("A movie-search request from {0} was made contining q and imdbid.", Request.GetOwinContext().Request.RemoteIpAddress));
return GetErrorXML(201, "Incorrect parameter: please specify either imdbid or q");
}
torznabQuery.ImdbID = ParseUtil.GetFullImdbID(torznabQuery.ImdbID); // normalize ImdbID
if (torznabQuery.ImdbID == null)
{
logger.Warn(string.Format("A movie-search request from {0} was made with an invalid imdbid.", Request.GetOwinContext().Request.RemoteIpAddress));
return GetErrorXML(201, "Incorrect parameter: invalid imdbid format");
}
if (!indexer.TorznabCaps.SupportsImdbSearch)
{
logger.Warn(string.Format("A movie-search request with imdbid from {0} was made but the indexer {1} doesn't support it.", Request.GetOwinContext().Request.RemoteIpAddress, indexer.DisplayName));
return GetErrorXML(203, "Function Not Available: imdbid is not supported by this indexer");
}
}
var releases = await indexer.PerformQuery(torznabQuery);

View File

@@ -24,14 +24,16 @@ namespace Jackett
public string Referer { get; private set; }
public HttpMethod Method { get; private set; }
public IEnumerable<KeyValuePair<string, string>> PostData { get; set; }
public Dictionary<string, string> Headers { get; set; }
public string RawPOSTDdata { get; set;}
public CurlRequest(HttpMethod method, string url, string cookies = null, string referer = null, string rawPOSTData = null)
public CurlRequest(HttpMethod method, string url, string cookies = null, string referer = null, Dictionary<string, string> headers = null, string rawPOSTData = null)
{
Method = method;
Url = url;
Url = url.Replace(" ", "+"); // avoids bad request to cloudflare for urls containing a space followed by H (" H")
Cookies = cookies;
Referer = referer;
Headers = headers;
RawPOSTDdata = rawPOSTData;
}
}
@@ -52,16 +54,16 @@ namespace Jackett
}
}
public static async Task<CurlResponse> GetAsync(string url, string cookies = null, string referer = null)
public static async Task<CurlResponse> GetAsync(string url, string cookies = null, string referer = null, Dictionary<string, string> headers = null)
{
var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer);
var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer, headers);
var result = await PerformCurlAsync(curlRequest);
return result;
}
public static async Task<CurlResponse> PostAsync(string url, IEnumerable<KeyValuePair<string, string>> formData, string cookies = null, string referer = null, string rawPostData =null)
public static async Task<CurlResponse> PostAsync(string url, IEnumerable<KeyValuePair<string, string>> formData, string cookies = null, string referer = null, Dictionary<string, string> headers = null, string rawPostData =null)
{
var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer);
var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer, headers);
curlRequest.PostData = formData;
curlRequest.RawPOSTDdata = rawPostData;
var result = await PerformCurlAsync(curlRequest);
@@ -90,7 +92,16 @@ namespace Jackett
easy.BufferSize = 64 * 1024;
easy.UserAgent = BrowserUtil.ChromeUserAgent;
easy.FollowLocation = false;
easy.ConnectTimeout = 20;
easy.ConnectTimeout = 20;
if(curlRequest.Headers != null)
{
CurlSlist curlHeaders = new CurlSlist();
foreach (var header in curlRequest.Headers)
{
curlHeaders.Append(header.Key + ": " + header.Value);
}
easy.SetOpt(CurlOption.HttpHeader, curlHeaders);
}
easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) =>
{
@@ -151,7 +162,7 @@ namespace Jackett
if (easy.LastErrorCode != CurlCode.Ok)
{
var message = "Error " + easy.LastErrorCode.ToString() + " " + easy.LastErrorDescription;
var message = "Error " + easy.LastErrorCode.ToString() + " " + easy.LastErrorDescription + " " + easy.ErrorBuffer;
if (null != OnErrorMessage)
OnErrorMessage(message);
else
@@ -173,7 +184,7 @@ namespace Jackett
var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
var headers = new List<string[]>();
var headerCount = 0;
HttpStatusCode status = HttpStatusCode.InternalServerError;
HttpStatusCode status = HttpStatusCode.NotImplemented;
var cookieBuilder = new StringBuilder();
var cookies = new List<Tuple<string, string>>();
foreach (var headerPart in headerParts)
@@ -216,6 +227,31 @@ namespace Jackett
cookieBuilder.AppendFormat("{0} ", cookieGroup.Last().Item2);
}
// add some debug output to track down the problem causing people getting InternalServerError results
if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError)
{
try
{
OnErrorMessage("got NotImplemented/InternalServerError");
OnErrorMessage("request.Method: " + curlRequest.Method);
OnErrorMessage("request.Url: " + curlRequest.Url);
OnErrorMessage("request.Cookies: " + curlRequest.Cookies);
OnErrorMessage("request.Referer: " + curlRequest.Referer);
OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata);
OnErrorMessage("cookies: "+ cookieBuilder.ToString().Trim());
OnErrorMessage("headerString:\n" + headerString);
foreach (var headerPart in headerParts)
{
OnErrorMessage("headerParts: "+headerPart);
}
}
catch (Exception ex)
{
OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex));
}
}
var contentBytes = Combine(contentBuffers.ToArray());
var curlResponse = new CurlResponse(headers, contentBytes, status, cookieBuilder.ToString().Trim());
return curlResponse;

View File

@@ -0,0 +1,138 @@
---
site: 2fast4you
name: 2 Fast 4 You
language: fr-fr
encoding: UTF-8
links:
- http://www.2f4y.me/
caps:
categories:
10: TV/Anime # Animation: HD720P
11: TV/Anime # Animation: HD1080P
56: TV/Anime # Animation: DVDRip
13: TV/Anime # Animation: DVD
18: PC/0day # Applications: PC
16: PC/Games # Applications: Jeux
19: PC/Phone-Android # Applications: Android
38: PC/Phone-IOS # Applications: Mobile Phone
17: PC/0day # Applications: Autres
67: TV # Autres: Emission TV
68: TV/Sport # Autres: Sport
40: Other # Autres: Autres
14: TV/Documentary # Documentaires: DivX
15: TV/Documentary # Documentaires: HD
76: TV/Documentary # Documentaires: TVRip
62: Audio/Audiobook # E-Books: E-Books Audio
50: Books # E-Books: Manuel Français
49: Books # E-Books: Manuel Anglais
36: Books # E-Books: Livres Français
53: Books # E-Books: Livre Anglais
52: Books # E-Books: Revue - Journaux
51: Books # E-Books: BD
66: Movies # Films: VOSTFR
71: Movies/WEBDL # Films: WEB-DL
65: Movies # Films: VO
72: Movies/SD # Films: TVRip/HDTV
70: Movies/HD # Films: MHD X265
57: Movies/SD # Films: TS/CAM
59: Movies # Films: Spectacle
55: Movies/HD # Films: MHD 720P
54: Movies/HD # Films: MHD 1080P
1: Movies/HD # Films: HD720P
2: Movies/HD # Films: HD1080P
90: Movies/HD # Films: HD X265
92: Movies/HD # Films: 4K
69: Movies/3D # Films: Film 3D
3: Movies/DVD # Films: DVDRIP
4: Movies/DVD # Films: DVD5
5: Movies/DVD # Films: DVD9
91: Movies/HD # Films: RemuX
89: Movies/HD # Films: BD/BR Rip
88: Movies/BluRay # Films: Full BD/BR
77: Other # GPS: Cartes
78: Other # GPS: Radars
79: TV/Anime # Mangas: HD
80: TV/Anime # Mangas: HD VO
81: TV/Anime # Mangas: HD VOSTFR
82: TV/Anime # Mangas: DVDRIP
83: TV/Anime # Mangas: DVDRIP VO
84: TV/Anime # Mangas: DVDRIP VOSTFR
85: TV/Anime # Mangas: Web-DL
86: TV/Anime # Mangas: TV-RIP
75: Audio # Musique: Concert TVRip
25: Audio/MP3 # Musique: Single MP3
24: Audio/Lossless # Musique: Single Flac
22: Audio/MP3 # Musique: Album MP3
23: Audio/Lossless # Musique: Album Flac
64: Audio # Musique: Mégamix Maison
58: Audio # Musique: Concert
61: TV # Serie TV: Episode VOSTFR
63: TV # Serie TV: Episode VO
12: TV/Anime # Serie TV: Animation
74: TV # Serie TV: TVRip
73: TV/WEB-DL # Serie TV: WEB-DL
7: TV # Serie TV: Episode FR
6: TV # Serie TV: Saison FR
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: form:contains("Erreur")
message:
selector: form
remove: table
test:
path: torrents-search.php
search:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
fields:
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php", "download.php"]
title:
selector: a[href^="torrents-details.php?id="]
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
banner:
selector: img.rounded-img
attribute: src
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[title="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,82 @@
---
site: alphareign
name: AlphaReign
description: "A DHT only tracker"
language: en-us
encoding: UTF-8
links:
- https://alphareign.se
caps:
categories:
Movies: Movies
Movies/HD: Movies/HD
Movies/SD: Movies/SD
TV: TV
TV/HD: TV/HD
TV/SD: TV/SD
Other: Other
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /login
method: form
form: form[action^="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- path: /login
selector: div.auth-form > div > div.alert-danger
test:
path: settings
selector: a[href="/logout"]
ratio:
text: "∞"
search:
path: /
method: get
inputs:
query: "{{ .Keywords }}"
rows:
selector: .result
fields:
title:
attribute: data-name
details:
selector: a[href^="/torrent"]
attribute: href
download:
selector: a[href^="magnet:"]
attribute: href
date:
attribute: data-added
size:
attribute: data-size
seeders:
attribute: data-seeders
leechers:
attribute: data-leechers
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
category:
case:
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"movie\") + a[class=\"label label-info\"]:contains(\"HD\")": "Movies/HD"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"movie\") + a[class=\"label label-info\"]:contains(\"720p\")": "Movies/HD"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"movie\") + a[class=\"label label-info\"]:contains(\"1080p\")": "Movies/HD"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"movie\") + a[class=\"label label-info\"]:contains(\"SD\")": "Movies/SD"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"movie\")": "Movies"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"show\") + a[class=\"label label-info\"]:contains(\"HD\")": "TV/HD"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"show\") + a[class=\"label label-info\"]:contains(\"SD\")": "TV/SD"
"a[class=\"label label-primary\"]:contains(\"video\") + a[class=\"label label-success\"]:contains(\"show\")": "TV"
"*": "Other"

View File

@@ -0,0 +1,123 @@
---
site: aox
name: AOX
language: en-us
encoding: UTF-8
links:
- https://aox.to/
caps:
categories:
# Japanese
1: Movies # jMovies
2: TV # TV Shows
3: TV/Other # Variety Shows
# Korean
6: Movies # kMovies
4: TV # TV Shows
14: TV/Other # Variety Shows
# Chinese
8: Movies # cMovies
9: TV # TV Shows
13: TV/Other # Variety Shows
# Adult
13: XXX # Adult
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: body[onLoad^="makeAlert('"]
message:
selector: body[onLoad^="makeAlert('"]
attribute: onLoad
filters:
- name: replace
args: ["makeAlert('Error' , '", ""]
- name: replace
args: ["');", ""]
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "0"
active: "0"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
banner:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(12)
date:
selector: td:nth-child(7)
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-child(10)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
downloadvolumefactor:
case:
img[alt="Full Star 100% Free"]: "0"
img[alt="Half Star 50% Free"]: "0.5"
img[alt="Empty Star 25% Free"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2)
remove: a
description|append:
selector: td:nth-child(3) > img
attribute: title
filters:
- name: prepend
args: "<br>Language: "

View File

@@ -0,0 +1,94 @@
---
site: apollo
name: Apollo
description: "A music tracker"
language: en-us
encoding: UTF-8
links:
- https://apollo.rip
caps:
categories:
1: Audio # Music
2: PC # Applications
3: Books # E-Books
4: Audio/Audiobook # Audiobooks
5: Movies # E-Learning Videos
6: TV # Comedy
7: Books/Comics # Comics
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.group_info
remove: span
title:
selector: div.group_info
remove: span, div.tags
category:
selector: td.cats_col
case:
div.cats_music: 1
div.cats_applications: 2
div.cats_ebooks: 3
div.cats_audiobooks: 4
div.cats_elearningvideos: 5
div.cats_comedy: 6
div.cats_comics: 7
comments:
selector: a[href^="torrents.php?id="]
attribute: href
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
":root div.alertbar:contains(\"freeleech\")": "0"
":root div.alertbar:contains(\"FREELEECH\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,92 @@
---
site: bithq
name: BitHQ
language: en-us
encoding: windows-1252
links:
- http://www.bithq.org
caps:
categories:
7: Movies # Approved Film Series
81: TV/HD # BD-MKV
62: Audio # CD-R/OST
51: Movies/DVD # DVD-R/Animation
48: Movies/DVD # DVD-R/Asian Cinema
50: Movies/DVD # DVD-R/Documentaries
64: Movies/DVD # DVD-R/Foreign Films
55: Movies/DVD # DVD-R/Kids
49: Movies/DVD # DVD-R/Movies
52: Audio/Video # DVD-R/Music
53: TV # DVD-R/TV
70: Movies # Empire's 500
80: Movies # Global Lens | trigon-film
65: Other # Hi-Res Covers
66: Movies/HD # High Quality
57: Movies/SD # Low Quality
54: PC/0day # Software/DVD/BD
61: PC/0day # Software/System Utilities
69: TV/Sport # Sporting Events
68: Movies # The Criterion Collection
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: td > table > tbody > tr:has(a[href^="details.php?id="])
fields:
download:
selector: a[href^="download.php/"]
attribute: href
title:
selector: a[href^="details.php?id="]
description:
selector: td:nth-child(2) > strong
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(6)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(5)
downloadvolumefactor:
case:
tr[bgcolor="#FFF6CB"]: "0"
img[alt^="Goodie.. Download for free!"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,132 @@
---
site: bithumen
name: BitHUmen
language: hu-hu
encoding: ISO-8859-2
links:
- https://bithumen.be/
caps:
categories:
23: Movies/SD # Film/Hun/SD
24: Movies/DVD # Film/Hun/DVD-R
25: Movies/HD # Film/Hun/720p
37: Movies/HD # Film/Hun/1080p
33: Movies/BluRay # Film/Hun/Blu-ray
30: XXX # XXX/SD
19: Movies/SD # Film/Eng/SD
20: Movies/DVD # Film/Eng/DVD-R
5: Movies/HD # Film/Eng/720p
39: Movies/HD # Film/Eng/1080p
40: Movies/BluRay # Film/Eng/Blu-ray
34: XXX # XXX/HD
7: TV/SD # Sorozat/Hun/SD
41: TV/HD # Sorozat/Hun/HD
26: TV/SD # Sorozat/Eng/SD
42: TV/HD # Sorozat/Eng/HD
28: Books # eBook/Hun
29: Books # eBook/Eng
9: Audio/MP3 # Mp3/Hun
35: Audio/Lossless # Lossless/Hun
1: PC/0day # Programok/ISO
4: PC/Games # Játékok/ISO
31: Console/PS4 # Játékok/PS
36: Console/Wii # Játékok/Wii
6: Audio/MP3 # Mp3/Eng
38: Audio/Lossless # Lossless/Eng
22: PC # Programok/egyéb
21: PC # Játékok/Rip/Dox
32: Console/Xbox360 # Játékok/Xbox360
27: Other # Klipek
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("bejelentkezés"))
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: table#torrenttable > tbody > tr:has(a[href^="details.php?id="])
filters:
- name: andmatch
fields:
download:
selector: a[href^="download.php/"]
attribute: href
title:
selector: a[href^="details.php?id="]
title|optional:
selector: a[href^="details.php?id="]
attribute: title
details:
selector: a[href^="details.php?id="]
attribute: href
imdb:
selector: a[href^="http://anonym.to/?http://www.imdb.com/title/"]
attribute: href
banner:
selector: a[onmouseover^="bithumen.UI.images.coverShow"]
attribute: onmouseover
filters:
- name: regexp
args: "\"(.*?)\""
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
filters:
- name: regexp
args: /\s*([\d,]+)
grabs:
selector: td:nth-child(7)
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(6) > u
downloadvolumefactor:
text: "1"
downloadvolumefactor|optional:
selector: td:nth-child(6) > nobr > font:contains(" × ")
filters:
- name: replace
args: ["×", ""]
uploadvolumefactor:
text: "1"
uploadvolumefactor|optional:
selector: td:nth-child(5) > nobr > font:contains(" × ")
filters:
- name: replace
args: ["×", ""]
date:
selector: td:nth-child(5)
remove: font
filters:
- name: replace
args: ["ma", "today"]
- name: replace
args: ["tegnap", "yesterday"]
description:
selector: td:nth-child(2) > div

View File

@@ -0,0 +1,132 @@
---
site: bitspyder
name: Bitspyder
language: en-us
encoding: windows-1252
links:
- http://bitspyder.net/
caps:
categories:
61: Books # 3D
69: Books # Anim|GFX
56: Books # Art
40: Audio/Audiobook # Audio Books
55: Books # Business
46: Books # Career
2: Books # CBTs
39: Books # Cert QA
63: Books # College
53: Books # Cooking
42: Books # Documentary
37: Books # e-Books
65: Books # Engineering
54: Books # Health-Fitness
64: Books # Kids
47: Books # Languages
49: Books # Linux CBTs
43: Books # Lynda.com
57: Books/Magazines # Magazines
71: Books # Magic
60: Books # Medical
44: Books # Misc Learning
51: Books # Music Learning
41: Books # Others
52: Books # Photography
35: Books # PPT 'n Docs
38: Books # Religion
68: Books # Self Growth
72: Books # Templates
58: Books # Total Training
45: Books # Trainsignal
59: Books # VTC
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: processid.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.msg_info > font > b
test:
path: /browse.php
search:
path: /browse.php
method: post
inputs:
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr[class]
filters:
- name: andmatch
fields:
# there are two styles, we support both
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php/"]
- name: replace
args: ["&hit=1", "/dummy.torrent"]
size:
selector: td.rowcol:nth-child(6):has(br), font:contains("Size:") + font
files:
selector: a[href*="&filelist=1"]
grabs:
selector: td.rowcol:nth-child(7):contains("times"), font:contains("Snatches:")
filters:
- name: regexp
args: ([\d\,]+)
seeders:
selector: td.rowcol:nth-last-child(3)
leechers:
selector: td.rowcol:nth-last-child(2)
date|optional|1:
selector: font[color="5F5F5F"]
filters:
- name: split
args: [" (", 0]
- name: replace
args: ["\xA0", " "]
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date|optional|2:
selector: a[title^="Upploaded at"]
attribute: title
filters:
- name: replace
args: ["Upploaded at - ", ""]
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description|optional:
selector: font[color="#990000"]

View File

@@ -0,0 +1,147 @@
---
site: blubits
name: Blu-bits
description: "A HD tracker"
language: en-us
encoding: UTF-8
links:
- https://blu-bits.com/
caps:
categories:
# Movies
14: Movies/BluRay # Full Blu-ray
54: Movies/HD # HD-DVD
16: Movies/HD # Remux
55: Movies/HD # 2160p
15: Movies/HD # 1080p
19: Movies/HD # 1080i
18: Movies/HD # 720p
# Documentaries
21: Movies/BluRay # Full Blu-ray
39: Movies/HD # Remux
56: Movies/HD # 2160p
23: Movies/HD # 1080p
24: Movies/HD # 1080i
25: Movies/HD # 720p
# TV Series
27: TV/HD # Full Blu-ray
40: TV/HD # Remux
28: TV/HD # 1080p
29: TV/HD # 1080i
30: TV/HD # 720p
# HDTV
35: TV/HD # 1080i
36: TV/HD # 720p
# XXX
59: XXX # Full Blu-ray
46: XXX # 1080p
51: XXX # 720p
# Music
53: Audio/Video # Full Blu-ray
57: Audio/Video # Remux
45: Audio/Video # 1080p
58: Audio/Video # 720p
38: Audio/Lossless # Flac
41: TV/Sport # Sports
42: TV/Anime # Anime
44: PC # Windows Apps
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: table.lista > tbody > tr > td.lista > span[style="color:#FF0000;"]
test:
path: index.php
selector: ul#navlist
ratio:
path: index.php
selector: "ul#navlist > li:contains(\"Ratio: \")"
filters:
- name: split
args: ["\u00a0", 1]
- name: replace
args: ["---", "0"]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
page: torrents
options: 0
active: 0
rows:
selector: div.b-content > table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: title
filters:
- name: replace
args: ["View details: ", ""]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
comments:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: p
filters:
- name: replace
args: ["\u00a0", ""]
- name: regexp
args: "\\|\\s+Size:\\s+([\\w\\d\\.,]+ \\w\\w)\\s+\\|"
date:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "<center>Added:(.*?)</center>"
grabs:
selector: a[href^="index.php?page=torrent_history&id="]
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: a[title="Click here to view peers details"]:nth-child(1)
leechers:
selector: a[title="Click here to view peers details"]:nth-child(2)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -0,0 +1,88 @@
---
site: bluebirdhd
name: BlueBird
language: ru-ru
encoding: windows-1251
links:
- https://bluebird-hd.org/
caps:
categories:
1: Movies # Films
2: TV/Anime # Cartoons
3: TV/Documentary # documentary
4: Audio # Show / Music
5: TV/Sport # Sport
6: TV # TV series
7: XXX # erotica
8: Other # Demo / Misc
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.error
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="download.php?id="]
attribute: href
grabs:
selector: a[href*="&snatched=1#snatched"]
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(7)
remove: a
date:
selector: div#cleft > font
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
banner:
selector: a.tname
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
img[src="pic/diamond.png"]: "0"
img[src="pic/freedownload.gif"]: "0"
img[src="pic/silver.gif"]: "0.5"
img[src="pic/bronze.gif"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
img[src="pic/diamond.png"]: "2"
"*": "1"

View File

@@ -0,0 +1,101 @@
---
site: chdbits
name: CHDBits
description: "A general tracker"
language: zh-cn
encoding: UTF-8
links:
- https://chdbits.co
caps:
categories:
401: Movies # Movies
404: TV/Documentary # Documentaries
405: TV/Anime # Animations
402: TV # TV Series
403: TV # TV Shows
406: Audio/Video # Music Videos
407: TV/Sport # Sports
409: Other # Misc
408: Audio # HQ Audio
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(8)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: td:nth-child(4) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
img.pro_free: "0"
img.pro_free2up: "0"
img.pro_50pctdown: "0.5"
img.pro_50pctdown2up: "0.5"
img.pro_30pctdown: "0.3"
"*": "1"
uploadvolumefactor:
case:
img.pro_50pctdown2up: "2"
img.pro_free2up: "2"
img.pro_2up: "2"
"*": "1"
description:
selector: td:nth-child(2)
remove: a, img

View File

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

View File

@@ -0,0 +1,308 @@
---
site: dreamteam
name: Dream Team
language: el-gr
encoding: UTF-8
links:
- http://dream-team.ml/
caps:
categories:
# 115: #
115: Movies # One foreign films external subtitles
130: Movies # CAM / TS / TC
131: Movies # DVDSCR / PPVRiP / WebRip / R5
132: Movies # DVDRrip
133: Movies # BDRip / BRRip / HDRip
134: Movies # MicroHD
135: Movies # HD - WEB-DL
136: Movies # HD - 480p
137: Movies # HD - 720p
138: Movies # HD - 1080p
139: Movies # 9.01 3D HD 720p Half SBS & OU
140: Movies # 9.2 3D HD 1080p Half SBS & OU
141: Movies # 9.3 3D Bluray Disc HD 720p / 1080p
142: Movies # 9.4 3D MicroHD 720p / 1080p
144: Movies # 9.5 packages
145: Movies # 9.6 filmography
143: Movies # 9.7 Tv Movies
# 130: #
# 131: #
# 132: #
# 133: #
# 134: #
# 135: #
# 136: #
# 137: #
# 138: #
# 139: #
# 140: #
# 141: #
# 142: #
# 144: #
# 145: #
# 143: #
# 116: #
116: Movies # Two foreign films integrated subtitles
146: Movies # CAM / TS / TC
147: Movies # DVDSCR / PPVRiP / WebRip / R5
148: Movies # DVDRrip
149: Movies # BDRip / BRRip / HDRip
150: Movies # MicroHD
151: Movies # HD - WEB-DL
152: Movies # Tv Movies
# 242: #
153: Movies # Packages
154: Movies # filmography
243: Movies # HD 1080p
244: Movies # HD 480p
# 146: #
# 147: #
# 148: #
# 149: #
# 150: #
# 151: #
# 152: #
# 242: #
# 153: #
# 154: #
# 243: #
# 244: #
# 117: #
117: Movies # ???????e? ?a???e?
155: Movies # CAM / TS / TC
156: Movies # SCR / PPVRiP / Webrip / R5
157: Movies # DVDRrip 3
158: Movies # BDRip / BRRip / HDRip
159: Movies # MicroHD 5
160: Movies # HD - 480p
161: Movies # 6.1 HD - 720p
162: Movies # HD 6.2 - 1080
163: Movies # TV Movies
164: Movies # ?a?eta 8
165: Movies # F??µ???af?e?
# 155: #
# 156: #
# 157: #
# 158: #
# 159: #
# 160: #
# 161: #
# 162: #
# 163: #
# 164: #
# 165: #
# 118: #
118: TV # Foreign Television external subtitles
166: TV # SD
167: TV # 720p
168: TV # 1080p
169: TV # Sport
170: TV # documentaries
171: TV # Packages
# 166: #
# 167: #
# 168: #
# 169: #
# 170: #
# 171: #
# 119: #
119: TV # foreign Television integrated subtitles
172: TV # SD
173: TV # 720p
174: TV # 1080p
175: TV # Sport
176: TV # documentaries
177: TV # Tv Rips
178: TV # Packages
# 172: #
# 173: #
# 174: #
# 175: #
# 176: #
# 177: #
# 178: #
# 120: #
120: TV # Greek Television
179: TV # SD
180: TV # 720p
181: TV # 1080p
182: TV # Sport
183: TV # five documentaries
184: TV # six Tv Rips
185: TV # Packages
# 179: #
# 180: #
# 181: #
# 182: #
# 183: #
# 184: #
# 185: #
# 122: #
122: Audio # ?e?? ???s???
216: Audio # 1. DJs Stuff & Promos
217: Audio # 2. DJs Stuff & Promos (Flac)
218: Audio # 3. Singles
219: Audio # 4. Singles (Flac)
220: Audio # 5. ??s????af?e?
221: Audio # 6. ??s????af?e? (Flac)
222: Audio # 7. ??af??e? S?????e?
223: Audio # 8. ??af??e? S?????e? (Flac)
224: Audio # 9. SoundTracks
225: Audio # 9.1 Varius Artist
226: Audio # 9.2 Compact Disc Club
227: Audio # 9.3 ???s??a Video Clips
# 123: #
123: Audio # ???????? ???s???
228: Audio # 1. DJs Stuff & Promos
229: Audio # 2. DJs Stuff & Promos (Flac)
230: Audio # 3. Singles
231: Audio # 4. Singles (Flac)
232: Audio # 5. ??s????af?e?
233: Audio # 6. ??s????af?e? (Flac)
234: Audio # 7. ??af??e? S?????e?
235: Audio # 8. ??af??e? S?????e? (Flac)
236: Audio # 9. ?a?d??a
237: Audio # 9.1 SoundTracks
238: Audio # 9.2 Varius Artist
239: Audio # 9.3 Compact Disc Club
240: Audio # 9.4 ???s??a Video Clips
# 121: #
121: Movies # children
186: Movies # children's films external subtitles
187: Movies # two children's films integrated subtitles
188: Movies # three children's films Metaglotismenes
189: Movies # four cartoon series external subtitles
190: Movies # five children's series integrated subtitles
191: Movies # six children's series Metaglotismenes
192: Movies # Anime external subtitles
193: Movies # Anime integrated subtitles
194: Movies # Anime Metaglotismenes
# 186: #
# 187: #
# 188: #
# 189: #
# 190: #
# 191: #
# 192: #
# 193: #
# 194: #
# 128: #
128: Console # 9.1 ?a????d?a
195: Console # Windows Games
196: Console # Nintendo DS
197: Console # Sony PS1
198: Console # Sony PS2
199: Console # Sony PS3
200: Console # Sony PSP
201: Console # Wii
202: Console # XboX 360
# 124: #
124: PC # 9.2 Applications
203: PC # Applications Windows
204: PC # Applications Mac
205: PC # Linux Applications
# 203: #
# 204: #
# 205: #
# 126: #
126: Books # 9.3 Electronic Books
206: Books # Electronic books
207: Books # Magazines
208: Books # Comic Books
# 206: #
# 207: #
# 208: #
# 125: #
125: Other # 9.4 Gallery
209: Other # Gallery
210: Other # Gallery HD
211: Other # Photos 3D
212: Other # Wallpapers
213: Other # Screensavers
# 209: #
# 210: #
# 211: #
# 212: #
# 213: #
# 127: #
127: PC/Phone-Other # 9.5 Mobile / Miscellaneous
214: PC/Phone-Other # Mobile
215: PC/Phone-Other # Miscellaneous
# 214: #
# 215: #
# 129: #
129: Other # 9.6 Blocked DREAM TEAM
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td:contains("remaining tries")
test:
path: browse.php
selector: a[href^="http://dream-team.ml/logout.php"]
search:
path: browse.php
inputs:
do: "search"
keywords: "{{ .Query.Keywords }}"
search_type: "t_name"
category: "0" # multi cat search not supported
include_dead_torrents: "yes"
rows:
selector: table#sortabletable > tbody > tr:has(a[href^="http://dream-team.ml/details.php?id="])
filters:
- name: andmatch
args: 66
fields:
download:
selector: a[href^="http://dream-team.ml/download.php?id="]
attribute: href
title:
selector: a[href^="http://dream-team.ml/details.php?id="]
title|optional:
selector: div.tooltip-content > div
details:
selector: a[href^="http://dream-team.ml/details.php?id="]
attribute: href
category:
selector: a[href^="http://dream-team.ml/browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
banner|optional:
selector: div.tooltip-content > img
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[alt^="Free Torrent "]: "0"
img[alt^="Silver Torrent "]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
date:
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
remove: span
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "02-01-2006 15:04 -07:00"

View File

@@ -0,0 +1,177 @@
---
site: eotforum
name: EoT-Forum
description: "A German gerneral tracker"
language: de-de
encoding: windows-1252
links:
- http://eot-forum.net
caps:
categories:
# Filme
14: Movies/SD # SD XviD
15: Movies/SD # SD x264
16: Movies/HD # HD
68: Movies/HD # UHD
17: Movies/3D # 3D
18: Movies/DVD # DVD-R
19: Movies # Pack
20: Movies # International
21: XXX # XXX
# Serien/TV
23: TV/SD # SD XviD
24: TV/SD # SD x264
25: TV/HD # HD
26: TV/SD # DVD-R
27: TV # Pack
28: TV # International
29: TV/Sport # Sport
# Dokus
31: TV/Documentary # SD XviD
32: TV/Documentary # SD x264
33: TV/Documentary # HD
34: TV/Documentary # 3D
35: TV/Documentary # Pack
67: TV/Documentary # DVD-R
36: TV/Documentary # International
# Audio
38: Audio # Charts
39: Audio/MP3 # MP3
40: Audio/Lossless # Flac
41: Audio # Pack
42: Audio/Video # MusikVideo
43: Audio/Audiobook # Hörbücher
# Spiele
45: PC/Games # Windows
46: PC/Mac # MacOS
47: Console/PS4 # Sony PS
48: Console/Xbox # Microsoft XBox
49: Console/NDS # Nintendo
50: PC/Games # Linux
51: Console # Andere
# Software
53: PC # Windows
54: PC/Mac # MacOS
55: PC # Linux
56: PC/Phone-Android # Android
57: PC/Phone-IOS # Apple IOS
58: PC/Phone-Other # Andere
# Sonstiges
60: Books # EBooks
61: Other # Bilder
62: TV/Anime # Anime
63: Other # MISC
64: XXX # XXX-Bilder/EBooks/Audio
# EOT-Specials
66: Other # Special
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
rememberme: "forever"
submit: "Login"
error:
- selector: td.lista[align="center"][colspan="2"] > span
test:
path: index.php
selector: img[alt="Ratio"]
ratio:
path: index.php
selector: img[alt="Ratio"] + font
search:
path: index.php
inputs:
page: "torrents"
search: "{{ .Query.Keywords }}"
options: "0"
active: "0"
gold: "0"
rows:
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
dateheaders:
selector: ":has(td.header > b)"
filters:
- name: replace
args: ["Torrents vom ", ""]
- name: replace
args: ["Januar", "January"]
- name: replace
args: ["Februar", "February"]
- name: replace
args: ["March", "März"]
- name: replace
args: ["Mai", "May"]
- name: replace
args: ["Juni", "June"]
- name: replace
args: ["Juli", "July"]
- name: replace
args: ["Oktober", "October"]
- name: replace
args: ["Dezember", "December"]
- name: dateparse
args: "02.January.2006"
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: title
filters:
- name: replace
args: ["Details anzeigen: ", ""]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
comments:
selector: a[href*="#comments"]
attribute: href
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(5) > font:nth-child(3)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(5) > font:nth-child(1)
leechers:
selector: td:nth-child(5) > font:nth-child(2)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -0,0 +1,118 @@
---
site: estone
name: eStone
language: hu-hu
encoding: UTF-8
links:
- http://estone.cc/
caps:
categories:
24: Movies/SD # Film/XviD/Hun
38: Movies/SD # Film/XviD/Eng
51: Movies/SD # Film/SD/Hun
52: Movies/SD # Film/SD/Eng
25: Movies/DVD # Film/DVD/Hun
26: Movies/DVD # Film/DVD/Eng
42: Movies/HD # Film/HD/Hun
50: Movies/HD # Film/HD/Eng
36: TV # Sorozat/Hun
47: TV # Sorozat/Eng
41: Audio/MP3 # Mp3/Hun
40: Audio/MP3 # Mp3/Eng
35: PC/0day # Program
28: PC/Games # Játék/ISO
30: PC/Games # Játék/Rip
32: Console # Konzol
34: PC/Phone-Other # Mobil
44: Books # Könyv/Hun
33: Books # Könyv/Eng
31: Other # Képek
39: XXX # XXX/Film
49: XXX/Imageset # XXX/Kép
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
login_username: "{{ .Config.username }}"
login_password: "{{ .Config.password }}"
error:
- selector: script:contains("hiba(\"")
message:
selector: script:contains("hiba(\"")
filters:
- name: replace
args: ["hiba(\"", ""]
- name: replace
args: ["\");", ""]
test:
path: /letoltes.php
search:
path: /letoltes.php
method: get
inputs:
$raw: "{{range .Categories}}kat[]={{.}}&{{end}}"
kereses_nev: "{{ .Query.Keywords }}"
rows:
selector: body > div[id^="torrent_"]
fields:
title:
selector: a[title]
attribute: title
category:
selector: div#kategoria_torrent > a
attribute: href
filters:
- name: querystring
args: cat
details:
attribute: id
filters:
- name: replace
args: ["torrent_", "adatlap.php?id="]
download:
attribute: id
filters:
- name: replace
args: ["torrent_", "download.php?id="]
banner:
selector: img[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: borito\("(.*?) +?",
size:
selector: input[id^="meret_"]
attribute: value
grabs:
selector: div:nth-child(8) > div
seeders:
selector: div:nth-child(6) > div > a
leechers:
selector: div:nth-child(7) > div > a
date:
selector: div:nth-child(4)
filters:
- name: split
args: ["(", 0]
- name: append
args: "+01:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
img[src="pic/free.png"]: "0"
"*": "1"
uploadvolumefactor:
case:
img[src="pic/dupla_up.png"]: "2"
"*": "1"
description:
selector: div:nth-child(2)
remove: a

View File

@@ -0,0 +1,118 @@
---
site: ethor
name: Ethor.net (Thor's Land)
description: "A French gerneral tracker"
language: fr-fr
encoding: windows-1252
links:
- https://ethor.net/
caps:
categories:
22: PC # Applications/Divers
1: PC # Applications/PC ISO
44: PC # Applications/Portable
47: Movies/BluRay # Films/Bluray
20: Movies/DVD # Films/DVDr
42: Movies/HD # Films/HD Rip
19: Movies/SD # Films/SD Rip
5: Movies/SD # Films/VCD
4: PC/Games # Jeux/PC
41: Console # Jeux/Portable
34: Console/PS4 # Jeux/PS2-PS3
38: Console/Wii # Jeux/Wii-GC
40: Console/Xbox # Jeux/Xbox360
6: Audio # Musique
37: Audio/Video # Musique/Video
48: TV/HD # Série-Télé/Bluray
45: TV/SD # Série-Télé/DVDr
43: TV/HD # Série-Télé/HD Rip
7: TV/SD # Série-Télé/SD Rip
23: Books # E-Books
46: Other # Évé. sportif
36: Other # Kidz
25: Other # Misc
9: XXX # XXX
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
login:
path: login3.php
method: form
form: form[action="login3.php?takelogin=1"]
captcha:
type: image
image: img#validationimage
input: validationcode
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
secure_cookie: "0"
test:
path: browse.php
ratio:
path: browse.php
selector: span#ratioRatio
search:
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"
rows:
selector: p + table > tbody > tr:has(a[href^="/details.php"])
fields:
download:
selector: a[href^="/details.php"]:has(b)
attribute: href
filters:
- name: replace
args: ["/details.php", "/download.php"]
title:
selector: a[href^="/details.php"]:has(b)
category:
selector: a[href^="/browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
comments:
selector: a[href^="/details.php"]:has(b)
attribute: href
files:
selector: a[href*="#filelist"]
size:
selector: td:nth-child(6)
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: "(\\d+)"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " -05:00" # timezone offset
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
downloadvolumefactor:
case:
"img[title^=\"Freeleech: \"]": "0"
"img[title^=\"Half Freeleech: \"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,45 @@
---
site: eztv
name: EZTV
language: en-us
encoding: UTF-8
links:
- https://eztv.ag/
caps:
categories:
1: TV
modes:
tv-search: [q, season, ep]
search:
path: "{{if .Query.Keywords}}search/{{ .Query.Keywords}}{{else}}/{{end}}"
rows:
selector: "table.forum_header_border tr[name='hover'].forum_header_border"
filters:
- name: andmatch
fields:
category:
text: 1
title:
selector: td:nth-child(2) a
details:
selector: td:nth-child(2) a
attribute: href
download:
selector: td:nth-child(3) a.magnet, td:nth-child(3) a
attribute: href
size|optional:
selector: td:nth-child(4)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " ago"
seeders:
selector: td:nth-child(6)
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

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

View File

@@ -0,0 +1,129 @@
---
site: freedomhd
name: Freedom-HD
language: fr-fr
encoding: UTF-8
links:
- http://freedom-paradise.eu/
caps:
categories:
# ANIMES
105: TV/Anime # 1080p
104: TV/Anime # 720p
90: TV/Anime # HDRIP-720p
93: TV/Anime # HDRIP1080p
131: TV/Anime # SD
120: TV/Anime # X265-1080p
119: TV/Anime # X265-720p
107: TV/Anime # 1080p
106: TV/Anime # 720p
94: TV/Anime # HDRIP1080p
91: TV/Anime # HDRIP720p
# EBOOK
124: Books # Livres et Magazines
# FILMS
97: Movies/HD # 1080p
103: Movies/3D # 3D
111: Movies/HD # 4K
96: Movies/HD # 720p
127: Movies/HD # BDrip
128: Movies/HD # BRrip
126: Movies/SD # DVDrip
89: Movies/HD # HDRIP-720p
92: Movies/HD # HDRIP1080p
112: Movies/SD # Team-Hush
129: Movies/HD # Team-Romkent
125: Movies/Other # WEBrip
110: Movies/HD # X265-1080p
109: Movies/HD # X265-720p
# MUSIQUES
114: Audio/Lossless # Flac
113: Audio/MP3 # MP3
132: Audio # Musiques-HQ
130: Audio/Video # video clip
# SERIE-sd
121: TV/SD # SD
# SERIES-HD
102: TV/HD # 1080p
101: TV/HD # 720p
100: TV/HD # HDrip1080p
99: TV/HD # HDrip720p
# SPECTACLES
118: TV/Sport # HDRIP1080p
117: TV/Sport # HDRIP720p
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: "yes"
returnto: "/"
error:
- selector: div.myFrame:has(font.error)
test:
path: torrents-search.php
search:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
filters:
- name: andmatch
after: 1
fields:
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php", "download.php"]
title:
selector: a[href^="torrents-details.php?id="]
attribute: title
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
description:
selector: ul
banner:
selector: img.rounded-img
attribute: src
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(4)
leechers:
selector: td:nth-child(5)
downloadvolumefactor:
case:
img[alt="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,118 @@
---
site: funkytorrents
name: FunkyTorrents
language: en-us
encoding: UTF-8
links:
- http://funkytorrents.com
caps:
categories:
1: PC # (Apps)
2: Books # (eBooks)
3: Movies # (Movie)
33: Audio # (Music DVDs)
5: Audio/Video # (Music Vids)
4: Audio # (OST)
19: Audio # Alternative
28: Audio # Ambient
12: Audio # Classical
17: Audio # Dance
16: Audio # Drum 'n' Bass
20: Audio # Electronic
14: Audio # Emo
23: Audio # Experimental
34: Audio # Funk
18: Audio # Hardcore
13: Audio # House
31: Audio # IDM
21: Audio # Indie
26: Audio # Industrial
25: Audio # Jazz/Blues/Soul
37: Audio # Lo-Fi
6: Audio # Metal
22: Audio # Misc
7: Audio # Pop/RnB
29: Audio # Post-Rock
30: Audio # Psychedelic
8: Audio # Punk
9: Audio # Rap/Hip-Hop
35: Audio # Reggae
10: Audio # Rock
15: Audio # Ska
32: Audio # Techno
11: Audio # Trance
36: Audio # Trip-Hop
24: Audio # World/Ethnic
3010: Audio/MP3
3040: Audio/Lossless
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: browse.php
search:
path: /browse.php
inputs:
#$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: table.mainouter > tbody > tr > td.outer > table > tbody > tr.mouse_out
fields:
description|optional:
selector: td:nth-child(2) > font
title:
selector: td:nth-child(2)
remove: font
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
category|optional:
case:
a[href="/browse.php?ext=1&bitrate=Lossless"]: "3040"
a[href="/browse.php?ext=1&format=MP3"]: "3010"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(5)
size:
selector: td:nth-child(8)
seeders:
selector: td:nth-child(10)
leechers:
selector: td:nth-child(11)
date:
selector: td:nth-child(7)
filters:
- name: append
args: " +0000"
- name: dateparse
args: "2006-01-0215:04:05 -0700"
grabs:
selector: td:nth-child(9)
downloadvolumefactor:
case:
img[alt="Free Leech"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,161 @@
---
site: gods
name: GODS
language: de-de
encoding: windows-1252
links:
- https://gods.lu/
caps:
categories:
# Movie
132: Movies/BluRay # BluRay
146: Movies/HD # Remux
186: Movies/HD # UHD
189: Movies/HD # HD
190: Movies/SD # SD
20: Movies/DVD # DVD
131: Movies/3D # 3D
16: Movies # Packs
# Serien
187: TV/HD # Staffeln UHD
173: TV/HD # Staffeln HD
133: TV/SD # Staffeln SD
188: TV/HD # Folgen UHD
174: TV/HD # Folgen HD
7: TV/SD # Folgen SD
# Doku
152: TV/Documentary # HD
153: TV/Documentary # SD
# Spiele
4: PC/Games # Windows
29: Console/XBox360 # XBOX 360
126: Console/Wii # Wii
183: Console/Wii # Wii U
128: Console/PS3 # PS3
154: Console/Other # Andere
# Musik
6: Audio # Alben
139: Audio/Lossless # Lossless
177: Audio # Singles
157: Audio # Charts
192: Audio # Packs
161: Audio/Video # Video
22: PC/0day # Windows
129: PC/Mac # Mac OS
164: PC/0day # Linux
124: PC/Phone-Android # Android
165: PC/Phone-IOS # Apple iOS
167: PC/Phone-Other # Andere
# Sport
130: TV/Sport # HD
135: TV/Sport # SD
# International
170: Movies/Foreign # Filme HD
134: Movies/Foreign # Filme SD
171: TV/Foreign # Folgen HD
172: TV/Foreign # Folgen SD
# Sonstiges
28: TV/Anime # Anime
13: Books # e-Book
11: Audio/Audiobook # Hören
136: Other # Bilder
9: Other # Tutorial
178: Other # Anderes
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: pin
type: text
label: Pin
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: /login/
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
pin: "{{ .Config.pin }}"
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
intitle: "1"
incldead: "1"
team: "0"
orderby: "added"
sort: desc
rows:
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
fields:
title:
selector: a[href^="details.php"]
banner:
selector: a[href^="details.php"] > span > img
attribute: src
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php"]
attribute: href
comments:
selector: a[href*="&tocomm="]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
grabs:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
size:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
seeders:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
leechers:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(3)
date:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(6)
filters:
- name: replace
args: ["\xA0", " "]
- name: dateparse
args: "02.01.2006 15:04:05"
downloadvolumefactor:
case:
img[alt="onlyupload"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,192 @@
---
site: gormogon
name: Gormogon
language: en-us
encoding: UTF-8
links:
- http://www.gormogon.com
caps:
categories:
# Movies:
1: Movies/DVD # DVD-R
2: Movies # Action
14: Movies # Adventure
15: Movies # Animation
16: Movies # Biography
17: Movies # Comedy
18: Movies # Crime
19: Movies # Disney
92: Movies # Documentary
20: Movies # Drama
21: Movies # Family
22: Movies # Fantasy
23: Movies # Film Noir
97: Movies # History
24: Movies # Horror
25: Movies # Martial Arts
26: Movies # Musicals
27: Movies # Mystery
28: Movies # Romance
29: Movies # Sci-Fi
30: Movies # Thriller
31: Movies # War
32: Movies # Western
33: Movies # Other
# Classic TV:
34: TV # Action
35: TV # Adventure
36: TV # Animation
37: TV # Biography
38: TV # Comedy
39: TV # Crime
40: TV # Disney
41: TV # Documentary
42: TV # Drama
43: TV # Family
44: TV # Fantasy
45: TV # TV Noir
46: TV # Horror
47: TV # Martial Arts
49: TV # Musicals
50: TV # Mystery
51: TV # Romance
52: TV # Sci-Fi
48: TV # Shows
53: TV # Thriller
54: TV # War
55: TV # Western
56: TV # Other
90: TV # TV Movies
# Old Time Radio
57: Audio # Action
58: Audio # Adventure
59: Audio # Biography
60: Audio # Comedy
61: Audio # Crime
62: Audio # Documentary
63: Audio # Drama
64: Audio # Family
65: Audio # Fantasy
66: Audio # Radio Noir
67: Audio # Horror
68: Audio # Musicals
69: Audio # Mystery
70: Audio # Romance
71: Audio # Sci-Fi
72: Audio # Shows
73: Audio # Thriller
74: Audio # War
75: Audio # Western
76: Audio # Other
# Music:
77: Audio # Official Sountracks
78: Audio # Theme Tunes
79: Audio # Music 30s
80: Audio # Music 40s
81: Audio # Music 50s
85: Audio # Music 60s
86: Audio # Music 70s
87: Audio # Music '80 - '84
# Printed:
82: Books # Books
91: Books # Newspaper
83: Books # Scripts
84: Books # Posters
88: Books # Comics
89: Books # Magazines
# Software:
94: Other # Screensavers
95: PC # Programs
96: Other # Other
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login&returnto=index.php
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: td.lista > span[style="color:#FF0000;"]
test:
path: index.php
selector: form[name="jump1"]
ratio:
path: index.php
selector: form[name="jump1"] > table > tbody > tr > td:contains("SR ")
filters:
- name: trim
args: ")"
- name: split
args: [" ", 1]
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
category: "{{range .Categories}}{{.}};{{end}}"
page: torrents
active: 0
rows:
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(10)
date:
selector: td:nth-child(5)
filters:
- name: dateparse
args: "02/01/2006"
grabs:
selector: td:nth-child(8)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

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

View File

@@ -0,0 +1,102 @@
---
site: hdme
name: HDME
language: en-us
encoding: windows-1252
links:
- https://hdme.eu
caps:
categories:
24: TV/Anime # Anime
25: PC/0day # Appz
47: Movies/HD # AVCHD
26: Movies/BluRay # Bluray
54: Movies/HD # dbREMUX
41: Movies/HD # Documentaries
50: Movies/HD # FourGHD
44: Movies/HD # HDME
28: Audio/Lossless # HQ Music
48: Movies/HD # iCandy
45: Movies/HD # INtL
29: Other # Misc
49: PC/Phone-Other # Mobile
30: Movies/HD # Movie 1080i
31: Movies/HD # Movie 1080p
32: Movies/HD # Movie 720p
33: Audio/Video # Music Videos
34: TV # Packs
53: Movies/HD # Remux
56: Movies/HD # RUXi
55: Movies/HD # SiNiSteR
36: TV/Sport # Sports
37: TV/HD # TV Series 1080i
38: TV/HD # TV Series 1080p
39: TV/HD # TV Series 720p
57: Movies # UHD 2160p
40: XXX # XXX
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded
message:
selector: td.text
test:
path: /my.php
ratio:
path: /my.php
selector: span.smallfont > font
filters:
- name: regexp
args: "Ratio:(.+?)Uploaded"
- name: replace
args: [",", ""]
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: "1"
blah: "0"
rows:
selector: table[width="100%"] > tbody > tr:has(td.bottom[background="_images/bg_torrent.jpg"])
fields:
category:
selector: td:nth-child(2) a
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(3) > a
attribute: title
comments:
selector: td:nth-child(3) > a
attribute: href
download:
selector: td:nth-child(11) > a
attribute: href
size:
selector: td:nth-child(6)
remove: br
date:
selector: td:nth-child(3)
filters:
- name: regexp
args: "Added: (.+?)\n"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)

View File

@@ -0,0 +1,117 @@
---
site: hdsky
name: HDSky
description: "A chinese tracker"
language: zh-cn
encoding: UTF-8
links:
- https://hdsky.me
caps:
categories:
401: Movies # Movies/电影
404: TV/Documentary # Documentaries/纪录片
410: Movies # iPad/iPad影视
405: TV/Anime # Animations/动漫
402: TV # TV Series/剧集
403: TV # TV Shows/综艺
406: Audio/Video # Music Videos/音乐MV
407: TV/Sport # Sports/体育
408: Audio # HQ Audio/无损音乐
409: Other # Misc/其他
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
download:
method: post
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "0"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: form[action^="download.php?id="]
attribute: action
imdb:
selector: a[href^="http://www.imdb.com/title/tt"]
attribute: href
size:
selector: td.rowfollow:nth-child(5)
grabs:
selector: td.rowfollow:nth-child(8)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
date:
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
img.pro_free: "0"
img.pro_free2up: "0"
img.pro_50pctdown: "0.5"
img.pro_50pctdown2up: "0.5"
img.pro_30pctdown: "0.3"
"*": "1"
uploadvolumefactor:
case:
img.pro_50pctdown2up: "2"
img.pro_free2up: "2"
img.pro_2up: "2"
"*": "1"
description:
selector: td:nth-child(2)
remove: a, img

View File

@@ -0,0 +1,118 @@
---
site: hon3yhd
name: Hon3y HD
language: en-us
encoding: UTF-8
links:
- https://hon3yhd.com/
caps:
categories:
31: Movies/BluRay # 1080p BluRay
70: Movies/3D # 3D Movies
30: Movies/BluRay # 720p BluRay
68: TV/Anime # Animation
9: Movies/BluRay # BD25
10: Movies/BluRay # BD50
8: Movies/DVD # DVD5
7: Movies/DVD # DvD9
1: Movies/SD # DVDRips
26: Books # Ebooks
13: PC/Games # Games
2: Movies/HD # HDRips
32: Movies/HD # HEVC Movies
33: Movies # Hollywood Dub
4: Movies # Hollywood Movies
21: TV # Hollywood TV
20: TV # Indian TV
18: Movies # Malayalam Movies
25: Audio # Music
24: Audio/Video # Music Videos
5: Movies # Pakistani Movies
19: TV # Pakistani TV
36: Other # Pre Releases
15: Movies # Punjabi Movies
28: Other # Religious
11: Movies # Remux
12: PC # Softwares
34: Movies # South Dub
14: TV/Sport # Sports
35: TV # Stage Drama
17: Movies # Tamil Movies
16: Movies # Telugu Movies
27: Other # Tutorial
29: Movies/SD # Upscaled DvDRips
3: Movies # WEB-HD
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
use_ssl: "1"
perm_ssl: "1"
error:
- selector: tbody:has(td.colhead > span:contains("Error"))
- selector: tbody:has(td.colhead > span:contains("failed"))
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr.tt
fields:
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?torrent="]
attribute: href
banner|optional:
selector: a[href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: src=\\'(.+?)\\'
- name: replace
args: ["./pic/noposter.jpg", ""]
size:
selector: td:nth-child(7)
files:
selector: td:nth-child(4)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d\.]+)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
downloadvolumefactor:
case:
"a.info > b:contains(\"Free\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,104 @@
---
site: hyperay
name: Hyperay
language: zh-cn
encoding: UTF-8
links:
- https://www.hyperay.cc
caps:
categories:
410: Movies/HD # Movies 1080p
411: Movies/HD # Movies 720p
401: Movies/BluRay # Movies Blu-ray
415: Movies # Movies REMUX
416: Movies/3D # Movies 3D
414: Movies/DVD # Movies DVD
412: Movies/WEBDL # Movies WEB-DL
413: Movies/SD # Movies HDTV
417: Movies/Other # Movies iPad
402: TV # TV Series
403: TV # TV Shows
404: TV/Documentary # Documentaries
405: TV/Anime # Animations
406: Audio/Video # Music Videos
407: TV/Sport # Sports
408: Audio # HQ Audio
418: Books # Book
409: Other # Misc
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "0"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr[class]
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdb:
selector: a[href^="http://www.imdb.com/title/"]
attribute: href
banner:
selector: a[title][onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "showmenu\\(this,'.*','(.*)'\\);"
size:
selector: td.rowfollow:nth-child(6)
grabs:
selector: td.rowfollow:nth-child(9)
seeders:
selector: td.rowfollow:nth-child(7)
leechers:
selector: td.rowfollow:nth-child(8)
date:
selector: td.rowfollow:nth-child(5) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

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