mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-10 13:48:02 +02:00
Compare commits
450 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3dcfd990cb | ||
![]() |
f9cb1d6823 | ||
![]() |
7dedeae827 | ||
![]() |
13fb25478f | ||
![]() |
f16ee42f7d | ||
![]() |
16a59b8abd | ||
![]() |
45e5d032f7 | ||
![]() |
4fa14efc89 | ||
![]() |
ada079dba7 | ||
![]() |
484cc35577 | ||
![]() |
983e7954da | ||
![]() |
3e082137b0 | ||
![]() |
46a37e5b6c | ||
![]() |
e7050767fe | ||
![]() |
4d058ef8b1 | ||
![]() |
4741902ade | ||
![]() |
b2390bb954 | ||
![]() |
933f983fdf | ||
![]() |
e1c15f82d2 | ||
![]() |
4dce8f61d9 | ||
![]() |
fc74b9ebcf | ||
![]() |
84204f43e9 | ||
![]() |
3ef950ac64 | ||
![]() |
0004b900d0 | ||
![]() |
ef82fc136b | ||
![]() |
5cfa72361b | ||
![]() |
db37b42b86 | ||
![]() |
72e64b41a1 | ||
![]() |
09df00aae5 | ||
![]() |
76cbae8da5 | ||
![]() |
76b6b3e5d7 | ||
![]() |
964803d170 | ||
![]() |
a08ad7e16d | ||
![]() |
ec175fb31b | ||
![]() |
2e61ec23a6 | ||
![]() |
3e438c9a56 | ||
![]() |
cfee3e79d2 | ||
![]() |
8e64ecb027 | ||
![]() |
e7e1014759 | ||
![]() |
d7bc256c49 | ||
![]() |
8f1ae194d1 | ||
![]() |
30eb7ea088 | ||
![]() |
466c7ddb73 | ||
![]() |
6727b28cf1 | ||
![]() |
2672ade767 | ||
![]() |
fcbd644c2b | ||
![]() |
4a232b1b25 | ||
![]() |
e92bef31ef | ||
![]() |
06449160b6 | ||
![]() |
99d3aad60a | ||
![]() |
aef52b694a | ||
![]() |
8c5a4c9f5c | ||
![]() |
b601b41932 | ||
![]() |
2608a4cd44 | ||
![]() |
729edfa262 | ||
![]() |
e808df2e53 | ||
![]() |
96d1d4eee7 | ||
![]() |
27a7ce8d3f | ||
![]() |
e6a56a0cbb | ||
![]() |
73fb71507c | ||
![]() |
ba3dbcc5dc | ||
![]() |
206529a7a4 | ||
![]() |
42ae10d71e | ||
![]() |
2e69af5e40 | ||
![]() |
ff3f3b9765 | ||
![]() |
c30a8656f5 | ||
![]() |
2920cf7d20 | ||
![]() |
1c42d741a5 | ||
![]() |
06315470c4 | ||
![]() |
5806ec4b94 | ||
![]() |
e88c49ac8c | ||
![]() |
b5a6aab894 | ||
![]() |
12e55828f0 | ||
![]() |
ea2c4d4c71 | ||
![]() |
dc530f5abb | ||
![]() |
8dff433d2e | ||
![]() |
c6f9927afa | ||
![]() |
fa9db90d56 | ||
![]() |
8fbcbf25c3 | ||
![]() |
707298b0d7 | ||
![]() |
8de87f4b23 | ||
![]() |
281977a5e9 | ||
![]() |
6c64f68360 | ||
![]() |
fc8ebdca92 | ||
![]() |
c249c2ef12 | ||
![]() |
d7dddf6009 | ||
![]() |
c18c0d574f | ||
![]() |
3257c8e759 | ||
![]() |
105d1b669a | ||
![]() |
98d1f579ee | ||
![]() |
40705eebde | ||
![]() |
f3c35b2d6f | ||
![]() |
684b664aa7 | ||
![]() |
62b568e004 | ||
![]() |
939572100b | ||
![]() |
2f23844edc | ||
![]() |
90fb780560 | ||
![]() |
3cca3b2e38 | ||
![]() |
ef73523c8e | ||
![]() |
79105d9750 | ||
![]() |
79a2c79e47 | ||
![]() |
47b80b1c10 | ||
![]() |
91812d94b9 | ||
![]() |
955bca06da | ||
![]() |
2cc43ff634 | ||
![]() |
fb34e6fd54 | ||
![]() |
c78cd997ee | ||
![]() |
b9e7bb5261 | ||
![]() |
a97dbedc99 | ||
![]() |
6f33737eb9 | ||
![]() |
47e2ab3a56 | ||
![]() |
2b68356431 | ||
![]() |
7a35701d12 | ||
![]() |
1b0888028f | ||
![]() |
c2ef2517c3 | ||
![]() |
ff4ce78db0 | ||
![]() |
38fddab2ad | ||
![]() |
6eaaa419f6 | ||
![]() |
d84a18700a | ||
![]() |
9e499379ff | ||
![]() |
39a3157d75 | ||
![]() |
3139a2cd1d | ||
![]() |
5978eb7263 | ||
![]() |
2c1fdf0824 | ||
![]() |
15d3d08be7 | ||
![]() |
c4b77eafb6 | ||
![]() |
f2bf84a8d9 | ||
![]() |
149171d60b | ||
![]() |
9e30f24025 | ||
![]() |
d013fa04b6 | ||
![]() |
809a24f486 | ||
![]() |
3f01a61510 | ||
![]() |
1b6cc7740d | ||
![]() |
03b686ae59 | ||
![]() |
99411e1ed9 | ||
![]() |
67d01d4abc | ||
![]() |
3c6f55b65e | ||
![]() |
916f4756ef | ||
![]() |
401c3a3f41 | ||
![]() |
6f854d0d99 | ||
![]() |
7c33c536bc | ||
![]() |
3d6da64973 | ||
![]() |
be8dfd7ad6 | ||
![]() |
60da4948fa | ||
![]() |
b2040d3a5b | ||
![]() |
869b09f574 | ||
![]() |
aac2e42f9e | ||
![]() |
2ad340f1bc | ||
![]() |
943ddba22b | ||
![]() |
79fa4da2bf | ||
![]() |
da7589838f | ||
![]() |
2a4be14998 | ||
![]() |
c81a2163ce | ||
![]() |
d3ada91c3a | ||
![]() |
653dcca2af | ||
![]() |
c2a24cae22 | ||
![]() |
babd49c082 | ||
![]() |
1007366471 | ||
![]() |
e747d4e2fa | ||
![]() |
efab277714 | ||
![]() |
7f8cfa7eca | ||
![]() |
6abc8adcd1 | ||
![]() |
8e1d171937 | ||
![]() |
9f433dd0de | ||
![]() |
65da3e83af | ||
![]() |
21250c275f | ||
![]() |
e612c111c6 | ||
![]() |
e24c95d4e2 | ||
![]() |
2920caf7c0 | ||
![]() |
f73a047ed9 | ||
![]() |
313ade66f4 | ||
![]() |
392a0d7b7e | ||
![]() |
324afbcd0f | ||
![]() |
7f003427fd | ||
![]() |
a89246c9a7 | ||
![]() |
69b01c34f8 | ||
![]() |
a41bf6ebe4 | ||
![]() |
5bf224d84d | ||
![]() |
03af2a6d1d | ||
![]() |
aee7bba3ce | ||
![]() |
29b1304967 | ||
![]() |
81029b3019 | ||
![]() |
62caeb3f4d | ||
![]() |
fba3e1922f | ||
![]() |
0aacf6344d | ||
![]() |
9d3d8ea18d | ||
![]() |
4da3921e21 | ||
![]() |
fed41d5b68 | ||
![]() |
15841e26a8 | ||
![]() |
22a5f46276 | ||
![]() |
eb5642f293 | ||
![]() |
98297b2d85 | ||
![]() |
d900ac065f | ||
![]() |
469620d88b | ||
![]() |
461594e336 | ||
![]() |
63f1870319 | ||
![]() |
ba9710cd7c | ||
![]() |
44c814417c | ||
![]() |
d1290fc226 | ||
![]() |
fa88fa8af8 | ||
![]() |
318b3667ff | ||
![]() |
7b0adc7e45 | ||
![]() |
d27ab11d8c | ||
![]() |
5b6c9fee49 | ||
![]() |
594959c858 | ||
![]() |
5b570b5cec | ||
![]() |
875be5dde9 | ||
![]() |
ffd1600226 | ||
![]() |
07ef45b637 | ||
![]() |
24f7fa461d | ||
![]() |
8ebeb2bb17 | ||
![]() |
fe3fcda356 | ||
![]() |
b689b4581e | ||
![]() |
623da8f70d | ||
![]() |
6afaf39d5a | ||
![]() |
55bd19dc45 | ||
![]() |
0979b0c86d | ||
![]() |
f4c8677091 | ||
![]() |
1123e9d101 | ||
![]() |
9a39fcc310 | ||
![]() |
e8fc2c758f | ||
![]() |
b8cdf9f929 | ||
![]() |
89c860a16d | ||
![]() |
ee5255b24a | ||
![]() |
674e6e37ad | ||
![]() |
082e761d0d | ||
![]() |
6e8726c197 | ||
![]() |
3a8ed21d75 | ||
![]() |
eda0205dcd | ||
![]() |
bd250ff971 | ||
![]() |
1c63e9444d | ||
![]() |
57a5959751 | ||
![]() |
9e005c4c0b | ||
![]() |
c6d4746e85 | ||
![]() |
e9851a1dbc | ||
![]() |
96d23ca19a | ||
![]() |
733494a8a3 | ||
![]() |
ed763fe7e1 | ||
![]() |
1ef146eea4 | ||
![]() |
ed884f507d | ||
![]() |
ec6ed23ecc | ||
![]() |
9d5456e370 | ||
![]() |
ad08e28aa9 | ||
![]() |
34dcdd3332 | ||
![]() |
628944cb59 | ||
![]() |
08bc5cca75 | ||
![]() |
5c16161bfc | ||
![]() |
4eb7392678 | ||
![]() |
0448193ecd | ||
![]() |
dc27463826 | ||
![]() |
d3ef94c8db | ||
![]() |
74e3dec4ed | ||
![]() |
0b45557292 | ||
![]() |
0387de3c67 | ||
![]() |
6358e62741 | ||
![]() |
b012502f87 | ||
![]() |
608bb7d9e4 | ||
![]() |
5f4206608e | ||
![]() |
aef10d1246 | ||
![]() |
6fc972aa08 | ||
![]() |
271dcda7aa | ||
![]() |
94656892f8 | ||
![]() |
5fedb9c613 | ||
![]() |
538fa6a38d | ||
![]() |
4bd4d9cb0f | ||
![]() |
a353af2ee5 | ||
![]() |
565a368689 | ||
![]() |
972d4c9485 | ||
![]() |
45b77de6b2 | ||
![]() |
a27c641bcb | ||
![]() |
00cd1bd81c | ||
![]() |
80493b7fa1 | ||
![]() |
925471fa0c | ||
![]() |
9ae16dea57 | ||
![]() |
1aa3a256eb | ||
![]() |
89d12c6fa9 | ||
![]() |
ab6ca013d3 | ||
![]() |
20d6e3eb09 | ||
![]() |
37a50f8374 | ||
![]() |
fac07933a2 | ||
![]() |
8b77c6b483 | ||
![]() |
f1414eeeec | ||
![]() |
7a7bf83d98 | ||
![]() |
1d48eb2dd7 | ||
![]() |
e3956e123e | ||
![]() |
1cfe4f9226 | ||
![]() |
2cc601c5a9 | ||
![]() |
a69664428a | ||
![]() |
389daf9957 | ||
![]() |
93d200895b | ||
![]() |
43414bc9ed | ||
![]() |
e630390c3f | ||
![]() |
eb59c0bd51 | ||
![]() |
e743f8b3aa | ||
![]() |
6aaf12f1de | ||
![]() |
bd5e407b53 | ||
![]() |
c93d2821b1 | ||
![]() |
f65d2ba9e9 | ||
![]() |
0f5655ce0d | ||
![]() |
5484d05291 | ||
![]() |
fcc4168f54 | ||
![]() |
905a52a82b | ||
![]() |
86fd318211 | ||
![]() |
e66beb64f4 | ||
![]() |
4b507a3cbb | ||
![]() |
5033171c54 | ||
![]() |
8faf1c94dc | ||
![]() |
d05ad1ccb5 | ||
![]() |
9a1562ef8b | ||
![]() |
b5aee501e2 | ||
![]() |
dc9519c451 | ||
![]() |
692d006078 | ||
![]() |
7aac4fcfcb | ||
![]() |
81e5589707 | ||
![]() |
c36e3356e2 | ||
![]() |
d477f01f84 | ||
![]() |
d080c4a2ac | ||
![]() |
6252c73cf2 | ||
![]() |
3f9d182083 | ||
![]() |
0cabbd68c5 | ||
![]() |
c42027842b | ||
![]() |
66b433bde1 | ||
![]() |
ae303a5d4e | ||
![]() |
ca19d2219e | ||
![]() |
28a85d6426 | ||
![]() |
bd1d95ade5 | ||
![]() |
6634c5a036 | ||
![]() |
cc671dfab5 | ||
![]() |
dccdd89299 | ||
![]() |
c23370b5fc | ||
![]() |
d53a0ae4b9 | ||
![]() |
4e8c52e16a | ||
![]() |
eaae440c66 | ||
![]() |
c7e288a372 | ||
![]() |
a8375e8cfe | ||
![]() |
4ed5507e4d | ||
![]() |
682304d186 | ||
![]() |
1455a905f1 | ||
![]() |
64f066839d | ||
![]() |
cf676b4a3f | ||
![]() |
8bd74a2cc9 | ||
![]() |
77837b7483 | ||
![]() |
96e5e259e9 | ||
![]() |
6999410617 | ||
![]() |
e55e92f9ac | ||
![]() |
4710fa619c | ||
![]() |
61f9bec045 | ||
![]() |
318e8722db | ||
![]() |
86ce7ef1c8 | ||
![]() |
0997bf674a | ||
![]() |
c07c4f0682 | ||
![]() |
1563418d88 | ||
![]() |
771c0ac68c | ||
![]() |
143ffbf790 | ||
![]() |
a3f30a2dd9 | ||
![]() |
a9d3ae0107 | ||
![]() |
012f3d1bbc | ||
![]() |
9826e2c2af | ||
![]() |
a512ea37c3 | ||
![]() |
3aedbc7baf | ||
![]() |
b32257ae95 | ||
![]() |
6c1c4092bd | ||
![]() |
758138415e | ||
![]() |
b9a6c7c810 | ||
![]() |
dda62f1e18 | ||
![]() |
8fcb19e1ea | ||
![]() |
66e7ced25b | ||
![]() |
5f1848d1de | ||
![]() |
1f9c760246 | ||
![]() |
3f19e6becf | ||
![]() |
130c0bebbe | ||
![]() |
b944993733 | ||
![]() |
542f8d67e4 | ||
![]() |
35f9e0fbe0 | ||
![]() |
db669b31a1 | ||
![]() |
1b64476102 | ||
![]() |
5530fa1ca4 | ||
![]() |
1fb77a6334 | ||
![]() |
175249d6f0 | ||
![]() |
f59f73e228 | ||
![]() |
c1b2328bbf | ||
![]() |
a3c1f3eb52 | ||
![]() |
f238e78337 | ||
![]() |
fd8823f6bd | ||
![]() |
c14ee124f5 | ||
![]() |
f4d45517c5 | ||
![]() |
091cfbb310 | ||
![]() |
698050e86a | ||
![]() |
bb3faa3f62 | ||
![]() |
08a68e0116 | ||
![]() |
d22ef13fb2 | ||
![]() |
d5e2014233 | ||
![]() |
dd52a16bff | ||
![]() |
a697aba985 | ||
![]() |
1533ad1927 | ||
![]() |
348461ebfc | ||
![]() |
b83a984365 | ||
![]() |
b07d1a32ca | ||
![]() |
e3bb63aac4 | ||
![]() |
65fc651d88 | ||
![]() |
218e0c989c | ||
![]() |
6f252254e3 | ||
![]() |
977052dfd7 | ||
![]() |
b78d04c116 | ||
![]() |
63267b597e | ||
![]() |
544501d2a8 | ||
![]() |
169fda4dbb | ||
![]() |
d3d78d3662 | ||
![]() |
2d1175dcc1 | ||
![]() |
0a7f06de31 | ||
![]() |
9f3f11ac49 | ||
![]() |
49affa0555 | ||
![]() |
f5c482f939 | ||
![]() |
6c67b7a8de | ||
![]() |
368947a061 | ||
![]() |
f0138405a6 | ||
![]() |
8373ee3b0c | ||
![]() |
dfaf9dd3a6 | ||
![]() |
c1bde9b643 | ||
![]() |
d86c60ffef | ||
![]() |
e4cfedfcfb | ||
![]() |
d3161e7b75 | ||
![]() |
baf4730316 | ||
![]() |
a89b69e821 | ||
![]() |
4d48c1be44 | ||
![]() |
8056e47fef | ||
![]() |
63a3465aa6 | ||
![]() |
03bbafb0c9 | ||
![]() |
d8cbae68d5 | ||
![]() |
99c269c896 | ||
![]() |
b4075d1d35 | ||
![]() |
49eebc90e4 | ||
![]() |
68b25de828 | ||
![]() |
00104205c0 | ||
![]() |
28b53d8fb1 | ||
![]() |
8a94d689b8 | ||
![]() |
ad00e49fe2 | ||
![]() |
888361f46f | ||
![]() |
edc4c31fa6 | ||
![]() |
a1dde973fb | ||
![]() |
525f58eb1d | ||
![]() |
124fbf7c1b | ||
![]() |
b9b10e4e91 | ||
![]() |
427b556869 | ||
![]() |
04f9f2dfe7 | ||
![]() |
d8e7a63768 | ||
![]() |
2f694147a1 | ||
![]() |
c339d54aed | ||
![]() |
58974623de | ||
![]() |
889a8da4e5 |
@@ -123,7 +123,7 @@ dotnet_style_prefer_compound_assignment=true:suggestion
|
||||
###############################
|
||||
# Style Definitions
|
||||
dotnet_naming_style.pascal_case_style.capitalization=pascal_case
|
||||
# Use PascalCase for constant fields
|
||||
# Use PascalCase for constant fields
|
||||
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity=warning
|
||||
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols=constant_fields
|
||||
dotnet_naming_rule.constant_fields_should_be_pascal_case.style=pascal_case_style
|
||||
@@ -161,11 +161,11 @@ dotnet_naming_rule.asyncmethods_should_be_ends_with_async.style = ends_with_asyn
|
||||
|
||||
dotnet_naming_symbols.interface.applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
|
||||
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
|
||||
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
|
||||
@@ -173,11 +173,11 @@ dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = stat
|
||||
|
||||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
|
||||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.types.required_modifiers =
|
||||
dotnet_naming_symbols.types.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
|
||||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.non_field_members.required_modifiers =
|
||||
dotnet_naming_symbols.non_field_members.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.asyncmethods.applicable_kinds = delegate, method, local_function
|
||||
dotnet_naming_symbols.asyncmethods.applicable_accessibilities = *
|
||||
@@ -185,29 +185,29 @@ dotnet_naming_symbols.asyncmethods.required_modifiers = async
|
||||
|
||||
# Naming styles
|
||||
|
||||
dotnet_naming_style.pascal_case.required_prefix =
|
||||
dotnet_naming_style.pascal_case.required_suffix =
|
||||
dotnet_naming_style.pascal_case.word_separator =
|
||||
dotnet_naming_style.pascal_case.required_prefix =
|
||||
dotnet_naming_style.pascal_case.required_suffix =
|
||||
dotnet_naming_style.pascal_case.word_separator =
|
||||
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.begins_with_i.required_prefix = I
|
||||
dotnet_naming_style.begins_with_i.required_suffix =
|
||||
dotnet_naming_style.begins_with_i.word_separator =
|
||||
dotnet_naming_style.begins_with_i.required_suffix =
|
||||
dotnet_naming_style.begins_with_i.word_separator =
|
||||
dotnet_naming_style.begins_with_i.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.required_prefix = s_
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.required_suffix =
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.word_separator =
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.required_prefix = _
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.required_suffix =
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.word_separator =
|
||||
dotnet_naming_style.private_or_internal_static_with_prefix.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.private_prefix.required_prefix = _
|
||||
dotnet_naming_style.private_prefix.required_suffix =
|
||||
dotnet_naming_style.private_prefix.word_separator =
|
||||
dotnet_naming_style.private_prefix.required_suffix =
|
||||
dotnet_naming_style.private_prefix.word_separator =
|
||||
dotnet_naming_style.private_prefix.capitalization = camel_case
|
||||
|
||||
dotnet_naming_style.ends_with_async.required_prefix =
|
||||
dotnet_naming_style.ends_with_async.required_prefix =
|
||||
dotnet_naming_style.ends_with_async.required_suffix = Async
|
||||
dotnet_naming_style.ends_with_async.word_separator =
|
||||
dotnet_naming_style.ends_with_async.word_separator =
|
||||
dotnet_naming_style.ends_with_async.capitalization = pascal_case
|
||||
|
||||
###############################
|
||||
|
19
.gitattributes
vendored
19
.gitattributes
vendored
@@ -1,16 +1,13 @@
|
||||
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||
* text=auto
|
||||
|
||||
# Explicitly declare text files you want to always be normalized and converted
|
||||
# to native line endings on checkout.
|
||||
|
||||
# Declare files that will always have LF line endings on checkout.
|
||||
*.yml text eol=lf
|
||||
*.sh text eol=lf
|
||||
|
||||
# Declare files that will always have CRLF line endings on checkout.
|
||||
*.cs text eol=crlf
|
||||
* text eol=lf
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.png binary
|
||||
*.eot binary
|
||||
*.ico binary
|
||||
*.jpg binary
|
||||
*.otf binary
|
||||
*.png binary
|
||||
*.ttf binary
|
||||
*.woff binary
|
||||
*.woff2 binary
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -195,9 +195,6 @@ FakesAssemblies/
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
/tools
|
||||
/BuildOutput
|
||||
/Artifacts
|
||||
/TestResults
|
||||
*.DS_Store
|
||||
.idea/
|
||||
launchSettings.json
|
||||
|
235
README.md
235
README.md
@@ -2,8 +2,7 @@
|
||||
|
||||
[](https://github.com/Jackett/Jackett/issues)
|
||||
[](https://github.com/Jackett/Jackett/pulls)
|
||||
[](https://ci.appveyor.com/project/Jackett/jackett)
|
||||
[](https://dev.azure.com/Jackett-project/Jackett/_build/latest?definitionId=1&branchName=master)
|
||||
[](https://dev.azure.com/jackett/jackett/_build/latest?definitionId=1&branchName=master)
|
||||
[](https://github.com/Jackett/Jackett/releases/latest)
|
||||
[](https://hub.docker.com/r/linuxserver/jackett/)
|
||||
[](https://discord.gg/J865QuA)
|
||||
@@ -19,14 +18,15 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
|
||||
|
||||
#### Supported Systems
|
||||
* Windows 7SP1 or greater using .NET 4.6.1 or above [Download here](https://www.microsoft.com/net/framework/versions/net461)
|
||||
* Linux [supported operating systems here](https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.md#linux)
|
||||
* Windows 7SP1 or greater
|
||||
* Linux [supported operating systems here](https://github.com/dotnet/core/blob/master/release-notes/3.1/3.1-supported-os.md#linux)
|
||||
* macOS 10.13 or greater
|
||||
|
||||
<details> <summary> <b> Supported Public Trackers </b> </summary>
|
||||
|
||||
* 1337x
|
||||
* 7torrents
|
||||
* AcademicTorrents
|
||||
* ACG.RIP
|
||||
* ACGsou
|
||||
* Anidex
|
||||
@@ -37,10 +37,10 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* BigFANGroup
|
||||
* BitRu
|
||||
* BitTorrent.AM
|
||||
* BT.etree
|
||||
* BTDB
|
||||
* BTDIGG
|
||||
* BTeye
|
||||
* BT.etree
|
||||
* BTSOW
|
||||
* Cili180
|
||||
* ConCen
|
||||
@@ -49,11 +49,11 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* cpasbienClone
|
||||
* Demonoid
|
||||
* dmhy
|
||||
* ETTV
|
||||
* EliteTorrent.biz
|
||||
* EstrenosDTL
|
||||
* ExtraTorrent.cd
|
||||
* ETTV
|
||||
* EXT Torrents
|
||||
* ExtraTorrent.cd
|
||||
* EZTV
|
||||
* Filebase
|
||||
* FireBit
|
||||
@@ -65,16 +65,17 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Horrible Subs
|
||||
* IBit
|
||||
* Idope
|
||||
* Il CorSaRo Blu
|
||||
* Il Corsaro Nero <!-- maintained by bonny1992 -->
|
||||
* Il Corsaro Blu
|
||||
* Internet Archive (archive.org)
|
||||
* Isohunt2
|
||||
* iTorrent
|
||||
* KickAssTorrent (KATcr)
|
||||
* KickAssTorrent (kat.li)
|
||||
* KickAssTorrent (KATcr)
|
||||
* Legit Torrents
|
||||
* LePorno
|
||||
* LimeTorrents
|
||||
* LinuxTracker
|
||||
* MacTorrents
|
||||
* Magnet4You
|
||||
* MagnetDL
|
||||
@@ -82,58 +83,74 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Monova
|
||||
* MovCr
|
||||
* MoviesDVDR
|
||||
* MyPornClub
|
||||
* Newpct (aka: tvsinpagar, descargas2020, torrentlocura, torrentrapid, tumejortorrent, pctnew, etc)
|
||||
* Newstudio
|
||||
* Nitro
|
||||
* NNTT
|
||||
* NoName Club (NNM-Club)
|
||||
* Nyaa.si
|
||||
* Nyaa-Pantsu
|
||||
* Nyaa.si
|
||||
* OneJAV
|
||||
* OxTorrent
|
||||
* ParnuXi
|
||||
* PC-torrent
|
||||
* PiratBit
|
||||
* Pirateiro
|
||||
* PornLeech
|
||||
* PornoLive
|
||||
* PornoRip
|
||||
* PornoTor
|
||||
* ProStyleX
|
||||
* Rapidzona
|
||||
* RARBG
|
||||
* RinTor
|
||||
* Rus-media
|
||||
* RuTor
|
||||
* Seedpeer
|
||||
* RuTracker.RU
|
||||
* shokweb
|
||||
* ShowRSS
|
||||
* SkyTorrentsClone
|
||||
* SolidTorrents
|
||||
* sukebei.Nyaa.si
|
||||
* sosulki
|
||||
* sukebei-Pantsu
|
||||
* TFile
|
||||
* sukebei.Nyaa.si
|
||||
* The Pirate Bay (TPB)
|
||||
* TNTVillage
|
||||
* Tokyo Tosho
|
||||
* TopNow
|
||||
* Torlock
|
||||
* TOROS
|
||||
* Torrent Downloads (TD)
|
||||
* Torrent Oyun indir
|
||||
* torrent-pirat
|
||||
* Torrent4You
|
||||
* Torrent9
|
||||
* Torrent9Clone
|
||||
* TorrentDownload
|
||||
* TorrentFunk
|
||||
* TorrentGalaxy (TGx)
|
||||
* TorrentHane
|
||||
* TorrentKitty
|
||||
* TorrentParadise
|
||||
* TorrentProject2
|
||||
* TorrentRex
|
||||
* TorrentQuest
|
||||
* Torrents.csv
|
||||
* Torrentv
|
||||
* TorrentView
|
||||
* TorrentWal
|
||||
* Torrentz2
|
||||
* Underverse
|
||||
* UnionDHT
|
||||
* xxxtor
|
||||
* YourBittorrent
|
||||
* YTS.ag
|
||||
* zetorrents
|
||||
* Zooqle
|
||||
</details>
|
||||
|
||||
<details> <summary> <b> Supported Semi-Private Trackers </b> </summary>
|
||||
|
||||
* Alein
|
||||
* AlexFilm
|
||||
* AniDUB
|
||||
* ArenaBG
|
||||
@@ -142,29 +159,33 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* CasStudioTV
|
||||
* Crazy's Corner
|
||||
* CzTorrent
|
||||
* Deildu
|
||||
* DXP (Deaf Experts)
|
||||
* Deildu
|
||||
* EniaHD
|
||||
* Erzsebet
|
||||
* ExKinoRay
|
||||
* ExtremlymTorrents
|
||||
* FilmsClub
|
||||
* Gay-Torrents.net
|
||||
* Gay-Torrents.org
|
||||
* HamsterStudio
|
||||
* HD Dolby
|
||||
* HamsterStudio
|
||||
* IV-Torrents
|
||||
* KinoNaVse100
|
||||
* Kinozal
|
||||
* Korsar
|
||||
* LostFilm.tv
|
||||
* MVGroup Forum
|
||||
* MVGroup Main
|
||||
* Marine Tracker
|
||||
* Metal Tracker
|
||||
* MuziekFrabriek
|
||||
* MVGroup Forum
|
||||
* MVGroup Main
|
||||
* NetHD (VietTorrent)
|
||||
* Pornolab
|
||||
* RiperAM
|
||||
* RockBox
|
||||
* Rustorka
|
||||
* RuTracker
|
||||
* Rustorka
|
||||
* Sharewood
|
||||
* SkTorrent
|
||||
* SoundPark
|
||||
@@ -186,6 +207,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* 4thD (4th Dimension)
|
||||
* 52PT
|
||||
* 720pier
|
||||
* AST4u
|
||||
* Abnormal
|
||||
* Acid Lounge (A-L)
|
||||
* Aftershock
|
||||
@@ -197,57 +219,61 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Araba Fenice (Phoenix)
|
||||
* Asgaard (AG)
|
||||
* AsianCinema
|
||||
* AST4u
|
||||
* Audiobook Torrents (ABT)
|
||||
* AudioNews (AN)
|
||||
* Awesome-HD (AHD)
|
||||
* Audiobook Torrents (ABT)
|
||||
* Avistaz (AsiaTorrents)
|
||||
* Back-ups
|
||||
* BakaBT
|
||||
* BaconBits (bB)
|
||||
* BeiTai
|
||||
* BeyondHD (BHD)
|
||||
* Bibliotik
|
||||
* Awesome-HD (AHD)
|
||||
* BIGTorrent
|
||||
* BigTower
|
||||
* Bit-City Reloaded
|
||||
* BIT-HDTV
|
||||
* BiT-TiTAN
|
||||
* Bithorlo (BHO)
|
||||
* BitHUmen
|
||||
* Bitspyder
|
||||
* BitTorrentFiles
|
||||
* BitTurk
|
||||
* BJ-Share (BJ)
|
||||
* BlueBird
|
||||
* Blutopia (BLU)
|
||||
* Brasil Tracker
|
||||
* BroadcastTheNet (BTN)
|
||||
* BroadCity
|
||||
* BRObits
|
||||
* BrokenStones
|
||||
* BTGigs (TG)
|
||||
* BTNext (BTNT)
|
||||
* BTSCHOOL
|
||||
* Carpathians
|
||||
* CartoonChaos (CC)
|
||||
* CasaTorrent
|
||||
* Back-ups
|
||||
* BaconBits (bB)
|
||||
* BakaBT
|
||||
* BeiTai
|
||||
* BeyondHD (BHD)
|
||||
* BiT-TiTAN
|
||||
* Bibliotik
|
||||
* BigTower
|
||||
* Bit-City Reloaded
|
||||
* BitHUmen
|
||||
* BitTorrentFiles
|
||||
* BitTurk
|
||||
* Bithorlo (BHO)
|
||||
* Bitspyder
|
||||
* BlueBird
|
||||
* Blutopia (BLU)
|
||||
* Boxing Torrents
|
||||
* Brasil Tracker
|
||||
* BroadCity
|
||||
* BroadcastTheNet (BTN)
|
||||
* BrokenStones
|
||||
* CCFBits
|
||||
* CGPeers
|
||||
* CHDBits
|
||||
* Carpathians
|
||||
* CartoonChaos (CC)
|
||||
* CasaTorrent
|
||||
* ChannelX
|
||||
* Cinemageddon
|
||||
* ChileBT
|
||||
* CinemaMovies
|
||||
* Cinematik
|
||||
* CinemaZ (EuTorrents)
|
||||
* Cinemageddon
|
||||
* Cinematik
|
||||
* Classix
|
||||
* Concertos
|
||||
* CrazyHD
|
||||
* CrazySpirits
|
||||
* CrnaBerza
|
||||
* DXDHD
|
||||
* DanishBits (DB)
|
||||
* Dark-Shadow
|
||||
* Das Unerwartete
|
||||
* DataScene (DS)
|
||||
* Demon-Site
|
||||
* DesiReleasers
|
||||
* DesiTorrents
|
||||
* Diablo Torrent
|
||||
@@ -258,22 +284,21 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* DocumentaryTorrents (DT)
|
||||
* Downloadville
|
||||
* Dragonworld Reloaded
|
||||
* DXDHD
|
||||
* EbookParadijs
|
||||
* Ebooks-Shares
|
||||
* EfectoDoppler
|
||||
* EggMeOn
|
||||
* Elite-Tracker
|
||||
* Empornium (EMP)
|
||||
* eShareNet
|
||||
* eStone (XiDER, BeLoad)
|
||||
* EpubLibre
|
||||
* Ethor.net (Thor's Land)
|
||||
* ExoticaZ (YourExotic)
|
||||
* ExtremeTorrents
|
||||
* FANO.IN
|
||||
* FeedUrNeed (FuN)
|
||||
* Fantastic Heaven
|
||||
* Femdomcult
|
||||
* FileList (FL)
|
||||
* Film-Paleis
|
||||
* FinElite (FE)
|
||||
* FinVip
|
||||
* FocusX
|
||||
* FreeTorrent
|
||||
@@ -281,24 +306,22 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* FunFile (FF)
|
||||
* FunkyTorrents (FT)
|
||||
* Fuzer (FZ)
|
||||
* Galeriens (LaPauseTorrents)
|
||||
* GAYtorrent.ru
|
||||
* GFXPeers
|
||||
* Galeriens (LaPauseTorrents)
|
||||
* GazelleGames (GGn)
|
||||
* Generation-Free
|
||||
* GFXPeers
|
||||
* GigaTorrents
|
||||
* GimmePeers (formerly ILT) <!-- maintained by jamesb2147 -->
|
||||
* GimmePeers (formerly ILT)
|
||||
* GiroTorrent
|
||||
* Greek Legends
|
||||
* Greek Team
|
||||
* HacheDe
|
||||
* HD-Bits.com
|
||||
* HD-Forever (HDF)
|
||||
* HD-Olimpo
|
||||
* HD-Only (HDO)
|
||||
* HD-Space (HDS)
|
||||
* HD-Spain
|
||||
* HD-Torrents (HDT)
|
||||
* HD-Bits.com
|
||||
* HD4FANS
|
||||
* HDArea (HDA)
|
||||
* HDBits
|
||||
@@ -315,23 +338,26 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* HDTurk
|
||||
* HDU
|
||||
* HDZone
|
||||
* HQSource (HQS)
|
||||
* HacheDe
|
||||
* Hebits
|
||||
* Hon3y HD
|
||||
* HQSource (HQS)
|
||||
* Horror Site
|
||||
* HuSh
|
||||
* ICE Torrent
|
||||
* IPTorrents (IPT)
|
||||
* ImmortalSeed (iS)
|
||||
* Immortuos
|
||||
* inPeril
|
||||
* Insane Tracker
|
||||
* IPTorrents (IPT)
|
||||
* JPopsuki
|
||||
* Kapaki
|
||||
* Karagarga
|
||||
* LegacyHD (HD4Free)
|
||||
* LastFiles
|
||||
* Le Saloon
|
||||
* LeChaudron
|
||||
* LeagueHD
|
||||
* LearnFlakes
|
||||
* LegacyHD (HD4Free)
|
||||
* LibraNet (LN)
|
||||
* LinkoManija
|
||||
* LosslessClub
|
||||
@@ -339,11 +365,11 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Magico (Trellas)
|
||||
* Majomparádé (TurkDepo)
|
||||
* MicroBit (µBit)
|
||||
* MMA-Torrents
|
||||
* MoeCat
|
||||
* Mononoké-BT
|
||||
* MoreThanTV (MTV)
|
||||
* MyAnonamouse (MAM)
|
||||
* myAmity
|
||||
* MySpleen
|
||||
* NBTorrents
|
||||
* NCore
|
||||
@@ -353,119 +379,123 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* New Real World
|
||||
* Norbits
|
||||
* NordicBits (NB)
|
||||
* NORDiCHD
|
||||
* Nostalgic (The Archive)
|
||||
* notwhat.cd
|
||||
* Nostalgic (The Archive / VHSTAPES)
|
||||
* OnlineSelfEducation
|
||||
* Orpheus
|
||||
* Ourbits (HDPter)
|
||||
* P2PBG
|
||||
* P2PElite
|
||||
* PT99
|
||||
* PTFiles (PTF)
|
||||
* PThome
|
||||
* PWTorrents (PWT)
|
||||
* Partis
|
||||
* PassThePopcorn (PTP)
|
||||
* Peers.FM
|
||||
* PiXELHD (PxHD)
|
||||
* PirateTheNet (PTN)
|
||||
* PixelCove (Ultimate Gamer)
|
||||
* PiXELHD (PxHD)
|
||||
* Pleasuredome
|
||||
* PolishSource (PS)
|
||||
* PolishTracker
|
||||
* Pornbay
|
||||
* PornBits (PB)
|
||||
* Pornbay
|
||||
* Pretome
|
||||
* PrivateHD (PHD)
|
||||
* ProAudioTorrents (PAT)
|
||||
* Psytorrents
|
||||
* PT99
|
||||
* PTFiles (PTF)
|
||||
* PThome
|
||||
* PTerClub
|
||||
* PTSBAO
|
||||
* PuntoTorrent
|
||||
* PWTorrents (PWT)
|
||||
* PuroVicio
|
||||
* R3V WTF!
|
||||
* RPTorrents
|
||||
* Racing4Everyone (R4E)
|
||||
* RacingForMe (RFM)
|
||||
* RainbowNation Sharing (RNS)
|
||||
* Redacted (PassTheHeadphones)
|
||||
* Red Star Torrent (RST)
|
||||
* Redacted (PassTheHeadphones)
|
||||
* RetroFlix
|
||||
* RevolutionTT
|
||||
* RoDVD (Cinefiles)
|
||||
* Romanian Metal Torrent (RMT)
|
||||
* RPTorrents
|
||||
* SDBits
|
||||
* SceneFZ
|
||||
* SceneHD
|
||||
* ScenePalace (SP)
|
||||
* SceneRush
|
||||
* SceneTime
|
||||
* SceneXpress
|
||||
* SDBits
|
||||
* Secret Cinema
|
||||
* SeedFile (SF)
|
||||
* Shareisland
|
||||
* ShareSpaceDB
|
||||
* ShareUniversity
|
||||
* Shareisland
|
||||
* Shazbat
|
||||
* Shellife (SL)
|
||||
* SiamBIT
|
||||
* SnowPT (SSPT)
|
||||
* SpaceTorrent
|
||||
* SpeedCD
|
||||
* Speedmaster HD
|
||||
* SpeedTorrent Reloaded
|
||||
* Spirit of Revolution
|
||||
* SportHD
|
||||
* SportsCult
|
||||
* SpringSunday
|
||||
* SuperBits (SBS)
|
||||
* TEKNO3D
|
||||
* TLFBits
|
||||
* TOrrent-tuRK (TORK)
|
||||
* TTsWEB
|
||||
* TV Chaos UK (TVCUK)
|
||||
* TV-Vault
|
||||
* TVstore
|
||||
* TakeaByte
|
||||
* Tapochek
|
||||
* Tasmanit
|
||||
* TeamHD
|
||||
* TeamOS
|
||||
* TEKNO3D
|
||||
* TellyTorrent
|
||||
* TenYardTorrents (TYT)
|
||||
* TheAudioScene
|
||||
* TheEmpire (TE)
|
||||
* The Falling Angels (TFA)
|
||||
* The Geeks
|
||||
* The Horror Charnel (THC)
|
||||
* The New Retro
|
||||
* The Occult
|
||||
* The Place
|
||||
* The Resurrection
|
||||
* The Shinning (TsH)
|
||||
* The Show
|
||||
* The-Madhouse
|
||||
* The Vault
|
||||
* TLFBits
|
||||
* The-Madhouse
|
||||
* TheAudioScene
|
||||
* TheEmpire (TE)
|
||||
* ToTheGlory
|
||||
* Torrent Network (TN)
|
||||
* Torrent Sector Crew (TSC)
|
||||
* Torrent-Syndikat
|
||||
* Torrent.LT
|
||||
* TorrentBD
|
||||
* TorrentBytes (TBy)
|
||||
* TorrentCCF (TCCF)
|
||||
* TorrentDay (TD)
|
||||
* Torrentech (TTH)
|
||||
* TorrentFactory
|
||||
* TorrentHeaven
|
||||
* TorrentHR
|
||||
* Torrenting (TT)
|
||||
* Torrentland
|
||||
* TorrentHeaven
|
||||
* TorrentLeech (TL)
|
||||
* TorrentLeech.pl
|
||||
* TorrentSeeds (TS)
|
||||
* Torrent-Syndikat
|
||||
* TOrrent-tuRK (TORK)
|
||||
* Torrentech (TTH)
|
||||
* Torrenting (TT)
|
||||
* Torrentland
|
||||
* TotallyKids (TK)
|
||||
* ToTheGlory
|
||||
* TranceTraffic
|
||||
* Trezzor
|
||||
* TurkSeed
|
||||
* TurkTorrent (TT)
|
||||
* TV Chaos UK (TVCUK)
|
||||
* TV-Vault
|
||||
* TVstore
|
||||
* Twilight Torrents
|
||||
* Twilights Zoom
|
||||
* u-torrents (SceneFZ)
|
||||
* U-Torrents
|
||||
* U2 (U2分享園@動漫花園)
|
||||
* UHDBits
|
||||
* UnionGang
|
||||
* UnlimitZ
|
||||
@@ -473,17 +503,22 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* WDT (Wrestling Desires Torrents / Ultimate Wrestling Torrents)
|
||||
* World-In-HD
|
||||
* World-of-Tomorrow
|
||||
* x-ite.me (XM)
|
||||
* xBytesV2
|
||||
* XSpeeds (XS)
|
||||
* XWTorrents (XWT)
|
||||
* XWT-Classics
|
||||
* XWTorrents (XWT)
|
||||
* Xthor
|
||||
* XtremeFile
|
||||
* XtreMeZone (MYXZ)
|
||||
* ExoticaZ (YourExotic)
|
||||
* XtremeFile
|
||||
* Zamunda.net
|
||||
* Zelka.org
|
||||
* eShareNet
|
||||
* eStone (XiDER, BeLoad)
|
||||
* inPeril
|
||||
* myAmity
|
||||
* notwhat.cd
|
||||
* u-torrents (SceneFZ)
|
||||
* x-ite.me (XM)
|
||||
* xBytesV2
|
||||
</details>
|
||||
|
||||
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to garfieldsixtynine -at- gmail.com to get them fixed/improved.
|
||||
|
@@ -1,20 +1,20 @@
|
||||
author "sea3pea0"
|
||||
description "Upstart Script to run NzbDrone as a service on Ubuntu/Debian based systems, as well as others"
|
||||
|
||||
#Set username for the process. Should probably be what you use for logging in
|
||||
setuid {username to run jackett}
|
||||
setgid users
|
||||
|
||||
#This is the install directory. If you installed using a deb package or the NzbDrone Repository you do not need to change this
|
||||
|
||||
env DIR=/opt/Jackett
|
||||
env LD_LIBRARY_PATH=/usr/local/nzbdrone/lib
|
||||
|
||||
start on runlevel [2345]
|
||||
stop on runlevel [016]
|
||||
|
||||
respawn
|
||||
script
|
||||
chdir $DIR
|
||||
exec /volume1/@appstore/Mono/usr/bin/mono --debug JackettConsole.exe
|
||||
end script
|
||||
author "sea3pea0"
|
||||
description "Upstart Script to run NzbDrone as a service on Ubuntu/Debian based systems, as well as others"
|
||||
|
||||
#Set username for the process. Should probably be what you use for logging in
|
||||
setuid {username to run jackett}
|
||||
setgid users
|
||||
|
||||
#This is the install directory. If you installed using a deb package or the NzbDrone Repository you do not need to change this
|
||||
|
||||
env DIR=/opt/Jackett
|
||||
env LD_LIBRARY_PATH=/usr/local/nzbdrone/lib
|
||||
|
||||
start on runlevel [2345]
|
||||
stop on runlevel [016]
|
||||
|
||||
respawn
|
||||
script
|
||||
chdir $DIR
|
||||
exec /volume1/@appstore/Mono/usr/bin/mono --debug JackettConsole.exe
|
||||
end script
|
||||
|
@@ -1,12 +1,23 @@
|
||||
name: $(majorVersion).$(minorVersion).$(patchVersion)
|
||||
variables:
|
||||
majorVersion: 0
|
||||
minorVersion: 13
|
||||
minorVersion: 14
|
||||
patchVersion: $[counter(variables['minorVersion'], 1)] #this will reset when we bump minor
|
||||
jackettVersion: $(majorVersion).$(minorVersion).$(patchVersion)
|
||||
buildConfiguration: Release
|
||||
netCoreFramework: netcoreapp3.1
|
||||
netCoreSdkVersion: 3.1.x
|
||||
system.debug: true
|
||||
|
||||
trigger:
|
||||
branches:
|
||||
include:
|
||||
- '*'
|
||||
|
||||
pr:
|
||||
branches:
|
||||
include:
|
||||
- '*'
|
||||
|
||||
stages:
|
||||
- stage: BuildJackett
|
||||
@@ -243,13 +254,64 @@ stages:
|
||||
inputs:
|
||||
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
||||
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: Unit Tests (Windows only)
|
||||
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
|
||||
|
||||
- stage: UnitTestJackett
|
||||
displayName: Unit Tests
|
||||
jobs:
|
||||
- job: UnitTest
|
||||
workspace:
|
||||
clean: all
|
||||
strategy:
|
||||
matrix:
|
||||
Mono:
|
||||
buildDescription: Mono
|
||||
imageName: ubuntu-latest
|
||||
framework: net461
|
||||
runtime: linux-x64
|
||||
Windows:
|
||||
buildDescription: Windows
|
||||
imageName: windows-latest
|
||||
framework: $(netCoreFramework)
|
||||
runtime: win-x86
|
||||
macOS:
|
||||
buildDescription: macOS
|
||||
imageName: macOS-latest
|
||||
framework: $(netCoreFramework)
|
||||
runtime: osx-x64
|
||||
LinuxAmdx64:
|
||||
buildDescription: Linux AMD x64
|
||||
imageName: ubuntu-latest
|
||||
framework: $(netCoreFramework)
|
||||
runtime: linux-x64
|
||||
LinuxARM32:
|
||||
buildDescription: Linux ARM32
|
||||
imageName: ubuntu-latest
|
||||
framework: $(netCoreFramework)
|
||||
runtime: linux-arm
|
||||
LinuxARM64:
|
||||
buildDescription: Linux ARM64
|
||||
imageName: ubuntu-latest
|
||||
framework: $(netCoreFramework)
|
||||
runtime: linux-arm64
|
||||
pool:
|
||||
vmImage: $(imageName)
|
||||
displayName: ${{ variables.buildDescription }}
|
||||
steps:
|
||||
- checkout: self
|
||||
|
||||
- task: UseDotNet@2
|
||||
displayName: Install .NET Core SDK
|
||||
inputs:
|
||||
command: test
|
||||
packageType: sdk
|
||||
version: $(netCoreSdkVersion)
|
||||
installationPath: $(Agent.ToolsDirectory)/dotnet
|
||||
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: Build Test Project
|
||||
inputs:
|
||||
command: build
|
||||
projects: '**/*.Test*/*.csproj'
|
||||
arguments: '--configuration $(buildConfiguration) --framework $(framework)'
|
||||
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework)'
|
||||
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: Unit Tests (Mono, Linux and macOS)
|
||||
@@ -258,7 +320,39 @@ stages:
|
||||
command: test
|
||||
projects: '**/*.Test*/*.csproj'
|
||||
arguments: '--configuration $(buildConfiguration) --framework $(framework) --runtime $(runtime)'
|
||||
testRunTitle: 'Unit - $(buildDescription) - $(Build.BuildId)'
|
||||
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: Unit Tests & Code Coverage (Windows only)
|
||||
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
|
||||
inputs:
|
||||
command: test
|
||||
projects: '**/*.Test*/*.csproj'
|
||||
arguments: '--configuration $(buildConfiguration) --framework $(framework) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'
|
||||
testRunTitle: 'Unit - $(buildDescription) - $(Build.BuildId)'
|
||||
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: Install Coverage ReportGenerator Tool (Windows only)
|
||||
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
|
||||
inputs:
|
||||
command: custom
|
||||
custom: tool
|
||||
arguments: install --tool-path . dotnet-reportgenerator-globaltool
|
||||
|
||||
- task: PowerShell@2
|
||||
displayName: Generate Coverage Report (Windows only)
|
||||
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
|
||||
inputs:
|
||||
targetType: inline
|
||||
script: ./reportgenerator -reports:$(Build.SourcesDirectory)/src/*.Test*/coverage.*.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
|
||||
|
||||
- task: PublishCodeCoverageResults@1
|
||||
displayName: Publish Code Coverage (Windows only)
|
||||
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
|
||||
inputs:
|
||||
codeCoverageTool: Cobertura
|
||||
summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml
|
||||
|
||||
|
||||
- stage: Integration
|
||||
displayName: Integration Tests
|
||||
@@ -277,11 +371,10 @@ stages:
|
||||
buildDescription: Windows
|
||||
imageName: windows-latest
|
||||
artifactName: Jackett.Binaries.Windows.zip
|
||||
# Enable once ChromeDriver is deployed to macOS image https://github.com/actions/virtual-environments/issues/7
|
||||
# macOS:
|
||||
# buildDescription: macOS
|
||||
# imageName: macOS-latest
|
||||
# artifactName: Jackett.Binaries.macOS.tar.gz
|
||||
macOS:
|
||||
buildDescription: macOS
|
||||
imageName: macOS-latest
|
||||
artifactName: Jackett.Binaries.macOS.tar.gz
|
||||
LinuxAmdx64:
|
||||
buildDescription: Linux AMD x64
|
||||
imageName: ubuntu-latest
|
||||
@@ -318,7 +411,7 @@ stages:
|
||||
cd Jackett
|
||||
if [[ "$(artifactName)" == *"Mono"* ]]; then mono --version; fi
|
||||
if [[ "$(artifactName)" == *"Mono"* ]]; then sudo ./install_service_systemd_mono.sh; fi
|
||||
if [[ "$(artifactName)" == *"macOS"* ]]; then sudo ./install_service_macos; fi
|
||||
if [[ "$(artifactName)" == *"macOS"* ]]; then ./install_service_macos; fi
|
||||
if [[ "$(artifactName)" == *"LinuxAMDx64"* ]]; then sudo ./install_service_systemd.sh; fi
|
||||
|
||||
- task: UseDotNet@2
|
||||
@@ -333,11 +426,14 @@ stages:
|
||||
inputs:
|
||||
command: test
|
||||
projects: '**/*IntegrationTest*/*.csproj'
|
||||
testRunTitle: 'Integration - $(buildDescription) - $(Build.BuildId)'
|
||||
|
||||
|
||||
- stage: PublishGithub
|
||||
displayName: Publish to Github
|
||||
dependsOn: Integration
|
||||
dependsOn:
|
||||
- UnitTestJackett
|
||||
- Integration
|
||||
condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
|
||||
jobs:
|
||||
- job: Publish
|
||||
@@ -352,14 +448,14 @@ stages:
|
||||
patterns: '**/Jackett*'
|
||||
path: $(Build.ArtifactStagingDirectory)
|
||||
|
||||
- task: GitHubRelease@0
|
||||
- task: GitHubRelease@1
|
||||
displayName: Create Github release
|
||||
inputs:
|
||||
gitHubConnection: github.com_jackett
|
||||
repositoryName: '$(Build.Repository.Name)'
|
||||
action: create
|
||||
target: $(Build.SourceVersion)
|
||||
tagSource: manual
|
||||
tagSource: userSpecifiedTag
|
||||
tag: v$(Build.BuildNumber)
|
||||
title: v$(Build.BuildNumber)
|
||||
assets: $(Build.ArtifactStagingDirectory)/drop/*
|
||||
@@ -367,3 +463,25 @@ stages:
|
||||
isDraft: true
|
||||
addChangeLog: true
|
||||
compareWith: lastNonDraftRelease
|
||||
|
||||
- task: PowerShell@2
|
||||
displayName: Ensure all artifacts are uploaded to Github
|
||||
inputs:
|
||||
targetType: inline
|
||||
script: |
|
||||
$json = Invoke-WebRequest 'https://dev.azure.com/jackett/jackett/_apis/build/builds/$(Build.BuildId)/logs?api-version=5.0' | ConvertFrom-Json
|
||||
$lastTwoLogUrls = $json.value[-1..-2].url
|
||||
foreach($logUrl in $lastTwoLogUrls)
|
||||
{
|
||||
Write-Output $logUrl
|
||||
$logText = Invoke-WebRequest $logUrl
|
||||
if ($logText -like '*Creating a release for tag:*')
|
||||
{
|
||||
$logInspect = ($logText -split "Creating a release for tag:")[-1]
|
||||
$successCount = (Select-String "Uploaded file successfully:" -InputObject $logInspect -AllMatches).Matches.Count
|
||||
$failureCount = (Select-String "Duplicate asset found:" -InputObject $logInspect -AllMatches).Matches.Count
|
||||
Write-Output "Success count is: $successCount and failure count is: $failureCount"
|
||||
if (($successCount -ne 7) -or ($failureCount -ne 0)) { Write-Host "##vso[task.complete result=Failed;]DONE" }
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,39 +1,66 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Setting up colors
|
||||
# If you have problems installing Jackett, please open an issue on
|
||||
# https://github.com/Jackett/Jackett/issues
|
||||
|
||||
# Setting up colors
|
||||
BOLDRED="$(printf '\033[1;31m')"
|
||||
BOLDGREEN="$(printf '\033[1;32m')"
|
||||
NC="$(printf '\033[0m')" # No Color
|
||||
|
||||
# Stop and unload the service if it's running
|
||||
jackettservice="jackett.service"
|
||||
systemctl stop ${jackettservice}
|
||||
# Check if the install script is running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Please run this script as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if Jackett service is running
|
||||
JACKETT_SERVICE="jackett.service"
|
||||
echo "Checking if the service '${JACKETT_SERVICE}' is running ..."
|
||||
if systemctl is-active --quiet "${JACKETT_SERVICE}"; then
|
||||
echo "Service '${JACKETT_SERVICE}' is running"
|
||||
|
||||
# Stop and unload the service
|
||||
if systemctl stop "${JACKETT_SERVICE}"; then
|
||||
echo "Service '${JACKETT_SERVICE}' stopped"
|
||||
else
|
||||
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
echo "Service '${JACKETT_SERVICE}' is not running"
|
||||
fi
|
||||
|
||||
# Move working directory to Jackett's
|
||||
cd "$(dirname "$0")"
|
||||
JACKETT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||
echo "Jackett will be installed in '${JACKETT_DIR}'"
|
||||
if ! cd "${JACKETT_DIR}"; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not cd into '${JACKETT_DIR}' folder"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if we're running from Jackett's directory
|
||||
if [ ! -f ./jackett ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Couldn't locate jackett. Is the script in the right directory?"
|
||||
echo "${BOLDRED}ERROR${NC}: Can not locate 'jackett' file in '${JACKETT_DIR}'."
|
||||
echo "Is the script in the right directory?"
|
||||
exit 1
|
||||
fi
|
||||
jackettdir="$(pwd)"
|
||||
|
||||
# Check if Jackett's owner is root
|
||||
jackettuser="$(stat -c "%U" ./jackett)"
|
||||
if [ "${jackettuser}" == "root" ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check that no other service called Jackett is already running
|
||||
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
|
||||
JACKETT_USER="$(stat -c "%U" ./jackett)"
|
||||
if [ "${JACKETT_USER}" == "root" ] || [ "${JACKETT_USER}" == "UNKNOWN" ] ; then
|
||||
echo "${BOLDRED}ERROR${NC}: The owner of Jackett directory is '${JACKETT_USER}'."
|
||||
echo "Please, change the owner with the command 'chown <user>:<user> -R \"${JACKETT_DIR}\"'"
|
||||
echo "The user <user> will be used to run Jackett."
|
||||
exit 1
|
||||
fi
|
||||
echo "Jackett will be executed with the user '${JACKETT_USER}'"
|
||||
|
||||
# Write the systemd service descriptor
|
||||
cat >"/etc/systemd/system/${jackettservice}" <<EOL
|
||||
JACKETT_SERVICE_PATH="/etc/systemd/system/${JACKETT_SERVICE}"
|
||||
echo "Creating Jackett unit file in '${JACKETT_SERVICE_PATH}' ..."
|
||||
cat > "${JACKETT_SERVICE_PATH}" <<EOL
|
||||
[Unit]
|
||||
Description=Jackett Daemon
|
||||
After=network.target
|
||||
@@ -43,35 +70,39 @@ SyslogIdentifier=jackett
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Type=simple
|
||||
User=${jackettuser}
|
||||
Group=${jackettuser}
|
||||
WorkingDirectory=${jackettdir}
|
||||
ExecStart=${jackettdir}/jackett_launcher.sh
|
||||
TimeoutStopSec=20
|
||||
User=${JACKETT_USER}
|
||||
Group=${JACKETT_USER}
|
||||
WorkingDirectory=${JACKETT_DIR}
|
||||
ExecStart=/bin/sh "${JACKETT_DIR}/jackett_launcher.sh"
|
||||
TimeoutStopSec=30
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
EOL
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not create the file '${JACKETT_SERVICE_PATH}'"
|
||||
echo "The UnitPath of systemd changes from one distribution to another. You may have to edit the script and change the path manually."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Installing Jackett service ..."
|
||||
# Reload systemd daemon
|
||||
systemctl daemon-reload
|
||||
if ! systemctl daemon-reload; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not reload systemd daemon"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Enable the service for following restarts
|
||||
systemctl enable ${jackettservice}
|
||||
if ! systemctl enable "${JACKETT_SERVICE}"; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not enable the service '${JACKETT_SERVICE}'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run the service
|
||||
systemctl start ${jackettservice}
|
||||
|
||||
# Check that it's running
|
||||
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
|
||||
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
|
||||
if systemctl start "${JACKETT_SERVICE}"; then
|
||||
echo "${BOLDGREEN}Service successfully installed and launched!${NC}"
|
||||
else
|
||||
cat << EOL
|
||||
${BOLDRED}ERROR${NC}: Could not launch service. The installation might have failed.
|
||||
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
|
||||
Jackett directory: \`${jackettdir}\`
|
||||
Jackett user: \`${jackettuser}\`
|
||||
|
||||
EOL
|
||||
echo "${BOLDRED}ERROR${NC}: Can not start the service '${JACKETT_SERVICE}'"
|
||||
exit 1
|
||||
fi
|
||||
|
@@ -1,43 +1,75 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Setting up colors
|
||||
# If you have problems installing Jackett, please open an issue on
|
||||
# https://github.com/Jackett/Jackett/issues
|
||||
|
||||
# Setting up colors
|
||||
BOLDRED="$(printf '\033[1;31m')"
|
||||
BOLDGREEN="$(printf '\033[1;32m')"
|
||||
NC="$(printf '\033[0m')" # No Color
|
||||
|
||||
# Stop and unload the service if it's running
|
||||
jackettservice="jackett.service"
|
||||
systemctl stop ${jackettservice}
|
||||
# Check if the install script is running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Please run this script as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if Jackett service is running
|
||||
JACKETT_SERVICE="jackett.service"
|
||||
echo "Checking if the service '${JACKETT_SERVICE}' is running ..."
|
||||
if systemctl is-active --quiet "${JACKETT_SERVICE}"; then
|
||||
echo "Service '${JACKETT_SERVICE}' is running"
|
||||
|
||||
# Stop and unload the service
|
||||
if systemctl stop "${JACKETT_SERVICE}"; then
|
||||
echo "Service '${JACKETT_SERVICE}' stopped"
|
||||
else
|
||||
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
echo "Service '${JACKETT_SERVICE}' is not running"
|
||||
fi
|
||||
|
||||
# Move working directory to Jackett's
|
||||
cd "$(dirname "$0")"
|
||||
JACKETT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||
echo "Jackett will be installed in '${JACKETT_DIR}'"
|
||||
if ! cd "${JACKETT_DIR}"; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not cd into '${JACKETT_DIR}' folder"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if we're running from Jackett's directory
|
||||
if [ ! -f ./JackettConsole.exe ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Couldn't locate JackettConsole.exe. Is the script in the right directory?"
|
||||
echo "${BOLDRED}ERROR${NC}: Can not locate 'JackettConsole.exe' file in '${JACKETT_DIR}'."
|
||||
echo "Is the script in the right directory?"
|
||||
exit 1
|
||||
fi
|
||||
jackettdir="$(pwd)"
|
||||
|
||||
# Check if Jackett's owner is root
|
||||
jackettuser="$(stat -c "%U" ./JackettConsole.exe)"
|
||||
if [ "${jackettuser}" == "root" ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory."
|
||||
JACKETT_USER="$(stat -c "%U" ./JackettConsole.exe)"
|
||||
if [ "${JACKETT_USER}" == "root" ] || [ "${JACKETT_USER}" == "UNKNOWN" ] ; then
|
||||
echo "${BOLDRED}ERROR${NC}: The owner of Jackett directory is '${JACKETT_USER}'."
|
||||
echo "Please, change the owner with the command 'chown <user>:<user> -R \"${JACKETT_DIR}\"'"
|
||||
echo "The user <user> will be used to run Jackett."
|
||||
exit 1
|
||||
fi
|
||||
echo "Jackett will be executed with the user '${JACKETT_USER}'"
|
||||
|
||||
# Check if mono is installed
|
||||
command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; }
|
||||
monodir="$(dirname $(command -v mono))"
|
||||
|
||||
# Check that no other service called Jackett is already running
|
||||
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
|
||||
# Check if Mono is installed
|
||||
echo "Checking if Mono is installed ..."
|
||||
if ! command -v mono > /dev/null; then
|
||||
echo "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed"
|
||||
exit 1
|
||||
fi
|
||||
MONO_DIR="$(dirname "$(command -v mono)")"
|
||||
echo "Mono is installed in '${MONO_DIR}'"
|
||||
|
||||
# Write the systemd service descriptor
|
||||
cat >"/etc/systemd/system/${jackettservice}" <<EOL
|
||||
JACKETT_SERVICE_PATH="/etc/systemd/system/${JACKETT_SERVICE}"
|
||||
echo "Creating Jackett unit file in '${JACKETT_SERVICE_PATH}' ..."
|
||||
cat > "${JACKETT_SERVICE_PATH}" <<EOL
|
||||
[Unit]
|
||||
Description=Jackett Daemon
|
||||
After=network.target
|
||||
@@ -47,36 +79,39 @@ SyslogIdentifier=jackett
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Type=simple
|
||||
User=${jackettuser}
|
||||
Group=${jackettuser}
|
||||
WorkingDirectory=${jackettdir}
|
||||
ExecStart=${monodir}/mono --debug ${jackettdir}/JackettConsole.exe --NoRestart
|
||||
TimeoutStopSec=20
|
||||
User=${JACKETT_USER}
|
||||
Group=${JACKETT_USER}
|
||||
WorkingDirectory=${JACKETT_DIR}
|
||||
ExecStart="${MONO_DIR}/mono" --debug "${JACKETT_DIR}/JackettConsole.exe" --NoRestart
|
||||
TimeoutStopSec=30
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
EOL
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not create the file '${JACKETT_SERVICE_PATH}'"
|
||||
echo "The UnitPath of systemd changes from one distribution to another. You may have to edit the script and change the path manually."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Installing Jackett service ..."
|
||||
# Reload systemd daemon
|
||||
systemctl daemon-reload
|
||||
if ! systemctl daemon-reload; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not reload systemd daemon"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Enable the service for following restarts
|
||||
systemctl enable ${jackettservice}
|
||||
if ! systemctl enable "${JACKETT_SERVICE}"; then
|
||||
echo "${BOLDRED}ERROR${NC}: Can not enable the service '${JACKETT_SERVICE}'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run the service
|
||||
systemctl start ${jackettservice}
|
||||
|
||||
# Check that it's running
|
||||
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
|
||||
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
|
||||
if systemctl start "${JACKETT_SERVICE}"; then
|
||||
echo "${BOLDGREEN}Service successfully installed and launched!${NC}"
|
||||
else
|
||||
cat << EOL
|
||||
${BOLDRED}ERROR${NC}: Could not launch service. The installation might have failed.
|
||||
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
|
||||
Mono directory: \`${monodir}\`
|
||||
Jackett directory: \`${jackettdir}\`
|
||||
Jackett user: \`${jackettuser}\`
|
||||
|
||||
EOL
|
||||
echo "${BOLDRED}ERROR${NC}: Can not start the service '${JACKETT_SERVICE}'"
|
||||
exit 1
|
||||
fi
|
||||
|
@@ -7,12 +7,12 @@
|
||||
JACKETT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
# Launch Jackett
|
||||
${JACKETT_DIR}/jackett --NoRestart
|
||||
"${JACKETT_DIR}/jackett" --NoRestart
|
||||
|
||||
# Get user running the service
|
||||
JACKETT_USER=$(whoami)
|
||||
|
||||
# Wait until the updater ends
|
||||
while pgrep -u ${JACKETT_USER} JackettUpdater > /dev/null; do
|
||||
while pgrep -u "${JACKETT_USER}" JackettUpdater > /dev/null; do
|
||||
sleep 1
|
||||
done
|
||||
|
@@ -9,6 +9,10 @@
|
||||
using System;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
// ReSharper disable NotAccessedField.Global
|
||||
// ReSharper disable MemberCanBePrivate.Global
|
||||
// ReSharper disable UnusedMember.Global
|
||||
|
||||
namespace DateTimeRoutines
|
||||
{
|
||||
/// <summary>
|
||||
@@ -21,11 +25,11 @@ namespace DateTimeRoutines
|
||||
/// <summary>
|
||||
/// Amount of seconds elapsed between 1970-01-01 00:00:00 and the date-time.
|
||||
/// </summary>
|
||||
/// <param name="date_time">date-time</param>
|
||||
/// <param name="dateTime">date-time</param>
|
||||
/// <returns>seconds</returns>
|
||||
public static uint GetSecondsSinceUnixEpoch(this DateTime date_time)
|
||||
public static uint GetSecondsSinceUnixEpoch(this DateTime dateTime)
|
||||
{
|
||||
var t = date_time - new DateTime(1970, 1, 1);
|
||||
var t = dateTime - new DateTime(1970, 1, 1);
|
||||
var ss = (int)t.TotalSeconds;
|
||||
if (ss < 0)
|
||||
return 0;
|
||||
@@ -44,19 +48,19 @@ namespace DateTimeRoutines
|
||||
/// <summary>
|
||||
/// Index of first char of a date substring found in the string
|
||||
/// </summary>
|
||||
public readonly int IndexOfDate = -1;
|
||||
public readonly int IndexOfDate;
|
||||
/// <summary>
|
||||
/// Length a date substring found in the string
|
||||
/// </summary>
|
||||
public readonly int LengthOfDate = -1;
|
||||
public readonly int LengthOfDate;
|
||||
/// <summary>
|
||||
/// Index of first char of a time substring found in the string
|
||||
/// </summary>
|
||||
public readonly int IndexOfTime = -1;
|
||||
public readonly int IndexOfTime;
|
||||
/// <summary>
|
||||
/// Length of a time substring found in the string
|
||||
/// </summary>
|
||||
public readonly int LengthOfTime = -1;
|
||||
public readonly int LengthOfTime;
|
||||
/// <summary>
|
||||
/// DateTime found in the string
|
||||
/// </summary>
|
||||
@@ -82,45 +86,45 @@ namespace DateTimeRoutines
|
||||
/// </summary>
|
||||
public DateTime UtcDateTime;
|
||||
|
||||
internal ParsedDateTime(int index_of_date, int length_of_date, int index_of_time, int length_of_time, DateTime date_time)
|
||||
internal ParsedDateTime(int indexOfDate, int lengthOfDate, int indexOfTime, int lengthOfTime, DateTime dateTime)
|
||||
{
|
||||
IndexOfDate = index_of_date;
|
||||
LengthOfDate = length_of_date;
|
||||
IndexOfTime = index_of_time;
|
||||
LengthOfTime = length_of_time;
|
||||
DateTime = date_time;
|
||||
IsDateFound = index_of_date > -1;
|
||||
IsTimeFound = index_of_time > -1;
|
||||
IndexOfDate = indexOfDate;
|
||||
LengthOfDate = lengthOfDate;
|
||||
IndexOfTime = indexOfTime;
|
||||
LengthOfTime = lengthOfTime;
|
||||
DateTime = dateTime;
|
||||
IsDateFound = indexOfDate > -1;
|
||||
IsTimeFound = indexOfTime > -1;
|
||||
UtcOffset = new TimeSpan(25, 0, 0);
|
||||
IsUtcOffsetFound = false;
|
||||
UtcDateTime = new DateTime(1, 1, 1);
|
||||
}
|
||||
|
||||
internal ParsedDateTime(int index_of_date, int length_of_date, int index_of_time, int length_of_time, DateTime date_time, TimeSpan utc_offset)
|
||||
internal ParsedDateTime(int indexOfDate, int lengthOfDate, int indexOfTime, int lengthOfTime, DateTime dateTime, TimeSpan utcOffset)
|
||||
{
|
||||
IndexOfDate = index_of_date;
|
||||
LengthOfDate = length_of_date;
|
||||
IndexOfTime = index_of_time;
|
||||
LengthOfTime = length_of_time;
|
||||
DateTime = date_time;
|
||||
IsDateFound = index_of_date > -1;
|
||||
IsTimeFound = index_of_time > -1;
|
||||
UtcOffset = utc_offset;
|
||||
IsUtcOffsetFound = Math.Abs(utc_offset.TotalHours) < 12;
|
||||
IndexOfDate = indexOfDate;
|
||||
LengthOfDate = lengthOfDate;
|
||||
IndexOfTime = indexOfTime;
|
||||
LengthOfTime = lengthOfTime;
|
||||
DateTime = dateTime;
|
||||
IsDateFound = indexOfDate > -1;
|
||||
IsTimeFound = indexOfTime > -1;
|
||||
UtcOffset = utcOffset;
|
||||
IsUtcOffsetFound = Math.Abs(utcOffset.TotalHours) < 12;
|
||||
if (!IsUtcOffsetFound)
|
||||
UtcDateTime = new DateTime(1, 1, 1);
|
||||
else
|
||||
{
|
||||
if (index_of_date < 0)//to avoid negative date exception when date is undefined
|
||||
if (indexOfDate < 0)//to avoid negative date exception when date is undefined
|
||||
{
|
||||
var ts = date_time.TimeOfDay + utc_offset;
|
||||
var ts = dateTime.TimeOfDay + utcOffset;
|
||||
if (ts < new TimeSpan(0))
|
||||
UtcDateTime = new DateTime(1, 1, 2) + ts;
|
||||
else
|
||||
UtcDateTime = new DateTime(1, 1, 1) + ts;
|
||||
}
|
||||
else
|
||||
UtcDateTime = date_time + utc_offset;
|
||||
UtcDateTime = dateTime + utcOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -129,7 +133,7 @@ namespace DateTimeRoutines
|
||||
/// Date that is accepted in the following cases:
|
||||
/// - no date was parsed by TryParseDateOrTime();
|
||||
/// - no year was found by TryParseDate();
|
||||
/// It is ignored if DefaultDateIsNow = true was set after DefaultDate
|
||||
/// It is ignored if DefaultDateIsNow = true was set after DefaultDate
|
||||
/// </summary>
|
||||
public static DateTime DefaultDate
|
||||
{
|
||||
@@ -138,13 +142,7 @@ namespace DateTimeRoutines
|
||||
_DefaultDate = value;
|
||||
DefaultDateIsNow = false;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (DefaultDateIsNow)
|
||||
return DateTime.Now;
|
||||
else
|
||||
return _DefaultDate;
|
||||
}
|
||||
get => DefaultDateIsNow ? DateTime.Now : _DefaultDate;
|
||||
}
|
||||
|
||||
private static DateTime _DefaultDate = DateTime.Now;
|
||||
@@ -157,16 +155,17 @@ namespace DateTimeRoutines
|
||||
/// <summary>
|
||||
/// Defines default date-time format.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum DateTimeFormat
|
||||
{
|
||||
/// <summary>
|
||||
/// month number goes before day number
|
||||
/// </summary>
|
||||
USA_DATE,
|
||||
UsaDate,
|
||||
/// <summary>
|
||||
/// day number goes before month number
|
||||
/// </summary>
|
||||
UK_DATE,
|
||||
UkDate,
|
||||
///// <summary>
|
||||
///// time is specifed through AM or PM
|
||||
///// </summary>
|
||||
@@ -178,79 +177,79 @@ namespace DateTimeRoutines
|
||||
#region parsing derived methods for DateTime output
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find date and time within the passed string and return it as DateTime structure.
|
||||
/// Tries to find date and time within the passed string and return it as DateTime structure.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date and/or time</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="date_time">parsed date-time output</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="dateTime">parsed date-time output</param>
|
||||
/// <returns>true if both date and time were found, else false</returns>
|
||||
public static bool TryParseDateTime(this string str, DateTimeFormat default_format, out DateTime date_time)
|
||||
public static bool TryParseDateTime(this string str, DateTimeFormat defaultFormat, out DateTime dateTime)
|
||||
{
|
||||
if (!TryParseDateTime(str, default_format, out ParsedDateTime parsed_date_time))
|
||||
if (!TryParseDateTime(str, defaultFormat, out ParsedDateTime parsedDateTime))
|
||||
{
|
||||
date_time = new DateTime(1, 1, 1);
|
||||
dateTime = new DateTime(1, 1, 1);
|
||||
return false;
|
||||
}
|
||||
date_time = parsed_date_time.DateTime;
|
||||
dateTime = parsedDateTime.DateTime;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find date and/or time within the passed string and return it as DateTime structure.
|
||||
/// Tries to find date and/or time within the passed string and return it as DateTime structure.
|
||||
/// If only date was found, time in the returned DateTime is always 0:0:0.
|
||||
/// If only time was found, date in the returned DateTime is DefaultDate.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date and(or) time</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="date_time">parsed date-time output</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="dateTime">parsed date-time output</param>
|
||||
/// <returns>true if date and/or time was found, else false</returns>
|
||||
public static bool TryParseDateOrTime(this string str, DateTimeFormat default_format, out DateTime date_time)
|
||||
public static bool TryParseDateOrTime(this string str, DateTimeFormat defaultFormat, out DateTime dateTime)
|
||||
{
|
||||
if (!TryParseDateOrTime(str, default_format, out ParsedDateTime parsed_date_time))
|
||||
if (!TryParseDateOrTime(str, defaultFormat, out ParsedDateTime parsedDateTime))
|
||||
{
|
||||
date_time = new DateTime(1, 1, 1);
|
||||
dateTime = new DateTime(1, 1, 1);
|
||||
return false;
|
||||
}
|
||||
date_time = parsed_date_time.DateTime;
|
||||
dateTime = parsedDateTime.DateTime;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find time within the passed string and return it as DateTime structure.
|
||||
/// Tries to find time within the passed string and return it as DateTime structure.
|
||||
/// It recognizes only time while ignoring date, so date in the returned DateTime is always 1/1/1.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains time</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="time">parsed time output</param>
|
||||
/// <returns>true if time was found, else false</returns>
|
||||
public static bool TryParseTime(this string str, DateTimeFormat default_format, out DateTime time)
|
||||
public static bool TryParseTime(this string str, DateTimeFormat defaultFormat, out DateTime time)
|
||||
{
|
||||
if (!TryParseTime(str, default_format, out var parsed_time, null))
|
||||
if (!TryParseTime(str, defaultFormat, out var parsedTime, null))
|
||||
{
|
||||
time = new DateTime(1, 1, 1);
|
||||
return false;
|
||||
}
|
||||
time = parsed_time.DateTime;
|
||||
time = parsedTime.DateTime;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find date within the passed string and return it as DateTime structure.
|
||||
/// Tries to find date within the passed string and return it as DateTime structure.
|
||||
/// It recognizes only date while ignoring time, so time in the returned DateTime is always 0:0:0.
|
||||
/// If year of the date was not found then it accepts the current year.
|
||||
/// If year of the date was not found then it accepts the current year.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="date">parsed date output</param>
|
||||
/// <returns>true if date was found, else false</returns>
|
||||
public static bool TryParseDate(this string str, DateTimeFormat default_format, out DateTime date)
|
||||
public static bool TryParseDate(this string str, DateTimeFormat defaultFormat, out DateTime date)
|
||||
{
|
||||
if (!TryParseDate(str, default_format, out ParsedDateTime parsed_date))
|
||||
if (!TryParseDate(str, defaultFormat, out ParsedDateTime parsedDate))
|
||||
{
|
||||
date = new DateTime(1, 1, 1);
|
||||
return false;
|
||||
}
|
||||
date = parsed_date.DateTime;
|
||||
date = parsedDate.DateTime;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -259,71 +258,69 @@ namespace DateTimeRoutines
|
||||
#region parsing derived methods for ParsedDateTime output
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find date and time within the passed string and return it as ParsedDateTime object.
|
||||
/// Tries to find date and time within the passed string and return it as ParsedDateTime object.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date-time</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsed_date_time">parsed date-time output</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsedDateTime">parsed date-time output</param>
|
||||
/// <returns>true if both date and time were found, else false</returns>
|
||||
public static bool TryParseDateTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_date_time)
|
||||
public static bool TryParseDateTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedDateTime)
|
||||
{
|
||||
if (DateTimeRoutines.TryParseDateOrTime(str, default_format, out parsed_date_time)
|
||||
&& parsed_date_time.IsDateFound
|
||||
&& parsed_date_time.IsTimeFound
|
||||
if (TryParseDateOrTime(str, defaultFormat, out parsedDateTime)
|
||||
&& parsedDateTime.IsDateFound
|
||||
&& parsedDateTime.IsTimeFound
|
||||
)
|
||||
return true;
|
||||
|
||||
parsed_date_time = null;
|
||||
parsedDateTime = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find time within the passed string and return it as ParsedDateTime object.
|
||||
/// Tries to find time within the passed string and return it as ParsedDateTime object.
|
||||
/// It recognizes only time while ignoring date, so date in the returned ParsedDateTime is always 1/1/1
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date-time</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsed_time">parsed date-time output</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsedTime">parsed date-time output</param>
|
||||
/// <returns>true if time was found, else false</returns>
|
||||
public static bool TryParseTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_time)
|
||||
{
|
||||
return TryParseTime(str, default_format, out parsed_time, null);
|
||||
}
|
||||
public static bool TryParseTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedTime)
|
||||
=> TryParseTime(str, defaultFormat, out parsedTime, null);
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find date and/or time within the passed string and return it as ParsedDateTime object.
|
||||
/// Tries to find date and/or time within the passed string and return it as ParsedDateTime object.
|
||||
/// If only date was found, time in the returned ParsedDateTime is always 0:0:0.
|
||||
/// If only time was found, date in the returned ParsedDateTime is DefaultDate.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date-time</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsed_date_time">parsed date-time output</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsedDateTime">parsed date-time output</param>
|
||||
/// <returns>true if date or time was found, else false</returns>
|
||||
public static bool TryParseDateOrTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_date_time)
|
||||
public static bool TryParseDateOrTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedDateTime)
|
||||
{
|
||||
parsed_date_time = null;
|
||||
parsedDateTime = null;
|
||||
|
||||
ParsedDateTime parsed_time;
|
||||
if (!TryParseDate(str, default_format, out
|
||||
ParsedDateTime parsed_date))
|
||||
ParsedDateTime parsedTime;
|
||||
if (!TryParseDate(str, defaultFormat, out
|
||||
ParsedDateTime parsedDate))
|
||||
{
|
||||
if (!TryParseTime(str, default_format, out parsed_time, null))
|
||||
if (!TryParseTime(str, defaultFormat, out parsedTime, null))
|
||||
return false;
|
||||
|
||||
var date_time = new DateTime(DefaultDate.Year, DefaultDate.Month, DefaultDate.Day, parsed_time.DateTime.Hour, parsed_time.DateTime.Minute, parsed_time.DateTime.Second);
|
||||
parsed_date_time = new ParsedDateTime(-1, -1, parsed_time.IndexOfTime, parsed_time.LengthOfTime, date_time, parsed_time.UtcOffset);
|
||||
var dateTime = new DateTime(DefaultDate.Year, DefaultDate.Month, DefaultDate.Day, parsedTime.DateTime.Hour, parsedTime.DateTime.Minute, parsedTime.DateTime.Second);
|
||||
parsedDateTime = new ParsedDateTime(-1, -1, parsedTime.IndexOfTime, parsedTime.LengthOfTime, dateTime, parsedTime.UtcOffset);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!TryParseTime(str, default_format, out parsed_time, parsed_date))
|
||||
if (!TryParseTime(str, defaultFormat, out parsedTime, parsedDate))
|
||||
{
|
||||
var date_time = new DateTime(parsed_date.DateTime.Year, parsed_date.DateTime.Month, parsed_date.DateTime.Day, 0, 0, 0);
|
||||
parsed_date_time = new ParsedDateTime(parsed_date.IndexOfDate, parsed_date.LengthOfDate, -1, -1, date_time);
|
||||
var dateTime = new DateTime(parsedDate.DateTime.Year, parsedDate.DateTime.Month, parsedDate.DateTime.Day, 0, 0, 0);
|
||||
parsedDateTime = new ParsedDateTime(parsedDate.IndexOfDate, parsedDate.LengthOfDate, -1, -1, dateTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
var date_time = new DateTime(parsed_date.DateTime.Year, parsed_date.DateTime.Month, parsed_date.DateTime.Day, parsed_time.DateTime.Hour, parsed_time.DateTime.Minute, parsed_time.DateTime.Second);
|
||||
parsed_date_time = new ParsedDateTime(parsed_date.IndexOfDate, parsed_date.LengthOfDate, parsed_time.IndexOfTime, parsed_time.LengthOfTime, date_time, parsed_time.UtcOffset);
|
||||
var dateTime = new DateTime(parsedDate.DateTime.Year, parsedDate.DateTime.Month, parsedDate.DateTime.Day, parsedTime.DateTime.Hour, parsedTime.DateTime.Minute, parsedTime.DateTime.Second);
|
||||
parsedDateTime = new ParsedDateTime(parsedDate.IndexOfDate, parsedDate.LengthOfDate, parsedTime.IndexOfTime, parsedTime.LengthOfTime, dateTime, parsedTime.UtcOffset);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,42 +336,39 @@ namespace DateTimeRoutines
|
||||
/// It recognizes only time while ignoring date, so date in the returned ParsedDateTime is always 1/1/1
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsed_time">parsed date-time output</param>
|
||||
/// <param name="parsed_date">ParsedDateTime object if the date was found within this string, else NULL</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsedTime">parsed date-time output</param>
|
||||
/// <param name="parsedDate">ParsedDateTime object if the date was found within this string, else NULL</param>
|
||||
/// <returns>true if time was found, else false</returns>
|
||||
public static bool TryParseTime(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_time, ParsedDateTime parsed_date)
|
||||
public static bool TryParseTime(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedTime, ParsedDateTime parsedDate)
|
||||
{
|
||||
parsed_time = null;
|
||||
parsedTime = null;
|
||||
|
||||
string time_zone_r;
|
||||
if (default_format == DateTimeFormat.USA_DATE)
|
||||
time_zone_r = @"(?:\s*(?'time_zone'UTC|GMT|CST|EST))?";
|
||||
else
|
||||
time_zone_r = @"(?:\s*(?'time_zone'UTC|GMT))?";
|
||||
var timeZoneR = defaultFormat == DateTimeFormat.UsaDate ?
|
||||
@"(?:\s*(?'time_zone'UTC|GMT|CST|EST))?" : @"(?:\s*(?'time_zone'UTC|GMT))?";
|
||||
|
||||
Match m;
|
||||
if (parsed_date != null && parsed_date.IndexOfDate > -1)
|
||||
if (parsedDate != null && parsedDate.IndexOfDate > -1)
|
||||
{//look around the found date
|
||||
//look for <date> hh:mm:ss <UTC offset>
|
||||
m = Regex.Match(str.Substring(parsed_date.IndexOfDate + parsed_date.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{2})\s*:\s*(?'minute'\d{2})\s*:\s*(?'second'\d{2})\s+(?'offset_sign'[\+\-])(?'offset_hh'\d{2}):?(?'offset_mm'\d{2})(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
//look for <date> hh:mm:ss <UTC offset>
|
||||
m = Regex.Match(str.Substring(parsedDate.IndexOfDate + parsedDate.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{2})\s*:\s*(?'minute'\d{2})\s*:\s*(?'second'\d{2})\s+(?'offset_sign'[\+\-])(?'offset_hh'\d{2}):?(?'offset_mm'\d{2})(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
if (!m.Success)
|
||||
//look for <date> [h]h:mm[:ss] [PM/AM] [UTC/GMT]
|
||||
m = Regex.Match(str.Substring(parsed_date.IndexOfDate + parsed_date.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + time_zone_r + @"(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
//look for <date> [h]h:mm[:ss] [PM/AM] [UTC/GMT]
|
||||
m = Regex.Match(str.Substring(parsedDate.IndexOfDate + parsedDate.LengthOfDate), @"(?<=^\s*,?\s+|^\s*at\s*|^\s*[T\-]\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
if (!m.Success)
|
||||
//look for [h]h:mm:ss [PM/AM] [UTC/GMT] <date>
|
||||
m = Regex.Match(str.Substring(0, parsed_date.IndexOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + time_zone_r + @"(?=$|[\s,]+)", RegexOptions.Compiled);
|
||||
m = Regex.Match(str.Substring(0, parsedDate.IndexOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[\s,]+)", RegexOptions.Compiled);
|
||||
if (!m.Success)
|
||||
//look for [h]h:mm:ss [PM/AM] [UTC/GMT] within <date>
|
||||
m = Regex.Match(str.Substring(parsed_date.IndexOfDate, parsed_date.LengthOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + time_zone_r + @"(?=$|[\s,]+)", RegexOptions.Compiled);
|
||||
m = Regex.Match(str.Substring(parsedDate.IndexOfDate, parsedDate.LengthOfDate), @"(?<=^|[^\d])(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[\s,]+)", RegexOptions.Compiled);
|
||||
}
|
||||
else//look anywhere within string
|
||||
{
|
||||
//look for hh:mm:ss <UTC offset>
|
||||
//look for hh:mm:ss <UTC offset>
|
||||
m = Regex.Match(str, @"(?<=^|\s+|\s*T\s*)(?'hour'\d{2})\s*:\s*(?'minute'\d{2})\s*:\s*(?'second'\d{2})\s+(?'offset_sign'[\+\-])(?'offset_hh'\d{2}):?(?'offset_mm'\d{2})?(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
if (!m.Success)
|
||||
//look for [h]h:mm[:ss] [PM/AM] [UTC/GMT]
|
||||
m = Regex.Match(str, @"(?<=^|\s+|\s*T\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + time_zone_r + @"(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
m = Regex.Match(str, @"(?<=^|\s+|\s*T\s*)(?'hour'\d{1,2})\s*:\s*(?'minute'\d{2})\s*(?::\s*(?'second'\d{2}))?(?:\s*(?'ampm'AM|am|PM|pm))?" + timeZoneR + @"(?=$|[^\d\w])", RegexOptions.Compiled);
|
||||
}
|
||||
|
||||
if (!m.Success)
|
||||
@@ -398,49 +392,49 @@ namespace DateTimeRoutines
|
||||
return false;
|
||||
}
|
||||
|
||||
if (string.Compare(m.Groups["ampm"].Value, "PM", true) == 0 && hour < 12)
|
||||
if ("PM".Equals(m.Groups["ampm"].Value, StringComparison.OrdinalIgnoreCase) && hour < 12)
|
||||
hour += 12;
|
||||
else if (string.Compare(m.Groups["ampm"].Value, "AM", true) == 0 && hour == 12)
|
||||
else if ("AM".Equals(m.Groups["ampm"].Value, StringComparison.OrdinalIgnoreCase) && hour == 12)
|
||||
hour -= 12;
|
||||
|
||||
var date_time = new DateTime(1, 1, 1, hour, minute, second);
|
||||
var dateTime = new DateTime(1, 1, 1, hour, minute, second);
|
||||
|
||||
if (m.Groups["offset_hh"].Success)
|
||||
{
|
||||
var offset_hh = int.Parse(m.Groups["offset_hh"].Value);
|
||||
var offset_mm = 0;
|
||||
var offsetHh = int.Parse(m.Groups["offset_hh"].Value);
|
||||
var offsetMm = 0;
|
||||
if (m.Groups["offset_mm"].Success)
|
||||
offset_mm = int.Parse(m.Groups["offset_mm"].Value);
|
||||
var utc_offset = new TimeSpan(offset_hh, offset_mm, 0);
|
||||
offsetMm = int.Parse(m.Groups["offset_mm"].Value);
|
||||
var utcOffset = new TimeSpan(offsetHh, offsetMm, 0);
|
||||
if (m.Groups["offset_sign"].Value == "-")
|
||||
utc_offset = -utc_offset;
|
||||
parsed_time = new ParsedDateTime(-1, -1, m.Index, m.Length, date_time, utc_offset);
|
||||
utcOffset = -utcOffset;
|
||||
parsedTime = new ParsedDateTime(-1, -1, m.Index, m.Length, dateTime, utcOffset);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (m.Groups["time_zone"].Success)
|
||||
{
|
||||
TimeSpan utc_offset;
|
||||
TimeSpan utcOffset;
|
||||
switch (m.Groups["time_zone"].Value)
|
||||
{
|
||||
case "UTC":
|
||||
case "GMT":
|
||||
utc_offset = new TimeSpan(0, 0, 0);
|
||||
utcOffset = new TimeSpan(0, 0, 0);
|
||||
break;
|
||||
case "CST":
|
||||
utc_offset = new TimeSpan(-6, 0, 0);
|
||||
utcOffset = new TimeSpan(-6, 0, 0);
|
||||
break;
|
||||
case "EST":
|
||||
utc_offset = new TimeSpan(-5, 0, 0);
|
||||
utcOffset = new TimeSpan(-5, 0, 0);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Time zone: " + m.Groups["time_zone"].Value + " is not defined.");
|
||||
}
|
||||
parsed_time = new ParsedDateTime(-1, -1, m.Index, m.Length, date_time, utc_offset);
|
||||
parsedTime = new ParsedDateTime(-1, -1, m.Index, m.Length, dateTime, utcOffset);
|
||||
return true;
|
||||
}
|
||||
|
||||
parsed_time = new ParsedDateTime(-1, -1, m.Index, m.Length, date_time);
|
||||
parsedTime = new ParsedDateTime(-1, -1, m.Index, m.Length, dateTime);
|
||||
//}
|
||||
//catch(Exception e)
|
||||
//{
|
||||
@@ -450,17 +444,17 @@ namespace DateTimeRoutines
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to find date within the passed string and return it as ParsedDateTime object.
|
||||
/// Tries to find date within the passed string and return it as ParsedDateTime object.
|
||||
/// It recognizes only date while ignoring time, so time in the returned ParsedDateTime is always 0:0:0.
|
||||
/// If year of the date was not found then it accepts the current year.
|
||||
/// If year of the date was not found then it accepts the current year.
|
||||
/// </summary>
|
||||
/// <param name="str">string that contains date</param>
|
||||
/// <param name="default_format">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsed_date">parsed date output</param>
|
||||
/// <param name="defaultFormat">format to be used preferably in ambivalent instances</param>
|
||||
/// <param name="parsedDate">parsed date output</param>
|
||||
/// <returns>true if date was found, else false</returns>
|
||||
public static bool TryParseDate(this string str, DateTimeFormat default_format, out ParsedDateTime parsed_date)
|
||||
public static bool TryParseDate(this string str, DateTimeFormat defaultFormat, out ParsedDateTime parsedDate)
|
||||
{
|
||||
parsed_date = null;
|
||||
parsedDate = null;
|
||||
|
||||
if (string.IsNullOrEmpty(str))
|
||||
return false;
|
||||
@@ -470,17 +464,17 @@ namespace DateTimeRoutines
|
||||
if (m.Success)
|
||||
{
|
||||
DateTime date;
|
||||
if ((default_format ^ DateTimeFormat.USA_DATE) == DateTimeFormat.USA_DATE)
|
||||
if ((defaultFormat ^ DateTimeFormat.UsaDate) == DateTimeFormat.UsaDate)
|
||||
{
|
||||
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["day"].Value), int.Parse(m.Groups["month"].Value), out date))
|
||||
if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["day"].Value), int.Parse(m.Groups["month"].Value), out date))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))
|
||||
if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))
|
||||
return false;
|
||||
}
|
||||
parsed_date = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
|
||||
parsedDate = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -488,9 +482,9 @@ namespace DateTimeRoutines
|
||||
m = Regex.Match(str, @"(?<=^|[^\d])(?'year'\d{2}|\d{4})\s*(?'separator'[\-])\s*(?'month'\d{1,2})\s*\'separator'+\s*(?'day'\d{1,2})(?=$|[^\d])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
if (m.Success)
|
||||
{
|
||||
if (!convert_to_date(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out var date))
|
||||
if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out var date))
|
||||
return false;
|
||||
parsed_date = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
|
||||
parsedDate = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -511,8 +505,8 @@ namespace DateTimeRoutines
|
||||
if (m.Success)
|
||||
{
|
||||
var month = -1;
|
||||
var index_of_date = m.Index;
|
||||
var length_of_date = m.Length;
|
||||
var indexOfDate = m.Index;
|
||||
var lengthOfDate = m.Length;
|
||||
|
||||
switch (m.Groups["month"].Value)
|
||||
{
|
||||
@@ -565,22 +559,19 @@ namespace DateTimeRoutines
|
||||
break;
|
||||
}
|
||||
|
||||
int year;
|
||||
if (!string.IsNullOrEmpty(m.Groups["year"].Value))
|
||||
year = int.Parse(m.Groups["year"].Value);
|
||||
else
|
||||
year = DefaultDate.Year;
|
||||
var year = !string.IsNullOrEmpty(m.Groups["year"].Value) ?
|
||||
int.Parse(m.Groups["year"].Value) : DefaultDate.Year;
|
||||
|
||||
if (!convert_to_date(year, month, int.Parse(m.Groups["day"].Value), out var date))
|
||||
if (!ConvertToDate(year, month, int.Parse(m.Groups["day"].Value), out var date))
|
||||
return false;
|
||||
parsed_date = new ParsedDateTime(index_of_date, length_of_date, -1, -1, date);
|
||||
parsedDate = new ParsedDateTime(indexOfDate, lengthOfDate, -1, -1, date);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool convert_to_date(int year, int month, int day, out DateTime date)
|
||||
private static bool ConvertToDate(int year, int month, int day, out DateTime date)
|
||||
{
|
||||
if (year >= 100)
|
||||
{
|
||||
|
@@ -1,7 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<LangVersion>8</LangVersion>
|
||||
<NoWarn />
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningsAsErrors />
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
function getUrlParams() {
|
||||
function getUrlParams() {
|
||||
var vars = [], hash;
|
||||
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
|
||||
for (var i = 0; i < hashes.length; i++) {
|
||||
@@ -7,4 +7,4 @@
|
||||
vars[hash[0]] = hash[1];
|
||||
}
|
||||
return vars;
|
||||
}
|
||||
}
|
||||
|
@@ -182,6 +182,7 @@ function displayConfiguredIndexersList(indexers) {
|
||||
indexersTable.find("table").dataTable(
|
||||
{
|
||||
"stateSave": true,
|
||||
"stateDuration": 0,
|
||||
"pageLength": -1,
|
||||
"lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]],
|
||||
"order": [[0, "asc"]],
|
||||
@@ -241,9 +242,9 @@ function displayUnconfiguredIndexersList() {
|
||||
}).fail(function (data) {
|
||||
if(data.responseJSON.error !== undefined) {
|
||||
var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104
|
||||
doNotify("An error occured while configuring this indexer<br /><b>" + data.responseJSON.error.substring(0, indexEnd) + "</b><br /><i><a href=\"https://github.com/Jackett/Jackett/issues/new?title=[" + indexerId + "] " + data.responseJSON.error.substring(0, indexEnd) + " (Config)\" target=\"_blank\">Click here to open an issue on GitHub for this indexer.</a><i>", "danger", "glyphicon glyphicon-alert", false);
|
||||
doNotify("An error occurred while configuring this indexer<br /><b>" + data.responseJSON.error.substring(0, indexEnd) + "</b><br /><i><a href=\"https://github.com/Jackett/Jackett/issues/new?title=[" + indexerId + "] " + data.responseJSON.error.substring(0, indexEnd) + " (Config)\" target=\"_blank\">Click here to open an issue on GitHub for this indexer.</a><i>", "danger", "glyphicon glyphicon-alert", false);
|
||||
} else {
|
||||
doNotify("An error occured while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert");
|
||||
doNotify("An error occurred while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert");
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -253,6 +254,7 @@ function displayUnconfiguredIndexersList() {
|
||||
indexersTable.find("table").DataTable(
|
||||
{
|
||||
"stateSave": true,
|
||||
"stateDuration": 0,
|
||||
"fnStateSaveParams": function (oSettings, sValue) {
|
||||
sValue.search.search = ""; // don't save the search filter content
|
||||
return sValue;
|
||||
@@ -955,6 +957,7 @@ function updateSearchResultTable(element, results) {
|
||||
|
||||
"dom": "lfr<\"dataTables_deadfilter\">tip",
|
||||
"stateSave": true,
|
||||
"stateDuration": 0,
|
||||
"bAutoWidth": false,
|
||||
"pageLength": 20,
|
||||
"lengthMenu": [[10, 20, 50, 100, 250, 500, -1], [10, 20, 50, 100, 250, 500, "All"]],
|
||||
@@ -1082,6 +1085,7 @@ function bindUIButtons() {
|
||||
table.DataTable(
|
||||
{
|
||||
"stateSave": true,
|
||||
"stateDuration": 0,
|
||||
"bAutoWidth": false,
|
||||
"pageLength": 20,
|
||||
"lengthMenu": [[10, 20, 50, -1], [10, 20, 50, "All"]],
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 361 KiB After Width: | Height: | Size: 101 KiB |
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
@@ -691,6 +691,6 @@
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=20200222"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=20200316"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -86,4 +86,4 @@ var api = {
|
||||
success: callback
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
|
||||
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
|
||||
if(v1 === v2) {
|
||||
return options.fn(this);
|
||||
}
|
||||
return options.inverse(this);
|
||||
});
|
||||
});
|
||||
|
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
Handlebars.registerHelper('dateFormat', function (context, block) {
|
||||
if (window.moment) {
|
||||
var f = block.hash.format || "YYYY-MM-DD HH:mm:ss";
|
||||
|
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: 0daykiev
|
||||
name: 0day.kiev
|
||||
description: "0day.kiev.ua is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
|
@@ -5,6 +5,7 @@
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://1337x.to/
|
||||
- https://1337x.gd/
|
||||
@@ -13,6 +14,15 @@
|
||||
- https://x1337x.ws/
|
||||
- https://x1337x.eu/
|
||||
- https://x1337x.se/
|
||||
- https://1337x.unblockit.pro/
|
||||
- https://1337.root.yt/
|
||||
- https://1337x.unblockninja.com/
|
||||
- https://1337x.black-mirror.xyz/
|
||||
- https://1337x.unblocked.casa/
|
||||
- https://1337x.proxyportal.fun/
|
||||
- https://1337x.uk-unblock.xyz/
|
||||
- https://1337x.ind-unblock.xyz/
|
||||
legacylinks:
|
||||
- https://1337x.unblocked.earth/
|
||||
|
||||
caps:
|
||||
@@ -44,12 +54,12 @@
|
||||
- {id: 3, cat: Movies, desc: "Movies/SVCD/VCD"}
|
||||
- {id: 4, cat: Movies/Foreign, desc: "Movies/Dubs/Dual Audio"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 54, cat: Movies, desc: "Movies/h.264/x264"}
|
||||
- {id: 54, cat: Movies/HD, desc: "Movies/h.264/x264"}
|
||||
- {id: 55, cat: Movies, desc: "Movies/Mp4"}
|
||||
- {id: 66, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 70, cat: Movies, desc: "Movies/HEVC/x265"}
|
||||
- {id: 70, cat: Movies/HD, desc: "Movies/HEVC/x265"}
|
||||
- {id: 73, cat: Movies, desc: "Movies/Bollywood"}
|
||||
- {id: 76, cat: Movies, desc: "Movies/UHD"}
|
||||
- {id: 76, cat: Movies/UHD, desc: "Movies/UHD"}
|
||||
|
||||
#TV
|
||||
- {id: 5, cat: TV, desc: "TV/DVD"}
|
||||
@@ -138,7 +148,7 @@
|
||||
"asc": "asc"
|
||||
|
||||
download:
|
||||
# the .torrent url is on the on the details page
|
||||
# the .torrent url is on the on the details page
|
||||
selector: ul li a[href^="{{ .Config.downloadlink }}"]
|
||||
attribute: href
|
||||
|
||||
@@ -148,7 +158,7 @@
|
||||
- path: "{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}sort-search{{else}}cat/Movies{{end}}{{if or (.Query.Album) (.Query.Artist) }}/{{ or (.Query.Album) (.Query.Artist) }}{{else}}/{{ .Keywords }}{{end}}{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}/{{else}}{{end}}{{ .Config.sort }}/{{ .Config.type }}/1/"
|
||||
- path: "{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}sort-search{{else}}cat/TV{{end}}{{if or (.Query.Album) (.Query.Artist) }}/{{ or (.Query.Album) (.Query.Artist) }}{{else}}/{{ .Keywords }}{{end}}{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}/{{else}}{{end}}{{ .Config.sort }}/{{ .Config.type }}/{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}2{{else}}1{{end}}/"
|
||||
- path: "{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}sort-search{{else}}cat/Music{{end}}{{if or (.Query.Album) (.Query.Artist) }}/{{ or (.Query.Album) (.Query.Artist) }}{{else}}/{{ .Keywords }}{{end}}{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}/{{else}}{{end}}{{ .Config.sort }}/{{ .Config.type }}/{{if or (.Query.Album) (.Query.Artist) (.Keywords) }}3{{else}}1{{end}}/"
|
||||
keywordsfilters:
|
||||
keywordsfilters:
|
||||
- name: replace # use this as a workaround till #893 is implemented
|
||||
args: ["Greys Anatomy", "Grey's Anatomy"]
|
||||
|
||||
@@ -164,6 +174,8 @@
|
||||
- name: replace
|
||||
args: ["\u000f", ""] # get rid of unwanted character
|
||||
category:
|
||||
text: 40
|
||||
category|noappend:
|
||||
optional: true
|
||||
selector: td[class^="coll-1"] a[href^="/sub/"]
|
||||
attribute: href
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: 2fast4you
|
||||
name: 2 Fast 4 You
|
||||
description: "2 Fast 4 You is a FRENCH Private site for TV / MOVIES / GENERAL"
|
||||
|
@@ -6,7 +6,7 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.3dtorrents.org/
|
||||
- http://www.3dtorrents.org/ # site does not support https ERR_CONNECTION_CLOSED
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -60,7 +60,7 @@
|
||||
- selector: span.errormsg
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: index.php
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: 3evils
|
||||
name: 3evils
|
||||
description: "3evils is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
|
@@ -92,7 +92,7 @@
|
||||
tags_type: 0
|
||||
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
selector: table#torrent_table > tbody > tr.torrent:has(a[href^="torrents.php?action=download&id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -22,7 +22,7 @@
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
|
@@ -20,7 +20,7 @@
|
||||
settings:
|
||||
- name: info
|
||||
type: info
|
||||
default: 7torrents does not use categories. In your software Indexer settings, set the category to 100001.
|
||||
default: 7torrents does not use categories. In your software Indexer settings, set the category to 7000.
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -35,7 +35,7 @@
|
||||
paths:
|
||||
- path: search
|
||||
inputs:
|
||||
query: "{{ if .Keywords }}{{ .Keywords }}{{else}}2020{{end}}"
|
||||
query: "{{ if .Keywords }}{{ .Keywords }}{{else}} {{end}}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
|
||||
rows:
|
||||
|
100
src/Jackett.Common/Definitions/academictorrents.yml
Normal file
100
src/Jackett.Common/Definitions/academictorrents.yml
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
site: academictorrents
|
||||
name: AcademicTorrents
|
||||
description: "AcademicTorrents is a Public Community-Maintained Distributed Repository for datasets and scientific knowledge."
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://academictorrents.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 5, cat: Books, desc: "Paper"}
|
||||
- {id: 6, cat: Other, desc: "Dataset"}
|
||||
- {id: 7, cat: TV/Documentary, desc: "Course"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings:
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "added"
|
||||
options:
|
||||
"added": "created"
|
||||
"seeders": "seeders"
|
||||
"size": "size"
|
||||
"name": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "DESC"
|
||||
options:
|
||||
"DESC": "desc"
|
||||
"ASC": "asc"
|
||||
|
||||
search:
|
||||
# https://academictorrents.com/browse.php?search=&c5=1&c6=1&c7=1&sort_field=added&sort_dir=DESC
|
||||
paths:
|
||||
- path: browse.php
|
||||
- path: browse.php
|
||||
inputs:
|
||||
page: 1
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
sort_field: "{{ .Config.sort }}"
|
||||
sort_dir: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table.table> tbody > tr:has(a[href^="/browse.php?cat="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="/browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="/details/"]
|
||||
details:
|
||||
selector: a[href^="/details/"]
|
||||
attribute: href
|
||||
download:
|
||||
# /download/08078e0894099530913e9335bdbc804f42f6e872.torrent"
|
||||
selector: a[href^="/details/"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["/details/", "/download/"]
|
||||
- name: append
|
||||
args: ".torrent"
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-02"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
text: 0
|
||||
seeders:
|
||||
selector: td:nth-child(7):not(:empty)
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["+", ""]
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: acidlounge
|
||||
name: Acid-Lounge
|
||||
description: "Acid Lounge (A-L) is a Private Torrent Tracker for 0DAY / GENERAL"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: aftershock
|
||||
name: Aftershock
|
||||
description: "Aftershock is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"
|
||||
@@ -170,4 +170,4 @@
|
||||
case:
|
||||
span.icon_upload: 2
|
||||
"*": 1
|
||||
# XBT v3
|
||||
# XBT v3
|
||||
|
@@ -1,146 +0,0 @@
|
||||
---
|
||||
site: alein
|
||||
name: Alein
|
||||
description: "Alein is a BULGARIAN Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: bg
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://alein.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/SD, desc: "Movies-XviD"}
|
||||
- {id: 15, cat: Movies/HD, desc: "Movies-x264"}
|
||||
- {id: 41, cat: Movies, desc: "Movies-BG"}
|
||||
- {id: 14, cat: Movies/HD, desc: "Movies-HD"}
|
||||
- {id: 48, cat: Movies/UHD, desc: "Movies-x265"}
|
||||
- {id: 39, cat: Movies/Foreign, desc: "Movies-XviD-Rus"}
|
||||
- {id: 40, cat: Movies/Foreign, desc: "Movies-x264-Rus"}
|
||||
- {id: 20, cat: Movies/Other, desc: "Movies-Animations"}
|
||||
- {id: 16, cat: Movies/3D, desc: "Movies-3D"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Movies-Anime"}
|
||||
- {id: 21, cat: Movies/BluRay, desc: "Movies-Blu-ray"}
|
||||
- {id: 22, cat: TV/Documentary , desc: "Movies-Documentaries"}
|
||||
- {id: 11, cat: Movies/DVD, desc: "Movies-DVD-R"}
|
||||
- {id: 47, cat: TV/SD, desc: "TV-Episodes"}
|
||||
- {id: 46, cat: TV/HD, desc: "TV-Episodes-HD"}
|
||||
- {id: 3, cat: PC/ISO, desc: "Games-PC ISO"}
|
||||
- {id: 31, cat: Console/Xbox, desc: "Games-XBOX"}
|
||||
- {id: 33, cat: Console/PSP, desc: "Games-PS"}
|
||||
- {id: 2, cat: Audio/MP3, desc: "Music-MP3"}
|
||||
- {id: 50, cat: Audio/Lossless, desc: "Music-FLAC"}
|
||||
- {id: 18, cat: Audio/Video, desc: "Music-Video"}
|
||||
- {id: 9, cat: PC/0day, desc: "Software-Windows"}
|
||||
- {id: 8, cat: PC, desc: "Software-Linux"}
|
||||
- {id: 36, cat: Other, desc: "Trailer"}
|
||||
- {id: 34, cat: Other/Misc, desc: "Pictures"}
|
||||
- {id: 4, cat: Other, desc: "Other"}
|
||||
- {id: 6, cat: Books/Comics, desc: "Books-Comics"}
|
||||
- {id: 24, cat: PC/Phone-Other, desc: "Mobile-GSM"}
|
||||
- {id: 23, cat: TV/Sport, desc: "Sport"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "3"
|
||||
options:
|
||||
"3": "created"
|
||||
"5": "seeders"
|
||||
"4": "size"
|
||||
"2": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "2"
|
||||
options:
|
||||
"2": "desc"
|
||||
"1": "asc"
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: form
|
||||
form: form[action*="/index.php?page=login"]
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.lista span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: /
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://alein.org/index.php?page=torrents&category=1;15;41;14;48;39;20;16;5;21;22;11&search=venom&active=1
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: torrents
|
||||
category: "{{ range .Categories }}{{.}};{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 all 1 active only 2 dead only
|
||||
active: 0
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: tr.trclass:not(:has(td.lista-cat-rec))
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: td a[href*="id="]
|
||||
details:
|
||||
selector: td a[href*="id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: td a[href*="category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
download:
|
||||
selector: td a[href*="id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: id
|
||||
- name: prepend
|
||||
args: "download.php?id="
|
||||
- name: append
|
||||
args: "&f={{ .Result.title }}.torrent"
|
||||
banner:
|
||||
selector: td a[href*="id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.+?) width="
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
grabs:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# xbtit 2.3
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: alexfilm
|
||||
name: AlexFilm
|
||||
description: "AlexFilm is a RUSSIAN Semi-Private Torrent Tracker for TV"
|
||||
@@ -152,6 +152,5 @@
|
||||
img[src="./styles/images/tor_silver.gif"]: 0.5
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
text: 1
|
||||
# engine n/a
|
||||
|
@@ -158,8 +158,10 @@
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["([12][0-9]{3})", ""]
|
||||
|
||||
rows:
|
||||
selector: div#fancy-list-group ul.list-group li.list-group-item
|
||||
|
||||
fields:
|
||||
_quality:
|
||||
selector: div.list-group-item-content p.m-0 span.badge-primary:contains("1080p"), div.list-group-item-content p.m-0 span.badge-primary:contains("720p"), div.list-group-item-content p.m-0 span.badge-primary:contains("4k")
|
||||
@@ -196,69 +198,70 @@
|
||||
attribute: src
|
||||
case:
|
||||
# unfortunately the site does not have category numbers on the results page, just a .png which can apply to both movies and tv.
|
||||
# therefore I've order the list to favour movies,
|
||||
# therefore I've order the list to favour movies,
|
||||
# also, not all .png have been verified as the site has many empty categories. their image names have been extrapolated from the cat desc.
|
||||
"[src$=\"/XXXZ.png\"]": "74"
|
||||
"[src$=\"/Hentai.png\"]": "75"
|
||||
"[src$=\"/Anime.png\"]": "69"
|
||||
"[src$=\"/Windows.png\"]": "21"
|
||||
"[src$=\"/Mac.png\"]": "22"
|
||||
"[src$=\"/Android.png\"]": "23"
|
||||
"[src$=\"/Linux.png\"]": "25"
|
||||
"[src$=\"/iPhone.png\"]": "26"
|
||||
"[src$=\"/iPad.png\"]": "27"
|
||||
"[src$=\"/iPod.png\"]": "28"
|
||||
"[src$=\"/Cursos.png\"]": "71"
|
||||
"[src$=\"/Apostila.png\"]": "72"
|
||||
"[src$=\"/E-books.png\"]": "67"
|
||||
"[src$=\"/Revista.png\"]": "68"
|
||||
"[src$=\"/HQ.png\"]": "112"
|
||||
"[src$=\"/Filmes.png\"]": "119"
|
||||
"[src$=\"/Revistas-XXX.png\"]": "70"
|
||||
"[src$=\"/PS4.png\"]": "79"
|
||||
"[src$=\"/Jogos-PC.png\"]": "47"
|
||||
"[src$=\"/Emulador.png\"]": "61"
|
||||
"[src$=\"/Emulacao.png\"]": "109"
|
||||
"[src$=\"/Jogos-Mac.png\"]": "48"
|
||||
"[src$=\"/Jogos-PS1.png\"]": "49"
|
||||
"[src$=\"/Jogos-PS2.png\"]": "50"
|
||||
"[src$=\"/Jogos-PS3.png\"]": "51"
|
||||
"[src$=\"/Jogos-Dreamcast.png\"]": "52"
|
||||
"[src$=\"/Jogos-Xbox360.png\"]": "54"
|
||||
"[src$=\"/Jogos-Xbox.png\"]": "56"
|
||||
"[src$=\"/Jogos-Wii.png\"]": "55"
|
||||
"[src$=\"/Jogos-DS.png\"]": "58"
|
||||
"[src$=\"/jogosandroid.png\"]": "57"
|
||||
"[src$=\"/Jogos-PSP.png\"]": "82"
|
||||
"[src$=\"/Jogos-NS.png\"]": "110"
|
||||
"[src$=\"/Jogos-XboxOne.png\"]": "78"
|
||||
"[src$=\"/Axe.png\"]": "29"
|
||||
"[src$=\"/Funk.png\"]": "31"
|
||||
"[src$=\"/Pagode.png\"]": "32"
|
||||
"[src$=\"/HIP_HOP.png\"]": "33"
|
||||
"[src$=\"/Rap.png\"]": "34"
|
||||
"[src$=\"/Rock.png\"]": "36"
|
||||
"[src$=\"/Hard-Rock.png\"]": "37"
|
||||
"[src$=\"/Blues.png\"]": "38"
|
||||
"[src$=\"/Dance.png\"]": "39"
|
||||
"[src$=\"/Discografia.png\"]": "40"
|
||||
"[src$=\"/Erudita.png\"]": "41"
|
||||
"[src$=\"/Forro.png\"]": "42"
|
||||
"[src$=\"/Dubstep.png\"]": "43"
|
||||
"[src$=\"/Sertanejo.png\"]": "46"
|
||||
"[src$=\"/Samba.png\"]": "45"
|
||||
"[src$=\"/Musica-Outros.png\"]": "77"
|
||||
"[src$=\"/Reggae.png\"]": "76"
|
||||
"[src$=\"/Gospel.png\"]": "83"
|
||||
"[src$=\"/POP.png\"]": "115"
|
||||
"[src$=\"/MPB.png\"]": "114"
|
||||
"[src$=\"/OST.png\"]": "84"
|
||||
"[src$=\"/Seriados.png\"]": "120"
|
||||
"[src$=\"/Shows.png\"]": "65"
|
||||
"[src$=\"/Aberta.png\"]": "63"
|
||||
"[src$=\"/Esporte.png\"]": "62"
|
||||
"[src$=\"/Fechada.png\"]": "64"
|
||||
"[src$=\"/Videoaula.png\"]": "73"
|
||||
"[src$=\"/XXXZ.png\"]": 74
|
||||
"[src$=\"/Hentai.png\"]": 75
|
||||
"[src$=\"/Anime.png\"]": 69
|
||||
"[src$=\"/Windows.png\"]": 21
|
||||
"[src$=\"/Mac.png\"]": 22
|
||||
"[src$=\"/Android.png\"]": 23
|
||||
"[src$=\"/Linux.png\"]": 25
|
||||
"[src$=\"/iPhone.png\"]": 26
|
||||
"[src$=\"/iPad.png\"]": 27
|
||||
"[src$=\"/iPod.png\"]": 28
|
||||
"[src$=\"/Cursos.png\"]": 71
|
||||
"[src$=\"/Apostila.png\"]": 72
|
||||
"[src$=\"/E-books.png\"]": 67
|
||||
"[src$=\"/Revista.png\"]": 68
|
||||
"[src$=\"/HQ.png\"]": 112
|
||||
"[src$=\"/Filmes.png\"]": 119
|
||||
"[src$=\"/Revistas-XXX.png\"]": 70
|
||||
"[src$=\"/PS4.png\"]": 79
|
||||
"[src$=\"/Jogos-PC.png\"]": 47
|
||||
"[src$=\"/Emulador.png\"]": 61
|
||||
"[src$=\"/Emulacao.png\"]": 109
|
||||
"[src$=\"/Jogos-Mac.png\"]": 48
|
||||
"[src$=\"/Jogos-PS1.png\"]": 49
|
||||
"[src$=\"/Jogos-PS2.png\"]": 50
|
||||
"[src$=\"/Jogos-PS3.png\"]": 51
|
||||
"[src$=\"/Jogos-Dreamcast.png\"]": 52
|
||||
"[src$=\"/Jogos-Xbox360.png\"]": 54
|
||||
"[src$=\"/Jogos-Xbox.png\"]": 56
|
||||
"[src$=\"/Jogos-Wii.png\"]": 55
|
||||
"[src$=\"/Jogos-DS.png\"]": 58
|
||||
"[src$=\"/jogosandroid.png\"]": 57
|
||||
"[src$=\"/Jogos-PSP.png\"]": 82
|
||||
"[src$=\"/Jogos-NS.png\"]": 110
|
||||
"[src$=\"/Jogos-XboxOne.png\"]": 78
|
||||
"[src$=\"/Axe.png\"]": 29
|
||||
"[src$=\"/Funk.png\"]": 31
|
||||
"[src$=\"/Pagode.png\"]": 32
|
||||
"[src$=\"/HIP_HOP.png\"]": 33
|
||||
"[src$=\"/Rap.png\"]": 34
|
||||
"[src$=\"/Rock.png\"]": 36
|
||||
"[src$=\"/Hard-Rock.png\"]": 37
|
||||
"[src$=\"/Blues.png\"]": 38
|
||||
"[src$=\"/Dance.png\"]": 39
|
||||
"[src$=\"/Discografia.png\"]": 40
|
||||
"[src$=\"/Erudita.png\"]": 41
|
||||
"[src$=\"/Forro.png\"]": 42
|
||||
"[src$=\"/Dubstep.png\"]": 43
|
||||
"[src$=\"/Sertanejo.png\"]": 46
|
||||
"[src$=\"/Samba.png\"]": 45
|
||||
"[src$=\"/Musica-Outros.png\"]": 77
|
||||
"[src$=\"/Reggae.png\"]": 76
|
||||
"[src$=\"/Gospel.png\"]": 83
|
||||
"[src$=\"/POP.png\"]": 115
|
||||
"[src$=\"/MPB.png\"]": 114
|
||||
"[src$=\"/OST.png\"]": 84
|
||||
"[src$=\"/Seriados.png\"]": 120
|
||||
"[src$=\"/Shows.png\"]": 65
|
||||
"[src$=\"/Aberta.png\"]": 63
|
||||
"[src$=\"/Esporte.png\"]": 62
|
||||
"[src$=\"/Fechada.png\"]": 64
|
||||
"[src$=\"/Videoaula.png\"]": 73
|
||||
"*": 999
|
||||
date:
|
||||
text: now
|
||||
date:
|
||||
@@ -284,5 +287,5 @@
|
||||
"span.badge-success:contains(\"FREE\")": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
text: 1
|
||||
# engine n/a
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: arabafenice
|
||||
name: ArabaFenice
|
||||
description: "Araba Fenice (Phoenix) is an ITALIAN Private site for TV / MOVIES / GENERAL"
|
||||
@@ -14,7 +14,7 @@
|
||||
categorymappings:
|
||||
# HRS
|
||||
- {id: 34, cat: Movies/HD, desc: "1080p HRS x264"}
|
||||
- {id: 47, cat: Movies/HD, desc: "2160p 4k UltraHD HRS"}
|
||||
- {id: 47, cat: Movies/UHD, desc: "2160p 4k UltraHD HRS"}
|
||||
- {id: 35, cat: TV, desc: "Serie TV HRS"}
|
||||
- {id: 36, cat: Movies/SD, desc: "DVDRip HRS"}
|
||||
- {id: 41, cat: Movies/SD, desc: "BDRip 576p HRS"}
|
||||
@@ -38,7 +38,7 @@
|
||||
- {id: 42, cat: TV, desc: "Serie Tv Sub Ita"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "documentaries"}
|
||||
- {id: 33, cat: TV, desc: "mp4"}
|
||||
- {id: 40, cat: TV/HD, desc: "2160p 4K UltraHD"}
|
||||
- {id: 40, cat: TV/UHD, desc: "2160p 4K UltraHD"}
|
||||
- {id: 38, cat: XXX, desc: "xXx"}
|
||||
- {id: 43, cat: Other, desc: "Arabic for social"}
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
- {id: 32, cat: PC/Phone-Android, desc: "Android APP"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: arenabg
|
||||
name: ArenaBG
|
||||
description: "ArenaBG is a BULGARIAN Semi-Private Torrent Tracker for 0DAY / GENERAL"
|
||||
@@ -6,6 +6,8 @@
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://arenabg.ch/
|
||||
legacylinks:
|
||||
- https://arenabg.com/
|
||||
|
||||
caps:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: asgaard
|
||||
name: Asgaard
|
||||
description: "Asgaard (AG) is a NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
@@ -57,7 +57,7 @@
|
||||
- {id: 43, cat: Books/Technical, desc: "Books Education"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout.php"]
|
||||
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://asgrd.org/browse.php?sns=&sna=&spf=&sr=&sg=&sys=&sye=&srs=&sre=&si=tt2401090&ss=&incldead=0&only_free=0&sort=4&type=desc
|
||||
@@ -178,6 +178,5 @@
|
||||
img[src="./images/gold.png"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
text: 1
|
||||
# Midgaard
|
||||
|
@@ -15,7 +15,7 @@
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -46,17 +46,22 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: script[nonce]:contains("Error")
|
||||
message:
|
||||
selector: script[nonce]:contains("Error")
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
@@ -134,7 +139,7 @@
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
|
@@ -6,7 +6,7 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://audiobookbay.nl/
|
||||
- http://audiobookbay.nl/ # site forces http, does not support https
|
||||
legacylinks:
|
||||
- https://audiobookbay.la/
|
||||
|
||||
|
@@ -44,15 +44,27 @@
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: info_results
|
||||
type: info
|
||||
label: Search results
|
||||
default: "If you are getting the error <b>Login Failed, got redirected</b> then access the site with your browser and <b>mark as read</b> all PMs."
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
use_ssl: "1"
|
||||
perm_ssl: "1"
|
||||
submitme: "X"
|
||||
use_ssl: 1
|
||||
perm_ssl: 1
|
||||
submitme: X
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("Oops"))
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
@@ -65,58 +77,40 @@
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
searchin: "title"
|
||||
incldead: "1"
|
||||
searchin: title
|
||||
incldead: 1
|
||||
|
||||
rows:
|
||||
selector: tr.browse_color, tr.freeleech_color, tr[id^="kdescr"]
|
||||
after: 1
|
||||
|
||||
fields: # some users (rank specific?) have an extra column (td:nth-child(4)) with bookmark features
|
||||
banner:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=\'(.*?)\'
|
||||
title:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: Tip\('<b>(.*?)</b>
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: Tip\('<b>(.*?)</b>
|
||||
- name: replace
|
||||
args: ["\\", ""]
|
||||
details:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: a[href^="filelist.php"]
|
||||
size:
|
||||
selector: td:nth-last-child(6)
|
||||
grabs:
|
||||
selector: td:nth-last-child(5)
|
||||
banner:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
seeders:
|
||||
selector: td:nth-last-child(4)
|
||||
leechers:
|
||||
selector: td:nth-last-child(3)
|
||||
date:
|
||||
selector: td:nth-last-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a.info > b:contains(\"[FREE]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
args: src=\'(.*?)\'
|
||||
description:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
@@ -130,7 +124,29 @@
|
||||
- name: prepend
|
||||
args: "{{ .Result.description }}<br>\n"
|
||||
description:
|
||||
selector: td[colspan=13]
|
||||
selector: td[colspan="13"]
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{ .Result.description }}<br>\n"
|
||||
files:
|
||||
selector: td:nth-last-child(9)
|
||||
date:
|
||||
selector: td:nth-last-child(7)
|
||||
size:
|
||||
selector: td:nth-last-child(6)
|
||||
grabs:
|
||||
selector: td:nth-last-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
seeders:
|
||||
selector: td:nth-last-child(4)
|
||||
leechers:
|
||||
selector: td:nth-last-child(3)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a.info > b:contains(\"[FREE]\")": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# U-232 V4
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: audionews
|
||||
name: AudioNews
|
||||
description: "AudioNews (AN) is a Private Torrent Tracker for AUDIO SOFTWARE / SAMPLES / ETC"
|
||||
|
@@ -1,97 +0,0 @@
|
||||
---
|
||||
site: awesomehd
|
||||
name: Awesome-HD
|
||||
description: "An HD tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://awesome-hd.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/HD, desc: "Movies"}
|
||||
- {id: 2, cat: TV/HD, desc: "TV-Shows"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "time"
|
||||
options:
|
||||
"time": "created"
|
||||
"seeders": "seeders"
|
||||
"size": "size"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "desc"
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form#loginform
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
error:
|
||||
- selector: form#loginform .warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Keywords }}"
|
||||
page: torrents
|
||||
order_by: "{{ .Config.sort }}"
|
||||
order_way: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.group, tr.torrent, tr.group_torrent:not(.edition_info)
|
||||
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
optional: true
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: td:nth-child(3) > a
|
||||
category:
|
||||
selector: td:nth-child(2)
|
||||
date:
|
||||
selector: td:nth-last-child(5)
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
grabs:
|
||||
selector: td:nth-last-child(3)
|
||||
seeders:
|
||||
selector: td:nth-last-child(2)
|
||||
leechers:
|
||||
selector: td:nth-last-child(1)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
@@ -1,4 +1,4 @@
|
||||
site: backups
|
||||
site: backups
|
||||
name: Back-ups
|
||||
description: "Back-Ups is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-us
|
||||
|
@@ -57,15 +57,15 @@
|
||||
selector: a[href*="/torrent/"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: td:nth-child(3)
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: timeago
|
||||
size:
|
||||
selector: td:nth-child(4)
|
||||
seeders:
|
||||
selector: td:nth-child(5)
|
||||
leechers:
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: baibako
|
||||
name: BaibaKo
|
||||
description: "BaibaKo is a RUSSIAN Semi-Private Torrent Tracker for TV"
|
||||
@@ -6,7 +6,7 @@
|
||||
type: semi-private
|
||||
encoding: windows-1251
|
||||
links:
|
||||
- http://baibako.tv/
|
||||
- http://baibako.tv/ # site does not support https NET::ERR_CERT_AUTHORITY_INVALID
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -21,7 +21,7 @@
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -71,8 +71,8 @@
|
||||
incldead: 0
|
||||
# 0 all 1 normal 2 free 3 2x 4 2xfree 5 50% 6 2x50% 7 30%
|
||||
spstate: 0
|
||||
# 0 title 1 descr 3 uploaded 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
# 0 title 1 descr 3 uploaded 4 imdburl (searching imdburl does not work with tt1234567, but descr is good)
|
||||
search_area: "{{ if .Query.IMDBID }}1{{else}}0{{end}}"
|
||||
# 0 AND 1 OR 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
@@ -96,7 +96,7 @@
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
@@ -148,4 +148,4 @@
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
# NexusPHP Standard v1.5 Beta 4
|
||||
# NexusPHP Standard v1.5 Beta 4
|
||||
|
@@ -35,7 +35,7 @@
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -50,8 +50,8 @@
|
||||
paths:
|
||||
- path: torrents
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
|
||||
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
description: ""
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
@@ -114,6 +114,5 @@
|
||||
i[data-original-title="75% Promo"]: 0.25
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
# UNIT3D
|
||||
text: 1
|
||||
# UNIT3D
|
||||
|
@@ -14,7 +14,7 @@
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
captcha:
|
||||
type: text
|
||||
selector: div[style*="#999999;"]
|
||||
@@ -53,10 +54,17 @@
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: div.has-error
|
||||
test:
|
||||
path: torrents
|
||||
- selector: form[action$="/login"] .text-red
|
||||
- selector: script:contains("toastr.error")
|
||||
message:
|
||||
selector: script:contains("toastr.error")
|
||||
# test:
|
||||
# path: torrents
|
||||
|
||||
search:
|
||||
paths:
|
||||
@@ -126,6 +134,5 @@
|
||||
i[data-original-title="75% Promo"]: 0.25
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
# UNIT3D
|
||||
text: 1
|
||||
# UNIT3D
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: bigfangroup
|
||||
name: BigFANGroup
|
||||
description: "BigFANGroup is a RUSSIAN Public Torrent Tracker for MOVIES / TV"
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
search:
|
||||
# https://bigfangroup.org/browse.php?search=black+lightning&cat=0&incldead=0&year=0&format=0
|
||||
#
|
||||
#
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
@@ -184,10 +184,7 @@
|
||||
- name: dateparse
|
||||
args: "2 January 2006 15:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freedownload.gif"]: 0
|
||||
img[src="pic/silverdown.gif"]: 0
|
||||
"*": 1
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
||||
|
@@ -6,6 +6,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.bigtorrent.eu/
|
||||
legacylinks:
|
||||
- http://www.bigtorrent.eu/
|
||||
|
||||
caps:
|
||||
@@ -96,4 +98,4 @@
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
"*": "1"
|
||||
|
@@ -6,14 +6,16 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://bigtower.info/
|
||||
- http://bigtower.info/ # site does not support https NET::ERR_CERT_DATE_INVALID
|
||||
legacylinks:
|
||||
- https://bigtower.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
# Movies
|
||||
- {id: 11, cat: Movies/HD, desc: "DSS"}
|
||||
- {id: 1, cat: Movies, desc: "Screener"}
|
||||
- {id: 1, cat: Movies, desc: "Screener"}
|
||||
- {id: 2, cat: Movies, desc: "DVDRip & BDRip"}
|
||||
- {id: 3, cat: Movies/BluRay, desc: "Bluray 1080p & 720p"}
|
||||
- {id: 5, cat: Movies/UHD, desc: "Ultra HD 4K"}
|
||||
@@ -25,10 +27,10 @@
|
||||
|
||||
# MUSIC
|
||||
- {id: 8, cat: Audio, desc: "Musica"}
|
||||
|
||||
|
||||
# SOFTWARE
|
||||
- {id: 9, cat: PC/0day, desc: "Software"}
|
||||
|
||||
|
||||
# PHONE
|
||||
- {id: 12, cat: PC/Phone-Other, desc: "Applicazioni"}
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: bit-titan
|
||||
name: BiT-TiTAN
|
||||
description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: bithorlo
|
||||
name: Bithorlo
|
||||
description: "Bithorlo (BHO) is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"
|
||||
@@ -56,13 +56,17 @@
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: info_alert
|
||||
type: info
|
||||
label: Alert about Cookie
|
||||
default: "If during your cookie save you get the following error:</br><b>The 'Value'='xzlogin,xzrecover,xzsignup' part of the cookie is invalid.</b></br>Then remove <b>acopendivids=xzlogin,xzrecover,xzsignup; </b> from the cookie string before proceeding to save."
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
|
@@ -42,8 +42,8 @@
|
||||
- {id: 27, cat: Other, desc: "Klipek"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
@@ -61,13 +61,15 @@
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: 1
|
||||
|
||||
rows:
|
||||
selector: table#torrenttable > tbody > tr:has(a[href^="details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
# download button can be disbled in the profile, use details link instead
|
||||
# download:
|
||||
@@ -156,3 +158,4 @@
|
||||
args: ["tegnap", "yesterday"]
|
||||
description:
|
||||
selector: td:nth-child(2) > div
|
||||
# engine tbd
|
||||
|
@@ -6,7 +6,7 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://bitru.org/
|
||||
- http://bitru.org/ # site forces http, https is not supported
|
||||
|
||||
caps:
|
||||
categories:
|
||||
@@ -84,8 +84,8 @@
|
||||
- name: regexp
|
||||
args: "src=(.*?) "
|
||||
date:
|
||||
# Сегодня в 09:09 от
|
||||
# Вчера в 22:47 от
|
||||
# Сегодня в 09:09 от
|
||||
# Вчера в 22:47 от
|
||||
selector: td:nth-child(2) div.b-info div span:nth-child(2):contains("Сегодня"), td:nth-child(2) div.b-info div span:nth-child(2):contains("Вчера")
|
||||
optional: true
|
||||
filters:
|
||||
@@ -96,7 +96,7 @@
|
||||
- name: replace
|
||||
args: ["Вчера в", "Yesterday"]
|
||||
date:
|
||||
# 08 ноября 2019 в 23:53 от
|
||||
# 08 ноября 2019 в 23:53 от
|
||||
selector: td:nth-child(2) div.b-info div span:nth-child(2):not(:contains("Сегодня")):not(:contains("Вчера"))
|
||||
optional: true
|
||||
filters:
|
||||
@@ -134,7 +134,7 @@
|
||||
selector: td:nth-child(3)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["ТБ", "TB"]
|
||||
args: ["ТБ", "TB"]
|
||||
- name: replace
|
||||
args: ["ГБ", "GB"]
|
||||
- name: replace
|
||||
@@ -145,12 +145,12 @@
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["?", "1"]
|
||||
args: ["?", "1"]
|
||||
leechers:
|
||||
selector: td:nth-child(5)
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["?", "0"]
|
||||
args: ["?", "0"]
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
|
@@ -6,6 +6,8 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.bittorrent.am/
|
||||
legacylinks:
|
||||
- http://www.bittorrent.am/
|
||||
|
||||
caps:
|
||||
|
@@ -6,8 +6,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.bitturk.net/
|
||||
|
||||
- http://www.bitturk.net/ # site does not support https ERR_CONNECTION_REFUSED
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 69, cat: Movies, desc: "BiTTuRK Altın"}
|
||||
@@ -20,6 +20,7 @@
|
||||
- {id: 67, cat: XXX, desc: "XxX"}
|
||||
- {id: 68, cat: Movies, desc: "Dual (TR-~)"}
|
||||
- {id: 58, cat: Movies, desc: "Film"}
|
||||
- {id: 72, cat: Movies, desc: "Belgesel"}
|
||||
- {id: 60, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 45, cat: Movies, desc: "Eğitim / Prog "}
|
||||
- {id: 1, cat: Movies, desc: "Filmler"}
|
||||
@@ -52,12 +53,12 @@
|
||||
- {id: 50, cat: TV, desc: "Yab@ncı Dizi"}
|
||||
- {id: 51, cat: TV, desc: "Yerli Dizi"}
|
||||
- {id: 44, cat: Books, desc: "E-BooK"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
@@ -84,7 +85,7 @@
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
|
||||
login:
|
||||
path: ?p=home&pid=1
|
||||
method: form
|
||||
@@ -106,11 +107,11 @@
|
||||
test:
|
||||
path: ?p=home&pid=1
|
||||
selector: a[href*="/?p=logout&"]
|
||||
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
keywordsfilters:
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[^a-zA-Z0-9]+", "%25"]
|
||||
inputs:
|
||||
@@ -145,7 +146,7 @@
|
||||
attribute: href
|
||||
date:
|
||||
optional: true
|
||||
# Uploaded 30-01-2019 15:02 by
|
||||
# Uploaded 30-01-2019 15:02 by
|
||||
selector: td.torrent_name:not(:contains(" at "))
|
||||
filters:
|
||||
- name: regexp
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: bluebirdhd
|
||||
name: BlueBird
|
||||
description: "BlueBird is a RUSSIAN Private Torrent Tracker for HD MOVIES"
|
||||
|
@@ -13,20 +13,21 @@
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Movies, desc: "FANRES"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 7, cat: Movies/Other, desc: "Trailer"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
- name: username
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here.</ol>"
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -45,13 +46,23 @@
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: div#ERROR_COPY
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
selector: li:has(i.fa-sync-alt)
|
||||
@@ -125,7 +136,7 @@
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: booktracker
|
||||
name: BookTracker
|
||||
description: "BookTracker is a RUSSIAN Semi-Private Torrent Tracker for EBOOKS"
|
||||
|
133
src/Jackett.Common/Definitions/boxingtorrents.yml
Normal file
133
src/Jackett.Common/Definitions/boxingtorrents.yml
Normal file
@@ -0,0 +1,133 @@
|
||||
---
|
||||
site: boxingtorrents
|
||||
name: Boxing Torrents
|
||||
description: "Boxing Torrents is a Private Torrent Tracker for BOXING"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tc-boxing.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 15, cat: TV/Sport, desc: "3D"}
|
||||
- {id: 9, cat: TV/Sport, desc: "Amateur - Full"}
|
||||
- {id: 16, cat: TV/Sport, desc: "Blu-ray"}
|
||||
- {id: 13, cat: TV/Sport, desc: "Career Set"}
|
||||
- {id: 8, cat: TV/Sport, desc: "DVD"}
|
||||
- {id: 10, cat: TV/Sport, desc: "Foreign - Excellent"}
|
||||
- {id: 11, cat: TV/Sport, desc: "Foreign - Fair"}
|
||||
- {id: 6, cat: TV/Sport, desc: "Foreign - Good"}
|
||||
- {id: 12, cat: TV/Sport, desc: "Foreign - Poor"}
|
||||
- {id: 1, cat: TV/Sport, desc: "Full - Excellent"}
|
||||
- {id: 3, cat: TV/Sport, desc: "Full - Fair"}
|
||||
- {id: 2, cat: TV/Sport, desc: "Full - Good"}
|
||||
- {id: 4, cat: TV/Sport, desc: "Full - Poor"}
|
||||
- {id: 14, cat: TV/Sport, desc: "HD"}
|
||||
- {id: 7, cat: TV/Sport, desc: "Misc"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "added"
|
||||
options:
|
||||
"added": "created"
|
||||
"seeders": "seeders"
|
||||
"size": "size"
|
||||
"name": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "DESC"
|
||||
options:
|
||||
"DESC": "desc"
|
||||
"ASC": "asc"
|
||||
- name: info_download
|
||||
type: info
|
||||
label: "Download Restrictions"
|
||||
default: "You must have uploaded at least 10GB before you are able to access all torrent sizes. Until then, you are restricted to torrents no larger than 2.5GB."
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:contains("Login failed!")
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://tc-boxing.com/browse.php?c16=1&c8=1&c14=1&incldead=1
|
||||
# https://tc-boxing.com/browse.php?search=tyson&cat=0&incldead=1
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ if .Categories }}{{ range .Categories }}c{{.}}=1&{{end}}{{else}}cat=0{{end}}"
|
||||
# 0 active 1 incldead 2 onlydead
|
||||
incldead: 1
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
d: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table[border="1"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="details.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-last-child(8)
|
||||
date:
|
||||
selector: td:nth-last-child(6)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05"
|
||||
size:
|
||||
selector: td:nth-last-child(5)
|
||||
grabs:
|
||||
selector: td:nth-last-child(4)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"b:contains(\"FreeLeech\")": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
@@ -6,6 +6,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://broadcity.in/
|
||||
legacylinks:
|
||||
- http://broadcity.in/
|
||||
|
||||
caps:
|
||||
|
@@ -15,7 +15,7 @@
|
||||
- {id: 410, cat: TV, desc: "TV Series/剧集"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -43,7 +43,7 @@
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
@@ -86,7 +86,7 @@
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
|
@@ -5,12 +5,19 @@
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://btdb.io/
|
||||
- https://btdb.io/
|
||||
- https://btdb.unblockit.pro/
|
||||
- https://btdb.black-mirror.xyz/
|
||||
- https://btdb.unblocked.casa/
|
||||
- https://btdb.proxyportal.fun/
|
||||
- https://btdb.uk-unblock.xyz/
|
||||
- https://btdb.ind-unblock.xyz/
|
||||
legacylinks:
|
||||
- https://btdb.to/
|
||||
- https://btdb.unblocked.app/
|
||||
- https://btdb.eu/
|
||||
- https://btdb.to/
|
||||
- https://btdb.unblocked.app/
|
||||
- https://btdb.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -50,13 +57,15 @@
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: a[href^="/torrent/"]
|
||||
selector: a[href*="/torrent/"]
|
||||
details:
|
||||
selector: a[href^="/torrent/"]
|
||||
selector: a[href*="/torrent/"]
|
||||
attribute: href
|
||||
download:
|
||||
# download can be missing despite icon being present. Fortunately the magnet is always there
|
||||
selector: a[href$=".torrent"]
|
||||
attribute: href
|
||||
optional: true
|
||||
magnet:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
|
@@ -20,7 +20,7 @@
|
||||
settings:
|
||||
- name: info
|
||||
type: info
|
||||
default: BTDigg does not use categories. In your software Indexer settings, set the category to 100001.
|
||||
default: BTDigg does not use categories. In your software Indexer settings, set the category to 7000.
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
|
@@ -20,7 +20,7 @@
|
||||
settings:
|
||||
- name: info
|
||||
type: info
|
||||
default: BTeye does not use categories. In your software Indexer settings, set the category to 100001.
|
||||
default: BTeye does not use categories. In your software Indexer settings, set the category to 7000.
|
||||
|
||||
download:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: btnext
|
||||
name: BTNext
|
||||
description: "BTNext (BTNT) is a PORTUGUESE Private Torrent Tracker for 0DAY / GENERAL"
|
||||
@@ -6,8 +6,7 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://tracker.btnext.com/
|
||||
# note: the site forces http, https is not supported
|
||||
- http://tracker.btnext.com/ # site forces http, https is not supported
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -25,7 +24,10 @@
|
||||
- {id: 16, cat: Movies/SD, desc: "Movies CAM"}
|
||||
- {id: 74, cat: Movies/DVD, desc: "Movies DvD-R"}
|
||||
- {id: 76, cat: Movies, desc: "Movies Packs"}
|
||||
- {id: 91, cat: Movies/Other, desc: "Movies Kids"}
|
||||
- {id: 115, cat: Movies/Other, desc: "Movies Kids"}
|
||||
- {id: 91, cat: Movies/Other, desc: "Movies Kids Inglês"}
|
||||
- {id: 113, cat: Movies/Other, desc: "Movies Kids PT-BR"}
|
||||
- {id: 114, cat: Movies/Other, desc: "Movies Kids PT-PT"}
|
||||
- {id: 77, cat: Movies/WEBDL, desc: "Movies WEB-DL"}
|
||||
- {id: 85, cat: Movies/DVD, desc: "Movies Custom-DVDR"}
|
||||
- {id: 14, cat: Movies/SD, desc: "Movies DVDRip/XViD"}
|
||||
@@ -50,13 +52,14 @@
|
||||
- {id: 7, cat: Audio, desc: "Music"}
|
||||
- {id: 20, cat: Audio/Video, desc: "Music MVideo"}
|
||||
- {id: 21, cat: Audio/MP3, desc: "Music MP3"}
|
||||
- {id: 33, cat: Audio/Other, desc: "Music MP4"}
|
||||
- {id: 33, cat: Audio/Video, desc: "Music MP4"}
|
||||
- {id: 32, cat: Audio/Lossless, desc: "Music FLAC"}
|
||||
- {id: 2, cat: Console, desc: "Games"}
|
||||
- {id: 78, cat: PC/Games, desc: "Games Linux"}
|
||||
- {id: 79, cat: PC/Mac, desc: "Games MacOSX"}
|
||||
- {id: 28, cat: Console/NDS, desc: "Games Nintendo DS"}
|
||||
- {id: 27, cat: PC/Games, desc: "Games PC/Windows"}
|
||||
- {id: 111, cat: Console, desc: "Games Nintendo Sw"}
|
||||
- {id: 80, cat: Console/PS3, desc: "Games PS2"}
|
||||
- {id: 81, cat: Console/PS3, desc: "Games PS3"}
|
||||
- {id: 82, cat: Console/PS4, desc: "Games PS4"}
|
||||
@@ -71,10 +74,10 @@
|
||||
- {id: 34, cat: PC/ISO, desc: "Applications Linux"}
|
||||
- {id: 44, cat: Other, desc: "Miscellaneous"}
|
||||
- {id: 54, cat: Audio/Audiobook, desc: "Books Audiobook"}
|
||||
- {id: 57, cat: Books, desc: "Books E-Books"}
|
||||
- {id: 57, cat: Books/Ebook, desc: "Books E-Books"}
|
||||
- {id: 58, cat: Books/Comics, desc: "Books Comics"}
|
||||
- {id: 59, cat: Books, desc: "Books Educational"}
|
||||
- {id: 60, cat: Books, desc: "Books Magazines/Journals"}
|
||||
- {id: 60, cat: Books/Magazines, desc: "Books Magazines/Journals"}
|
||||
- {id: 61, cat: Other, desc: "Pics/Wallpapers"}
|
||||
- {id: 62, cat: PC/Phone-Android, desc: "Android"}
|
||||
- {id: 63, cat: PC/Phone-IOS, desc: "iOS"}
|
||||
@@ -93,9 +96,9 @@
|
||||
- {id: 69, cat: XXX/Imageset, desc: "XXX-Pics/Wallpapers"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
@@ -123,6 +126,10 @@
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
- name: info_results
|
||||
type: info
|
||||
label: Search results
|
||||
default: "If you get 0 results check the log for error: <b>An error has occured!You can't view this page unless you read all your unread messages</b>, then access the site with your browser and <b>mark as read</b> all PMs."
|
||||
|
||||
login:
|
||||
path: ?p=home&pid=1
|
||||
@@ -149,16 +156,16 @@
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
keywordsfilters:
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[^a-zA-Z0-9]+", "%25"]
|
||||
inputs:
|
||||
p: torrents
|
||||
pid: 32
|
||||
$raw: "{{ range .Categories }}cid[]={{.}}&{{end}}"
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: name
|
||||
searchin: title
|
||||
keywords: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# name , description , both , uploader
|
||||
search_type: "{{ if .Query.IMDBID }}description{{else}}name{{end}}"
|
||||
"sortOptions[sortBy]": "{{ .Config.sort }}"
|
||||
"sortOptions[sortOrder]": "{{ .Config.type }}"
|
||||
error:
|
||||
@@ -194,28 +201,62 @@
|
||||
selector: a[rel="fancybox"]
|
||||
optional: true
|
||||
attribute: href
|
||||
imdb:
|
||||
# a href="http://tracker.btnext.com/data/torrents/imdb/tt0249677.jpg"
|
||||
optional: true
|
||||
selector: a[href*="/imdb/tt"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "imdb/(.+?).jpg"
|
||||
- name: prepend
|
||||
args: "https://www.imdb.com/title/"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title=\"FREE!\"]": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
text: 1
|
||||
date:
|
||||
selector: td.torrent_name > abbr.timeago
|
||||
optional: true
|
||||
attribute: data-time
|
||||
date:
|
||||
selector: td.torrent_name:not(:has(abbr.timeago))
|
||||
selector: td.torrent_name:not(:has(abbr.timeago)):not(:contains("day")):not(:contains("Domingo")):not(:contains("Sábado")):not(:contains("Sexta")):not(:contains("Quinta")):not(:contains("Quarta")):not(:contains("Terça")):not(:contains("Segunda")):not(:contains("ontem")):not(:contains("Hoje"))
|
||||
optional: true
|
||||
remove: span, a, br
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Enviado ", ""] # Uploaded
|
||||
- name: replace
|
||||
args: ["Uploaded ", ""]
|
||||
- name: replace
|
||||
args: [" por", ""] # by
|
||||
- name: replace
|
||||
args: [" by", ""]
|
||||
- name: replace
|
||||
args: ["às ", ""] # at
|
||||
- name: replace
|
||||
args: ["at ", ""]
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04"
|
||||
date:
|
||||
selector: td.torrent_name:not(:has(abbr.timeago)):contains("day"), td.torrent_name:not(:has(abbr.timeago)):contains("Domingo"), td.torrent_name:not(:has(abbr.timeago)):contains("Sábado"), td.torrent_name:not(:has(abbr.timeago)):contains("Quinta"), td.torrent_name:not(:has(abbr.timeago)):contains("Sexta"), td.torrent_name:not(:has(abbr.timeago)):contains("Quarta"), td.torrent_name:not(:has(abbr.timeago)):contains("Terça"), td.torrent_name:not(:has(abbr.timeago)):contains("Segunda"), td.torrent_name:not(:has(abbr.timeago)):contains("ontem"), td.torrent_name:not(:has(abbr.timeago)):contains("Hoje")
|
||||
optional: true
|
||||
remove: span, a, br
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Enviado ", ""] # Uploaded
|
||||
- name: replace
|
||||
args: ["Uploaded ", ""]
|
||||
- name: replace
|
||||
args: [" por", ""] # by
|
||||
- name: replace
|
||||
args: [" by", ""]
|
||||
- name: replace
|
||||
args: ["às ", ""] # at
|
||||
- name: replace
|
||||
args: ["at ", ""]
|
||||
- name: replace
|
||||
args: ["Hoje", "Today"]
|
||||
- name: replace
|
||||
@@ -234,6 +275,5 @@
|
||||
args: ["Sábado", "Saturday"]
|
||||
- name: replace
|
||||
args: ["Domingo", "Sunday"]
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04"
|
||||
- name: fuzzytime
|
||||
# TSUE 2.2
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: btschool
|
||||
name: BTSCHOOL
|
||||
description: "BTSCHOOL is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
@@ -23,7 +23,7 @@
|
||||
- {id: 415, cat: Other, desc: "其他/Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
@@ -78,7 +78,7 @@
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
|
@@ -6,9 +6,10 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://btio.pw/
|
||||
- https://btsow.club/
|
||||
legacylinks:
|
||||
- https://btos.pw/
|
||||
- https://btio.pw/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: carpathians
|
||||
name: Carpathians
|
||||
description: "Carpathians is a HUNGARIAN Private Torrent Tracker for 0DAY / GENERAL"
|
||||
@@ -38,9 +38,33 @@
|
||||
- {id: 110, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "5"
|
||||
options:
|
||||
"5": "created"
|
||||
"8": "seeders"
|
||||
"6": "size"
|
||||
"2": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "desc"
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
@@ -55,13 +79,18 @@
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}https://www.imdb.com/title/{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# 0 both 1 only active 2 only dead
|
||||
incldead: 0
|
||||
onlyname: 1
|
||||
onlyname2: true
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table[id!="torrent_ajanlo"] > tbody > tr[id]
|
||||
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
@@ -84,7 +113,7 @@
|
||||
selector: a[id][href^="details.php?"]
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href*="https://www.imdb.com/title/"]
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
optional: true
|
||||
attribute: href
|
||||
banner:
|
||||
@@ -99,7 +128,7 @@
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
args: (\d+)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
@@ -123,9 +152,10 @@
|
||||
args: ["hete", "week"]
|
||||
- name: timeago
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="pic/double.png"]: "2"
|
||||
"*": "1"
|
||||
img[src="pic/double.png"]: 2
|
||||
img[src="pic/doubledouble2.png"]: 4
|
||||
"*": 1
|
||||
# TBDev & XBTT
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: cartoonchaos
|
||||
name: CartoonChaos
|
||||
description: "CartoonChaos (CC) is a Private Torrent Tracker for ANIMATED MOVIES / TV"
|
||||
@@ -6,7 +6,7 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.cartoonchaos.org/
|
||||
- http://www.cartoonchaos.org/ # site does not support https NET::ERR_CERT_AUTHORITY_INVALID
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
@@ -59,6 +59,7 @@
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
@@ -81,8 +82,9 @@
|
||||
page: torrents
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{else}}0{{end}}"
|
||||
# options: 0=title, 1=title&descr, 2=descr
|
||||
options: "{{ if .Query.IMDBID }}1{{else}}0{{end}}"
|
||||
# 0=title, 1=title&descr, 2=descr
|
||||
options: "{{ if .Query.IMDBID }}2{{else}}0{{end}}"
|
||||
# 0 all 1 activeonly 2 deadonly
|
||||
active: 0
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
@@ -115,6 +117,14 @@
|
||||
args: [" http://anonym.to?javascript:popdetails('", ""]
|
||||
- name: replace
|
||||
args: ["');", ""]
|
||||
banner:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.+?) width"
|
||||
- name: replace
|
||||
args: ["torrentimg/nocover.jpg", ""]
|
||||
size:
|
||||
selector: td:nth-child(10)
|
||||
# two flavours of dates
|
||||
@@ -146,4 +156,4 @@
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# xbtit 2.0.0
|
||||
# xbtit 2.0.0
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: casatorrent
|
||||
name: Casa-Torrent
|
||||
description: "Casa-Torrent is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: casstudiotv
|
||||
name: CasStudioTV
|
||||
description: "CasStudioTV is a RUSSIAN Semi-Private Torrent Tracker for TV"
|
||||
|
@@ -42,9 +42,33 @@
|
||||
- {id: 22, cat: Other, desc: "杂项"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "added"
|
||||
options:
|
||||
"added": "created"
|
||||
"seeders": "seeders"
|
||||
"size": "size"
|
||||
"name": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "DESC"
|
||||
options:
|
||||
"DESC": "desc"
|
||||
"ASC": "asc"
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
@@ -60,13 +84,14 @@
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
method: get
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# 0 active 1 incldead 2 deadonly
|
||||
incldead: 1
|
||||
sort: added
|
||||
d: DESC
|
||||
fullsearch: "{{ if .Query.IMDBID }}1{{else}}{{end}}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
d: "{{ .Config.sort }}"
|
||||
|
||||
rows:
|
||||
selector: table[border="1"][cellpadding="5"] > tbody > tr:has(a[href^="details.php?id="])
|
||||
@@ -86,7 +111,7 @@
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
attribute: href
|
||||
@@ -122,7 +147,10 @@
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"font:has([src=\"/pic/arrowup1.gif\"]):contains(\"1.5x\")": 1.5
|
||||
"font:has([src=\"/pic/arrowup1.gif\"]):contains(\"2x\")": 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2)
|
||||
remove: a, img
|
||||
# Discuz! 7.2
|
||||
|
@@ -18,7 +18,7 @@
|
||||
- {id: 4, cat: TV/Sport, desc: "Sports"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -49,17 +49,20 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: script[nonce]:contains("Error")
|
||||
message:
|
||||
selector: script[nonce]:contains("Error")
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
- selector: div#ERROR_COPY
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
@@ -85,8 +88,10 @@
|
||||
sort: "{{ .Config.sort }}"
|
||||
direction: "{{ .Config.type }}"
|
||||
qty: 100
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="/categories/"]
|
||||
@@ -132,7 +137,7 @@
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
@@ -177,4 +182,4 @@
|
||||
i[class*="fa-globe text-green"]: 2 # Global Double Upload
|
||||
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
|
||||
"*": 1
|
||||
# UNIT3D 2.2.5
|
||||
# UNIT3D 2.2.7
|
||||
|
@@ -1,29 +1,29 @@
|
||||
---
|
||||
site: greeklegends
|
||||
name: GreekLegends
|
||||
description: "Greek Legends is a Private Torrent Tracker for High Quality Content"
|
||||
language: en-us
|
||||
site: chilebt
|
||||
name: ChileBT
|
||||
description: "ChileBT is a CHILEAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: es-419
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://greeklegends.net/
|
||||
- https://chilebt.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: PC, desc: "Apps"}
|
||||
- {id: 5, cat: Books, desc: "Books"}
|
||||
- {id: 6, cat: Console, desc: "Games"}
|
||||
- {id: 7, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 8, cat: PC/Phone-Other, desc: "Mobile Apps"}
|
||||
- {id: 9, cat: Other/Misc, desc: "misc"}
|
||||
- {id: 10, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 11, cat: TV/Anime, desc: "Anime/Cartoon"}
|
||||
- {id: 10, cat: Movies, desc: "Movies"}
|
||||
- {id: 11, cat: TV, desc: "TV"}
|
||||
- {id: 9, cat: Audio, desc: "Music"}
|
||||
- {id: 7, cat: Other, desc: "Cultura / Educativos"}
|
||||
- {id: 8, cat: PC/Games, desc: "Juegos"}
|
||||
- {id: 6, cat: Books, desc: "EBook"}
|
||||
- {id: 4, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 5, cat: PC/0day, desc: "Aplicaciones / Programas"}
|
||||
- {id: 14, cat: Movies, desc: "Infantil"}
|
||||
- {id: 12, cat: Other/Misc, desc: "VIP"}
|
||||
- {id: 13, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -54,17 +54,22 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: script[nonce]:contains("Error")
|
||||
message:
|
||||
selector: script[nonce]:contains("Error")
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
@@ -75,7 +80,7 @@
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents/filter
|
||||
- path: filterTorrents
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
@@ -85,7 +90,6 @@
|
||||
tvdb: ""
|
||||
tmdb: ""
|
||||
mal: ""
|
||||
igdb: ""
|
||||
sorting: "{{ .Config.sort }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
direction: "{{ .Config.type }}"
|
||||
@@ -100,7 +104,7 @@
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "/categories/(\\d+)"
|
||||
args: "/categories/.*?\\.(\\d+)"
|
||||
title:
|
||||
selector: a.view-torrent
|
||||
download:
|
||||
@@ -139,7 +143,7 @@
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
@@ -184,4 +188,4 @@
|
||||
i[class*="fa-globe text-green"]: 2 # Global Double Upload
|
||||
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
|
||||
"*": 1
|
||||
# UNIT3D 2.2.7
|
||||
# UNIT3D 1.9.3
|
@@ -6,9 +6,10 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.cilijj.xyz/
|
||||
- https://www.cilijj.xyz/
|
||||
legacylinks:
|
||||
- http://www.cili180.com/
|
||||
- http://www.cilijj.xyz/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -6,6 +6,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://cinemageddon.net/
|
||||
legacylinks:
|
||||
- http://cinemageddon.net/
|
||||
|
||||
caps:
|
||||
@@ -45,7 +47,7 @@
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
@@ -94,4 +96,4 @@
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
"*": "1"
|
||||
|
@@ -31,9 +31,9 @@
|
||||
- {id: 21, cat: Books, desc: "Book"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
@@ -42,7 +42,7 @@
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here.</ol>"
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -67,17 +67,19 @@
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href^="/logout.php"]
|
||||
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# 0 onlyactive 1 all 4 requests 5 onlydead 6 polish 8 free 10 doubleup 11 premier 13 VOD
|
||||
incldead: 1
|
||||
# 0 title 1 descr
|
||||
blah: 0
|
||||
blah: "{{ if .Query.IMDBID }}1{{else}}0{{end}}"
|
||||
gatunek: 0
|
||||
quality: none
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
@@ -98,13 +100,17 @@
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
attribute: href
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.+?) "
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
description:
|
||||
optional: true
|
||||
selector: img[src="pic/Poland.png"]
|
||||
|
@@ -117,4 +117,4 @@
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": 2
|
||||
"*": 1
|
||||
"*": 1
|
||||
|
@@ -6,7 +6,7 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://classix-unlimited.co.uk/
|
||||
- http://classix-unlimited.co.uk/ # site does not support https ERR_CONNECTION_CLOSED
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -63,4 +63,4 @@
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
"*": "1"
|
||||
|
@@ -50,15 +50,21 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: form[action$="/login"] .text-red
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
selector: span:has(i.fa-percent)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: cpasbien
|
||||
name: cpasbien
|
||||
description: "cpasbien is a FRENCH Public site for TV / MOVIES / GENERAL"
|
||||
@@ -7,7 +7,7 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://vww.cpasbien-fr.fr/
|
||||
- https://wvw.cpasbien-fr.fr/
|
||||
legacylinks:
|
||||
- http://www.cpasbiens.cc/
|
||||
- http://www.cpabien.cm/
|
||||
@@ -38,6 +38,7 @@
|
||||
- https://www.cpasbien.vg/
|
||||
- https://www.cpasbien.lol/
|
||||
- https://www.gktorrent.biz/
|
||||
- https://vww.cpasbien-fr.fr/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -50,7 +51,28 @@
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings: []
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: useragent
|
||||
type: text
|
||||
label: User-Agent
|
||||
label: User-Agent
|
||||
- name: info_useragent
|
||||
type: info
|
||||
label: How to get the User-Agent
|
||||
default: "<ol><li>From the same place you fetched the cookie,<li>Find <b>'user-agent:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole user-agent string <i>(everything after 'user-agent: ')</i> and <b>Paste</b> here.</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
user-agent: "[ .Config.useragent ]"
|
||||
|
||||
download:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
@@ -58,8 +80,11 @@
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://vww.cpasbien-fr.fr/index.php?do=search&subaction=search&story=dickinson%20s01e10
|
||||
- path: "{{ if .Keywords }}index.php?do=search&subaction=search&story={{ .Keywords }}{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}index.php?do=search&subaction=search{{else}}{{end}}"
|
||||
method: post
|
||||
inputs:
|
||||
story: "{{ if .Keywords }}{{ .Keywords }}{{else}}{{end}}"
|
||||
# does not support imdbid search and does not return imdb link in results.
|
||||
|
||||
rows:
|
||||
selector: div#gauche > table > tbody > tr:has(a)
|
||||
|
@@ -7,11 +7,17 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www1.cpasbiens.cm/
|
||||
- https://cpasbien.to/
|
||||
- https://cpasbiens.black-mirror.xyz/
|
||||
- https://cpasbiens.unblocked.casa/
|
||||
- https://cpasbiens.proxyportal.fun/
|
||||
- https://cpasbiens.uk-unblock.xyz/
|
||||
- https://cpasbiens.ind-unblock.xyz/
|
||||
legacylinks:
|
||||
- https://www1.cpasbiens.ws/
|
||||
- https://www2.cpasbiens.ws/
|
||||
- https://cpasbiens.cm/
|
||||
- https://www1.cpasbiens.cm/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -45,7 +51,7 @@
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{ if .Keywords }}recherche/{{ .Keywords }}{{ .Config.sort }}{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}search_torrent/{{ .Keywords }}{{ .Config.sort }}{{else}}{{end}}"
|
||||
|
||||
rows:
|
||||
selector: table.table-corps > tbody > tr:has(a)
|
||||
@@ -56,9 +62,9 @@
|
||||
site_date:
|
||||
selector: a
|
||||
filters:
|
||||
# date is at the end of the title, so we get it and name it site_date
|
||||
# year can be at the end of the title, so we get it and name it site_date
|
||||
- name: regexp
|
||||
args: "(\\w+)$"
|
||||
args: "(\\d{4})$"
|
||||
title:
|
||||
selector: a
|
||||
filters:
|
||||
@@ -73,7 +79,7 @@
|
||||
args: ["VOSTFR", "{{ .Result.site_date }} VOSTFR"]
|
||||
# and we delete it at the end
|
||||
- name: re_replace
|
||||
args: ["(\\w+)$", ""]
|
||||
args: ["(\\d{4})$", ""]
|
||||
details:
|
||||
selector: a
|
||||
attribute: href
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: crazyscorner
|
||||
name: Crazy's Corner
|
||||
description: "Crazy's Corner is a Private Torrent Tracker for MUSIC"
|
||||
@@ -6,7 +6,7 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://crazys-corner.info/
|
||||
- http://crazys-corner.info/ # site does not support https ERR_CONNECTION_REFUSED
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -129,12 +129,10 @@
|
||||
details:
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
# rows have download but site requires thanks so we use dl from details
|
||||
download:
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: img[src*="/torrents/images/"]
|
||||
attribute: src
|
||||
@@ -156,6 +154,7 @@
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src$="_flags/freedownload.gif"]: 0
|
||||
img[src$="_flags/silverdownload.gif"]: 0.5
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: crazyspirits
|
||||
name: CrazySpirits
|
||||
description: "Crazy Spirits is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
@@ -12,20 +12,21 @@
|
||||
categorymappings:
|
||||
# Documentaire
|
||||
- {id: 96, cat: TV/Documentary, desc: "Docus TV"}
|
||||
- {id: 124, cat: TV/Documentary, desc: "Docus Formation Video"}
|
||||
# Films
|
||||
- {id: 49, cat: Movies/3D, desc: "Films 3D"}
|
||||
- {id: 1, cat: XXX, desc: "3X"}
|
||||
- {id: 48, cat: XXX, desc: "3X HD1080p"}
|
||||
- {id: 47, cat: XXX, desc: "3X HD720p"}
|
||||
- {id: 50, cat: Movies/UHD, desc: "Films 4K"}
|
||||
- {id: 51, cat: Movies/UHD, desc: "Films 4K UHDTV"}
|
||||
- {id: 51, cat: TV/UHD, desc: "Films 4K UHDTV"}
|
||||
- {id: 57, cat: Movies/BluRay, desc: "Films BDRip"}
|
||||
- {id: 56, cat: Movies/BluRay, desc: "Films Blu-Ray"}
|
||||
- {id: 58, cat: Movies/BluRay, desc: "Films BRRip"}
|
||||
- {id: 66, cat: Movies, desc: "Films CamTS"}
|
||||
- {id: 59, cat: Movies/DVD, desc: "Films DVDR"}
|
||||
- {id: 60, cat: Movies/DVD, desc: "Films DVDRip"}
|
||||
- {id: 98, cat: Movies, desc: "Films Film Animées"}
|
||||
- {id: 98, cat: TV/Anime, desc: "Films Film Animées"}
|
||||
- {id: 65, cat: Movies, desc: "Films FSCR"}
|
||||
- {id: 52, cat: Movies/HD, desc: "Films HD 720p"}
|
||||
- {id: 53, cat: Movies/HD, desc: "Films HD1080p"}
|
||||
@@ -107,7 +108,7 @@
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -124,7 +125,7 @@
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
@@ -149,13 +150,17 @@
|
||||
# http://crazyspirits.com/torrents-search.php?c101=1&c102=1&c103=1&c104=1&c105=1&c106=1&search=&cat=0&incldead=0&freeleech=0&lang=0
|
||||
- path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 active 1 incldead 2 onlydead
|
||||
incldead: 1
|
||||
# 0 all 1 inclfree 2 onlyfree
|
||||
freeleech: 0
|
||||
# 0 all 1 french 2 english etc
|
||||
lang: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
# imdb search not supported and imdb links not in results.
|
||||
|
||||
rows:
|
||||
selector: table.border_table > tbody > tr.t-row
|
||||
@@ -192,13 +197,13 @@
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Taille : </b>(.*?)<br"
|
||||
args: "Taille : </b>(.*?)<br"
|
||||
date:
|
||||
selector: a[onmouseover][href^="torrents-details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: " Le : </b>(.*?)<br"
|
||||
args: " Le : </b>(.*?)<br"
|
||||
- name: dateparse
|
||||
args: "02-01-2006"
|
||||
downloadvolumefactor:
|
||||
@@ -206,6 +211,5 @@
|
||||
img[src="images/Torrents/free.png"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
# TT3.0
|
||||
text: 1
|
||||
# TT3.0
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: crnaberza
|
||||
name: CrnaBerza
|
||||
description: "Crna Berza is a BALKAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
@@ -100,15 +100,17 @@
|
||||
search:
|
||||
paths:
|
||||
# http://www.crnaberza.com/browse.php?c52=1&c20=1&c34=1&incldead=1&search=star+trek
|
||||
- path: browse.php
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
searchin: title
|
||||
# 0 title 1 descr 2 both
|
||||
blah: 0
|
||||
# 0 active 1 incldead 2 onlydead
|
||||
incldead: 1
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
# does not support searching imdbid and does not return imdb links
|
||||
|
||||
rows:
|
||||
selector: tr:has(td.trowtorrent)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
site: cztorrent
|
||||
site: cztorrent
|
||||
name: CzTorrent
|
||||
description: "CzTorrent is a Czech Semi-Private site for TV / MOVIES / GENERAL"
|
||||
language: cs-cz
|
||||
@@ -22,7 +22,7 @@
|
||||
- {id: 38, cat: Movies/HD, desc: "HD-LQ"}
|
||||
- {id: 3, cat: PC/Games, desc: "Hry"}
|
||||
- {id: 2, cat: Audio, desc: "Hudba"}
|
||||
- {id: 34, cat: Audio/Video, desc: "Hudba DVD/HD"}
|
||||
- {id: 34, cat: Audio/Video, desc: "Hudební video"}
|
||||
- {id: 6, cat: Books, desc: "Knihy"}
|
||||
- {id: 13, cat: Console, desc: "Konzole"}
|
||||
- {id: 32, cat: Audio, desc: "Mluvené slovo"}
|
||||
@@ -30,7 +30,6 @@
|
||||
- {id: 4, cat: Other, desc: "Ostatní"}
|
||||
- {id: 25, cat: TV, desc: "Seriály"}
|
||||
- {id: 29, cat: Audio, desc: "Soundtrack"}
|
||||
- {id: 19, cat: Audio/Video, desc: "Videoklipy"}
|
||||
- {id: 24, cat: XXX, desc: "xXx"}
|
||||
|
||||
modes:
|
||||
@@ -74,12 +73,18 @@
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
s: "{{ .Keywords }}"
|
||||
# 0 approved 1 all 2 not approved
|
||||
t: 1
|
||||
o: "{{ .Config.sort }}"
|
||||
# does not support imdbid search and does not return imdb links
|
||||
|
||||
rows:
|
||||
selector: tr.torr_hover
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["S[0-9]{2}([^E]|$)", ""] # remove season tag without episode (search doesn't support it)
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: td.detaily a
|
||||
@@ -89,17 +94,17 @@
|
||||
- name: diacritics
|
||||
args: replace
|
||||
- name: replace
|
||||
args: ["1080i", "1080p"]
|
||||
args: ["1080i", "1080p"]
|
||||
- name: replace
|
||||
args: ["720i", "720p"]
|
||||
args: ["720i", "720p"]
|
||||
- name: replace
|
||||
args: ["pLQ", "p"]
|
||||
args: ["pLQ", "p"]
|
||||
- name: replace
|
||||
args: ["pHD", "p"]
|
||||
args: ["pHD", "p"]
|
||||
- name: replace
|
||||
args: ["serie", ""]
|
||||
args: ["serie", ""]
|
||||
- name: replace
|
||||
args: ["Serie", ""]
|
||||
args: ["Serie", ""]
|
||||
- name: re_replace
|
||||
args: ["(\\d{2})\\.", "S$1"]
|
||||
- name: re_replace
|
||||
@@ -148,7 +153,7 @@
|
||||
args: [ "|", 2 ]
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
- name: dateparse
|
||||
args: "2.1.2006 15:04 -07:00"
|
||||
seeders:
|
||||
selector: td:nth-child(7) span
|
||||
|
275
src/Jackett.Common/Definitions/dark-shadow.yml
Normal file
275
src/Jackett.Common/Definitions/dark-shadow.yml
Normal file
@@ -0,0 +1,275 @@
|
||||
---
|
||||
site: dark-shadow
|
||||
name: Dark-Shadow
|
||||
description: "Dark-Shadow is a German Private site for TV / MOVIES / GENERAL"
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://dark-shadow.me/
|
||||
legacylinks:
|
||||
- https://dark-shadow.ml/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Film
|
||||
- {id: 32, cat: Movies/HD, desc: "Film HD"}
|
||||
- {id: 28, cat: Movies/SD, desc: "Film SD"}
|
||||
- {id: 119, cat: Movies/DVD, desc: "Film DVD"}
|
||||
- {id: 114, cat: Movies/UHD, desc: "Film 4K/2160p"}
|
||||
- {id: 26, cat: Movies/3D, desc: "Film 3D"}
|
||||
# Serien
|
||||
- {id: 57, cat: TV/HD, desc: "Serien HD"}
|
||||
- {id: 60, cat: TV/SD, desc: "Serien SD"}
|
||||
- {id: 59, cat: TV, desc: "Serien Pack"}
|
||||
- {id: 122, cat: TV, desc: "Serien Show"}
|
||||
- {id: 123, cat: TV/Documentary, desc: "Serien Doku"}
|
||||
# Doku
|
||||
- {id: 14, cat: TV/Documentary, desc: "Doku HD"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "Doku SD"}
|
||||
# Spiele
|
||||
- {id: 17, cat: PC/Games, desc: "Spiele PC"}
|
||||
- {id: 24, cat: Console, desc: "Spiele Konsole"}
|
||||
- {id: 121, cat: Console, desc: "Spiele Wimmelbild"}
|
||||
- {id: 126, cat: Console/Other, desc: "Spiele Mobil"}
|
||||
# Musik
|
||||
- {id: 110, cat: Audio/MP3, desc: "Musik MP3"}
|
||||
- {id: 52, cat: Audio, desc: "Musik Pack"}
|
||||
- {id: 48, cat: Audio/Lossless, desc: "Musik Flac"}
|
||||
- {id: 120, cat: Audio/Video, desc: "Musik Video"}
|
||||
# App
|
||||
- {id: 12, cat: PC/0day, desc: "App PC"}
|
||||
- {id: 125, cat: PC/Mac, desc: "App MacOS"}
|
||||
- {id: 11, cat: PC/Phone-Other, desc: "App Mobil"}
|
||||
# Sport
|
||||
- {id: 61, cat: TV/Sport, desc: "Sport HD"}
|
||||
- {id: 62, cat: TV/Sport, desc: "Sport SD"}
|
||||
# Internal
|
||||
- {id: 128, cat: Movies/HD, desc: "Internal Film HD"}
|
||||
- {id: 129, cat: Movies/SD, desc: "Internal Film SD"}
|
||||
- {id: 130, cat: TV/HD, desc: "Internal Serien HD"}
|
||||
- {id: 131, cat: TV/SD, desc: "Internal Serien SD"}
|
||||
- {id: 132, cat: Other, desc: "Internal Sonstiges"}
|
||||
# Sonstiges
|
||||
- {id: 64, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 96, cat: Books/Ebook, desc: "e-Book"}
|
||||
- {id: 63, cat: Audio/Audiobook, desc: "Hörbuch"}
|
||||
- {id: 71, cat: Other, desc: "Anderes"}
|
||||
# XXX
|
||||
- {id: 73, cat: XXX/x264, desc: "XXX HD"}
|
||||
- {id: 75, cat: XXX/Packs, desc: "XXX Pack"}
|
||||
- {id: 76, cat: XXX/XviD, desc: "XXX SD"}
|
||||
- {id: 124, cat: XXX/Other, desc: "XXX Clips"}
|
||||
|
||||
modes:
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: info_pin
|
||||
type: info
|
||||
label: About Pin
|
||||
default: If you have not set a Pin for your account then leave this box empty.
|
||||
- name: pin
|
||||
type: text
|
||||
label: Pin
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "added"
|
||||
options:
|
||||
"added": "created"
|
||||
"seeds": "seeders"
|
||||
"size": "size"
|
||||
"name": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "desc"
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="/login.php"]
|
||||
cookies: ["JAVA=OK"] # avoid jscheck redirect
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[src^="cap/captcha_math.php"]
|
||||
input: stringCaptcha
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
pin: "{{ .Config.pin }}"
|
||||
error:
|
||||
- selector: div#login_error
|
||||
test:
|
||||
path: selection.php
|
||||
|
||||
download:
|
||||
before:
|
||||
path: ajax_det_poll.php
|
||||
method: "post"
|
||||
inputs:
|
||||
set_thanks: "thanks"
|
||||
det_id: "{{ .DownloadUri.Query.torrent }}"
|
||||
ajax: "yes"
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: selection.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# 0 name 1 descr 2 both 4 imdb
|
||||
blah: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
orderby: "{{ .Config.sort }}"
|
||||
sort: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: div.selection_wrap
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: div.kat_cat_pic
|
||||
case:
|
||||
# Movies
|
||||
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"4K/2160p\"))": "114"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"DVD\"))": "119"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "32"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "28"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"3D\"))": "26"
|
||||
# Serien
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "60"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "57"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "59"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Show\"))": "122"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Doku\"))": "123"
|
||||
# Musik
|
||||
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"Flac\"))": "48"
|
||||
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"MP3\"))": "110"
|
||||
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "52"
|
||||
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"Videos\"))": "120"
|
||||
# Doku
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "15"
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "14"
|
||||
# Games
|
||||
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "17"
|
||||
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"Wimmelbild\"))": "121"
|
||||
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"Konsole\"))": "24"
|
||||
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"Mobil\"))": "126"
|
||||
# App
|
||||
":has(div.kat_cat_pic_name:contains(\"App\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "12"
|
||||
":has(div.kat_cat_pic_name:contains(\"App\")):has(div.kat_cat_pic_name_b:contains(\"MacOS\"))": "125"
|
||||
":has(div.kat_cat_pic_name:contains(\"App\")):has(div.kat_cat_pic_name_b:contains(\"Mobil\"))": "11"
|
||||
# Sport
|
||||
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "62"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "61"
|
||||
# Sonstiges
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Anime\"))": "64"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"E-Book\"))": "96"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Hörbuch\"))": "63"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Other\"))": "71"
|
||||
# XXX
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "76"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "73"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "75"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Clips\"))": "124"
|
||||
# Internal
|
||||
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Film HD\"))": "128"
|
||||
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Film SD\"))": "129"
|
||||
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Serien HD\"))": "130"
|
||||
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Serien SD\"))": "131"
|
||||
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Sonstiges\"))": "132"
|
||||
title:
|
||||
selector: a.selection_a
|
||||
details:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?torrent="]
|
||||
banner:
|
||||
selector: div[id^="details"] img
|
||||
attribute: src
|
||||
optional: true
|
||||
imdb:
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
optional: true
|
||||
size:
|
||||
selector: div.selection_unter_ad
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
selector: div.selection_unter_ae
|
||||
filters:
|
||||
- name: trim
|
||||
args: "x"
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
# 2 flavours of dates
|
||||
date:
|
||||
# Heute 13:30:04
|
||||
# Gestern 09:10:10
|
||||
selector: div.selection_unter_ab:not(:contains("."))
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Heute", "Today"]
|
||||
- name: replace
|
||||
args: ["Gestern", "Yesterday"]
|
||||
date:
|
||||
# 30.02.2018 um 23:12:50
|
||||
selector: div.selection_unter_ab:contains(".")
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" um", ""]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
description:
|
||||
selector: selection_unter_af
|
||||
optional: true
|
||||
seeders:
|
||||
selector: div.selection_unter_aa
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
leechers:
|
||||
selector: div.selection_unter_aaa
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
":root:has(div.onlyup)": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
text: 172800 # 2 day (48h)
|
||||
# Engine tbd
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: datascene
|
||||
name: DataScene
|
||||
description: "DataScene (DS) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
@@ -54,9 +54,33 @@
|
||||
- {id: 12, cat: XXX, desc: "XxX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
movie-search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "4"
|
||||
options:
|
||||
"4": "created"
|
||||
"7": "seeders"
|
||||
"5": "size"
|
||||
"1": "title"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "desc"
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
@@ -68,7 +92,7 @@
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
|
||||
ratio:
|
||||
path: browse.php
|
||||
selector: font:contains("Ratio:") > span
|
||||
@@ -77,9 +101,14 @@
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
incldead: 1
|
||||
$raw: "{{ if .Categories}}{{ range .Categories }}c{{.}}=1&{{end}}{{else}}cat=0{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# 1 active 2 incldead 3 onlydead 4 free
|
||||
incldead: 2
|
||||
# 0 name 1 genre 2 descr 3 imdb
|
||||
blah: "{{ if .Query.IMDBID }}3{{else}}0{{end}}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: div.ncls > table > tbody > tr:has(a.tname)
|
||||
|
@@ -26,9 +26,9 @@
|
||||
- {id: 8, cat: TV, desc: "TV shows"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
@@ -69,10 +69,14 @@
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
# active 1 incldead 2 onlydead
|
||||
incldead: 1
|
||||
# 1 = look in description
|
||||
Lysing: "{{ if .Query.IMDBID }}1{{else}}{{end}}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
# does not return imdb links
|
||||
|
||||
rows:
|
||||
selector: table[class="torrentlist"] > tbody > tr:has(a[href*="details.php?id="])
|
||||
|
@@ -5,13 +5,21 @@
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.demonoid.is/
|
||||
- https://demonoid.unblockit.pro/
|
||||
- https://dnoid.black-mirror.xyz/
|
||||
- https://dnoid.unblocked.casa/
|
||||
- https://dnoid.proxyportal.fun/
|
||||
- https://dnoid.uk-unblock.xyz/
|
||||
- https://dnoid.ind-unblock.xyz/
|
||||
legacylinks:
|
||||
- https://www.dnoid.to/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# fetch these from https://www.demonoid.is/cached/torrent_categories_script.js?v5
|
||||
# Applications
|
||||
- {id: 1, cat: PC/Phone-Android, desc: "Applications Android"}
|
||||
- {id: 2, cat: PC/Phone-IOS, desc: "Applications Iphone / Ipod touch"}
|
||||
@@ -129,6 +137,7 @@
|
||||
- {id: 108, cat: TV/Anime, desc: "Anime Horror"}
|
||||
- {id: 109, cat: TV/Anime, desc: "Anime Other"}
|
||||
- {id: 157, cat: TV/Anime, desc: "Anime Romance"}
|
||||
- {id: 158, cat: TV/Anime, desc: "Anime Sci-Fi"}
|
||||
# Movies
|
||||
- {id: 151, cat: Movies, desc: "Movies Action"}
|
||||
- {id: 110, cat: Movies, desc: "Movies Adventure"}
|
||||
@@ -258,14 +267,21 @@
|
||||
- {id: 233, cat: TV, desc: "TV Trailers"}
|
||||
- {id: 234, cat: TV, desc: "TV War"}
|
||||
- {id: 235, cat: TV, desc: "TV Western"}
|
||||
# cat misc has no subcats
|
||||
# cat 7 misc has no subcats
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Access this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -282,14 +298,19 @@
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
test:
|
||||
path: files/
|
||||
|
||||
download:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://www.demonoid.is/files/?c154&language=0&quality=0&seeded=2&query=world&to=on&sort=
|
||||
# https://www.demonoid.is/files/?seeded=2&language=0&quality=0&to=on&query=world
|
||||
# https://www.demonoid.is/files/?c154&language=0&quality=0&seeded=2&query=world&to=1&sort=
|
||||
# https://www.demonoid.is/files/?seeded=2&language=0&quality=0&to=1&query=world
|
||||
- path: files/
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}&{{end}}"
|
||||
@@ -300,10 +321,11 @@
|
||||
# 0 all
|
||||
quality: 0
|
||||
# search in titles only
|
||||
to: on
|
||||
query: "{{ .Keywords }}"
|
||||
to: "{{ if .Query.IMDBID }}{{else}}1{{end}}"
|
||||
query: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
# does not return imdb link in results
|
||||
|
||||
rows:
|
||||
selector: table.font_12px tr:has(td[class^="tone_1"])
|
||||
@@ -324,7 +346,7 @@
|
||||
optional: true
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href*="&subcategory="]
|
||||
selector: span > a[href*="&subcategory="]
|
||||
attribute: href
|
||||
optional: true
|
||||
filters:
|
||||
|
169
src/Jackett.Common/Definitions/demonsite.yml
Normal file
169
src/Jackett.Common/Definitions/demonsite.yml
Normal file
@@ -0,0 +1,169 @@
|
||||
---
|
||||
site: demonsite
|
||||
name: Demon-Site
|
||||
description: "Demon-Site is a HUNGARIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://demon-site.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 6, cat: Movies/BluRay, desc: "Film/BDRip/Eng"}
|
||||
- {id: 5, cat: Movies/BluRay, desc: "Film/BDRip/Hun"}
|
||||
- {id: 4, cat: Movies/SD, desc: "Film/Cam/Eng"}
|
||||
- {id: 3, cat: Movies/SD, desc: "Film/Cam/Hun"}
|
||||
- {id: 8, cat: Movies/DVD, desc: "Film/DVD/Eng"}
|
||||
- {id: 7, cat: Movies/DVD, desc: "Film/DVD/Hun"}
|
||||
- {id: 10, cat: Movies/DVD, desc: "Film/DVD9/Eng"}
|
||||
- {id: 9, cat: Movies/DVD, desc: "Film/DVD9/Hun"}
|
||||
- {id: 12, cat: Movies/HD, desc: "Film/HD/Eng"}
|
||||
- {id: 11, cat: Movies/HD, desc: "Film/HD/Hun"}
|
||||
- {id: 2, cat: Movies/SD, desc: "Film/XviD/Eng"}
|
||||
- {id: 1, cat: Movies/SD, desc: "Film/XviD/Hun"}
|
||||
- {id: 18, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 19, cat: PC/Games, desc: "Játék/Rip"}
|
||||
- {id: 23, cat: Books, desc: "Könyv/Eng"}
|
||||
- {id: 22, cat: Books, desc: "Könyv/Hun"}
|
||||
- {id: 24, cat: Other, desc: "Képek"}
|
||||
- {id: 20, cat: Console, desc: "Konzol"}
|
||||
- {id: 21, cat: PC/Phone-Other, desc: "Mobil"}
|
||||
- {id: 16, cat: Audio, desc: "Mp3/Eng"}
|
||||
- {id: 15, cat: Audio, desc: "Mp3/Hun"}
|
||||
- {id: 17, cat: PC/0day, desc: "Program"}
|
||||
- {id: 14, cat: TV, desc: "Sorozat/Eng"}
|
||||
- {id: 13, cat: TV, desc: "Sorozat/Hun"}
|
||||
- {id: 25, cat: XXX, desc: "XXX/Film"}
|
||||
- {id: 26, cat: XXX, desc: "XXX/Kép"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: 2facode
|
||||
type: text
|
||||
label: 2FA code
|
||||
- name: info_2fa
|
||||
type: info
|
||||
label: "About 2FA code"
|
||||
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the Demon-Site Web Site. Otherwise just leave it empty."
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: "4"
|
||||
options:
|
||||
"1": "name"
|
||||
"5": "size"
|
||||
"4": "added"
|
||||
"7": "seeders"
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: "desc"
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
code: "{{ .Config.2facode }}"
|
||||
error:
|
||||
- selector: td.embedded:contains("Hiba")
|
||||
message:
|
||||
selector: table[cellpadding="5"] tr:last-child td
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href^="logout.php?k="]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://demon-site.eu/browse.php?c25=1&c26=1&search=&incldead=1
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 active 1 both 2 dead 3 myupload 4 notseeded
|
||||
incldead: 1
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
# does not support imdbid searches
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr:has(a[href^="download.php?torrent="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Név:\\s*(.+?)\\s*Első név:"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?torrent="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a.preview
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05"
|
||||
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)
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
optional: true
|
||||
selector: img[src="skin/sotet/arrowdown.png"] ~ span
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
optional: true
|
||||
selector: img[src="skin/sotet/arrowup.png"] ~ span
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
# engine n/a
|
@@ -17,7 +17,7 @@
|
||||
- {id: 5, cat: Console, desc: "Game"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -48,17 +48,20 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: script[nonce]:contains("Error")
|
||||
message:
|
||||
selector: script[nonce]:contains("Error")
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
- selector: div#ERROR_COPY
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
@@ -133,7 +136,7 @@
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: divteam
|
||||
name: DivTeam
|
||||
description: "DivTeam is a SPANISH Private Torrent Tracker for MOVIES / GENERAL"
|
||||
@@ -12,7 +12,7 @@
|
||||
categorymappings:
|
||||
- {id: 60, cat: Movies/HD, desc: "MicroHD 720p"}
|
||||
- {id: 77, cat: Movies/HD, desc: "MicroHD 1080p"}
|
||||
- {id: 78, cat: Movies/HD, desc: "MicroHD 4k"}
|
||||
- {id: 78, cat: Movies/HD, desc: "MicroHD 4K"}
|
||||
- {id: 64, cat: TV/HD, desc: "Pack Series"}
|
||||
- {id: 65, cat: TV/HD, desc: "Pack Series VOSE"}
|
||||
- {id: 80, cat: Movies/BluRay, desc: "BDRip X265 1080p"}
|
||||
@@ -43,13 +43,13 @@
|
||||
- {id: 48, cat: Movies/BluRay, desc: "BR-Rip/HD-Rip"}
|
||||
- {id: 17, cat: Movies/BluRay, desc: "BD-Rip"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 34, cat: PC/Games, desc: "Juegos Pc"}
|
||||
- {id: 7, cat: PC/0day, desc: "Software Pc"}
|
||||
- {id: 34, cat: PC/Games, desc: "Juegos PC"}
|
||||
- {id: 7, cat: PC/0day, desc: "Software PC"}
|
||||
- {id: 35, cat: Console, desc: "Juegos Sony"}
|
||||
- {id: 36, cat: PC/Games, desc: "Juegos Microsoft"}
|
||||
- {id: 37, cat: Console/NDS, desc: "Juegos Nintendo"}
|
||||
- {id: 45, cat: Audio/MP3, desc: "Music MP3"}
|
||||
- {id: 44, cat: Audio/Lossless, desc: "Music flac"}
|
||||
- {id: 44, cat: Audio/Lossless, desc: "Music FLAC"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -63,7 +63,7 @@
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -84,7 +84,7 @@
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
@@ -99,11 +99,14 @@
|
||||
inputs:
|
||||
page: "torrents"
|
||||
category: "{{ range .Categories }}{{.}};{{end}}"
|
||||
search: "{{ if .Keywords }}{{ .Keywords }}{{else}}{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 all 1 activeonly 2 deadonly
|
||||
active: 0
|
||||
# 0 title 1 title&desc 2 descr 3 uploaders 5 gold 6 silver 9 2x 10 3x 11 4x
|
||||
options: 0
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
# does not support imdbid search and does not supply imdb link in results.
|
||||
|
||||
rows:
|
||||
selector: table.table.table-bordered > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: documentarytorrents
|
||||
name: DocumentaryTorrents
|
||||
description: "Documentary Torrents (DT) is a Private Torrent Tracker for E-LEARNING MOVIES / TV"
|
||||
@@ -74,7 +74,8 @@
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
@@ -88,7 +89,7 @@
|
||||
label: Sort requested from site
|
||||
default: "id"
|
||||
options:
|
||||
"is": "created"
|
||||
"id": "created"
|
||||
"seeders": "seeders"
|
||||
"size": "size"
|
||||
"name": "title"
|
||||
@@ -125,11 +126,15 @@
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
cat: 0
|
||||
# 0 active 1 incldead 2 onlydead
|
||||
incldead: 1
|
||||
# 0 all 1 notfree 2 onlyfree
|
||||
freeleech: 0
|
||||
# 0 all 1 english 2 french etc
|
||||
lang: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
# does not support imdbid search and does not return imdb link in results
|
||||
|
||||
rows:
|
||||
selector: table.ttable_headinner tr.t-row
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: downloadville
|
||||
name: Downloadville
|
||||
description: "Downloadville is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
@@ -14,68 +14,70 @@
|
||||
categorymappings:
|
||||
# Films
|
||||
- {id: 1, cat: Movies, desc: "Films"}
|
||||
- {id: 13, cat: Movies, desc: "Films BD-Rip / BRRip"}
|
||||
- {id: 15, cat: Movies, desc: "Films DVD-Rip"}
|
||||
- {id: 18, cat: Movies, desc: "Films HD 720p"}
|
||||
- {id: 19, cat: Movies, desc: "Films WEB-DL / WEB-Rip"}
|
||||
- {id: 20, cat: Movies, desc: "Films HD 1080p"}
|
||||
- {id: 26, cat: Movies, desc: "Films mHD 720p"}
|
||||
- {id: 27, cat: Movies, desc: "Films mHD 1080p"}
|
||||
- {id: 28, cat: Movies, desc: "Films x265"}
|
||||
- {id: 30, cat: Movies, desc: "Films Blu-Ray (complet)"}
|
||||
- {id: 31, cat: Movies, desc: "Films 3D"}
|
||||
- {id: 32, cat: Movies, desc: "Films 4K UHD"}
|
||||
- {id: 33, cat: Movies, desc: "Films Québécois SD"}
|
||||
- {id: 34, cat: Movies, desc: "Films Québécois HD"}
|
||||
- {id: 35, cat: Movies, desc: "Films Québécois DVD-R"}
|
||||
- {id: 37, cat: Movies, desc: "Films DVD-R"}
|
||||
- {id: 38, cat: Movies, desc: "Films V.O.S.T. SD"}
|
||||
- {id: 39, cat: Movies, desc: "Films V.O.S.T. HD"}
|
||||
- {id: 40, cat: Movies, desc: "Films V.O. SD"}
|
||||
- {id: 41, cat: Movies, desc: "Films V.O. HD"}
|
||||
- {id: 13, cat: Movies/BluRay, desc: "Films BD-Rip / BRRip"}
|
||||
- {id: 15, cat: Movies/DVD, desc: "Films DVD-Rip"}
|
||||
- {id: 18, cat: Movies/HD, desc: "Films HD 720p"}
|
||||
- {id: 19, cat: Movies/WEBDL, desc: "Films WEB-DL / WEB-Rip"}
|
||||
- {id: 20, cat: Movies/HD, desc: "Films HD 1080p"}
|
||||
- {id: 26, cat: Movies/HD, desc: "Films mHD 720p"}
|
||||
- {id: 27, cat: Movies/HD, desc: "Films mHD 1080p"}
|
||||
- {id: 28, cat: Movies/HD, desc: "Films x265"}
|
||||
- {id: 30, cat: Movies/BluRay, desc: "Films Blu-Ray (complet)"}
|
||||
- {id: 31, cat: Movies/3D, desc: "Films 3D"}
|
||||
- {id: 32, cat: Movies/UHD, desc: "Films 4K UHD"}
|
||||
- {id: 33, cat: Movies/SD, desc: "Films Québécois SD"}
|
||||
- {id: 34, cat: Movies/HD, desc: "Films Québécois HD"}
|
||||
- {id: 35, cat: Movies/DVD, desc: "Films Québécois DVD-R"}
|
||||
- {id: 37, cat: Movies/DVD, desc: "Films DVD-R"}
|
||||
- {id: 38, cat: Movies/SD, desc: "Films V.O.S.T. SD"}
|
||||
- {id: 39, cat: MovieS/HD, desc: "Films V.O.S.T. HD"}
|
||||
- {id: 40, cat: Movies/SD, desc: "Films V.O. SD"}
|
||||
- {id: 41, cat: Movies/HD, desc: "Films V.O. HD"}
|
||||
- {id: 42, cat: Movies, desc: "Films TV-Rip"}
|
||||
# 4K LIGHT
|
||||
- {id: 95, cat: Movies, desc: "4K LIGHT"}
|
||||
# Séries-Télé
|
||||
- {id: 16, cat: TV, desc: "Séries-Télé"}
|
||||
- {id: 17, cat: TV, desc: "Séries-Télé TV Pack SD"}
|
||||
- {id: 21, cat: TV, desc: "Séries-Télé SD"}
|
||||
- {id: 22, cat: TV, desc: "Séries-Télé HD"}
|
||||
- {id: 23, cat: TV, desc: "Séries-Télé TV Pack HD"}
|
||||
- {id: 45, cat: TV, desc: "Séries-Télé Québécois SD"}
|
||||
- {id: 46, cat: TV, desc: "Séries-Télé Québécois HD"}
|
||||
- {id: 47, cat: TV, desc: "Séries-Télé V.O.S.T. SD"}
|
||||
- {id: 48, cat: TV, desc: "Séries-TéléV.O.S.T. HD"}
|
||||
- {id: 49, cat: TV, desc: "Séries-Télé Émissions TV SD"}
|
||||
- {id: 50, cat: TV, desc: "Séries-Télé Émissions TV HD"}
|
||||
- {id: 17, cat: TV/SD, desc: "Séries-Télé TV Pack SD"}
|
||||
- {id: 21, cat: TV/SD, desc: "Séries-Télé SD"}
|
||||
- {id: 22, cat: TV/HD, desc: "Séries-Télé HD"}
|
||||
- {id: 23, cat: TV/HD, desc: "Séries-Télé TV Pack HD"}
|
||||
- {id: 45, cat: TV/SD, desc: "Séries-Télé Québécois SD"}
|
||||
- {id: 46, cat: TV/HD, desc: "Séries-Télé Québécois HD"}
|
||||
- {id: 47, cat: TV/SD, desc: "Séries-Télé V.O.S.T. SD"}
|
||||
- {id: 48, cat: TV/HD, desc: "Séries-TéléV.O.S.T. HD"}
|
||||
- {id: 49, cat: TV/SD, desc: "Séries-Télé Émissions TV SD"}
|
||||
- {id: 50, cat: TV/HD, desc: "Séries-Télé Émissions TV HD"}
|
||||
- {id: 51, cat: TV, desc: "Séries-Télé Blu-Ray"}
|
||||
- {id: 52, cat: TV, desc: "Séries-Télé DVD-R"}
|
||||
- {id: 94, cat: TV, desc: "Séries-Télé x265 - TV"}
|
||||
- {id: 94, cat: TV/HD, desc: "Séries-Télé x265 - TV"}
|
||||
# Musique
|
||||
- {id: 2, cat: Audio, desc: "Musique"}
|
||||
- {id: 54, cat: Audio, desc: "Musique MP3"}
|
||||
- {id: 55, cat: Audio, desc: "Musique FLAC"}
|
||||
- {id: 54, cat: Audio/MP3, desc: "Musique MP3"}
|
||||
- {id: 55, cat: Audio/Lossless, desc: "Musique FLAC"}
|
||||
- {id: 56, cat: Audio, desc: "Musique DSD"}
|
||||
- {id: 57, cat: Audio, desc: "Musique Karaoke"}
|
||||
- {id: 58, cat: Audio, desc: "Musique Autres"}
|
||||
# Jeux
|
||||
- {id: 3, cat: PC/Games, desc: "Jeux"}
|
||||
- {id: 59, cat: PC/Games, desc: "Jeux PC"}
|
||||
- {id: 60, cat: PC/Games, desc: "Jeux Consoles"}
|
||||
- {id: 60, cat: Console, desc: "Jeux Consoles"}
|
||||
- {id: 84, cat: PC/Games, desc: "Jeux Android"}
|
||||
# Livres
|
||||
- {id: 6, cat: Books, desc: "Livres"}
|
||||
- {id: 61, cat: Books, desc: "Livres epub"}
|
||||
- {id: 61, cat: Books/Ebook, desc: "Livres epub"}
|
||||
- {id: 62, cat: Books, desc: "Livres pdf"}
|
||||
- {id: 63, cat: Books, desc: "Livres Journaux"}
|
||||
- {id: 64, cat: Books, desc: "Livres Magazines"}
|
||||
- {id: 64, cat: Books/Magazines, desc: "Livres Magazines"}
|
||||
- {id: 65, cat: Books, desc: "Livres Bandes Dessinées"}
|
||||
- {id: 66, cat: Books, desc: "Livres Multi-Format"}
|
||||
- {id: 85, cat: Books, desc: "Livres Audio"}
|
||||
- {id: 85, cat: Audio/Audiobook, desc: "Livres Audio"}
|
||||
# Logiciels
|
||||
- {id: 67, cat: PC, desc: "Logiciels"}
|
||||
- {id: 68, cat: PC, desc: "Logiciels Windows"}
|
||||
- {id: 69, cat: PC, desc: "Logiciels Mac"}
|
||||
- {id: 68, cat: PC/0day, desc: "Logiciels Windows"}
|
||||
- {id: 69, cat: PC/Mac, desc: "Logiciels Mac"}
|
||||
- {id: 86, cat: PC, desc: "Logiciels Linux"}
|
||||
- {id: 87, cat: PC, desc: "Logiciels Android"}
|
||||
- {id: 87, cat: PC/Phone-Android, desc: "Logiciels Android"}
|
||||
# Spectacles
|
||||
- {id: 70, cat: TV/Other, desc: "Spectacles"}
|
||||
- {id: 71, cat: TV/Other, desc: "Spectacles Humour"}
|
||||
@@ -138,7 +140,7 @@
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH : "FRENCH"
|
||||
MULTI.FRENCH : "MULTI.FRENCH"
|
||||
MULTI.FRENCH : "MULTI.FRENCH"
|
||||
ENGLISH: "ENGLISH"
|
||||
- name: sort
|
||||
type: select
|
||||
@@ -169,7 +171,7 @@
|
||||
uid: "{{ .Config.uid }}"
|
||||
pwd: "{{ .Config.pwd }}"
|
||||
error:
|
||||
- selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td
|
||||
- selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td
|
||||
message:
|
||||
selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td span
|
||||
test:
|
||||
@@ -190,15 +192,19 @@
|
||||
search:
|
||||
paths:
|
||||
- path: tracker/index.php
|
||||
headers:
|
||||
Referer: ["https://downloadville.net/tracker/index.php?page=torrents&search=fake_referer&active=0"]
|
||||
inputs:
|
||||
page: torrents
|
||||
search: "{{ .Keywords }}"
|
||||
category: "{{ range .Categories }}{{.}};{{end}}"
|
||||
# 0 title 1 title&descr 2 descr
|
||||
options: 0
|
||||
active: "{{ .Config.active }}"
|
||||
gold: "{{ .Config.gold }}"
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
# does not support imdbid search and does not ruturn imdb link in results
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr > td > table.lista > tbody > tr:has(td[onmouseover="this.className='post'"])
|
||||
@@ -210,7 +216,7 @@
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["[\\.\\s\\[\\-][Mm][Uu][Ll][Tt][Ii][\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
|
||||
args: ["[\\.\\s\\[\\-][Mm][Uu][Ll][Tt][Ii][\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
|
||||
title:
|
||||
text: "{{if .Config.multilang }}{{ .Result.title_multilang }}{{else}}{{ .Result.title_phase1 }}{{end}}"
|
||||
details:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: dragonworldreloaded
|
||||
name: Dragonworld Reloaded
|
||||
description: "Dragonworld Reloaded is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
|
@@ -24,7 +24,7 @@
|
||||
- {id: 12, cat: TV/Anime, desc: "Anime-Movie"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
search: [q, imdbid]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
@@ -55,17 +55,20 @@
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action$="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: on
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: input[name="_token"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: script[nonce]:contains("Error")
|
||||
message:
|
||||
selector: script[nonce]:contains("Error")
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
- selector: div#ERROR_COPY
|
||||
# test:
|
||||
# path: /
|
||||
# selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
@@ -140,7 +143,7 @@
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese
|
||||
- name: re_replace
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前)", " ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
|
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: ebookparadijs
|
||||
name: EbookParadijs
|
||||
description: "EbookParadijs is a DUTCH Private Tracker for EBOOKS"
|
||||
|
@@ -283,6 +283,10 @@
|
||||
options:
|
||||
"desc": "desc"
|
||||
"asc": "asc"
|
||||
- name: info_results
|
||||
type: info
|
||||
label: Search results
|
||||
default: "If you are not getting results, then access the site with your browser and mark as read all PMs."
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
@@ -352,4 +356,4 @@
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
"*": 1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user