mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2025-12-28 02:00:34 -05:00
Compare commits
972 Commits
feature/pr
...
4.5.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6864810ace | ||
|
|
bae55636a8 | ||
|
|
f4778abd1f | ||
|
|
2cb716ce26 | ||
|
|
3246e9c6d4 | ||
|
|
18d84fa522 | ||
|
|
7a7e7b7b93 | ||
|
|
18ca9d6155 | ||
|
|
f5aa0f52d6 | ||
|
|
5a93074f4b | ||
|
|
3863d6bd2f | ||
|
|
753d1e3bd3 | ||
|
|
5393b6330e | ||
|
|
2d8be8d89b | ||
|
|
08723f0432 | ||
|
|
1e1220c509 | ||
|
|
ae6d5f54bd | ||
|
|
bd95c29866 | ||
|
|
c6920e09bf | ||
|
|
74d2a9f7c4 | ||
|
|
31c9c64741 | ||
|
|
96e7999b4f | ||
|
|
5303b9d291 | ||
|
|
91af147b8b | ||
|
|
33463a3fd1 | ||
|
|
ac88446757 | ||
|
|
d129eec4a7 | ||
|
|
9b1b908115 | ||
|
|
5866c029c4 | ||
|
|
de6a6a084e | ||
|
|
139489e5b3 | ||
|
|
a91f72a7f4 | ||
|
|
f5fd4c1c18 | ||
|
|
3da67dc4af | ||
|
|
0220d886c5 | ||
|
|
19ea25f072 | ||
|
|
d934c588ad | ||
|
|
ccb036ba37 | ||
|
|
3d1c5c82d1 | ||
|
|
d37532a4eb | ||
|
|
143851d1cb | ||
|
|
235dd32ad0 | ||
|
|
0b295d7b57 | ||
|
|
a4020ed085 | ||
|
|
af1e5e0c1d | ||
|
|
a3fffea9f9 | ||
|
|
074eed16e1 | ||
|
|
180bc30ea5 | ||
|
|
f6b21680f8 | ||
|
|
f6b65a4d1a | ||
|
|
4662bb8129 | ||
|
|
3b72a005fd | ||
|
|
afb9a4758f | ||
|
|
35c180216b | ||
|
|
f0c6fe5786 | ||
|
|
e2f613da6c | ||
|
|
d4874970cd | ||
|
|
bd8c245b83 | ||
|
|
effc7265d4 | ||
|
|
80268c4068 | ||
|
|
e2811f93b1 | ||
|
|
f8190e28c9 | ||
|
|
7eb460ba1f | ||
|
|
fe647284e7 | ||
|
|
bd9a8e5c33 | ||
|
|
c55d662e1f | ||
|
|
dbfabc1d80 | ||
|
|
54fe887636 | ||
|
|
2604775e5c | ||
|
|
a15bad6fb4 | ||
|
|
58c060c39d | ||
|
|
6ecd0a8561 | ||
|
|
4a52289f05 | ||
|
|
104c0b20fe | ||
|
|
b8a3a264e3 | ||
|
|
b0e42940e5 | ||
|
|
4bc6fefa1f | ||
|
|
3ec8227745 | ||
|
|
9f6dc3df01 | ||
|
|
cadeae061f | ||
|
|
80c3226147 | ||
|
|
f2137e2fa3 | ||
|
|
9bf80a3745 | ||
|
|
750ee422a7 | ||
|
|
035559f1c3 | ||
|
|
4751f609bb | ||
|
|
40fde7a411 | ||
|
|
b27a7f6cf4 | ||
|
|
9006875d6c | ||
|
|
dd0122865a | ||
|
|
9a5f39ce99 | ||
|
|
545f75b456 | ||
|
|
e1553e86b6 | ||
|
|
c85ddd0595 | ||
|
|
5d763f52af | ||
|
|
2b842b2bc5 | ||
|
|
2a3e144ed6 | ||
|
|
52f09dbf55 | ||
|
|
6bce289c8f | ||
|
|
20bc8f0d06 | ||
|
|
966fe246f6 | ||
|
|
c4a84b3a31 | ||
|
|
e06f91c243 | ||
|
|
42c00dda84 | ||
|
|
e40d2980e7 | ||
|
|
b6a905be21 | ||
|
|
22800ae411 | ||
|
|
e8a4d95177 | ||
|
|
026a606e7f | ||
|
|
9551f9a3b9 | ||
|
|
f62e7ab560 | ||
|
|
92fbd75cc3 | ||
|
|
7de0869376 | ||
|
|
57606ef1bb | ||
|
|
318d3ff649 | ||
|
|
8953f4df4a | ||
|
|
7c607a6bf6 | ||
|
|
93c6d67ef8 | ||
|
|
a314d6ab71 | ||
|
|
62bb9b3816 | ||
|
|
2ef5cec5c5 | ||
|
|
c8e2329bee | ||
|
|
f0358d9f0a | ||
|
|
3f89114c73 | ||
|
|
721f5dfe86 | ||
|
|
ef38c1d7c8 | ||
|
|
fe88760600 | ||
|
|
d897936da5 | ||
|
|
f81a8c97c4 | ||
|
|
e93e01dd59 | ||
|
|
e498ef6302 | ||
|
|
b1c486fa2a | ||
|
|
d9aa42dc31 | ||
|
|
3ee0db8cff | ||
|
|
23cae4d073 | ||
|
|
79b504ff93 | ||
|
|
52dafd4ab8 | ||
|
|
2b45ba044e | ||
|
|
cd831d2775 | ||
|
|
0cc538ac5a | ||
|
|
4b99d04454 | ||
|
|
708fad33f3 | ||
|
|
c6dc25c9c2 | ||
|
|
07be38cd01 | ||
|
|
8c761ba67e | ||
|
|
0121e0ae16 | ||
|
|
07243290ec | ||
|
|
317a9c00de | ||
|
|
cc40214818 | ||
|
|
3b52379e56 | ||
|
|
8a2f8d969d | ||
|
|
6f9bf68528 | ||
|
|
5a48301d25 | ||
|
|
d1d3e27dea | ||
|
|
2f1805123a | ||
|
|
f05c82b3a7 | ||
|
|
1fe01f2724 | ||
|
|
a5239808eb | ||
|
|
00a7b4fffc | ||
|
|
0c5010f5c1 | ||
|
|
a8b33e7686 | ||
|
|
0294e01fae | ||
|
|
c2621f56eb | ||
|
|
ebac7707ff | ||
|
|
26adade8be | ||
|
|
dd9c7488c6 | ||
|
|
754b862a29 | ||
|
|
0ddf343bb7 | ||
|
|
7a8a45b811 | ||
|
|
66c525ef95 | ||
|
|
7cd3e50ded | ||
|
|
d5094e1aa6 | ||
|
|
bca9559783 | ||
|
|
0cbb8af7a0 | ||
|
|
afab90ca68 | ||
|
|
92ecfc4930 | ||
|
|
b064f112cd | ||
|
|
629da51be7 | ||
|
|
0fa0f7286c | ||
|
|
6cd8f3e333 | ||
|
|
ff18fe03e9 | ||
|
|
a1e30d19e3 | ||
|
|
3d74c19f41 | ||
|
|
33a831e87c | ||
|
|
7b04917f0e | ||
|
|
2f62b76279 | ||
|
|
bd43bca1cf | ||
|
|
d200f0a618 | ||
|
|
c5314569db | ||
|
|
001e215b7d | ||
|
|
3a628a0025 | ||
|
|
7e48207fbc | ||
|
|
48a6d6b289 | ||
|
|
21f05ad3d9 | ||
|
|
d93c861eb3 | ||
|
|
fb0ef21768 | ||
|
|
277679ef53 | ||
|
|
e7e47bbcb0 | ||
|
|
65ffb5ca81 | ||
|
|
6cf308e441 | ||
|
|
870fa40c91 | ||
|
|
39d9eaec2a | ||
|
|
6fd4d0882c | ||
|
|
32591f7c46 | ||
|
|
6b47d1126d | ||
|
|
53df39dd12 | ||
|
|
b5d33fc17c | ||
|
|
8a517b668e | ||
|
|
67135ba4c8 | ||
|
|
c9efda1889 | ||
|
|
250869c242 | ||
|
|
844650e6be | ||
|
|
6685c72894 | ||
|
|
154a5e4989 | ||
|
|
93d302c9d7 | ||
|
|
f664df7f05 | ||
|
|
8fbf50292b | ||
|
|
f3fed43022 | ||
|
|
2d323ba18c | ||
|
|
1ec30a56e1 | ||
|
|
b98f3a07dd | ||
|
|
46170ffb3d | ||
|
|
5e8b41be5a | ||
|
|
47a2d5387d | ||
|
|
1e61239933 | ||
|
|
aedbf35be8 | ||
|
|
cf9540842b | ||
|
|
9205b9161b | ||
|
|
07b64b4abb | ||
|
|
c56145e424 | ||
|
|
ef11aba166 | ||
|
|
fcf03e9a59 | ||
|
|
6662065bb1 | ||
|
|
4973672892 | ||
|
|
efa73a52e1 | ||
|
|
82098a6228 | ||
|
|
07250aa355 | ||
|
|
f24b3ced28 | ||
|
|
157dfc928d | ||
|
|
d10639542d | ||
|
|
c0f0b7eb31 | ||
|
|
d6d70325db | ||
|
|
46caa8b33f | ||
|
|
b0564c1bab | ||
|
|
3c8a85ff35 | ||
|
|
656c329912 | ||
|
|
983253908c | ||
|
|
cef0eeb25b | ||
|
|
46954165d2 | ||
|
|
58e7d520bf | ||
|
|
a4f8040324 | ||
|
|
8d5cc9a3e6 | ||
|
|
4592ce4d55 | ||
|
|
a9eace759f | ||
|
|
ad0e7bf5df | ||
|
|
bea348232a | ||
|
|
1519dbc554 | ||
|
|
b62b38b5af | ||
|
|
14b1d4630c | ||
|
|
297455cd35 | ||
|
|
56b68024db | ||
|
|
09aa09a55b | ||
|
|
f1d134fe2e | ||
|
|
621d586c2f | ||
|
|
4966f9c753 | ||
|
|
059d82f6f0 | ||
|
|
bca41db6b7 | ||
|
|
613ba0b05f | ||
|
|
5f3b03ed87 | ||
|
|
f6fe801000 | ||
|
|
8ff34660d8 | ||
|
|
0c1b8dd60a | ||
|
|
8e8ee7a3ab | ||
|
|
9145a90e33 | ||
|
|
02b4a116dd | ||
|
|
e504b288a2 | ||
|
|
5128f788f0 | ||
|
|
044fe7a26a | ||
|
|
4ed2565101 | ||
|
|
abbd77bac4 | ||
|
|
38c9a52e1d | ||
|
|
f89114ca7e | ||
|
|
773d567eed | ||
|
|
ee717b679e | ||
|
|
f50810fb58 | ||
|
|
08b1b20b34 | ||
|
|
edca79af83 | ||
|
|
dd5dcd0ec9 | ||
|
|
820824e443 | ||
|
|
4c2dfdee43 | ||
|
|
ece4437c3a | ||
|
|
74daa15ce4 | ||
|
|
4f81bc8a26 | ||
|
|
e77d15f75e | ||
|
|
8668852574 | ||
|
|
7e944f393e | ||
|
|
1646fbfd17 | ||
|
|
72b0521325 | ||
|
|
8aa53fd43f | ||
|
|
aa67edb2d9 | ||
|
|
0054b17f41 | ||
|
|
2af2cc7370 | ||
|
|
5aa7aafebb | ||
|
|
3bd0f7c1e0 | ||
|
|
9c8d21f6db | ||
|
|
4947effeb7 | ||
|
|
b8fd9e6e31 | ||
|
|
2a02c93e4b | ||
|
|
a0ef520e06 | ||
|
|
a9eb32eba6 | ||
|
|
592ef0e645 | ||
|
|
cce53ee058 | ||
|
|
93755aa6d8 | ||
|
|
8a42abd1e7 | ||
|
|
41e5dfdf18 | ||
|
|
b1d42c7c22 | ||
|
|
8286b7b830 | ||
|
|
fbaa3c0420 | ||
|
|
ba6c30cf24 | ||
|
|
3ce5679298 | ||
|
|
47e1d40943 | ||
|
|
1687130107 | ||
|
|
8e59146d60 | ||
|
|
4b37d2772f | ||
|
|
ea9d690a90 | ||
|
|
3a2e967a03 | ||
|
|
a2eb0cc2c3 | ||
|
|
8b9341023a | ||
|
|
54314c0198 | ||
|
|
b0e4c4c5bf | ||
|
|
989e215acc | ||
|
|
ba88bb15a9 | ||
|
|
0cac0d942c | ||
|
|
b24a9ee781 | ||
|
|
25ae29235f | ||
|
|
a8d4de2d3d | ||
|
|
ccb3e0522c | ||
|
|
a9f1838b52 | ||
|
|
d744c293fb | ||
|
|
94848979ad | ||
|
|
2732326b3d | ||
|
|
ea8328c199 | ||
|
|
41de13388c | ||
|
|
f1e42707a0 | ||
|
|
1f16f13169 | ||
|
|
ef23d40972 | ||
|
|
c1bdc3abff | ||
|
|
5cbb569b38 | ||
|
|
d4a3f0ea79 | ||
|
|
b07b43496c | ||
|
|
2ba04f1a6a | ||
|
|
b31fe2cf49 | ||
|
|
65d748fc9f | ||
|
|
ab2da15bc9 | ||
|
|
bf8bef3cd0 | ||
|
|
adbe2f3c96 | ||
|
|
dadb8ee71b | ||
|
|
7d30f12532 | ||
|
|
9c41cbd2f3 | ||
|
|
5ce9a0c17d | ||
|
|
7b2d2df299 | ||
|
|
285ff00c12 | ||
|
|
04ca95cc83 | ||
|
|
3b25a07522 | ||
|
|
14aa449c35 | ||
|
|
d88c035c23 | ||
|
|
6d2d90b1e5 | ||
|
|
e2ca39fb36 | ||
|
|
6a37780b8e | ||
|
|
146f33f38e | ||
|
|
c6c26c5de4 | ||
|
|
262cc8dbbd | ||
|
|
5bec8e99a5 | ||
|
|
2e0e6749ca | ||
|
|
c0ef18e8b3 | ||
|
|
52173804f1 | ||
|
|
2d8cf69140 | ||
|
|
e2603d74ca | ||
|
|
9df9238d56 | ||
|
|
b697165392 | ||
|
|
16bfcc27d8 | ||
|
|
be3f47539d | ||
|
|
f3fd63cd70 | ||
|
|
aafdf7620e | ||
|
|
4f3b0541eb | ||
|
|
04fb73fd4a | ||
|
|
b1a7924c75 | ||
|
|
4e618206a8 | ||
|
|
8a510331df | ||
|
|
81035964ca | ||
|
|
304cf5eda0 | ||
|
|
b987749291 | ||
|
|
cc3ad230f8 | ||
|
|
e7266db3b3 | ||
|
|
a85f39a6e4 | ||
|
|
14fdb93c07 | ||
|
|
e7e06dea41 | ||
|
|
ce32504a81 | ||
|
|
7cd6c94482 | ||
|
|
349957b8d4 | ||
|
|
16134c6421 | ||
|
|
608d05fabc | ||
|
|
c410e1209d | ||
|
|
74aefd868a | ||
|
|
55476b6594 | ||
|
|
fcb3d01194 | ||
|
|
af0b53990c | ||
|
|
ad650aa6eb | ||
|
|
e3861954ba | ||
|
|
154d2d73ef | ||
|
|
006dd8dc77 | ||
|
|
b171f7764f | ||
|
|
30a20b549e | ||
|
|
a3cc5e244d | ||
|
|
37441f598f | ||
|
|
8bced7cdc9 | ||
|
|
35d0589f46 | ||
|
|
5c45db3d45 | ||
|
|
700d08c69d | ||
|
|
1b71c60256 | ||
|
|
8cf7d812ab | ||
|
|
627264affd | ||
|
|
674502323b | ||
|
|
34a9d751b8 | ||
|
|
dbff203c62 | ||
|
|
f45eb891cd | ||
|
|
77b58240cf | ||
|
|
97ae1ff10e | ||
|
|
5b252efcf0 | ||
|
|
6756f2ba2e | ||
|
|
3c0e89802e | ||
|
|
e55a95db39 | ||
|
|
80cd64b4ba | ||
|
|
962642b0d0 | ||
|
|
641f353c84 | ||
|
|
d598bc0a79 | ||
|
|
153041c431 | ||
|
|
582a40599a | ||
|
|
6e21f14ae9 | ||
|
|
a4540b8deb | ||
|
|
fe10c7daad | ||
|
|
cd4ee1eee9 | ||
|
|
54ec05d63e | ||
|
|
da7a74ee58 | ||
|
|
72d08f60b2 | ||
|
|
4e6878972e | ||
|
|
f5efa5e93d | ||
|
|
179f765ca0 | ||
|
|
8734a4f24b | ||
|
|
6a8f78ec23 | ||
|
|
480fce55a8 | ||
|
|
f46e669eeb | ||
|
|
1c3188a3bb | ||
|
|
a7fe030557 | ||
|
|
d4136fadd2 | ||
|
|
308bc375bd | ||
|
|
3bbcf6a41e | ||
|
|
3d5d10a4c1 | ||
|
|
0e979c14f0 | ||
|
|
70f49114ac | ||
|
|
dacadfc59e | ||
|
|
aa01855ac3 | ||
|
|
2d9b91eff5 | ||
|
|
d2c6c6e564 | ||
|
|
a11a4d1aee | ||
|
|
ad43a18f59 | ||
|
|
b1a9ff708c | ||
|
|
97a01b302f | ||
|
|
c22a73a98d | ||
|
|
bc9a7a0eb7 | ||
|
|
b35a737d97 | ||
|
|
760364d4c7 | ||
|
|
e4ff047c6e | ||
|
|
833219d5e5 | ||
|
|
eed1ab3ce3 | ||
|
|
c9a427bf8b | ||
|
|
6b4d7bde71 | ||
|
|
96442a3578 | ||
|
|
60e1dfb380 | ||
|
|
deaa150ab4 | ||
|
|
ca649a31a4 | ||
|
|
a2e514c10d | ||
|
|
0577a64ae3 | ||
|
|
f730607414 | ||
|
|
0172ee25c9 | ||
|
|
699d75bb9f | ||
|
|
95822704c8 | ||
|
|
1a69842871 | ||
|
|
76e5f69e67 | ||
|
|
992c6c71b0 | ||
|
|
bad0914e3c | ||
|
|
8495a234e8 | ||
|
|
3faa6577df | ||
|
|
f398d2a0d8 | ||
|
|
335ae82a3d | ||
|
|
abd31d0249 | ||
|
|
4ac15880db | ||
|
|
9ae7ee6e2d | ||
|
|
fd5c2795b1 | ||
|
|
47c71422bc | ||
|
|
bfb7fd92b0 | ||
|
|
bf52430da8 | ||
|
|
7005b3ee86 | ||
|
|
8f2ea239c5 | ||
|
|
9ee2a8a98c | ||
|
|
6f0daf9d1b | ||
|
|
28ed424fa8 | ||
|
|
fe3e20b108 | ||
|
|
23f3b901e3 | ||
|
|
567608b3c4 | ||
|
|
4ff0f94d41 | ||
|
|
a56290489c | ||
|
|
aac4392f69 | ||
|
|
c130feefc5 | ||
|
|
474bcf5f05 | ||
|
|
cf24ada3f1 | ||
|
|
7b26bb7171 | ||
|
|
83d89ff05c | ||
|
|
7034bdcbf6 | ||
|
|
4c12da5418 | ||
|
|
8bf1d2bc1f | ||
|
|
900a99653f | ||
|
|
f33fcfa7b1 | ||
|
|
130148d475 | ||
|
|
021f87eef3 | ||
|
|
8ef8788152 | ||
|
|
041756829a | ||
|
|
89c7f52d84 | ||
|
|
c40b560d15 | ||
|
|
74f9391076 | ||
|
|
76dab68759 | ||
|
|
d405548825 | ||
|
|
b4c76f034f | ||
|
|
cda2402d01 | ||
|
|
2cf9ab2620 | ||
|
|
465f182493 | ||
|
|
18f4cc25f3 | ||
|
|
b755192600 | ||
|
|
23321a1075 | ||
|
|
045140cfbc | ||
|
|
ff2b9243e9 | ||
|
|
471fb7a83c | ||
|
|
0db5ae8390 | ||
|
|
e36f60085f | ||
|
|
3718fc36f0 | ||
|
|
71a41f6369 | ||
|
|
47a2f9a4a7 | ||
|
|
a6f0bc0490 | ||
|
|
cb7c37a836 | ||
|
|
e89eba08c4 | ||
|
|
d5d857983d | ||
|
|
4e7e44e25f | ||
|
|
5c4dfa4cc6 | ||
|
|
9ab30dffd8 | ||
|
|
1e630c3c68 | ||
|
|
b2cd596401 | ||
|
|
ef6be9d436 | ||
|
|
9f6a9f9912 | ||
|
|
e4c37af7b7 | ||
|
|
353e90cf6d | ||
|
|
ecf7fb4bc4 | ||
|
|
e200a5ed78 | ||
|
|
5e02263ad1 | ||
|
|
a6af810274 | ||
|
|
d9d34735da | ||
|
|
087bc95f80 | ||
|
|
ff27f9832a | ||
|
|
2124e66219 | ||
|
|
9ae80b60b4 | ||
|
|
d701c4c3f9 | ||
|
|
b4cc5eea66 | ||
|
|
7cdf14c43b | ||
|
|
06d086725c | ||
|
|
a8e79d64c0 | ||
|
|
742c6fa5dd | ||
|
|
f4cfdc6647 | ||
|
|
43ae566053 | ||
|
|
063a6428f3 | ||
|
|
3e302d7c04 | ||
|
|
436ceabb9e | ||
|
|
186dc6db31 | ||
|
|
af4feba7d7 | ||
|
|
549aac15b7 | ||
|
|
06d8d92dbe | ||
|
|
6a8763d7ba | ||
|
|
521b97b7b7 | ||
|
|
58c8601067 | ||
|
|
36609376e8 | ||
|
|
32a1c8264e | ||
|
|
06754f4ef1 | ||
|
|
99d9b3bf94 | ||
|
|
ec71d20d37 | ||
|
|
2d1e88bb39 | ||
|
|
c9d30bb422 | ||
|
|
cd448082e3 | ||
|
|
46239dddac | ||
|
|
81177fda35 | ||
|
|
983d623d7f | ||
|
|
bdda8f4abf | ||
|
|
94fc804394 | ||
|
|
e00d8c09e7 | ||
|
|
70a40b4bdd | ||
|
|
f806a62f01 | ||
|
|
71a9281b8f | ||
|
|
a34747fbd5 | ||
|
|
6b0380199b | ||
|
|
39d2f90a84 | ||
|
|
7bff7651f3 | ||
|
|
44bd15d519 | ||
|
|
1ca93b03a0 | ||
|
|
3295142d81 | ||
|
|
f12fdc46dc | ||
|
|
fc01254fe6 | ||
|
|
8fb3368601 | ||
|
|
58facc2512 | ||
|
|
b43c2b308b | ||
|
|
1e89a0af56 | ||
|
|
acd3cbbf49 | ||
|
|
a806521745 | ||
|
|
0dddaf26e0 | ||
|
|
cdf63a005b | ||
|
|
ca422a0af3 | ||
|
|
a682371a91 | ||
|
|
26ef146526 | ||
|
|
936ee58abb | ||
|
|
71d8c208bc | ||
|
|
2200ffa88e | ||
|
|
4453316516 | ||
|
|
b947207571 | ||
|
|
25d29deae6 | ||
|
|
9abe6d6d71 | ||
|
|
77dbc0a37f | ||
|
|
659117512b | ||
|
|
b1dbbc6a69 | ||
|
|
424a1c626e | ||
|
|
522666191b | ||
|
|
78055ef794 | ||
|
|
0fe534c202 | ||
|
|
257179de31 | ||
|
|
65b57112b9 | ||
|
|
27f0b1d1f2 | ||
|
|
6e31476c45 | ||
|
|
bc7f0f3fb3 | ||
|
|
13eeb5164f | ||
|
|
fc756ed23d | ||
|
|
c150365462 | ||
|
|
58d209059e | ||
|
|
506179b517 | ||
|
|
f0f4eb75df | ||
|
|
6c1c025668 | ||
|
|
b7e3401e8e | ||
|
|
90cee7fb31 | ||
|
|
8e0e3cf35e | ||
|
|
7f72584537 | ||
|
|
8f0d606892 | ||
|
|
9fafe64cff | ||
|
|
94b42e0597 | ||
|
|
b2c1960d93 | ||
|
|
9d24b4cc35 | ||
|
|
3d675b033c | ||
|
|
0d2d9be8b3 | ||
|
|
6e9b6dab97 | ||
|
|
44a1717f6d | ||
|
|
4f51c74297 | ||
|
|
87c64a8c5d | ||
|
|
b6c6635f22 | ||
|
|
5a7abcb07c | ||
|
|
65232d134b | ||
|
|
d7b4bdefe5 | ||
|
|
6d9174bea1 | ||
|
|
921edfd4c5 | ||
|
|
786d5b0667 | ||
|
|
e846c71f20 | ||
|
|
0108e2ef5a | ||
|
|
9a81277ff6 | ||
|
|
06cc2ff316 | ||
|
|
7cdf4cb48c | ||
|
|
c34c547f1f | ||
|
|
9507294db7 | ||
|
|
ae7dd62d9f | ||
|
|
52e309cb09 | ||
|
|
b580373982 | ||
|
|
ec7bde5bb2 | ||
|
|
3516eeec5b | ||
|
|
52351192e6 | ||
|
|
3a6f04496d | ||
|
|
47f2df2112 | ||
|
|
363a26b8a1 | ||
|
|
7e50a00f55 | ||
|
|
a7d6a80e82 | ||
|
|
e7da95b2ac | ||
|
|
74fca23d59 | ||
|
|
0a12fa1253 | ||
|
|
1263068140 | ||
|
|
916c191b18 | ||
|
|
d8c0220353 | ||
|
|
4ab425d15c | ||
|
|
74e5633d1c | ||
|
|
89d36bbc61 | ||
|
|
1877ac18a5 | ||
|
|
5e42e25617 | ||
|
|
c27c9564cf | ||
|
|
c4b0da335d | ||
|
|
fab36ec008 | ||
|
|
8a2b875779 | ||
|
|
efaffb8298 | ||
|
|
e004eb3f00 | ||
|
|
43e8f6dc81 | ||
|
|
f5bff8fe7c | ||
|
|
fad8484b93 | ||
|
|
7664b54f89 | ||
|
|
21cbc353dd | ||
|
|
8d66306ec4 | ||
|
|
479daf0e76 | ||
|
|
bf0fbb7b10 | ||
|
|
d3c91f1585 | ||
|
|
ca165b328a | ||
|
|
fa2ffeea92 | ||
|
|
0d00965ac3 | ||
|
|
7d7bec1f80 | ||
|
|
b6fd915365 | ||
|
|
fecae72267 | ||
|
|
7bffd91e3f | ||
|
|
f859521a7e | ||
|
|
a869386fac | ||
|
|
8bc7885b7a | ||
|
|
78be46738d | ||
|
|
6fce73855c | ||
|
|
fa844a6223 | ||
|
|
906379dd09 | ||
|
|
37cded612f | ||
|
|
73e8fade61 | ||
|
|
758cc7afab | ||
|
|
d74b7b06d2 | ||
|
|
39009f2f71 | ||
|
|
9fdc1c6813 | ||
|
|
c5568fe830 | ||
|
|
bad81f84b9 | ||
|
|
2ac08dd0e6 | ||
|
|
408ffc4539 | ||
|
|
eb958327c5 | ||
|
|
e157d77a1e | ||
|
|
e961c9ea8f | ||
|
|
258c4f769d | ||
|
|
b31fedd857 | ||
|
|
eafe69500b | ||
|
|
ae09990c43 | ||
|
|
cf54b65c32 | ||
|
|
7974421fa1 | ||
|
|
847a098d4e | ||
|
|
eb4de0ae0f | ||
|
|
bca9f3b753 | ||
|
|
cad8a9a5d3 | ||
|
|
f5f36d21e8 | ||
|
|
c51435c114 | ||
|
|
2a7f1780b4 | ||
|
|
98a44e40fb | ||
|
|
65cf6fa9a1 | ||
|
|
b2e32d1720 | ||
|
|
f0bfedbe8e | ||
|
|
fd4e059c13 | ||
|
|
a53575e154 | ||
|
|
4a73484603 | ||
|
|
03b380f90b | ||
|
|
a2bd3b2dfe | ||
|
|
56fe140ebf | ||
|
|
4fafcce740 | ||
|
|
02352c4ae6 | ||
|
|
4b74aab335 | ||
|
|
2d67ac189d | ||
|
|
8ece62e23d | ||
|
|
56c2bdd77d | ||
|
|
1f555f1930 | ||
|
|
8496432c14 | ||
|
|
1672ffa670 | ||
|
|
6aab199f12 | ||
|
|
46d0c379a4 | ||
|
|
99240f145a | ||
|
|
3c9079d73c | ||
|
|
0eb98b9a6c | ||
|
|
76bfd98b77 | ||
|
|
3348640c88 | ||
|
|
d81c64fd2b | ||
|
|
8b4c919617 | ||
|
|
76c58953df | ||
|
|
4ddc5caa49 | ||
|
|
694663bd95 | ||
|
|
62aba5844e | ||
|
|
d0d60cef05 | ||
|
|
3d293fdcb0 | ||
|
|
96e9528046 | ||
|
|
4ea24b3203 | ||
|
|
a756eea25a | ||
|
|
210020e489 | ||
|
|
e586ead024 | ||
|
|
14c80bf1dc | ||
|
|
bdd56e794a | ||
|
|
a544548934 | ||
|
|
e06c1d61fb | ||
|
|
600c5209c6 | ||
|
|
bee90366ee | ||
|
|
e9bc4e9417 | ||
|
|
f01ff15761 | ||
|
|
356ada159d | ||
|
|
cc831e16d8 | ||
|
|
b8dc46ad01 | ||
|
|
d8ab19087d | ||
|
|
ec8a79eedd | ||
|
|
f1e2a8e9d8 | ||
|
|
4042a5fe5d | ||
|
|
a4752751ed | ||
|
|
e23ecf46d1 | ||
|
|
70a8c597a6 | ||
|
|
fa639bdb53 | ||
|
|
233bdd5b1d | ||
|
|
a0ab6d35c7 | ||
|
|
bd29680ce7 | ||
|
|
7139e92554 | ||
|
|
897df53466 | ||
|
|
58281711f6 | ||
|
|
b524383aa3 | ||
|
|
75a16e3588 | ||
|
|
1453032ad6 | ||
|
|
824ab4afad | ||
|
|
73dd41c67f | ||
|
|
59ee77355d | ||
|
|
5c758773ad | ||
|
|
46de49df06 | ||
|
|
d1c54a9a74 | ||
|
|
e7527c45cd | ||
|
|
7d5207aa67 | ||
|
|
654302e691 | ||
|
|
ee673b57fd | ||
|
|
2be374b841 | ||
|
|
906e1eda89 | ||
|
|
ece02cc4fa | ||
|
|
876ad60ddf | ||
|
|
862da354ac | ||
|
|
8fd477b979 | ||
|
|
2d7005655c | ||
|
|
7322f8348a | ||
|
|
e3e3a12e73 | ||
|
|
77cdd057a4 | ||
|
|
e8206fbdd9 | ||
|
|
589f15a77b | ||
|
|
7bb443678a | ||
|
|
6390415101 | ||
|
|
4abf192e11 | ||
|
|
1fed37f9da | ||
|
|
a9d86a7447 | ||
|
|
2abe4c3cef | ||
|
|
0542c25003 | ||
|
|
1b8ee4e290 | ||
|
|
51128cba55 | ||
|
|
3612432581 | ||
|
|
deca000a1b | ||
|
|
39cccb5653 | ||
|
|
f6838dc985 | ||
|
|
8cd4d92395 | ||
|
|
3bf9906f45 | ||
|
|
9f7daf96ef | ||
|
|
67de4df155 | ||
|
|
bc51a4bd1c | ||
|
|
bb54616018 | ||
|
|
6bcff5e014 | ||
|
|
8970a03a9a | ||
|
|
3ad717ca35 | ||
|
|
b14f72c67a | ||
|
|
45d036804f | ||
|
|
8f606db233 | ||
|
|
3766ba5402 | ||
|
|
e851813cef | ||
|
|
4d49ad9141 | ||
|
|
16618b3af2 | ||
|
|
0e5c0f664f | ||
|
|
7be9281431 | ||
|
|
ee0327fac1 | ||
|
|
9930de3e7f | ||
|
|
e8503e89c6 | ||
|
|
1d9ed419eb | ||
|
|
0207652e3e | ||
|
|
0f1e99c5cb | ||
|
|
f134bc7efb | ||
|
|
dcd7c7180e | ||
|
|
fbbfcd075b | ||
|
|
f42d2e4140 | ||
|
|
88882cebbc | ||
|
|
17a979675c | ||
|
|
4642850c79 | ||
|
|
e8d6eebb04 | ||
|
|
864c5160c0 | ||
|
|
99b5a00c12 | ||
|
|
85ee1f07d7 | ||
|
|
e58b4394e0 | ||
|
|
1e91a57bf1 | ||
|
|
39cee52a7e | ||
|
|
72068f939d | ||
|
|
096d0d3cad | ||
|
|
2472ab0121 | ||
|
|
00421717b8 | ||
|
|
ae96d93f94 | ||
|
|
8522c40c8f | ||
|
|
23f86e95f1 | ||
|
|
eed2045189 | ||
|
|
217785bf0f | ||
|
|
6aef50dc5d | ||
|
|
16b6e3caa7 | ||
|
|
3de4c99a8a | ||
|
|
980aa19a75 | ||
|
|
fb4b57e056 | ||
|
|
03638365ea | ||
|
|
157cb1c83d | ||
|
|
e51f11c2b1 | ||
|
|
1ad0961dd8 | ||
|
|
46ff7dd4e2 | ||
|
|
8b067df914 | ||
|
|
ef43b13272 | ||
|
|
e8e9974224 | ||
|
|
feebbb9f04 | ||
|
|
bc4f06dd1d | ||
|
|
971e4fc909 | ||
|
|
51cc765949 | ||
|
|
19c6a4fffa | ||
|
|
105ac32d2f | ||
|
|
57550675d2 | ||
|
|
e674abc5c0 | ||
|
|
f965c96f51 | ||
|
|
c76b8ed9e0 | ||
|
|
4fbd0d8a7b | ||
|
|
2186c0fff6 | ||
|
|
1adca9a9c1 | ||
|
|
9408353f2b | ||
|
|
84f4d453d2 | ||
|
|
d10209f2a1 | ||
|
|
3ae149c72f | ||
|
|
47385acc3b | ||
|
|
814eeaa900 | ||
|
|
5f2ea13aad | ||
|
|
41ca217931 | ||
|
|
b57d36e8dd | ||
|
|
9a4be70734 | ||
|
|
a8443595a6 | ||
|
|
fd0a70ac58 | ||
|
|
8a8685c968 | ||
|
|
9e6cb8da8e | ||
|
|
054ec54d51 | ||
|
|
272ce773cb | ||
|
|
050b925f7b | ||
|
|
0087940898 | ||
|
|
e323c014f9 | ||
|
|
cc465c7554 | ||
|
|
14cb37564f | ||
|
|
094db56c3b | ||
|
|
aabb709b8b | ||
|
|
0833dd2db9 | ||
|
|
cd3f912be4 | ||
|
|
665c516db6 | ||
|
|
b670da9fa0 | ||
|
|
80bee9bffe | ||
|
|
d85a70e8ad | ||
|
|
8f21533e76 | ||
|
|
89996482a1 | ||
|
|
03c10dce91 | ||
|
|
bd5331be05 | ||
|
|
46e1645289 | ||
|
|
4ce3965747 | ||
|
|
9d4af19db3 | ||
|
|
48e034f4be | ||
|
|
f8959baa2f | ||
|
|
8ed5997eae | ||
|
|
daf9f50ac8 | ||
|
|
6b11013c1a |
43
.git-blame-ignore-revs
Normal file
43
.git-blame-ignore-revs
Normal file
@@ -0,0 +1,43 @@
|
||||
# `git blame` master ignore list.
|
||||
#
|
||||
# This file contains a list of git hashes of revisions to be ignored
|
||||
# by `git blame`. These revisions are considered "unimportant" in
|
||||
# that they are unlikely to be what you are interested in when blaming.
|
||||
# They are typically expected to be formatting-only changes.
|
||||
#
|
||||
# It can be used for `git blame` using `--ignore-revs-file` or by
|
||||
# setting `blame.ignoreRevsFile` in the `git config`[1].
|
||||
#
|
||||
# Ignore these commits when reporting with blame. Calling
|
||||
#
|
||||
# git blame --ignore-revs-file .git-blame-ignore-revs
|
||||
#
|
||||
# will tell `git blame` to ignore changes made by these revisions when
|
||||
# assigning blame, as if the change never happened.
|
||||
#
|
||||
# You can enable this as a default for your local repository by
|
||||
# running
|
||||
#
|
||||
# git config blame.ignoreRevsFile .git-blame-ignore-revs
|
||||
#
|
||||
# This will probably be automatically picked by your IDE
|
||||
# (VSCode+GitLens and JetBrains products are confirmed to do this).
|
||||
#
|
||||
# Important: if you are switching to a branch without this file,
|
||||
# `git blame` will fail with an error.
|
||||
#
|
||||
# GitHub also excludes the commits listed below from its "Blame"
|
||||
# views[2][3].
|
||||
#
|
||||
# [1]: https://git-scm.com/docs/git-blame#Documentation/git-blame.txt-blameignoreRevsFile
|
||||
# [2]: https://github.blog/changelog/2022-03-24-ignore-commits-in-the-blame-view-beta/
|
||||
# [3]: https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
|
||||
|
||||
|
||||
# Black changes
|
||||
465a88154152fb0607a63fa24c8446bff43ec886
|
||||
f06891926661986fff52d6eb4b4cb120c71972d1
|
||||
9bcbcaefdfecc85aedfd8e2f8aaa1ca7f959404e
|
||||
433dcab02b29f7bd3827e237434034deecc1b549
|
||||
9f6a9f991222efccc87b45a701086c95629c67b6
|
||||
f89114ca7e1b20bf8e645ecd0b52b707ec857aa9
|
||||
1
.github/ISSUE_TEMPLATE/bug.yml
vendored
1
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -21,6 +21,7 @@ body:
|
||||
options:
|
||||
- linuxserver
|
||||
- hotio
|
||||
- binhex
|
||||
- Other
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -4,7 +4,7 @@ contact_links:
|
||||
url: https://forums.sabnzbd.org/
|
||||
about: Support questions can be asked on our forums, Reddit or Discord server.
|
||||
- name: Discord
|
||||
url: https://discord.gg/KQzDe7fvNU
|
||||
url: https://discord.sabnzbd.org
|
||||
about: Support questions can be asked on our forums, Reddit or Discord server.
|
||||
- name: Reddit - r/sabnzbd
|
||||
url: https://www.reddit.com/r/sabnzbd
|
||||
|
||||
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
11
.github/renovate.json
vendored
11
.github/renovate.json
vendored
@@ -7,21 +7,22 @@
|
||||
"schedule": [
|
||||
"before 8am on Monday"
|
||||
],
|
||||
"ignorePaths": [
|
||||
".github/workflows/**"
|
||||
],
|
||||
"baseBranches": ["develop", "feature/uvicorn"],
|
||||
"pip_requirements": {
|
||||
"fileMatch": [
|
||||
"requirements.txt",
|
||||
"tests/requirements.txt",
|
||||
"builder/requirements.txt",
|
||||
"builder/release-requirements.txt",
|
||||
"builder/osx/requirements.txt"
|
||||
"builder/release-requirements.txt"
|
||||
]
|
||||
},
|
||||
"ignorePaths": [],
|
||||
"ignoreDeps": [
|
||||
"jaraco.text",
|
||||
"jaraco.context",
|
||||
"jaraco.collections",
|
||||
"sabctools",
|
||||
"paho-mqtt",
|
||||
"werkzeug"
|
||||
],
|
||||
"packageRules": [
|
||||
|
||||
120
.github/workflows/build_release.yml
vendored
120
.github/workflows/build_release.yml
vendored
@@ -12,118 +12,74 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python 3.12 (64bit)
|
||||
uses: actions/setup-python@v4
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python 3.13
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
python-version: "3.13"
|
||||
architecture: "x64"
|
||||
- name: Cache Python virtualenv (64bit)
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
id: cache-virtualenv-64bit
|
||||
with:
|
||||
custom_virtualenv_dir: "venv64"
|
||||
custom_cache_key_element: "release"
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies (64bit)
|
||||
if: steps.cache-virtualenv-64bit.outputs.cache-hit != 'true'
|
||||
cache: pip
|
||||
cache-dependency-path: "**/requirements.txt"
|
||||
- name: Install Python dependencies
|
||||
# Without dependencies to make sure everything is covered in the requirements.txt
|
||||
run: |
|
||||
python --version
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt --no-dependencies
|
||||
pip install --upgrade -r builder/requirements.txt --no-dependencies
|
||||
- name: Build Windows standalone binary and installer (64bit)
|
||||
- name: Build Windows standalone binary and installer
|
||||
run: python builder/package.py installer
|
||||
- name: Upload Windows standalone binary (64bit)
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload Windows standalone binary
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: "*-win64-bin.zip"
|
||||
name: Windows Windows standalone binary (64bit)
|
||||
- name: Upload Windows installer (64bit)
|
||||
uses: actions/upload-artifact@v3
|
||||
name: Windows standalone binary
|
||||
- name: Upload Windows installer
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: "*-win-setup.exe"
|
||||
name: Windows installer
|
||||
- name: Set up Python 3.8 (32bit and legacy)
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.8"
|
||||
architecture: "x86"
|
||||
- name: Cache Python virtualenv (32bit and legacy)
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
id: cache-virtualenv-32bit
|
||||
with:
|
||||
custom_virtualenv_dir: "venv32"
|
||||
custom_cache_key_element: "release"
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies (32bit and legacy)
|
||||
if: steps.cache-virtualenv-32bit.outputs.cache-hit != 'true'
|
||||
# We do not care about the extra dependencies for the legacy build
|
||||
run: |
|
||||
python --version
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt --no-dependencies
|
||||
pip install --upgrade -r builder/requirements.txt --no-dependencies
|
||||
- name: Build Windows standalone binary (32bit and legacy)
|
||||
run: python builder/package.py binary
|
||||
- name: Upload Windows standalone binary (32bit and legacy)
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: "*-win32-bin.zip"
|
||||
name: Windows Windows standalone binary (32bit and legacy)
|
||||
|
||||
build_macos:
|
||||
name: Build macOS binary
|
||||
runs-on: macos-11
|
||||
runs-on: macos-14
|
||||
timeout-minutes: 30
|
||||
env:
|
||||
# We need the official Python, because the GA ones only support newer macOS versions
|
||||
# The deployment target is picked up by the Python build tools automatically
|
||||
# If updated, make sure to also set LSMinimumSystemVersion in SABnzbd.spec
|
||||
PYTHON_VERSION: "3.12.0"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.9"
|
||||
PYTHON_VERSION: "3.13.5"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.13"
|
||||
# We need to force compile for universal2 support
|
||||
CFLAGS: -arch x86_64 -arch arm64
|
||||
ARCHFLAGS: -arch x86_64 -arch arm64
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python 3.13
|
||||
# Only use this for the caching of pip packages!
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.13"
|
||||
cache: pip
|
||||
cache-dependency-path: "**/requirements.txt"
|
||||
- name: Cache Python download
|
||||
id: cache-python-download
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/python.pkg
|
||||
key: cache-macOS-Python-${{ env.PYTHON_VERSION }}
|
||||
- name: Get Python
|
||||
- name: Get Python from python.org
|
||||
if: steps.cache-python-download.outputs.cache-hit != 'true'
|
||||
run: curl https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-macos11.pkg -o ~/python.pkg
|
||||
- name: Install Python
|
||||
run: sudo installer -pkg ~/python.pkg -target /
|
||||
- name: Cache Python virtualenv
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
id: cache-virtualenv
|
||||
with:
|
||||
custom_cache_key_element: "release"
|
||||
requirement_files: "**/requirements.txt"
|
||||
- name: Install Python dependencies
|
||||
# We have to manually take a few steps:
|
||||
# 1. Because building cryptography is hard, and we cannot force pip to fetch universal2 version we
|
||||
# first install the x86 version (and it's dependencies) and then manually fetch the universal2 build
|
||||
# https://github.com/pypa/pip/issues/5453
|
||||
# 2. We need to build the PyInstaller bootloader:
|
||||
# https://github.com/pyinstaller/pyinstaller/issues/6235
|
||||
if: steps.cache-virtualenv.outputs.cache-hit != 'true'
|
||||
# We have to manually compile some modules as they don't automatically fetch universal2 binaries
|
||||
run: |
|
||||
python3 --version
|
||||
pip3 install --upgrade pip wheel
|
||||
|
||||
pip3 install --upgrade -r requirements.txt --no-binary cffi --no-dependencies
|
||||
|
||||
pip3 uninstall cryptography -y
|
||||
pip3 download -r builder/osx/requirements.txt --platform macosx_10_12_universal2 --only-binary :all: --no-dependencies --dest .
|
||||
pip3 install -r builder/osx/requirements.txt --no-cache-dir --no-index --find-links .
|
||||
|
||||
PYINSTALLER_COMPILE_BOOTLOADER=1 pip3 install --upgrade -r builder/requirements.txt --no-binary pyinstaller --no-dependencies
|
||||
pip3 install --upgrade -r requirements.txt --no-binary cffi,CT3,PyYAML,charset_normalizer --no-dependencies
|
||||
pip3 install --upgrade -r builder/requirements.txt --no-dependencies
|
||||
- name: Import macOS codesign certificates
|
||||
# Taken from https://github.com/Apple-Actions/import-codesign-certs/pull/27 (comments)
|
||||
env:
|
||||
@@ -143,7 +99,7 @@ jobs:
|
||||
# Run this on macOS so the line endings are correct by default
|
||||
run: python builder/package.py source
|
||||
- name: Upload source distribution
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: "*-src.tar.gz"
|
||||
name: Source distribution
|
||||
@@ -156,24 +112,23 @@ jobs:
|
||||
python3 builder/package.py app
|
||||
python3 builder/make_dmg.py
|
||||
- name: Upload macOS binary
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: "*-osx.dmg"
|
||||
name: macOS binary (not notarized)
|
||||
path: "*-macos.dmg"
|
||||
name: macOS binary
|
||||
|
||||
release:
|
||||
name: Publish Release
|
||||
name: Prepare Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build_windows, build_macos]
|
||||
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: dist
|
||||
- name: Move all artifacts to main folder
|
||||
@@ -186,6 +141,7 @@ jobs:
|
||||
pip3 install -r builder/release-requirements.txt
|
||||
python3 builder/release.py
|
||||
- name: Release latest available Snap
|
||||
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_TOKEN }}
|
||||
run: |
|
||||
|
||||
38
.github/workflows/integration_testing.yml
vendored
38
.github/workflows/integration_testing.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
||||
name: Black Code Formatter
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Black Code Formatter
|
||||
uses: lgeiger/black-action@master
|
||||
with:
|
||||
@@ -31,46 +31,34 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||
python-architecture: ["x64"]
|
||||
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
||||
name: ["Linux"]
|
||||
os: [ubuntu-20.04]
|
||||
os: [ubuntu-latest]
|
||||
include:
|
||||
- name: macOS
|
||||
os: macos-latest
|
||||
python-version: "3.12"
|
||||
python-architecture: "x64"
|
||||
python-version: "3.13"
|
||||
- name: Windows
|
||||
os: windows-latest
|
||||
python-version: "3.12"
|
||||
python-architecture: "x64"
|
||||
- name: Windows (32bit)
|
||||
os: windows-latest
|
||||
python-version: "3.8"
|
||||
python-architecture: "x86"
|
||||
python-version: "3.13"
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }} ${{ matrix.python-architecture }}
|
||||
uses: actions/setup-python@v4
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
architecture: ${{ matrix.python-architecture }}
|
||||
architecture: "x64"
|
||||
cache: pip
|
||||
cache-dependency-path: "**/requirements.txt"
|
||||
- name: Install system dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install unrar p7zip-full par2
|
||||
- name: Cache Python virtualenv
|
||||
uses: syphar/restore-virtualenv@v1.3
|
||||
id: cache-virtualenv
|
||||
with:
|
||||
custom_cache_key_element: ci-${{ matrix.python-architecture }}
|
||||
requirement_files: "**/requirements.txt"
|
||||
run: sudo apt-get install unrar 7zip par2
|
||||
- name: Install Python dependencies
|
||||
if: steps.cache-virtualenv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
python --version
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install --upgrade -r requirements.txt
|
||||
pip install --upgrade -r requirements.txt --no-dependencies
|
||||
pip install --upgrade -r tests/requirements.txt
|
||||
- name: Test SABnzbd
|
||||
run: pytest -s
|
||||
|
||||
4
.github/workflows/stale.yml
vendored
4
.github/workflows/stale.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
if: github.repository_owner == 'sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v8
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
days-before-stale: 21
|
||||
days-before-close: 7
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
if: github.repository_owner == 'sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v4
|
||||
- uses: dessant/lock-threads@v5
|
||||
with:
|
||||
log-output: true
|
||||
issue-inactive-days: 60
|
||||
|
||||
4
.github/workflows/translations.yml
vendored
4
.github/workflows/translations.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
env:
|
||||
TX_TOKEN: ${{ secrets.TX_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
- name: Generate translatable texts
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
run: |
|
||||
python3 tools/make_mo.py
|
||||
- name: Push translatable and translated texts back to repo
|
||||
uses: stefanzweifel/git-auto-commit-action@v4.16.0
|
||||
uses: stefanzweifel/git-auto-commit-action@v6.0.1
|
||||
if: env.TX_TOKEN
|
||||
with:
|
||||
commit_message: |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
The SABnzbd-Team is:
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
||||
@@ -2,7 +2,7 @@ SABnzbd - The automated Usenet download tool
|
||||
============================================
|
||||
|
||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
[](https://discord.gg/KQzDe7fvNU)
|
||||
[](https://discord.sabnzbd.org)
|
||||
|
||||
SABnzbd is an Open Source Binary Newsreader written in Python.
|
||||
|
||||
|
||||
68
README.mkd
68
README.mkd
@@ -1,33 +1,55 @@
|
||||
Release Notes - SABnzbd 4.2.0 Alpha 2
|
||||
Release Notes - SABnzbd 4.5.2
|
||||
=========================================================
|
||||
|
||||
## Changes since 4.1.0
|
||||
- Numerous smaller performance improvements were made.
|
||||
- Reduced recursive unpacking to 2 levels, instead of 5.
|
||||
- IPv6 addresses are preferred during server address selection.
|
||||
- Stricter check if `Complete Folder` is inside `Download Folder`.
|
||||
- Windows: Reduced size of installer.
|
||||
- Windows/macOS: Updated to Python 3.12.
|
||||
## Bug fixes and changes in 4.5.2
|
||||
|
||||
## Bugfixes since 4.1.0
|
||||
- Multi-select in the queue was broken for some users.
|
||||
- Prevent crash during saving of configuration.
|
||||
- Removing a failed download from the history could break active downloads.
|
||||
* Added Tab and Shift+Tab navigation to move between rename fields in queue.
|
||||
* Invalid cookies of other services could result in errors.
|
||||
* Internet Bandwidth test could be stuck in infinite loop.
|
||||
* RSS readout did not ignore torrent alternatives.
|
||||
* Prowl and Pushover settings did not load correctly.
|
||||
* Renamed `osx` to `macos` internally.
|
||||
* API: Removed `B` post-fix from `quota` and `left_quota` fields in `queue`.
|
||||
* Windows: Support more languages in the installer.
|
||||
* Windows and macOS: Updated par2cmdline-turbo to 1.3.0 and Unrar to 7.12.
|
||||
|
||||
## Bug fixes and changes in 4.5.1
|
||||
|
||||
* Correct platform detection on Linux.
|
||||
* The `From SxxEyy` RSS filters did not always work.
|
||||
* Windows and macOS: Update Unrar to 7.11.
|
||||
|
||||
## New features in 4.5.0
|
||||
|
||||
* Improved failure detection by downloading additional par2 files right away.
|
||||
* Added more diagnostic information about the system.
|
||||
* Use XFF headers for login validation if `verify_xff_header` is enabled.
|
||||
* Added Turkish translation (by @cardpuncher).
|
||||
* Added `unrar_parameters` option to supply custom Unrar parameters.
|
||||
* Windows: Removed MultiPar support.
|
||||
* Windows and macOS: Updated Python to 3.13.2, 7zip to 24.09,
|
||||
Unrar to 7.10 and par2cmdline-turbo to 1.2.0.
|
||||
|
||||
## Bug fixes since 4.4.0
|
||||
|
||||
* Handle filenames that exceed maximum filesystem lengths.
|
||||
* Directly decompress gzip responses when retrieving NZB's.
|
||||
|
||||
## Upgrade notices
|
||||
- Direct upgrade is possible from version 3.0.0 and newer.
|
||||
Upgrading from older versions will require `Queue repair`.
|
||||
- Downgrading from version 4.2.0 or newer to 3.7.2 or older will
|
||||
require `Queue repair` due to changes in the internal data format.
|
||||
|
||||
* You can directly upgrade from version 3.0.0 and newer.
|
||||
* Upgrading from older versions will require performing a `Queue repair`.
|
||||
* Downgrading from version 4.2.0 or newer to 3.7.2 or older will require
|
||||
performing a `Queue repair` due to changes in the internal data format.
|
||||
|
||||
## Known problems and solutions
|
||||
- Read the file "ISSUES.txt"
|
||||
|
||||
* Read `ISSUES.txt` or https://sabnzbd.org/wiki/introduction/known-issues
|
||||
|
||||
## About
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically, thanks
|
||||
to its web-based user interface and advanced built-in post-processing options
|
||||
that automatically verify, repair, extract and clean up posts downloaded
|
||||
from Usenet.
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically, thanks to its web-based
|
||||
user interface and advanced built-in post-processing options that automatically verify, repair,
|
||||
extract and clean up posts downloaded from Usenet.
|
||||
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
(c) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
405
SABnzbd.py
405
SABnzbd.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team (sabnzbd.org)
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -32,13 +32,14 @@ import traceback
|
||||
import getopt
|
||||
import signal
|
||||
import socket
|
||||
import platform
|
||||
import subprocess
|
||||
import multiprocessing
|
||||
import ssl
|
||||
import time
|
||||
import re
|
||||
import gc
|
||||
import threading
|
||||
import http.cookies
|
||||
from typing import List, Dict, Any
|
||||
|
||||
try:
|
||||
@@ -47,6 +48,7 @@ try:
|
||||
import feedparser
|
||||
import configobj
|
||||
import cherrypy
|
||||
import cheroot.errors
|
||||
import portend
|
||||
import cryptography
|
||||
import chardet
|
||||
@@ -64,7 +66,7 @@ import sabnzbd
|
||||
import sabnzbd.lang
|
||||
import sabnzbd.interface
|
||||
from sabnzbd.constants import (
|
||||
DEF_TIMEOUT,
|
||||
DEF_NETWORKING_TIMEOUT,
|
||||
DEF_LOG_ERRFILE,
|
||||
DEF_MAIN_TMPL,
|
||||
DEF_STD_WEB_DIR,
|
||||
@@ -83,7 +85,6 @@ from sabnzbd.constants import (
|
||||
)
|
||||
import sabnzbd.newsunpack
|
||||
from sabnzbd.misc import (
|
||||
check_latest_version,
|
||||
exit_sab,
|
||||
split_host,
|
||||
create_https_certificates,
|
||||
@@ -93,8 +94,6 @@ from sabnzbd.misc import (
|
||||
get_from_url,
|
||||
upload_file_to_sabnzbd,
|
||||
is_localhost,
|
||||
is_lan_addr,
|
||||
ip_in_subnet,
|
||||
helpful_warning,
|
||||
set_https_verification,
|
||||
)
|
||||
@@ -104,9 +103,6 @@ import sabnzbd.config as config
|
||||
import sabnzbd.cfg
|
||||
import sabnzbd.notifier as notifier
|
||||
import sabnzbd.zconfig
|
||||
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, dnslookup
|
||||
from sabnzbd.utils.getperformance import getpystone, getcpu
|
||||
import sabnzbd.utils.ssdp as ssdp
|
||||
|
||||
try:
|
||||
import win32api
|
||||
@@ -123,7 +119,7 @@ try:
|
||||
|
||||
win32api.SetConsoleCtrlHandler(sabnzbd.sig_handler, True)
|
||||
except ImportError:
|
||||
if sabnzbd.WIN32:
|
||||
if sabnzbd.WINDOWS:
|
||||
print("Sorry, requires Python module PyWin32.")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -171,7 +167,8 @@ class GUIHandler(logging.Handler):
|
||||
# This prevents endless looping if the notification service itself throws an error/warning
|
||||
# We don't check based on message content, because if it includes a timestamp it's not unique
|
||||
if not any(
|
||||
stored_warning["origin"] == warning["origin"] and stored_warning["time"] + DEF_TIMEOUT > time.time()
|
||||
stored_warning["origin"] == warning["origin"]
|
||||
and stored_warning["time"] + DEF_NETWORKING_TIMEOUT > time.time()
|
||||
for stored_warning in self.store
|
||||
):
|
||||
if record.levelno == logging.WARNING:
|
||||
@@ -210,7 +207,7 @@ def print_help():
|
||||
print(" -w --weblogging Enable cherrypy access logging")
|
||||
print()
|
||||
print(" -b --browser <0..1> Auto browser launch (0= off, 1= on) [*]")
|
||||
if sabnzbd.WIN32:
|
||||
if sabnzbd.WINDOWS:
|
||||
print(" -d --daemon Use when run as a service")
|
||||
else:
|
||||
print(" -d --daemon Fork daemon process")
|
||||
@@ -244,7 +241,7 @@ def print_version():
|
||||
"""
|
||||
%s-%s
|
||||
|
||||
Copyright (C) 2007-2023 The SABnzbd-Team (sabnzbd.org)
|
||||
(C) Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
SABnzbd comes with ABSOLUTELY NO WARRANTY.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions. It is licensed under the
|
||||
@@ -298,14 +295,14 @@ def daemonize():
|
||||
os.dup2(f.fileno(), sys.stderr.fileno())
|
||||
|
||||
|
||||
def abort_and_show_error(browserhost, cherryport, err=""):
|
||||
def abort_and_show_error(browserhost, web_port, err=""):
|
||||
"""Abort program because of CherryPy troubles"""
|
||||
logging.error(T("Failed to start web-interface") + " : " + str(err))
|
||||
if not sabnzbd.DAEMON:
|
||||
if "49" in err:
|
||||
panic_host(browserhost, cherryport)
|
||||
panic_host(browserhost, web_port)
|
||||
else:
|
||||
panic_port(browserhost, cherryport)
|
||||
panic_port(browserhost, web_port)
|
||||
sabnzbd.halt()
|
||||
exit_sab(2)
|
||||
|
||||
@@ -315,7 +312,7 @@ def identify_web_template(key, defweb, wdir):
|
||||
if wdir is None:
|
||||
try:
|
||||
wdir = fix_webname(key())
|
||||
except:
|
||||
except Exception:
|
||||
wdir = ""
|
||||
if not wdir:
|
||||
wdir = defweb
|
||||
@@ -375,25 +372,25 @@ def get_user_profile_paths():
|
||||
# just assume that everything defaults to the program dir
|
||||
sabnzbd.DIR_LCLDATA = sabnzbd.DIR_PROG
|
||||
sabnzbd.DIR_HOME = sabnzbd.DIR_PROG
|
||||
if sabnzbd.WIN32:
|
||||
if sabnzbd.WINDOWS:
|
||||
# Ignore Win32 "logoff" signal
|
||||
# This should work, but it doesn't
|
||||
# Instead the signal_handler will ignore the "logoff" signal
|
||||
# signal.signal(5, signal.SIG_IGN)
|
||||
pass
|
||||
return
|
||||
elif sabnzbd.WIN32:
|
||||
elif sabnzbd.WINDOWS:
|
||||
try:
|
||||
path = shell.SHGetFolderPath(0, shellcon.CSIDL_LOCAL_APPDATA, None, 0)
|
||||
sabnzbd.DIR_LCLDATA = os.path.join(path, DEF_WORKDIR)
|
||||
sabnzbd.DIR_HOME = os.environ["USERPROFILE"]
|
||||
except:
|
||||
except Exception:
|
||||
try:
|
||||
root = os.environ["AppData"]
|
||||
user = os.environ["USERPROFILE"]
|
||||
sabnzbd.DIR_LCLDATA = "%s\\%s" % (root.replace("\\Roaming", "\\Local"), DEF_WORKDIR)
|
||||
sabnzbd.DIR_HOME = user
|
||||
except:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Long-path everything
|
||||
@@ -446,9 +443,6 @@ def print_modules():
|
||||
|
||||
logging.info("Cryptography module (v%s)... found!", cryptography.__version__)
|
||||
|
||||
if sabnzbd.WIN32 and sabnzbd.newsunpack.MULTIPAR_COMMAND:
|
||||
logging.info("MultiPar binary... found (%s)", sabnzbd.newsunpack.MULTIPAR_COMMAND)
|
||||
|
||||
if sabnzbd.newsunpack.PAR2_COMMAND:
|
||||
logging.info("par2 binary... found (%s)", sabnzbd.newsunpack.PAR2_COMMAND)
|
||||
else:
|
||||
@@ -464,7 +458,7 @@ def print_modules():
|
||||
have_str = "%.2f" % (float(sabnzbd.newsunpack.RAR_VERSION) / 100)
|
||||
want_str = "%.2f" % (float(sabnzbd.constants.REC_RAR_VERSION) / 100)
|
||||
helpful_warning(T("Your UNRAR version is %s, we recommend version %s or higher.<br />"), have_str, want_str)
|
||||
elif not (sabnzbd.WIN32 or sabnzbd.MACOS):
|
||||
elif not (sabnzbd.WINDOWS or sabnzbd.MACOS):
|
||||
logging.info("UNRAR binary version %.2f", (float(sabnzbd.newsunpack.RAR_VERSION) / 100))
|
||||
else:
|
||||
logging.error(T("unrar binary... NOT found"))
|
||||
@@ -473,12 +467,12 @@ def print_modules():
|
||||
|
||||
if sabnzbd.newsunpack.SEVENZIP_COMMAND:
|
||||
logging.info("7za binary... found (%s)", sabnzbd.newsunpack.SEVENZIP_COMMAND)
|
||||
if not (sabnzbd.WIN32 or sabnzbd.MACOS):
|
||||
if not (sabnzbd.WINDOWS or sabnzbd.MACOS):
|
||||
logging.info("7za binary version %s", sabnzbd.newsunpack.SEVENZIP_VERSION)
|
||||
else:
|
||||
logging.warning(T("7za binary... NOT found!"))
|
||||
|
||||
if not sabnzbd.WIN32:
|
||||
if not sabnzbd.WINDOWS:
|
||||
if sabnzbd.newsunpack.NICE_COMMAND:
|
||||
logging.info("nice binary... found (%s)", sabnzbd.newsunpack.NICE_COMMAND)
|
||||
else:
|
||||
@@ -531,19 +525,19 @@ def check_resolve(host):
|
||||
return True
|
||||
|
||||
|
||||
def get_webhost(cherryhost, cherryport, https_port):
|
||||
def get_webhost(web_host, web_port, https_port):
|
||||
"""Determine the webhost address and port,
|
||||
return (host, port, browserhost)
|
||||
"""
|
||||
if cherryhost == "0.0.0.0" and not check_resolve("127.0.0.1"):
|
||||
cherryhost = ""
|
||||
elif cherryhost == "::" and not check_resolve("::1"):
|
||||
cherryhost = ""
|
||||
if web_host == "0.0.0.0" and not check_resolve("127.0.0.1"):
|
||||
web_host = ""
|
||||
elif web_host == "::" and not check_resolve("::1"):
|
||||
web_host = ""
|
||||
|
||||
if cherryhost is None:
|
||||
cherryhost = sabnzbd.cfg.cherryhost()
|
||||
if web_host is None:
|
||||
web_host = sabnzbd.cfg.web_host()
|
||||
else:
|
||||
sabnzbd.cfg.cherryhost.set(cherryhost)
|
||||
sabnzbd.cfg.web_host.set(web_host)
|
||||
|
||||
# Get IP address, but discard APIPA/IPV6
|
||||
# If only APIPA's or IPV6 are found, fall back to localhost
|
||||
@@ -555,10 +549,10 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
# Hostname does not resolve
|
||||
try:
|
||||
# Valid user defined name?
|
||||
info = socket.getaddrinfo(cherryhost, None)
|
||||
info = socket.getaddrinfo(web_host, None)
|
||||
except socket.error:
|
||||
if not is_localhost(cherryhost):
|
||||
cherryhost = "0.0.0.0"
|
||||
if not is_localhost(web_host):
|
||||
web_host = "0.0.0.0"
|
||||
try:
|
||||
info = socket.getaddrinfo(localhost, None)
|
||||
except socket.error:
|
||||
@@ -575,75 +569,75 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
hostip = ip
|
||||
|
||||
# A blank host will use the local ip address
|
||||
if cherryhost == "":
|
||||
if web_host == "":
|
||||
if ipv6 and ipv4:
|
||||
# To protect Firefox users, use numeric IP
|
||||
cherryhost = hostip
|
||||
web_host = hostip
|
||||
browserhost = hostip
|
||||
else:
|
||||
cherryhost = socket.gethostname()
|
||||
browserhost = cherryhost
|
||||
web_host = socket.gethostname()
|
||||
browserhost = web_host
|
||||
|
||||
# 0.0.0.0 will listen on all ipv4 interfaces (no ipv6 addresses)
|
||||
elif cherryhost == "0.0.0.0":
|
||||
elif web_host == "0.0.0.0":
|
||||
# Just take the gamble for this
|
||||
cherryhost = "0.0.0.0"
|
||||
web_host = "0.0.0.0"
|
||||
browserhost = localhost
|
||||
|
||||
# :: will listen on all ipv6 interfaces (no ipv4 addresses)
|
||||
elif cherryhost in ("::", "[::]"):
|
||||
cherryhost = cherryhost.strip("[").strip("]")
|
||||
elif web_host in ("::", "[::]"):
|
||||
web_host = web_host.strip("[").strip("]")
|
||||
# Assume '::1' == 'localhost'
|
||||
browserhost = localhost
|
||||
|
||||
# IPV6 address
|
||||
elif "[" in cherryhost or ":" in cherryhost:
|
||||
browserhost = cherryhost
|
||||
elif "[" in web_host or ":" in web_host:
|
||||
browserhost = web_host
|
||||
|
||||
# IPV6 numeric address
|
||||
elif cherryhost.replace(".", "").isdigit():
|
||||
elif web_host.replace(".", "").isdigit():
|
||||
# IPV4 numerical
|
||||
browserhost = cherryhost
|
||||
browserhost = web_host
|
||||
|
||||
elif cherryhost == localhost:
|
||||
cherryhost = localhost
|
||||
elif web_host == localhost:
|
||||
web_host = localhost
|
||||
browserhost = localhost
|
||||
|
||||
else:
|
||||
# If on APIPA, use numerical IP, to help FireFoxers
|
||||
if ipv6 and ipv4:
|
||||
cherryhost = hostip
|
||||
browserhost = cherryhost
|
||||
web_host = hostip
|
||||
browserhost = web_host
|
||||
|
||||
# Some systems don't like brackets in numerical ipv6
|
||||
if sabnzbd.MACOS:
|
||||
cherryhost = cherryhost.strip("[]")
|
||||
web_host = web_host.strip("[]")
|
||||
else:
|
||||
try:
|
||||
socket.getaddrinfo(cherryhost, None)
|
||||
socket.getaddrinfo(web_host, None)
|
||||
except socket.error:
|
||||
cherryhost = cherryhost.strip("[]")
|
||||
web_host = web_host.strip("[]")
|
||||
|
||||
if ipv6 and ipv4 and cherryhost == "" and sabnzbd.WIN32:
|
||||
if ipv6 and ipv4 and web_host == "" and sabnzbd.WINDOWS:
|
||||
helpful_warning(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
|
||||
|
||||
if cherryhost == "localhost" and not sabnzbd.WIN32 and not sabnzbd.MACOS:
|
||||
if web_host == "localhost" and not sabnzbd.WINDOWS and not sabnzbd.MACOS:
|
||||
# On the Ubuntu family, localhost leads to problems for CherryPy
|
||||
ips = ip_extract()
|
||||
if "127.0.0.1" in ips and "::1" in ips:
|
||||
cherryhost = "127.0.0.1"
|
||||
web_host = "127.0.0.1"
|
||||
if ips[0] != "127.0.0.1":
|
||||
browserhost = "127.0.0.1"
|
||||
|
||||
# This is to please Chrome on macOS
|
||||
if cherryhost == "localhost" and sabnzbd.MACOS:
|
||||
cherryhost = "127.0.0.1"
|
||||
if web_host == "localhost" and sabnzbd.MACOS:
|
||||
web_host = "127.0.0.1"
|
||||
browserhost = "localhost"
|
||||
|
||||
if cherryport is None:
|
||||
cherryport = sabnzbd.cfg.cherryport.get_int()
|
||||
if web_port is None:
|
||||
web_port = sabnzbd.cfg.web_port.get_int()
|
||||
else:
|
||||
sabnzbd.cfg.cherryport.set(str(cherryport))
|
||||
sabnzbd.cfg.web_port.set(str(web_port))
|
||||
|
||||
if https_port is None:
|
||||
https_port = sabnzbd.cfg.https_port.get_int()
|
||||
@@ -652,12 +646,12 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
# if the https port was specified, assume they want HTTPS enabling also
|
||||
sabnzbd.cfg.enable_https.set(True)
|
||||
|
||||
if cherryport == https_port and sabnzbd.cfg.enable_https():
|
||||
if web_port == https_port and sabnzbd.cfg.enable_https():
|
||||
sabnzbd.cfg.enable_https.set(False)
|
||||
# Should have a translated message, but that's not available yet
|
||||
logging.error(T("HTTP and HTTPS ports cannot be the same"))
|
||||
|
||||
return cherryhost, cherryport, browserhost, https_port
|
||||
return web_host, web_port, browserhost, https_port
|
||||
|
||||
|
||||
def attach_server(host, port, cert=None, key=None, chain=None):
|
||||
@@ -682,7 +676,7 @@ def is_sabnzbd_running(url):
|
||||
ver = get_from_url(url)
|
||||
set_https_verification(prev)
|
||||
return ver and (re.search(r"\d+\.\d+\.", ver) or ver.strip() == sabnzbd.__version__)
|
||||
except:
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
@@ -693,7 +687,7 @@ def find_free_port(host, currentport):
|
||||
try:
|
||||
portend.free(host, currentport, timeout=0.025)
|
||||
return currentport
|
||||
except:
|
||||
except Exception:
|
||||
currentport += 5
|
||||
n += 1
|
||||
return 0
|
||||
@@ -842,8 +836,8 @@ def main():
|
||||
fork = False
|
||||
pause = False
|
||||
inifile = None
|
||||
cherryhost = None
|
||||
cherryport = None
|
||||
web_host = None
|
||||
web_port = None
|
||||
https_port = None
|
||||
cherrypylogging = None
|
||||
clean_up = False
|
||||
@@ -866,7 +860,7 @@ def main():
|
||||
if opt == "--servicecall":
|
||||
sabnzbd.MY_FULLNAME = arg
|
||||
elif opt in ("-d", "--daemon"):
|
||||
if not sabnzbd.WIN32:
|
||||
if not sabnzbd.WINDOWS:
|
||||
fork = True
|
||||
autobrowser = False
|
||||
sabnzbd.DAEMON = True
|
||||
@@ -881,14 +875,11 @@ def main():
|
||||
elif opt in ("-t", "--templates"):
|
||||
web_dir = arg
|
||||
elif opt in ("-s", "--server"):
|
||||
(cherryhost, cherryport) = split_host(arg)
|
||||
(web_host, web_port) = split_host(arg)
|
||||
elif opt in ("-n", "--nobrowser"):
|
||||
autobrowser = False
|
||||
elif opt in ("-b", "--browser"):
|
||||
try:
|
||||
autobrowser = bool(int(arg))
|
||||
except ValueError:
|
||||
autobrowser = True
|
||||
autobrowser = sabnzbd.misc.bool_conv(arg)
|
||||
elif opt == "--autorestarted":
|
||||
autorestarted = True
|
||||
elif opt in ("-c", "--clean"):
|
||||
@@ -898,7 +889,7 @@ def main():
|
||||
elif opt in ("-l", "--logging"):
|
||||
try:
|
||||
logging_level = int(arg)
|
||||
except:
|
||||
except Exception:
|
||||
logging_level = -2
|
||||
if logging_level < -1 or logging_level > 2:
|
||||
print_help()
|
||||
@@ -1007,35 +998,35 @@ def main():
|
||||
sabnzbd.cfg.ipv6_hosting.set(ipv6_hosting)
|
||||
|
||||
# Determine web host address
|
||||
cherryhost, cherryport, browserhost, https_port = get_webhost(cherryhost, cherryport, https_port)
|
||||
web_host, web_port, browserhost, https_port = get_webhost(web_host, web_port, https_port)
|
||||
enable_https = sabnzbd.cfg.enable_https()
|
||||
|
||||
# When this is a daemon, just check and bail out if port in use
|
||||
if sabnzbd.DAEMON:
|
||||
if enable_https and https_port:
|
||||
try:
|
||||
portend.free(cherryhost, https_port, timeout=0.05)
|
||||
portend.free(web_host, https_port, timeout=0.05)
|
||||
except IOError:
|
||||
abort_and_show_error(browserhost, cherryport)
|
||||
except:
|
||||
abort_and_show_error(browserhost, cherryport, "49")
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
except Exception:
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
try:
|
||||
portend.free(cherryhost, cherryport, timeout=0.05)
|
||||
portend.free(web_host, web_port, timeout=0.05)
|
||||
except IOError:
|
||||
abort_and_show_error(browserhost, cherryport)
|
||||
except:
|
||||
abort_and_show_error(browserhost, cherryport, "49")
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
except Exception:
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
|
||||
# Windows instance is reachable through registry
|
||||
url = None
|
||||
if sabnzbd.WIN32 and not new_instance:
|
||||
if sabnzbd.WINDOWS and not new_instance:
|
||||
url = get_connection_info()
|
||||
if url and check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
exit_sab(0)
|
||||
|
||||
# SSL
|
||||
if enable_https:
|
||||
port = https_port or cherryport
|
||||
port = https_port or web_port
|
||||
try:
|
||||
portend.free(browserhost, port, timeout=0.05)
|
||||
except IOError as error:
|
||||
@@ -1047,7 +1038,7 @@ def main():
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
# Bail out if we have fixed our ports after first start-up
|
||||
if sabnzbd.cfg.fixed_ports():
|
||||
abort_and_show_error(browserhost, cherryport)
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
# Find free port to bind
|
||||
newport = find_free_port(browserhost, port)
|
||||
if newport > 0:
|
||||
@@ -1057,34 +1048,34 @@ def main():
|
||||
sabnzbd.cfg.https_port.set(newport)
|
||||
else:
|
||||
# In case HTTPS == HTTP port
|
||||
cherryport = newport
|
||||
sabnzbd.cfg.cherryport.set(newport)
|
||||
except:
|
||||
web_port = newport
|
||||
sabnzbd.cfg.web_port.set(newport)
|
||||
except Exception:
|
||||
# Something else wrong, probably badly specified host
|
||||
abort_and_show_error(browserhost, cherryport, "49")
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
|
||||
# NonSSL check if there's no HTTPS or we only use 1 port
|
||||
if not (enable_https and not https_port):
|
||||
try:
|
||||
portend.free(browserhost, cherryport, timeout=0.05)
|
||||
portend.free(browserhost, web_port, timeout=0.05)
|
||||
except IOError as error:
|
||||
if str(error) == "Port not bound.":
|
||||
pass
|
||||
else:
|
||||
if not url:
|
||||
url = "http://%s:%s%s/api?" % (browserhost, cherryport, sabnzbd.cfg.url_base())
|
||||
url = "http://%s:%s%s/api?" % (browserhost, web_port, sabnzbd.cfg.url_base())
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
# Bail out if we have fixed our ports after first start-up
|
||||
if sabnzbd.cfg.fixed_ports():
|
||||
abort_and_show_error(browserhost, cherryport)
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
# Find free port to bind
|
||||
port = find_free_port(browserhost, cherryport)
|
||||
port = find_free_port(browserhost, web_port)
|
||||
if port > 0:
|
||||
sabnzbd.cfg.cherryport.set(port)
|
||||
cherryport = port
|
||||
except:
|
||||
sabnzbd.cfg.web_port.set(port)
|
||||
web_port = port
|
||||
except Exception:
|
||||
# Something else wrong, probably badly specified host
|
||||
abort_and_show_error(browserhost, cherryport, "49")
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
|
||||
# We found a port, now we never check again
|
||||
sabnzbd.cfg.fixed_ports.set(True)
|
||||
@@ -1096,12 +1087,11 @@ def main():
|
||||
sys.exit(1)
|
||||
|
||||
if clean_up:
|
||||
xlist = globber_full(logdir)
|
||||
for x in xlist:
|
||||
for x in globber_full(logdir):
|
||||
if RSS_FILE_NAME not in x:
|
||||
try:
|
||||
os.remove(x)
|
||||
except:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Prevent the logger from raising exceptions
|
||||
@@ -1131,7 +1121,7 @@ def main():
|
||||
exit_sab(2)
|
||||
|
||||
# Fork on non-Windows processes
|
||||
if fork and not sabnzbd.WIN32:
|
||||
if fork and not sabnzbd.WINDOWS:
|
||||
daemonize()
|
||||
else:
|
||||
if console_logging:
|
||||
@@ -1145,53 +1135,8 @@ def main():
|
||||
# Start SABnzbd
|
||||
logging.info("--------------------------------")
|
||||
logging.info("%s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
|
||||
# See if we can get version from git when running an unknown revision
|
||||
if sabnzbd.__baseline__ == "unknown":
|
||||
try:
|
||||
sabnzbd.__baseline__ = sabnzbd.misc.run_command(
|
||||
["git", "rev-parse", "--short", "HEAD"], cwd=sabnzbd.DIR_PROG
|
||||
).strip()
|
||||
except:
|
||||
pass
|
||||
logging.info("Commit = %s", sabnzbd.__baseline__)
|
||||
|
||||
logging.info("Full executable path = %s", sabnzbd.MY_FULLNAME)
|
||||
logging.info("Arguments = %s", sabnzbd.CMDLINE)
|
||||
logging.info("Python-version = %s", sys.version)
|
||||
logging.info("Dockerized = %s", sabnzbd.DOCKER)
|
||||
logging.info("CPU architecture = %s", platform.uname().machine)
|
||||
|
||||
try:
|
||||
logging.info("Platform = %s - %s", os.name, platform.platform())
|
||||
except:
|
||||
# Can fail on special platforms (like Snapcraft or embedded)
|
||||
pass
|
||||
|
||||
# Find encoding; relevant for external processing activities
|
||||
logging.info("Preferred encoding = %s", sabnzbd.encoding.CODEPAGE)
|
||||
|
||||
# On Linux/FreeBSD/Unix "UTF-8" is strongly, strongly advised:
|
||||
if not sabnzbd.WIN32 and not sabnzbd.MACOS and not ("utf-8" in sabnzbd.encoding.CODEPAGE.lower()):
|
||||
helpful_warning(
|
||||
T(
|
||||
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
|
||||
),
|
||||
sabnzbd.encoding.CODEPAGE,
|
||||
)
|
||||
|
||||
# Verify umask, we need at least 700
|
||||
if not sabnzbd.WIN32 and sabnzbd.ORG_UMASK > int("077", 8):
|
||||
sabnzbd.misc.helpful_warning(
|
||||
T("Current umask (%o) might deny SABnzbd access to the files and folders it creates."),
|
||||
sabnzbd.ORG_UMASK,
|
||||
)
|
||||
|
||||
# Log JSON module in case of problems
|
||||
logging.debug("JSON-module = %s %s", sabnzbd.api.json.__name__, sabnzbd.api.json.__version__)
|
||||
|
||||
# SSL Information
|
||||
logging.info("SSL version = %s", ssl.OPENSSL_VERSION)
|
||||
|
||||
# Load (extra) certificates if supplied by certifi
|
||||
# This is optional and provided in the binaries
|
||||
@@ -1202,28 +1147,14 @@ def main():
|
||||
os.environ["SSL_CERT_FILE"] = certifi.where()
|
||||
logging.info("Certifi version = %s", certifi.__version__)
|
||||
logging.info("Loaded additional certificates from %s", os.environ["SSL_CERT_FILE"])
|
||||
except:
|
||||
except Exception:
|
||||
# Sometimes the certificate file is blocked
|
||||
logging.warning(T("Could not load additional certificates from certifi package"))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
# Extra startup info
|
||||
if sabnzbd.cfg.log_level() > 1:
|
||||
# List the number of certificates available (can take up to 1.5 seconds)
|
||||
logging.debug("Available certificates = %s", repr(ssl.create_default_context().cert_store_stats()))
|
||||
|
||||
# List networking
|
||||
localipv4()
|
||||
publicipv4()
|
||||
ipv6()
|
||||
dnslookup()
|
||||
|
||||
# Measure basic system performance measured by pystone and - if possible - CPU model
|
||||
getpystone()
|
||||
getcpu()
|
||||
|
||||
logging.info("Using INI file %s", inifile)
|
||||
|
||||
# Store auto-browser setting from command line
|
||||
if autobrowser is not None:
|
||||
sabnzbd.cfg.autobrowser.set(autobrowser)
|
||||
|
||||
@@ -1240,7 +1171,7 @@ def main():
|
||||
|
||||
# Handle the several tray icons
|
||||
if sabnzbd.cfg.tray_icon() and not sabnzbd.DAEMON and not sabnzbd.WIN_SERVICE:
|
||||
if sabnzbd.WIN32:
|
||||
if sabnzbd.WINDOWS:
|
||||
sabnzbd.WINTRAY = sabnzbd.sabtray.SABTrayThread()
|
||||
elif sabnzbd.LINUX_POWER and os.environ.get("DISPLAY"):
|
||||
try:
|
||||
@@ -1251,7 +1182,7 @@ def main():
|
||||
import sabnzbd.sabtraylinux
|
||||
|
||||
sabnzbd.sabtraylinux.StatusIcon()
|
||||
except:
|
||||
except Exception:
|
||||
logging.info("python3-gi not found, no SysTray.")
|
||||
|
||||
# Find external programs
|
||||
@@ -1280,7 +1211,7 @@ def main():
|
||||
try:
|
||||
trialcontext.load_cert_chain(https_cert, https_key)
|
||||
logging.info("HTTPS keys are OK")
|
||||
except:
|
||||
except Exception:
|
||||
logging.warning(T("Disabled HTTPS because of invalid CERT and KEY files"))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
enable_https = False
|
||||
@@ -1289,29 +1220,29 @@ def main():
|
||||
# Starting of the webserver
|
||||
# Determine if this system has multiple definitions for 'localhost'
|
||||
hosts = all_localhosts()
|
||||
multilocal = len(hosts) > 1 and cherryhost in ("localhost", "0.0.0.0")
|
||||
multilocal = len(hosts) > 1 and web_host in ("localhost", "0.0.0.0")
|
||||
|
||||
# For 0.0.0.0 CherryPy will always pick IPv4, so make sure the secondary localhost is IPv6
|
||||
if multilocal and cherryhost == "0.0.0.0" and hosts[1] == "127.0.0.1":
|
||||
if multilocal and web_host == "0.0.0.0" and hosts[1] == "127.0.0.1":
|
||||
hosts[1] = "::1"
|
||||
|
||||
# The Windows binary requires numeric localhost as primary address
|
||||
if cherryhost == "localhost":
|
||||
cherryhost = hosts[0]
|
||||
if web_host == "localhost":
|
||||
web_host = hosts[0]
|
||||
|
||||
if enable_https:
|
||||
if https_port:
|
||||
# Extra HTTP port for primary localhost
|
||||
attach_server(cherryhost, cherryport)
|
||||
attach_server(web_host, web_port)
|
||||
if multilocal:
|
||||
# Extra HTTP port for secondary localhost
|
||||
attach_server(hosts[1], cherryport)
|
||||
attach_server(hosts[1], web_port)
|
||||
# Extra HTTPS port for secondary localhost
|
||||
attach_server(hosts[1], https_port, https_cert, https_key, https_chain)
|
||||
cherryport = https_port
|
||||
web_port = https_port
|
||||
elif multilocal:
|
||||
# Extra HTTPS port for secondary localhost
|
||||
attach_server(hosts[1], cherryport, https_cert, https_key, https_chain)
|
||||
attach_server(hosts[1], web_port, https_cert, https_key, https_chain)
|
||||
|
||||
cherrypy.config.update(
|
||||
{
|
||||
@@ -1323,7 +1254,7 @@ def main():
|
||||
)
|
||||
elif multilocal:
|
||||
# Extra HTTP port for secondary localhost
|
||||
attach_server(hosts[1], cherryport)
|
||||
attach_server(hosts[1], web_port)
|
||||
|
||||
if no_login:
|
||||
sabnzbd.cfg.username.set("")
|
||||
@@ -1346,8 +1277,8 @@ def main():
|
||||
cherrypy.config.update(
|
||||
{
|
||||
"server.environment": "production",
|
||||
"server.socket_host": cherryhost,
|
||||
"server.socket_port": cherryport,
|
||||
"server.socket_host": web_host,
|
||||
"server.socket_port": web_port,
|
||||
"server.shutdown_timeout": 0,
|
||||
"engine.autoreload.on": False,
|
||||
"tools.encode.on": True,
|
||||
@@ -1359,6 +1290,16 @@ def main():
|
||||
}
|
||||
)
|
||||
|
||||
# Monkey-patch key validation to prevent cherrypy from stumbling over invalid cookies
|
||||
http.cookies._is_legal_key = lambda _: True
|
||||
|
||||
# Catch shutdown errors that can break cherrypy/cheroot
|
||||
# See https://github.com/cherrypy/cheroot/issues/710
|
||||
try:
|
||||
cheroot.errors.acceptable_sock_shutdown_exceptions += (OSError,)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# Do we want CherryPy Logging? Cannot be done via the config
|
||||
cherrypy.log.screen = False
|
||||
cherrypy.log.access_log.propagate = False
|
||||
@@ -1408,17 +1349,17 @@ def main():
|
||||
|
||||
# Set authentication for CherryPy
|
||||
sabnzbd.interface.set_auth(cherrypy.config)
|
||||
logging.info("Starting web-interface on %s:%s", cherryhost, cherryport)
|
||||
logging.info("Starting web-interface on %s:%s", web_host, web_port)
|
||||
|
||||
sabnzbd.cfg.log_level.callback(guard_loglevel)
|
||||
|
||||
try:
|
||||
cherrypy.engine.start()
|
||||
except:
|
||||
except Exception:
|
||||
# Since the webserver is started by cherrypy in a separate thread, we can't really catch any
|
||||
# start-up errors. This try/except only catches very few errors, the rest is only shown in the console.
|
||||
logging.error(T("Failed to start web-interface: "), exc_info=True)
|
||||
abort_and_show_error(browserhost, cherryport)
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
|
||||
# Create a record of the active cert/key/chain files, for use with config.create_config_backup()
|
||||
if enable_https:
|
||||
@@ -1426,24 +1367,18 @@ def main():
|
||||
if full_path := getattr(sabnzbd.cfg, setting).get_path():
|
||||
sabnzbd.CONFIG_BACKUP_HTTPS_OK.append(full_path)
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
if enable_https:
|
||||
mode = "s"
|
||||
else:
|
||||
mode = ""
|
||||
api_url = "http%s://%s:%s%s/api?apikey=%s" % (
|
||||
mode,
|
||||
browserhost,
|
||||
cherryport,
|
||||
sabnzbd.cfg.url_base(),
|
||||
sabnzbd.cfg.api_key(),
|
||||
)
|
||||
# Set URL for browser
|
||||
if enable_https:
|
||||
sabnzbd.BROWSER_URL = "https://%s:%s%s" % (browserhost, web_port, sabnzbd.cfg.url_base())
|
||||
else:
|
||||
sabnzbd.BROWSER_URL = "http://%s:%s%s" % (browserhost, web_port, sabnzbd.cfg.url_base())
|
||||
|
||||
# Write URL directly to registry
|
||||
set_connection_info(api_url)
|
||||
if sabnzbd.WINDOWS:
|
||||
# Write URL for uploads and version check directly to registry
|
||||
set_connection_info(f"{sabnzbd.BROWSER_URL}/api?apikey={sabnzbd.cfg.api_key()}")
|
||||
|
||||
if pid_path or pid_file:
|
||||
sabnzbd.pid_file(pid_path, pid_file, cherryport)
|
||||
sabnzbd.pid_file(pid_path, pid_file, web_port)
|
||||
|
||||
# Stop here in case of fatal errors
|
||||
if sabnzbd.NO_DOWNLOADING:
|
||||
@@ -1456,7 +1391,7 @@ def main():
|
||||
logging.info("Starting %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
try:
|
||||
sabnzbd.start()
|
||||
except:
|
||||
except Exception:
|
||||
logging.exception("Failed to start %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
sabnzbd.halt()
|
||||
|
||||
@@ -1465,58 +1400,13 @@ def main():
|
||||
for upload_nzb in upload_nzbs:
|
||||
sabnzbd.nzbparser.add_nzbfile(upload_nzb)
|
||||
|
||||
# Set URL for browser
|
||||
if enable_https:
|
||||
browser_url = "https://%s:%s%s" % (browserhost, cherryport, sabnzbd.cfg.url_base())
|
||||
else:
|
||||
browser_url = "http://%s:%s%s" % (browserhost, cherryport, sabnzbd.cfg.url_base())
|
||||
sabnzbd.BROWSER_URL = browser_url
|
||||
|
||||
if not autorestarted:
|
||||
launch_a_browser(browser_url)
|
||||
launch_a_browser(sabnzbd.BROWSER_URL)
|
||||
notifier.send_notification("SABnzbd", T("SABnzbd %s started") % sabnzbd.__version__, "startup")
|
||||
# Now's the time to check for a new version
|
||||
check_latest_version()
|
||||
autorestarted = False
|
||||
|
||||
# Start SSDP and Bonjour if SABnzbd isn't listening on localhost only
|
||||
if sabnzbd.cfg.enable_broadcast() and not is_localhost(cherryhost):
|
||||
# Try to find a LAN IP address for SSDP/Bonjour
|
||||
if is_lan_addr(cherryhost):
|
||||
# A specific listening address was configured, use that
|
||||
external_host = cherryhost
|
||||
else:
|
||||
# Fall back to the IPv4 address of the LAN interface
|
||||
external_host = localipv4()
|
||||
logging.debug("Using %s as host address for Bonjour and SSDP", external_host)
|
||||
|
||||
# Only broadcast to local network addresses. If local ranges have been defined, further
|
||||
# restrict broadcasts to those specific ranges in order to avoid broadcasting to the "wrong"
|
||||
# private network when the system is connected to multiple such networks (e.g. a corporate
|
||||
# VPN in addition to a standard household LAN).
|
||||
if is_lan_addr(external_host) and (
|
||||
(not sabnzbd.cfg.local_ranges()) or any(ip_in_subnet(external_host, r) for r in sabnzbd.cfg.local_ranges())
|
||||
):
|
||||
# Start Bonjour and SSDP
|
||||
sabnzbd.zconfig.set_bonjour(external_host, cherryport)
|
||||
|
||||
# Set URL for browser for external hosts
|
||||
ssdp_url = "%s://%s:%s%s" % (
|
||||
("https" if enable_https else "http"),
|
||||
external_host,
|
||||
cherryport,
|
||||
sabnzbd.cfg.url_base(),
|
||||
)
|
||||
ssdp.start_ssdp(
|
||||
external_host,
|
||||
"SABnzbd",
|
||||
ssdp_url,
|
||||
"SABnzbd %s" % sabnzbd.__version__,
|
||||
"SABnzbd Team",
|
||||
"https://sabnzbd.org/",
|
||||
"SABnzbd %s" % sabnzbd.__version__,
|
||||
ssdp_broadcast_interval=sabnzbd.cfg.ssdp_broadcast_interval(),
|
||||
)
|
||||
# Do checks and miscellaneous logging in separate thread for performance
|
||||
threading.Thread(target=sabnzbd.delayed_startup_actions).start()
|
||||
|
||||
# Have to keep this running, otherwise logging will terminate
|
||||
timer = 0
|
||||
@@ -1585,7 +1475,7 @@ def main():
|
||||
# Use external service handler to do the restart
|
||||
# Wait 5 seconds to clean up
|
||||
subprocess.Popen("timeout 5 & sc start SABnzbd", shell=True)
|
||||
elif sabnzbd.WIN32:
|
||||
elif sabnzbd.WINDOWS:
|
||||
# Just a simple restart of the exe
|
||||
os.execv(sys.executable, ['"%s"' % arg for arg in sys.argv])
|
||||
else:
|
||||
@@ -1607,7 +1497,7 @@ def main():
|
||||
if hasattr(sys, "frozen") and sabnzbd.MACOS:
|
||||
try:
|
||||
AppHelper.stopEventLoop()
|
||||
except:
|
||||
except Exception:
|
||||
# Failing AppHelper library!
|
||||
os._exit(0)
|
||||
elif sabnzbd.WIN_SERVICE:
|
||||
@@ -1622,7 +1512,7 @@ def main():
|
||||
##############################################################################
|
||||
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
if sabnzbd.WINDOWS:
|
||||
|
||||
class SABnzbd(win32serviceutil.ServiceFramework):
|
||||
"""Win32 Service Handler"""
|
||||
@@ -1738,21 +1628,20 @@ if __name__ == "__main__":
|
||||
signal.signal(signal.SIGINT, sabnzbd.sig_handler)
|
||||
signal.signal(signal.SIGTERM, sabnzbd.sig_handler)
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
if sabnzbd.WINDOWS:
|
||||
if not handle_windows_service():
|
||||
main()
|
||||
|
||||
elif sabnzbd.MACOS and sabnzbd.FOUNDATION:
|
||||
# macOS binary runner
|
||||
from threading import Thread
|
||||
from PyObjCTools import AppHelper
|
||||
from AppKit import NSApplication
|
||||
from sabnzbd.osxmenu import SABnzbdDelegate
|
||||
from sabnzbd.macosmenu import SABnzbdDelegate
|
||||
|
||||
# Need to run the main application in separate thread because the eventLoop
|
||||
# has to be in the main thread. The eventLoop is required for the menu.
|
||||
# This code is made with trial-and-error, please feel free to improve!
|
||||
class startApp(Thread):
|
||||
class startApp(threading.Thread):
|
||||
def run(self):
|
||||
main()
|
||||
AppHelper.stopEventLoop()
|
||||
@@ -1762,10 +1651,10 @@ if __name__ == "__main__":
|
||||
|
||||
# Initialize the menu
|
||||
shared_app = NSApplication.sharedApplication()
|
||||
sabnzbd_menu = SABnzbdDelegate.alloc().init()
|
||||
shared_app.setDelegate_(sabnzbd_menu)
|
||||
sabnzbd.MACOSTRAY = SABnzbdDelegate.alloc().init()
|
||||
shared_app.setDelegate_(sabnzbd.MACOSTRAY)
|
||||
# Build the menu
|
||||
sabnzbd_menu.awakeFromNib()
|
||||
sabnzbd.MACOSTRAY.awakeFromNib()
|
||||
# Run the main eventloop
|
||||
AppHelper.runEventLoop()
|
||||
else:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# -*- mode: python -*-
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
from PyInstaller.building.api import EXE, COLLECT, PYZ
|
||||
@@ -8,13 +7,14 @@ from PyInstaller.building.build_main import Analysis
|
||||
from PyInstaller.building.osx import BUNDLE
|
||||
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
||||
|
||||
from builder.constants import EXTRA_FILES, EXTRA_FOLDERS, RELEASE_VERSION
|
||||
from builder.constants import EXTRA_FILES, EXTRA_FOLDERS, RELEASE_VERSION, RELEASE_VERSION_TUPLE
|
||||
|
||||
# Add extra files in the PyInstaller-spec
|
||||
extra_pyinstaller_files = []
|
||||
|
||||
# Add hidden imports
|
||||
extra_hiddenimports = ["Cheetah.DummyTransaction", "cheroot.ssl.builtin", "certifi"]
|
||||
extra_hiddenimports.extend(collect_submodules("apprise"))
|
||||
extra_hiddenimports.extend(collect_submodules("babelfish.converters"))
|
||||
extra_hiddenimports.extend(collect_submodules("guessit.data"))
|
||||
|
||||
@@ -22,9 +22,9 @@ extra_hiddenimports.extend(collect_submodules("guessit.data"))
|
||||
if sys.platform == "darwin":
|
||||
extra_hiddenimports.extend(["objc", "PyObjCTools"])
|
||||
# macOS folders
|
||||
EXTRA_FOLDERS += ["osx/par2/", "osx/unrar/", "osx/7zip/"]
|
||||
EXTRA_FOLDERS += ["macos/par2/", "macos/unrar/", "macos/7zip/"]
|
||||
# Add NZB-icon file
|
||||
extra_pyinstaller_files.append(("builder/osx/image/nzbfile.icns", "."))
|
||||
extra_pyinstaller_files.append(("builder/macos/image/nzbfile.icns", "."))
|
||||
# Version information is set differently on macOS
|
||||
version_info = None
|
||||
else:
|
||||
@@ -40,20 +40,16 @@ else:
|
||||
)
|
||||
|
||||
# Windows
|
||||
extra_hiddenimports.append("win32timezone")
|
||||
EXTRA_FOLDERS += ["win/multipar/", "win/par2/", "win/unrar/", "win/7zip/"]
|
||||
extra_hiddenimports.extend(["win32timezone", "winrt.windows.foundation.collections"])
|
||||
EXTRA_FOLDERS += ["win/par2/", "win/unrar/", "win/7zip/"]
|
||||
EXTRA_FILES += ["portable.cmd"]
|
||||
|
||||
# Parse the version info
|
||||
version_regexed = re.search(r"(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)", RELEASE_VERSION)
|
||||
version_tuple = (int(version_regexed.group(1)), int(version_regexed.group(2)), int(version_regexed.group(3)), 0)
|
||||
|
||||
# Detailed instructions are in the PyInstaller documentation
|
||||
# We don't include the alpha/beta/rc in the counters
|
||||
version_info = VSVersionInfo(
|
||||
ffi=FixedFileInfo(
|
||||
filevers=version_tuple,
|
||||
prodvers=version_tuple,
|
||||
filevers=RELEASE_VERSION_TUPLE,
|
||||
prodvers=RELEASE_VERSION_TUPLE,
|
||||
mask=0x3F,
|
||||
flags=0x0,
|
||||
OS=0x40004,
|
||||
@@ -91,12 +87,15 @@ for folder_item in EXTRA_FOLDERS:
|
||||
# Add babelfish data files
|
||||
extra_pyinstaller_files.extend(collect_data_files("babelfish"))
|
||||
extra_pyinstaller_files.extend(collect_data_files("guessit"))
|
||||
extra_pyinstaller_files.extend(collect_data_files("apprise"))
|
||||
extra_pyinstaller_files.extend(collect_data_files("dateutil"))
|
||||
|
||||
pyi_analysis = Analysis(
|
||||
["SABnzbd.py"],
|
||||
datas=extra_pyinstaller_files,
|
||||
hiddenimports=extra_hiddenimports,
|
||||
excludes=["ujson", "FixTk", "tcl", "tk", "_tkinter", "tkinter", "Tkinter", "pydoc", "pydoc_data.topics"],
|
||||
module_collection_mode={"apprise.plugins": "py"},
|
||||
)
|
||||
|
||||
pyz = PYZ(pyi_analysis.pure, pyi_analysis.zipped_data)
|
||||
@@ -119,7 +118,7 @@ exe = EXE(
|
||||
contents_directory=".",
|
||||
version=version_info,
|
||||
target_arch="universal2",
|
||||
entitlements_file="builder/osx/entitlements.plist",
|
||||
entitlements_file="builder/macos/entitlements.plist",
|
||||
codesign_identity=codesign_identity,
|
||||
)
|
||||
|
||||
@@ -167,14 +166,14 @@ if sys.platform == "darwin":
|
||||
"NSPersistentStoreTypeKey": "Binary",
|
||||
}
|
||||
],
|
||||
"LSMinimumSystemVersion": "10.9",
|
||||
"LSMinimumSystemVersion": "10.13",
|
||||
"LSEnvironment": {"LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8"},
|
||||
}
|
||||
|
||||
app = BUNDLE(
|
||||
coll,
|
||||
name="SABnzbd.app",
|
||||
icon="builder/osx/image/sabnzbdplus.icns",
|
||||
icon="builder/macos/image/sabnzbdplus.icns",
|
||||
bundle_identifier="org.sabnzbd.sabnzbd",
|
||||
info_plist=info_plist,
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team (sabnzbd.org)
|
||||
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -16,6 +16,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
# Constants
|
||||
VERSION_FILE = "sabnzbd/version.py"
|
||||
@@ -33,14 +34,18 @@ RELEASE_VERSION = __version__
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
PRERELEASE = len(RELEASE_VERSION) > 5
|
||||
|
||||
# Parse the version info for Windows file properties information
|
||||
version_regexed = re.search(r"(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)", RELEASE_VERSION)
|
||||
RELEASE_VERSION_TUPLE = (int(version_regexed.group(1)), int(version_regexed.group(2)), int(version_regexed.group(3)), 0)
|
||||
RELEASE_VERSION_BASE = f"{RELEASE_VERSION_TUPLE[0]}.{RELEASE_VERSION_TUPLE[1]}.{RELEASE_VERSION_TUPLE[2]}"
|
||||
|
||||
# Define release name
|
||||
RELEASE_NAME = "SABnzbd-%s" % RELEASE_VERSION
|
||||
RELEASE_TITLE = "SABnzbd %s" % RELEASE_VERSION
|
||||
RELEASE_SRC = RELEASE_NAME + "-src.tar.gz"
|
||||
RELEASE_BINARY_32 = RELEASE_NAME + "-win32-bin.zip"
|
||||
RELEASE_BINARY_64 = RELEASE_NAME + "-win64-bin.zip"
|
||||
RELEASE_BINARY = RELEASE_NAME + "-win64-bin.zip"
|
||||
RELEASE_INSTALLER = RELEASE_NAME + "-win-setup.exe"
|
||||
RELEASE_MACOS = RELEASE_NAME + "-osx.dmg"
|
||||
RELEASE_MACOS = RELEASE_NAME + "-macos.dmg"
|
||||
RELEASE_README = "README.mkd"
|
||||
|
||||
# Used in package.py and SABnzbd.spec
|
||||
|
||||
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team (sabnzbd.org)
|
||||
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -24,7 +24,7 @@ if __name__ == "__main__":
|
||||
# Check for DMGBuild
|
||||
try:
|
||||
import dmgbuild
|
||||
except:
|
||||
except Exception:
|
||||
print("Requires dmgbuild-module, use pip install dmgbuild")
|
||||
exit()
|
||||
|
||||
@@ -39,7 +39,7 @@ if __name__ == "__main__":
|
||||
# Create sub-folder to upload later
|
||||
release = RELEASE_VERSION
|
||||
prod = "SABnzbd-" + release
|
||||
fileDmg = prod + "-osx.dmg"
|
||||
fileDmg = prod + "-macos.dmg"
|
||||
|
||||
# Path to app file
|
||||
apppath = "dist/SABnzbd.app"
|
||||
@@ -48,8 +48,8 @@ if __name__ == "__main__":
|
||||
readmepath = os.path.join(apppath, "Contents/Resources/README.txt")
|
||||
|
||||
# Path to background and the icon
|
||||
backgroundpath = "builder/osx/image/sabnzbd_new_bg.png"
|
||||
iconpath = "builder/osx/image/sabnzbdplus.icns"
|
||||
backgroundpath = "builder/macos/image/sabnzbd_new_bg.png"
|
||||
iconpath = "builder/macos/image/sabnzbdplus.icns"
|
||||
|
||||
# Make DMG
|
||||
print("Building DMG")
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# Special requirements for macOS universal2 binary release
|
||||
# This way dependabot can auto-update them
|
||||
cryptography==41.0.5
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team (sabnzbd.org)
|
||||
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -32,11 +32,11 @@ from typing import List
|
||||
|
||||
from constants import (
|
||||
RELEASE_VERSION,
|
||||
RELEASE_VERSION_TUPLE,
|
||||
VERSION_FILE,
|
||||
RELEASE_README,
|
||||
RELEASE_NAME,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_BINARY,
|
||||
RELEASE_INSTALLER,
|
||||
ON_GITHUB_ACTIONS,
|
||||
RELEASE_THIS,
|
||||
@@ -125,7 +125,7 @@ def test_sab_binary(binary_path: str):
|
||||
try:
|
||||
urllib.request.urlopen(base_url, timeout=1).read()
|
||||
break
|
||||
except:
|
||||
except Exception:
|
||||
time.sleep(1)
|
||||
else:
|
||||
# Print console output and give some time to print
|
||||
@@ -214,13 +214,6 @@ if __name__ == "__main__":
|
||||
if sys.platform != "win32":
|
||||
raise RuntimeError("Binary should be created on Windows")
|
||||
|
||||
# Check what architecture we are on
|
||||
RELEASE_BINARY = RELEASE_BINARY_32
|
||||
BUILDING_64BIT = False
|
||||
if platform.architecture()[0] == "64bit":
|
||||
RELEASE_BINARY = RELEASE_BINARY_64
|
||||
BUILDING_64BIT = True
|
||||
|
||||
# Remove any leftovers
|
||||
safe_remove(RELEASE_BINARY)
|
||||
|
||||
@@ -232,21 +225,10 @@ if __name__ == "__main__":
|
||||
|
||||
# Remove unwanted DLL's
|
||||
shutil.rmtree("dist/SABnzbd/Pythonwin")
|
||||
if BUILDING_64BIT:
|
||||
# These are only present on 64bit (Python 3.9+)
|
||||
delete_files_glob("dist/SABnzbd/api-ms-win*.dll", allow_no_matches=True)
|
||||
delete_files_glob("dist/SABnzbd/ucrtbase.dll", allow_no_matches=True)
|
||||
|
||||
# Remove 32bit external executables
|
||||
delete_files_glob("dist/SABnzbd/win/par2/par2.exe")
|
||||
delete_files_glob("dist/SABnzbd/win/multipar/par2j.exe")
|
||||
delete_files_glob("dist/SABnzbd/win/unrar/UnRAR.exe")
|
||||
delete_files_glob("dist/SABnzbd/api-ms-win*.dll", allow_no_matches=True)
|
||||
delete_files_glob("dist/SABnzbd/ucrtbase.dll", allow_no_matches=True)
|
||||
|
||||
if "installer" in sys.argv:
|
||||
# Needs to be run on 64 bit
|
||||
if not BUILDING_64BIT:
|
||||
raise RuntimeError("Installer should be created on 64bit Python")
|
||||
|
||||
# Compile NSIS translations
|
||||
safe_remove("NSIS_Installer.nsi")
|
||||
safe_remove("NSIS_Installer.nsi.tmp")
|
||||
@@ -258,8 +240,8 @@ if __name__ == "__main__":
|
||||
[
|
||||
"makensis.exe",
|
||||
"/V3",
|
||||
"/DSAB_PRODUCT=%s" % RELEASE_NAME,
|
||||
"/DSAB_VERSION=%s" % RELEASE_VERSION,
|
||||
"/DSAB_VERSIONKEY=%s" % ".".join(map(str, RELEASE_VERSION_TUPLE)),
|
||||
"/DSAB_FILE=%s" % RELEASE_INSTALLER,
|
||||
"NSIS_Installer.nsi.tmp",
|
||||
]
|
||||
@@ -288,11 +270,11 @@ if __name__ == "__main__":
|
||||
# Otherwise the signature of the main application becomes invalid
|
||||
if authority:
|
||||
files_to_sign = [
|
||||
"osx/par2/par2-turbo",
|
||||
"osx/par2/arm64/par2-turbo",
|
||||
"osx/unrar/unrar",
|
||||
"osx/unrar/arm64/unrar",
|
||||
"osx/7zip/7zz",
|
||||
"macos/par2/par2",
|
||||
"macos/par2/arm64/par2",
|
||||
"macos/unrar/unrar",
|
||||
"macos/unrar/arm64/unrar",
|
||||
"macos/7zip/7zz",
|
||||
]
|
||||
for file_to_sign in files_to_sign:
|
||||
print("Signing %s with hardended runtime" % file_to_sign)
|
||||
@@ -305,7 +287,7 @@ if __name__ == "__main__":
|
||||
"--options",
|
||||
"runtime",
|
||||
"--entitlements",
|
||||
"builder/osx/entitlements.plist",
|
||||
"builder/macos/entitlements.plist",
|
||||
"-s",
|
||||
authority,
|
||||
file_to_sign,
|
||||
@@ -355,8 +337,8 @@ if __name__ == "__main__":
|
||||
if authority not in sign_result or "adhoc" in sign_result or "invalid" in sign_result:
|
||||
raise RuntimeError("Signature of %s seems invalid!" % file_to_check)
|
||||
|
||||
# Only notarize for real builds that we want to deploy
|
||||
if notarization_user and notarization_pass and RELEASE_THIS:
|
||||
# Always notarize, as newer macOS versions don't allow any code without it
|
||||
if notarization_user and notarization_pass:
|
||||
# Prepare zip to upload to notarization service
|
||||
print("Creating zip to send to Apple notarization service")
|
||||
# We need to use ditto, otherwise the signature gets lost!
|
||||
@@ -390,8 +372,6 @@ if __name__ == "__main__":
|
||||
# Staple the notarization!
|
||||
print("Approved! Stapling the result to the app")
|
||||
run_external_command(["xcrun", "stapler", "staple", "dist/SABnzbd.app"])
|
||||
elif notarization_user and notarization_pass:
|
||||
print("Notarization skipped, tag commit to trigger notarization!")
|
||||
else:
|
||||
print("Notarization skipped, NOTARIZATION_USER or NOTARIZATION_PASS missing.")
|
||||
else:
|
||||
@@ -449,7 +429,7 @@ if __name__ == "__main__":
|
||||
tarinfo.uid = 0
|
||||
tarinfo.gid = 0
|
||||
if _file in ("SABnzbd.py", "Sample-PostProc.sh", "make_mo.py", "msgfmt.py"):
|
||||
# Force Linux/OSX scripts as executable
|
||||
# Force Linux/macOS scripts as executable
|
||||
tarinfo.mode = 0o755
|
||||
else:
|
||||
tarinfo.mode = 0o644
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
PyGithub==2.1.1
|
||||
praw==7.7.1
|
||||
PyGithub==2.6.1
|
||||
praw==7.8.1
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team (sabnzbd.org)
|
||||
# Copyright 2008-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -26,23 +26,23 @@ import praw
|
||||
|
||||
from constants import (
|
||||
RELEASE_VERSION,
|
||||
RELEASE_VERSION_BASE,
|
||||
PRERELEASE,
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_BINARY,
|
||||
RELEASE_INSTALLER,
|
||||
RELEASE_MACOS,
|
||||
RELEASE_README,
|
||||
RELEASE_THIS,
|
||||
RELEASE_TITLE,
|
||||
APPDATA_FILE,
|
||||
ON_GITHUB_ACTIONS,
|
||||
)
|
||||
|
||||
# Verify we have all assets
|
||||
files_to_check = (
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
RELEASE_BINARY,
|
||||
RELEASE_INSTALLER,
|
||||
RELEASE_MACOS,
|
||||
RELEASE_README,
|
||||
@@ -53,9 +53,14 @@ for file_to_check in files_to_check:
|
||||
print("All release files are present")
|
||||
|
||||
# Verify that appdata file is updated
|
||||
if not PRERELEASE:
|
||||
if not isinstance(ET.parse(APPDATA_FILE).find(f"./releases/release[@version='{RELEASE_VERSION}']"), ET.Element):
|
||||
raise RuntimeError(f"Could not find {RELEASE_VERSION} in {APPDATA_FILE}")
|
||||
if not isinstance(ET.parse(APPDATA_FILE).find(f"./releases/release[@version='{RELEASE_VERSION_BASE}']"), ET.Element):
|
||||
release_missing = f"Could not find {RELEASE_VERSION_BASE} in {APPDATA_FILE}"
|
||||
if RELEASE_THIS:
|
||||
raise RuntimeError(release_missing)
|
||||
elif ON_GITHUB_ACTIONS:
|
||||
print(f"::warning file={APPDATA_FILE},title=Missing release::{release_missing}")
|
||||
else:
|
||||
print(release_missing)
|
||||
|
||||
# Calculate hashes for Synology release
|
||||
with open(RELEASE_SRC, "rb") as inp_file:
|
||||
@@ -233,7 +238,7 @@ if RELEASE_THIS and gh_token:
|
||||
readme_lines = readme_file.readlines()
|
||||
|
||||
# Put the download link after the title
|
||||
readme_lines[2] = "## https://sabnzbd.org/downloads\n"
|
||||
readme_lines[2] = "## https://sabnzbd.org/downloads\n\n"
|
||||
|
||||
# Use the header in the readme as title
|
||||
title = readme_lines[0]
|
||||
|
||||
@@ -1,27 +1,18 @@
|
||||
# Basic build requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
pyinstaller==6.2.0
|
||||
packaging==23.2
|
||||
pyinstaller-hooks-contrib==2023.10
|
||||
pyinstaller==6.14.1
|
||||
packaging==25.0
|
||||
pyinstaller-hooks-contrib==2025.5
|
||||
altgraph==0.17.4
|
||||
wrapt==1.16.0
|
||||
setuptools==68.2.2
|
||||
certifi
|
||||
|
||||
# Required on 32bit Windows, exclude it based on Python-version
|
||||
importlib_metadata==6.8.0; python_version < '3.10'
|
||||
importlib_resources==6.1.1; python_version < '3.10'
|
||||
zipp==3.17.0; python_version < '3.10'
|
||||
|
||||
# orjson does not support 32bit Windows, also exclude based on Python-version
|
||||
orjson==3.9.10; python_version > '3.8'
|
||||
wrapt==1.17.2
|
||||
setuptools==80.9.0
|
||||
|
||||
# For the Windows build
|
||||
pefile==2023.2.7; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.2; sys_platform == 'win32'
|
||||
pefile==2024.8.26; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.3; sys_platform == 'win32'
|
||||
|
||||
# For the macOS build
|
||||
dmgbuild==1.6.1; sys_platform == 'darwin'
|
||||
dmgbuild==1.6.5; sys_platform == 'darwin'
|
||||
mac-alias==2.2.2; sys_platform == 'darwin'
|
||||
macholib==1.16.3; sys_platform == 'darwin'
|
||||
ds-store==1.3.1; sys_platform == 'darwin'
|
||||
|
||||
@@ -42,13 +42,47 @@ Unicode true
|
||||
RMDir /r "${idir}"
|
||||
!macroend
|
||||
|
||||
!define RemovePrevShortcuts "!insertmacro RemovePrevShortcuts"
|
||||
!macro RemovePrevShortcuts
|
||||
; Remove shortcuts, starting with current user ones (from old installs)
|
||||
SetShellVarContext current
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url"
|
||||
RMDir "$SMPROGRAMS\$MUI_TEMP"
|
||||
Delete "$SMPROGRAMS\Startup\SABnzbd.lnk"
|
||||
Delete "$DESKTOP\SABnzbd.lnk"
|
||||
|
||||
SetShellVarContext all
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url"
|
||||
RMDir "$SMPROGRAMS\$MUI_TEMP"
|
||||
Delete "$SMPROGRAMS\Startup\SABnzbd.lnk"
|
||||
Delete "$DESKTOP\SABnzbd.lnk"
|
||||
!macroend
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Define names of the product
|
||||
Name "${SAB_PRODUCT}"
|
||||
Name "SABnzbd ${SAB_VERSION}"
|
||||
VIProductVersion "${SAB_VERSIONKEY}"
|
||||
VIFileVersion "${SAB_VERSIONKEY}"
|
||||
|
||||
VIAddVersionKey "Comments" "SABnzbd ${SAB_VERSION}"
|
||||
VIAddVersionKey "CompanyName" "The SABnzbd-Team"
|
||||
VIAddVersionKey "FileDescription" "SABnzbd ${SAB_VERSION}"
|
||||
VIAddVersionKey "FileVersion" "${SAB_VERSION}"
|
||||
VIAddVersionKey "LegalCopyright" "The SABnzbd-Team"
|
||||
VIAddVersionKey "ProductName" "SABnzbd ${SAB_VERSION}"
|
||||
VIAddVersionKey "ProductVersion" "${SAB_VERSION}"
|
||||
|
||||
OutFile "${SAB_FILE}"
|
||||
InstallDir "$PROGRAMFILES\SABnzbd"
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Some default compiler settings (uncomment and change at will):
|
||||
SetCompress auto ; (can be off or force)
|
||||
@@ -141,11 +175,13 @@ Unicode true
|
||||
!insertmacro MUI_LANGUAGE "Polish"
|
||||
!insertmacro MUI_LANGUAGE "Swedish"
|
||||
!insertmacro MUI_LANGUAGE "Danish"
|
||||
!insertmacro MUI_LANGUAGE "Italian"
|
||||
!insertmacro MUI_LANGUAGE "Norwegian"
|
||||
!insertmacro MUI_LANGUAGE "Romanian"
|
||||
!insertmacro MUI_LANGUAGE "Spanish"
|
||||
!insertmacro MUI_LANGUAGE "PortugueseBR"
|
||||
!insertmacro MUI_LANGUAGE "Serbian"
|
||||
!insertmacro MUI_LANGUAGE "Turkish"
|
||||
!insertmacro MUI_LANGUAGE "Hebrew"
|
||||
!insertmacro MUI_LANGUAGE "Russian"
|
||||
!insertmacro MUI_LANGUAGE "Czech"
|
||||
@@ -170,6 +206,24 @@ Section "SABnzbd" SecDummy
|
||||
SetOutPath "$INSTDIR"
|
||||
SetShellVarContext all
|
||||
|
||||
DetailPrint $(MsgShutting)
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Shutdown any running service
|
||||
|
||||
!insertmacro SERVICE "stop" "SABnzbd" ""
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Terminate SABnzbd.exe
|
||||
loop:
|
||||
${nsProcess::FindProcess} "SABnzbd.exe" $R0
|
||||
StrCmp $R0 0 0 endcheck
|
||||
${nsProcess::CloseProcess} "SABnzbd.exe" $R0
|
||||
Sleep 500
|
||||
Goto loop
|
||||
endcheck:
|
||||
${nsProcess::Unload}
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Make sure old versions are gone (reg-key already read in onInt)
|
||||
StrCmp $PREV_INST_DIR "" noPrevInstallRemove
|
||||
@@ -200,9 +254,14 @@ Section "SABnzbd" SecDummy
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLUpdateInfo" 'https://sabnzbd.org/'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Comments" 'The automated Usenet download tool'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayIcon" '$INSTDIR\icons\sabnzbd.ico'
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "EstimatedSize" 25674
|
||||
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "EstimatedSize" 40674
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "NoRepair" -1
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "NoModify" -1
|
||||
|
||||
WriteRegStr HKEY_CURRENT_USER "Software\Classes\AppUserModelId\SABnzbd" "DisplayName" "SABnzbd"
|
||||
WriteRegStr HKEY_CURRENT_USER "Software\Classes\AppUserModelId\SABnzbd" "IconUri" '$INSTDIR\icons\sabnzbd16_32.ico'
|
||||
|
||||
; write out uninstaller
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
|
||||
@@ -235,15 +294,13 @@ Function .onInit
|
||||
${If} ${RunningX64}
|
||||
StrCpy $INSTDIR "$PROGRAMFILES64\SABnzbd"
|
||||
${Else}
|
||||
MessageBox MB_OK $(MsgOnly64bit)
|
||||
ExecShell "open" "https://sabnzbd.org/downloads"
|
||||
MessageBox MB_OK|MB_ICONSTOP $(MsgOnly64bit)
|
||||
Abort
|
||||
${EndIf}
|
||||
|
||||
; Python 3.9 no longer supports Windows 7
|
||||
${If} ${AtMostWin8}
|
||||
MessageBox MB_OK $(MsgNoWin7)
|
||||
ExecShell "open" "https://sabnzbd.org/downloads"
|
||||
MessageBox MB_OK|MB_ICONSTOP $(MsgNoWin7)
|
||||
Abort
|
||||
${EndIf}
|
||||
|
||||
@@ -261,8 +318,9 @@ Function .onInit
|
||||
;------------------------------------------------------------------
|
||||
; Check what the user has currently set for install options
|
||||
SetShellVarContext current
|
||||
IfFileExists "$SMPROGRAMS\Startup\SABnzbd.lnk" 0 endCheckStartup
|
||||
IfFileExists "$SMPROGRAMS\Startup\SABnzbd.lnk" 0 endCheckStartupCurrent
|
||||
SectionSetFlags ${startup} 1
|
||||
endCheckStartupCurrent:
|
||||
SetShellVarContext all
|
||||
IfFileExists "$SMPROGRAMS\Startup\SABnzbd.lnk" 0 endCheckStartup
|
||||
SectionSetFlags ${startup} 1
|
||||
@@ -270,11 +328,12 @@ Function .onInit
|
||||
|
||||
SetShellVarContext current
|
||||
IfFileExists "$DESKTOP\SABnzbd.lnk" endCheckDesktop 0
|
||||
SectionSetFlags ${desktop} 0 ; SAB is installed but desktop-icon not, so uncheck it
|
||||
SetShellVarContext all
|
||||
IfFileExists "$DESKTOP\SABnzbd.lnk" endCheckDesktop 0
|
||||
SectionSetFlags ${desktop} 0 ; SAB is installed but desktop-icon not, so uncheck it
|
||||
; If not present for current user, first check all user folder
|
||||
SetShellVarContext all
|
||||
IfFileExists "$DESKTOP\SABnzbd.lnk" endCheckDesktop 0
|
||||
SectionSetFlags ${desktop} 0 ; SAB is installed but desktop-icon not, so uncheck it
|
||||
endCheckDesktop:
|
||||
SetShellVarContext all
|
||||
|
||||
Push $1
|
||||
ReadRegStr $1 HKCR ".nzb" "" ; read current file association
|
||||
@@ -286,31 +345,6 @@ Function .onInit
|
||||
; Display language chooser
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; make sure user terminates sabnzbd.exe or else abort
|
||||
;
|
||||
loop:
|
||||
${nsProcess::FindProcess} "SABnzbd.exe" $R0
|
||||
StrCmp $R0 0 0 endcheck
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall
|
||||
exitinstall:
|
||||
${nsProcess::Unload}
|
||||
Abort
|
||||
endcheck:
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; make sure both services aren't running
|
||||
;
|
||||
!insertmacro SERVICE "running" "SABnzbd" ""
|
||||
Pop $0 ;response
|
||||
!insertmacro SERVICE "running" "SABHelper" ""
|
||||
Pop $1
|
||||
${If} $0 == true
|
||||
${OrIf} $1 == true
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall
|
||||
; exitinstall already defined above
|
||||
${EndIf}
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Tell users about the service change
|
||||
;
|
||||
@@ -318,7 +352,8 @@ Function .onInit
|
||||
Pop $0 ;response
|
||||
${If} $0 == true
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgServChange) IDOK removeservices IDCANCEL exitinstall
|
||||
; exitinstall already defined above
|
||||
exitinstall:
|
||||
Abort
|
||||
removeservices:
|
||||
!insertmacro SERVICE "delete" "SABHelper" ""
|
||||
!insertmacro SERVICE "delete" "SABnzbd" ""
|
||||
@@ -340,51 +375,24 @@ UninstallText $(MsgUninstall)
|
||||
|
||||
Section "un.$(MsgDelProgram)" Uninstall
|
||||
;make sure sabnzbd.exe isn't running..if so shut it down
|
||||
DetailPrint $(MsgShutting)
|
||||
${nsProcess::KillProcess} "SABnzbd.exe" $R0
|
||||
${nsProcess::Unload}
|
||||
DetailPrint "Process Killed"
|
||||
|
||||
; add delete commands to delete whatever files/registry keys/etc you installed here.
|
||||
Delete "$INSTDIR\uninstall.exe"
|
||||
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd"
|
||||
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd"
|
||||
DeleteRegKey HKEY_CURRENT_USER "Software\Classes\AppUserModelId\SABnzbd"
|
||||
DeleteRegKey HKEY_CURRENT_USER "Software\SABnzbd"
|
||||
|
||||
${RemovePrev} "$INSTDIR"
|
||||
${RemovePrevShortcuts}
|
||||
|
||||
; Remove firewall entries
|
||||
liteFirewallW::RemoveRule "$INSTDIR\SABnzbd.exe" "SABnzbd"
|
||||
liteFirewallW::RemoveRule "$INSTDIR\SABnzbd-console.exe" "SABnzbd-console"
|
||||
|
||||
SetShellVarContext all
|
||||
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url"
|
||||
RMDir "$SMPROGRAMS\$MUI_TEMP"
|
||||
|
||||
Delete "$SMPROGRAMS\Startup\SABnzbd.lnk"
|
||||
|
||||
Delete "$DESKTOP\SABnzbd.lnk"
|
||||
|
||||
SetShellVarContext current
|
||||
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url"
|
||||
RMDir "$SMPROGRAMS\$MUI_TEMP"
|
||||
|
||||
Delete "$SMPROGRAMS\Startup\SABnzbd.lnk"
|
||||
|
||||
Delete "$DESKTOP\SABnzbd.lnk"
|
||||
|
||||
DeleteRegKey HKEY_CURRENT_USER "Software\SABnzbd"
|
||||
|
||||
${unregisterExtension} ".nzb" "NZB File"
|
||||
${RefreshShellIcons}
|
||||
|
||||
@@ -404,13 +412,13 @@ SectionEnd
|
||||
|
||||
LangString MsgSupportUs ${LANG_ENGLISH} "Support the project, Donate!"
|
||||
|
||||
LangString MsgCloseSab ${LANG_ENGLISH} "Please close $\"SABnzbd.exe$\" first"
|
||||
|
||||
LangString MsgServChange ${LANG_ENGLISH} "The SABnzbd Windows Service changed in SABnzbd 3.0.0. $\nYou will need to reinstall the SABnzbd service. $\n$\nClick `OK` to remove the existing services or `Cancel` to cancel this upgrade."
|
||||
|
||||
LangString MsgOnly64bit ${LANG_ENGLISH} "The installer only supports 64-bit Windows, use the standalone version to run on 32-bit Windows."
|
||||
LangString MsgOnly64bit ${LANG_ENGLISH} "SABnzbd only supports 64-bit Windows."
|
||||
|
||||
LangString MsgNoWin7 ${LANG_ENGLISH} "The installer only supports Windows 8.1 and above, use the standalone legacy version to run on older Windows version."
|
||||
LangString MsgNoWin7 ${LANG_ENGLISH} "SABnzbd only supports Windows 8.1 and above."
|
||||
|
||||
LangString MsgShutting ${LANG_ENGLISH} "Shutting down SABnzbd"
|
||||
|
||||
LangString MsgUninstall ${LANG_ENGLISH} "This will uninstall SABnzbd from your system"
|
||||
|
||||
@@ -424,10 +432,6 @@ SectionEnd
|
||||
|
||||
LangString MsgDelSettings ${LANG_ENGLISH} "Delete Settings"
|
||||
|
||||
LangString MsgRemoveOld ${LANG_ENGLISH} "You cannot overwrite an existing installation. $\n$\nClick `OK` to remove the previous version or `Cancel` to cancel this upgrade."
|
||||
|
||||
LangString MsgRemoveOld2 ${LANG_ENGLISH} "Your settings and data will be preserved."
|
||||
|
||||
LangString MsgLangCode ${LANG_ENGLISH} "en"
|
||||
|
||||
Function un.onInit
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
##
|
||||
## Bad URL Fetch Email template for SABnzbd
|
||||
## This a Cheetah template
|
||||
## Documentation: http://sabnzbd.wikidot.com/email-templates
|
||||
## Documentation: https://sabnzbd.org/wiki/extra/email-templates
|
||||
##
|
||||
## Newlines and whitespace are significant!
|
||||
##
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
##
|
||||
## Default Email template for SABnzbd
|
||||
## This a Cheetah template
|
||||
## Documentation: http://sabnzbd.wikidot.com/email-templates
|
||||
## Documentation: https://sabnzbd.org/wiki/extra/email-templates
|
||||
##
|
||||
## Newlines and whitespace are significant!
|
||||
##
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
##
|
||||
## RSS Email template for SABnzbd
|
||||
## This a Cheetah template
|
||||
## Documentation: http://sabnzbd.wikidot.com/email-templates
|
||||
## Documentation: https://sabnzbd.org/wiki/extra/email-templates
|
||||
##
|
||||
## Newlines and whitespace are significant!
|
||||
##
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<div class="modal-body">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<!--#if not $windows#-->
|
||||
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" id="show_hidden_folders"> <span>$T('hiddenFolders')</span>
|
||||
</label>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span> $T('cancel')</button>
|
||||
<button type="button" class="btn btn-default" id="filebrowser_modal_accept"><span class="glyphicon glyphicon-ok"></span> $T('rss-accept')</button>
|
||||
</div>
|
||||
|
||||
@@ -70,27 +70,7 @@
|
||||
<script type="text/javascript" src="${root}staticcfg/js/script.js?v=$version"></script>
|
||||
<script type="text/javascript">
|
||||
// Set default functions for the autocomplete everywhere
|
||||
jQuery.extend(jQuery.fn.typeahead.defaults, {
|
||||
source: function (query, process) {
|
||||
// If there's no separator, it must be a relative path
|
||||
if(query.split(folderSeperator).length < 2 && this.\$element.data('initialdir')) {
|
||||
query = this.\$element.data('initialdir') + folderSeperator + query;
|
||||
}
|
||||
// Get info from the API
|
||||
return jQuery.get(folderBrowseUrl + '&compact=1&term=' + query, function (data) {
|
||||
return process(data);
|
||||
});
|
||||
},
|
||||
updater: function(item) {
|
||||
// Is it a relative path?
|
||||
if(item.indexOf(this.\$element.data('initialdir')) === 0) {
|
||||
// Remove start
|
||||
return item.replace(this.\$element.data('initialdir')+folderSeperator, '');
|
||||
}
|
||||
// Full path
|
||||
return item
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// to top right away
|
||||
if(window.location.hash) {
|
||||
@@ -112,7 +92,7 @@
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
|
||||
<a class="navbar-logo navbar-logo-small" href="${root}" title="$T('Home')">
|
||||
<a class="navbar-logo navbar-logo-small" href="${root}" title="$T('Home')" data-placement="bottom">
|
||||
#include $webdir + "/staticcfg/images/logo-small.svg"#
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -29,18 +29,8 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">OpenSSL:</th>
|
||||
<td>
|
||||
$ssl_version
|
||||
</td>
|
||||
<td>$ssl_version</td>
|
||||
</tr>
|
||||
<!--#if not $certificate_validation#-->
|
||||
<tr>
|
||||
<th scope="row"></th>
|
||||
<td>
|
||||
<span class="label label-danger">$T('warning')</span> $T('explain-nosslcontext')
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#if not $windows and not $macos#-->
|
||||
<tr>
|
||||
<th scope="row">Par2cmdline-turbo:</th>
|
||||
@@ -88,8 +78,8 @@
|
||||
<td><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('menu-irc') </th>
|
||||
<td><a href="irc://irc.synirc.net/#sabnzbd"><i>#sabnzbd</i> on <i>irc.synirc.net</i></a> $T('or') (<a href="http://sabnzbd.org/live-chat/" target="_blank">webchat</a>)</td>
|
||||
<th scope="row">$T('menu-live-chat') </th>
|
||||
<td><a href="https://sabnzbd.org/live-chat/" target="_blank">https://sabnzbd.org/live-chat/</a> (IRC & Discord)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('menu-issues') </th>
|
||||
@@ -106,7 +96,7 @@
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding">
|
||||
<h5 class="copyright">Copyright © 2007-2023 The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
|
||||
<h5 class="copyright">Copyright © 2007-2025 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
|
||||
<p class="copyright"><small>$T('yourRights')</small></p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="password_file">$T('opt-password_file')</label>
|
||||
<input type="text" name="password_file" id="password_file" value="$password_file" />
|
||||
<input type="text" name="password_file" id="password_file" value="$password_file" class="fileBrowserField" data-initialdir="$my_home" data-files="1" />
|
||||
<span class="desc">$T('explain-password_file')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -133,7 +133,7 @@
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
// Add autocomplete and file-browser
|
||||
jQuery('.col1 input[name$="_dir"]').typeahead().fileBrowser();
|
||||
jQuery('.col1 input[name$="_dir"], #password_file').typeahead().fileBrowser();
|
||||
|
||||
jQuery('#purge_log_files').click(function () {
|
||||
if ( confirm("$T('confirm')") ) {
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port">$T('opt-port')</label>
|
||||
<input type="number" name="port" id="port" value="$port" size="8" data-original="$port" />
|
||||
<input type="number" name="port" id="port" value="$port" size="8" data-original="$port" min="0" max="65535" />
|
||||
<span class="desc">$T('explain-port')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -35,7 +35,7 @@
|
||||
<span class="desc">$T('explain-enable_https')</span>
|
||||
<span class="desc"><span class="label label-warning">$T('warning').upper()</span> $T('explain-enable_https_warning')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="web_dir">$T('opt-web_dir')</label>
|
||||
<select name="web_dir" id="web_dir">
|
||||
<!--#for $webline in $web_list#-->
|
||||
@@ -69,12 +69,12 @@
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="https_port">$T('opt-https_port')</label>
|
||||
<input type="number" name="https_port" id="https_port" value="$https_port" size="8" data-original="$https_port" />
|
||||
<input type="number" name="https_port" id="https_port" value="$https_port" size="8" data-original="$https_port" min="0" max="65535" />
|
||||
<span class="desc">$T('explain-https_port')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="https_cert">$T('opt-https_cert')</label>
|
||||
<input type="text" name="https_cert" id="https_cert" value="$https_cert" />
|
||||
<input type="text" name="https_cert" id="https_cert" value="$https_cert" class="fileBrowserField" data-initialdir="$my_lcldata" data-files="1" />
|
||||
<button class="btn btn-default generate_cert" title="$T('explain-new-cert')">
|
||||
<span class="glyphicon glyphicon-repeat"></span>
|
||||
</button>
|
||||
@@ -82,7 +82,7 @@
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="https_key">$T('opt-https_key')</label>
|
||||
<input type="text" name="https_key" id="https_key" value="$https_key" />
|
||||
<input type="text" name="https_key" id="https_key" value="$https_key" class="fileBrowserField" data-initialdir="$my_lcldata" data-files="1" />
|
||||
<button class="btn btn-default generate_cert" title="$T('explain-new-cert')">
|
||||
<span class="glyphicon glyphicon-repeat"></span>
|
||||
</button>
|
||||
@@ -90,7 +90,7 @@
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="https_chain">$T('opt-https_chain')</label>
|
||||
<input type="text" name="https_chain" id="https_chain" value="$https_chain" />
|
||||
<input type="text" name="https_chain" id="https_chain" value="$https_chain" class="fileBrowserField" data-initialdir="$my_lcldata" data-files="1" />
|
||||
<span class="desc">$T('explain-https_chain')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -136,14 +136,14 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="apikey_display">$T('opt-apikey')</label>
|
||||
<input type="text" id="apikey_display" class="fileBrowserField" value="$apikey" readonly />
|
||||
<input type="text" id="apikey_display" value="$apikey" readonly />
|
||||
<button class="btn btn-default show_qrcode" title="$T('explain-qr-code')" rel="$apikey" ><span class="glyphicon glyphicon-qrcode"></span></button>
|
||||
<button class="btn btn-default generate_key" id="generate_new_apikey" title="$T('button-apikey')"><span class="glyphicon glyphicon-repeat"></span></button>
|
||||
<span class="desc">$T('explain-apikey')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nzbkey">$T('opt-nzbkey')</label>
|
||||
<input type="text" id="nzbkey" class="fileBrowserField" value="$nzb_key" readonly />
|
||||
<input type="text" id="nzbkey" value="$nzb_key" readonly />
|
||||
<button class="btn btn-default show_qrcode" title="$T('explain-qr-code')" rel="$nzb_key" ><span class="glyphicon glyphicon-qrcode"></span></button>
|
||||
<button class="btn btn-default generate_key" id="generate_new_nzbkey" title="$T('button-apikey')"><span class="glyphicon glyphicon-repeat"></span></button>
|
||||
<span class="desc">$T('explain-nzbkey')</span>
|
||||
@@ -172,11 +172,10 @@
|
||||
<option value="1" <!--#if $check_new_rel == 1 then 'selected="selected"' else ""#--> >$T('on')</option>
|
||||
<option value="2" <!--#if $check_new_rel == 2 then 'selected="selected"' else ""#--> >$T('also-test')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-check_new_rel')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings <!--#if int($certificate_validation) == 0 then "disabled" else ""#-->">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="enable_https_verification">$T('opt-enable_https_verification')</label>
|
||||
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#--> />
|
||||
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_https_verification')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
@@ -342,6 +341,9 @@ jQuery(document).ready(function(){
|
||||
}
|
||||
});
|
||||
|
||||
// Add autocomplete and file-browser
|
||||
jQuery('.fileBrowserField').typeahead().fileBrowser();
|
||||
|
||||
jQuery('.show_qrcode').click(function (e) {
|
||||
// Show in modal
|
||||
jQuery('#modal_qr .modal-dialog').width(330)
|
||||
|
||||
@@ -2,19 +2,21 @@
|
||||
<!--#set global $help_uri = $confighelpuri + "notifications"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#import apprise#-->
|
||||
|
||||
<!--#def show_notify_checkboxes($section_label)#-->
|
||||
<!--#for $type in $notify_types#-->
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="${section_label}_prio_$type">
|
||||
$T($notify_types[$type]).replace('/', ' / ')
|
||||
</label>
|
||||
<input type="checkbox" name="${section_label}_prio_$type" id="${section_label}_prio_$type" value="1" <!--#if int($getVar($section_label + '_prio_' + $type)) > 0 then 'checked="checked"' else ""#--> />
|
||||
<input type="checkbox" name="${section_label}_prio_$type" id="${section_label}_prio_$type" value="1" <!--#if $getVar($section_label + '_prio_' + $type) then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<!--#end def#-->
|
||||
|
||||
<!--#def show_cat_box($section_label)#-->
|
||||
<div class="col2-cats" <!--#if int($getVar($section_label + '_enable')) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col2-cats" <!--#if $getVar($section_label + '_enable') then '' else 'style="display:none"'#-->>
|
||||
<hr>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="${section_label}_cats" multiple="multiple" class="multiple_cats" size="$len($categories)">
|
||||
@@ -56,12 +58,12 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_full">$T('opt-email_full')</label>
|
||||
<input type="checkbox" name="email_full" id="email_full" value="1" <!--#if int($email_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
<input type="checkbox" name="email_full" id="email_full" value="1" <!--#if $email_full then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-email_full')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_rss">$T('opt-email_rss')</label>
|
||||
<input type="checkbox" name="email_rss" id="email_rss" value="1" <!--#if int($email_rss) > 0 then 'checked="checked"' else ""#--> />
|
||||
<input type="checkbox" name="email_rss" id="email_rss" value="1" <!--#if $email_rss then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-email_rss')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -105,12 +107,12 @@
|
||||
<h3>$T('section-NC')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="ncenter_enable" id="ncenter_enable" value="1" <!--#if int($ncenter_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="ncenter_enable" id="ncenter_enable" value="1" <!--#if $ncenter_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="ncenter_enable"> $T('opt-ncenter_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col1" <!--#if int($ncenter_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $ncenter_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
$show_notify_checkboxes('ncenter')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
@@ -130,13 +132,13 @@
|
||||
<h3>$T('section-AC')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="acenter_enable" id="acenter_enable" value="1" <!--#if int($acenter_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="acenter_enable" id="acenter_enable" value="1" <!--#if $acenter_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="acenter_enable"> $T('opt-acenter_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
$show_cat_box('acenter')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($acenter_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $acenter_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
$show_notify_checkboxes('acenter')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
@@ -156,13 +158,13 @@
|
||||
<h3>$T('section-OSD') <a href="$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="ntfosd_enable" id="ntfosd_enable" value="1" <!--#if int($ntfosd_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="ntfosd_enable" id="ntfosd_enable" value="1" <!--#if $ntfosd_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="ntfosd_enable"> $T('opt-ntfosd_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
$show_cat_box('ntfosd')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($ntfosd_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $ntfosd_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
$show_notify_checkboxes('ntfosd')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
@@ -176,19 +178,64 @@
|
||||
</div>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="section" id="apprise">
|
||||
<div class="col2">
|
||||
<h3>Apprise <a href="$help_uri#apprise" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="apprise_enable" id="apprise_enable" value="1" <!--#if $apprise_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="apprise_enable"> $T('opt-apprise_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-apprise_enable')</em><br>
|
||||
<p>$T('version'): ${apprise.__version__}</p>
|
||||
|
||||
$show_cat_box('apprise')
|
||||
</div>
|
||||
<div class="col1" <!--#if $apprise_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="apprise_urls">$T('opt-apprise_urls')</label>
|
||||
<input type="text" name="apprise_urls" id="apprise_urls" value="$apprise_urls" />
|
||||
<span class="desc">$T('explain-apprise_urls'). <br>$T('readwiki')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<span class="desc">$T('explain-apprise_extra_urls')</span>
|
||||
</div>
|
||||
<!--#set $section_label = 'apprise'#-->
|
||||
<!--#for $type in $notify_types#-->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${section_label}_target_${type}">
|
||||
$T($notify_types[$type]).replace('/', ' / ')
|
||||
</label>
|
||||
<input type="checkbox" name="${section_label}_target_${type}_enable" id="${section_label}_target_${type}_enable" value="1" <!--#if $getVar($section_label + '_target_' + $type + '_enable') then 'checked="checked"' else ""#--> />
|
||||
<input type="text" name="${section_label}_target_${type}" id="${section_label}_target_${type}" value="$getVar($section_label + '_target_' + $type)" placeholder="$T('opt-apprise_urls')" />
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_apprise"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="nscript">
|
||||
<div class="col2">
|
||||
<h3>$T('section-NScript') <a href="$help_uri#nscript" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="nscript_enable" id="nscript_enable" value="1" <!--#if int($nscript_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="nscript_enable" id="nscript_enable" value="1" <!--#if $nscript_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="nscript_enable"> $T('opt-nscript_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-nscript_enable')</em><br><a href="$help_uri#nscript" target="_blank">$T('readwiki')</a>
|
||||
$show_cat_box('nscript')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($nscript_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $nscript_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nscript_script">$T('opt-nscript_script')</label>
|
||||
@@ -202,7 +249,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nscript_parameters">$T('opt-nscript_parameters')</label>
|
||||
<input type="text" name="nscript_parameters" id="nscript_parameters" value="$nscript_parameters" />
|
||||
<span class="desc">$T('Optional') - $T('explain-nscript_parameters')</span>
|
||||
<span class="desc">$T('Optional') - $T('readwiki')</span>
|
||||
</div>
|
||||
$show_notify_checkboxes('nscript')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
@@ -220,14 +267,14 @@
|
||||
<h3>$T('section-Prowl')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="prowl_enable" id="prowl_enable" value="1" <!--#if int($prowl_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="prowl_enable" id="prowl_enable" value="1" <!--#if $prowl_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="prowl_enable"> $T('opt-prowl_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-prowl_enable')</em>
|
||||
$show_cat_box('prowl')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($prowl_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $prowl_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_apikey">$T('opt-prowl_apikey')</label>
|
||||
@@ -241,12 +288,12 @@
|
||||
$T($notify_types[$type]).replace('/', ' / ')
|
||||
</label>
|
||||
<select name="${section_label}_prio_$type" id="${section_label}_prio_$type">
|
||||
<option value="-3" <!--#if $getVar($section_label + '_prio_' + $type) == "-3" then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
<option value="-2" <!--#if $getVar($section_label + '_prio_' + $type) == "-2" then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $getVar($section_label + '_prio_' + $type) == "-1" then 'selected="selected"' else ""#--> >$T('prowl-moderate')</option>
|
||||
<option value="0" <!--#if $getVar($section_label + '_prio_' + $type) == "0" then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $getVar($section_label + '_prio_' + $type) == "1" then 'selected="selected"' else ""#--> >$T('prowl-high')</option>
|
||||
<option value="2" <!--#if $getVar($section_label + '_prio_' + $type) == "2" then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
<option value="-3" <!--#if $getVar($section_label + '_prio_' + $type) == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
<option value="-2" <!--#if $getVar($section_label + '_prio_' + $type) == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $getVar($section_label + '_prio_' + $type) == -1 then 'selected="selected"' else ""#--> >$T('prowl-moderate')</option>
|
||||
<option value="0" <!--#if $getVar($section_label + '_prio_' + $type) == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $getVar($section_label + '_prio_' + $type) == 1 then 'selected="selected"' else ""#--> >$T('prowl-high')</option>
|
||||
<option value="2" <!--#if $getVar($section_label + '_prio_' + $type) == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
@@ -266,14 +313,14 @@
|
||||
<h3>$T('section-Pushover')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="pushover_enable" id="pushover_enable" value="1" <!--#if int($pushover_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="pushover_enable" id="pushover_enable" value="1" <!--#if $pushover_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="pushover_enable"> $T('opt-pushover_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-pushover_enable')</em>
|
||||
$show_cat_box('pushover')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($pushover_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $pushover_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_token">$T('opt-pushover_token')</label>
|
||||
@@ -307,12 +354,12 @@
|
||||
$T($notify_types[$type]).replace('/', ' / ')
|
||||
</label>
|
||||
<select name="${section_label}_prio_$type" id="${section_label}_prio_$type">
|
||||
<option value="-3" <!--#if $getVar($section_label + '_prio_' + $type) == "-3" then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $getVar($section_label + '_prio_' + $type) == "-2" then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $getVar($section_label + '_prio_' + $type) == "-1" then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $getVar($section_label + '_prio_' + $type) == "0" then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $getVar($section_label + '_prio_' + $type) == "1" then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $getVar($section_label + '_prio_' + $type) == "2" then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
<option value="-3" <!--#if $getVar($section_label + '_prio_' + $type) == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $getVar($section_label + '_prio_' + $type) == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $getVar($section_label + '_prio_' + $type) == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $getVar($section_label + '_prio_' + $type) == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $getVar($section_label + '_prio_' + $type) == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $getVar($section_label + '_prio_' + $type) == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
@@ -331,14 +378,14 @@
|
||||
<h3>$T('section-Pushbullet')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="pushbullet_enable" id="pushbullet_enable" value="1" <!--#if int($pushbullet_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><input type="checkbox" name="pushbullet_enable" id="pushbullet_enable" value="1" <!--#if $pushbullet_enable then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="pushbullet_enable"> $T('opt-pushbullet_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-pushbullet_enable')</em>
|
||||
$show_cat_box('pushbullet')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($pushbullet_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<div class="col1" <!--#if $pushbullet_enable then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_apikey">$T('opt-pushbullet_apikey')</label>
|
||||
@@ -426,7 +473,7 @@ jQuery(document).ready(function(){
|
||||
}
|
||||
})
|
||||
}
|
||||
jQuery('#test_email, #test_notif, #test_windows, #test_pushbullet, #test_pushover, #test_prowl, #test_osd, #test_nscript').click(function () {
|
||||
jQuery('#test_email, #test_notif, #test_windows, #test_apprise, #test_pushbullet, #test_pushover, #test_prowl, #test_osd, #test_nscript').click(function () {
|
||||
testNotification(this)
|
||||
})
|
||||
});
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</label>
|
||||
|
||||
<div class="advanced-buttonSeperator"></div>
|
||||
<div class="chart-selector-container" title="$T('selectedDates')">
|
||||
<div class="chart-selector-container" title="$T('selectedDates')" data-placement="bottom">
|
||||
<span class="glyphicon glyphicon-signal"></span>
|
||||
<!--#set today = datetime.date.today()#-->
|
||||
<input type="date" name="chart-start" id="chart-start" value="<!--#echo (today-datetime.timedelta(days=30)).strftime('%Y-%m-%d')#-->"> -
|
||||
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="port">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port" size="8" value="563" min="0" />
|
||||
<input type="number" name="port" id="port" size="8" value="563" min="0" max="65535" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ssl">$T('srv-ssl')</label>
|
||||
@@ -91,14 +91,15 @@
|
||||
<label class="config" for="timeout">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout" min="20" max="240" /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
<div class="field-pair <!--#if int($certificate_validation) == 0 then "disabled" else ""#--> advanced-settings">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="ssl_verify">$T('opt-ssl_verify')</label>
|
||||
<select name="ssl_verify" id="ssl_verify" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" selected>$T('ssl_verify-strict')</option>
|
||||
<option value="1">$T('ssl_verify-normal')</option>
|
||||
<select name="ssl_verify" id="ssl_verify">
|
||||
<option value="3" selected>$T('ssl_verify-strict')</option>
|
||||
<option value="2">$T('ssl_verify-medium')</option>
|
||||
<option value="1">$T('ssl_verify-minimal')</option>
|
||||
<option value="0">$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('-', '<br/>-')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="ssl_ciphers">$T('opt-ssl_ciphers')</label>
|
||||
@@ -106,11 +107,6 @@
|
||||
<span class="desc">$T('explain-ssl_ciphers') <br>$T('readwiki')
|
||||
<a href="https://sabnzbd.org/wiki/advanced/ssl-ciphers" target="_blank">https://sabnzbd.org/wiki/advanced/ssl-ciphers</a></span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group" value="1" />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="required">$T('srv-required')</label>
|
||||
<input type="checkbox" name="required" id="required" value="1" />
|
||||
@@ -136,7 +132,7 @@
|
||||
<textarea name="notes" id="notes" rows="3" cols="50"></textarea>
|
||||
</div>
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<button class="btn btn-default addNewServer" disabled><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
@@ -147,7 +143,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--#set $prio_colors = ["#59cc33", "#3366cc","#7f33cc", "#cc33a6", "#cc3333"] #-->
|
||||
<!--#set $prio_colors = ["#59cc33", "#26a69a", "#3366cc", "#7f33cc", "#cc33a6", "#f39c12", "#cc3333", "#8d6e63"] #-->
|
||||
<!--#set $cur_prio_color = -1 #-->
|
||||
<!--#set $last_prio = -1 #-->
|
||||
<!--#for $cur, $server in enumerate($servers) #-->
|
||||
@@ -176,6 +172,9 @@
|
||||
</table>
|
||||
<button type="button" class="btn btn-default showserver"><span class="glyphicon glyphicon-pencil"></span> $T('showDetails')</button>
|
||||
<button type="button" class="btn btn-default clrServer"><span class="glyphicon glyphicon-remove"></span> $T('button-clrServer')</button>
|
||||
<!--#if $server['notes'] #-->
|
||||
<p>$server['notes'].replace('\n', '<br>')</p>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="col1" style="display:none;">
|
||||
<input type="hidden" name="enable" id="enable$cur" value="$int($server['enable'])" />
|
||||
@@ -190,7 +189,7 @@
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="port$cur">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port$cur" value="$server['port']" size="8" min="0" required />
|
||||
<input type="number" name="port" id="port$cur" value="$server['port']" size="8" min="0" max="65535" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ssl$cur">$T('srv-ssl')</label>
|
||||
@@ -223,14 +222,15 @@
|
||||
<input type="number" name="timeout" id="timeout$cur" value="$server['timeout']" min="20" max="240" required /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
|
||||
<div class="field-pair <!--#if int($certificate_validation) == 0 then "disabled" else ""#--> advanced-settings">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="ssl_verify$cur">$T('opt-ssl_verify')</label>
|
||||
<select name="ssl_verify" id="ssl_verify$cur" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" <!--#if $server['ssl_verify'] == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
|
||||
<option value="1" <!--#if $server['ssl_verify'] == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
|
||||
<select name="ssl_verify" id="ssl_verify$cur">
|
||||
<option value="3" <!--#if $server['ssl_verify'] == 3 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
|
||||
<option value="2" <!--#if $server['ssl_verify'] == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-medium')</option>
|
||||
<option value="1" <!--#if $server['ssl_verify'] == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-minimal')</option>
|
||||
<option value="0" <!--#if $server['ssl_verify'] == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('-', '<br/>-')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="ssl_ciphers$cur">$T('opt-ssl_ciphers')</label>
|
||||
@@ -248,11 +248,6 @@
|
||||
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-optional')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group$cur">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group$cur" value="1" <!--#if int($server['send_group']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="expire_date$cur">$T('srv-expire_date')</label>
|
||||
<input type="date" name="expire_date" id="expire_date$cur" value="$server['expire_date']" />
|
||||
@@ -298,7 +293,7 @@
|
||||
<p><b>$T('srv-expire_date'):</b> $(server['expire_date'])</p>
|
||||
<!--#end if#-->
|
||||
<!--#if $server['quota']#-->
|
||||
<p><b>$T('quota-left'):</b> $(server['quota_left'])B</p>
|
||||
<p><b>$T('quota-left'):</b> $(server['quota_left'])</p>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="server-chart" data-serverid="${cur}">
|
||||
@@ -469,8 +464,8 @@
|
||||
When finished loading
|
||||
**/
|
||||
jQuery(document).ready(function(){
|
||||
// Exception when change of priority, reload
|
||||
jQuery('input[name="priority"], input[name="displayname"]').on('change', function() {
|
||||
// Reload form in case we change items that make the servers appear different
|
||||
jQuery('input[name="priority"], input[name="displayname"], textarea[name="notes"]').on('change', function() {
|
||||
jQuery('.fullform').submit(function() {
|
||||
// No ajax this time
|
||||
jQuery('input[name="ajax"]').val('')
|
||||
@@ -564,9 +559,19 @@
|
||||
if(data.value.result) {
|
||||
resultBox.addClass('alert-success')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign"></span> ')
|
||||
|
||||
// Allow adding the new server if we are in the new-server section
|
||||
if(theButton.parents("form[action='addServer']").length) {
|
||||
jQuery(".addNewServer").removeAttr("disabled")
|
||||
}
|
||||
} else {
|
||||
resultBox.addClass('alert-danger')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign"></span> ')
|
||||
|
||||
// Disable the adding of new server, just to be sure
|
||||
if(theButton.parents("form[action='addServer']").length) {
|
||||
jQuery(".addNewServer").attr("disabled", "disabled")
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -623,7 +628,7 @@
|
||||
})
|
||||
}
|
||||
if(event.data === 'hide_server') {
|
||||
// Hide and don't load anymore untill the next release
|
||||
// Hide and don't load anymore until the next release
|
||||
jQuery('.Servers .server-frame').hide()
|
||||
localStorage.setItem("server-frame-hide-$version", "hide")
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="field_sort_string_$cur">$T('sortString')</label>
|
||||
<input type="text" name="sort_string" id="field_sort_string_$cur" value="$slot.sort_string" required="required" />
|
||||
<button type="button" title="$T('sort-legenda')" class="btn btn-default patternKey" onclick="jQuery('#pattern_explainer_$cur').toggle(); window.scrollBy(0, 500);">
|
||||
<button type="button" class="btn btn-default patternKey" onclick="jQuery('#pattern_explainer_$cur').toggle(); window.scrollBy(0, 500);">
|
||||
<span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> $T('sort-legenda')
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="propagation_delay">$T('opt-propagation_delay')</label>
|
||||
<input type="number" name="propagation_delay" id="propagation_delay" value="$propagation_delay" /> <i>$T('minutes')</i>
|
||||
<input type="number" name="propagation_delay" id="propagation_delay" value="$propagation_delay" min="0" /> <i>$T('minutes')</i>
|
||||
<span class="desc">$T('explain-propagation_delay')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
@@ -93,33 +93,39 @@
|
||||
<option value="0" <!--#if int($no_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="4" <!--#if int($no_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
|
||||
<option value="2" <!--#if int($no_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="3" <!--#if int($no_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
|
||||
<option value="3" <!--#if int($no_dupes) == 3 then 'selected="selected"' else ""#--> >$T('fail-to-history')</option>
|
||||
<option value="1" <!--#if int($no_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_dupes')</span>
|
||||
<span class="desc">
|
||||
$T('explain-no_dupes')<br>
|
||||
<a href="https://sabnzbd.org/wiki/duplicate-detection" target="_blank">https://sabnzbd.org/wiki/duplicate-detection</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="no_series_dupes">$T('opt-no_series_dupes')</label>
|
||||
<select name="no_series_dupes" id="no_series_dupes">
|
||||
<option value="0" <!--#if int($no_series_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="4" <!--#if int($no_series_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
|
||||
<option value="2" <!--#if int($no_series_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="3" <!--#if int($no_series_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
|
||||
<option value="1" <!--#if int($no_series_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
<label class="config" for="no_smart_dupes">$T('opt-no_smart_dupes')</label>
|
||||
<select name="no_smart_dupes" id="no_smart_dupes">
|
||||
<option value="0" <!--#if int($no_smart_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="4" <!--#if int($no_smart_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
|
||||
<option value="2" <!--#if int($no_smart_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="3" <!--#if int($no_smart_dupes) == 3 then 'selected="selected"' else ""#--> >$T('fail-to-history')</option>
|
||||
<option value="1" <!--#if int($no_smart_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_series_dupes')</span>
|
||||
<span class="desc">
|
||||
$T('explain-no_smart_dupes')<br>
|
||||
<a href="https://sabnzbd.org/wiki/duplicate-detection" target="_blank">https://sabnzbd.org/wiki/duplicate-detection</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="series_propercheck">$T('opt-series_propercheck')</label>
|
||||
<input type="checkbox" name="series_propercheck" id="series_propercheck" value="1" <!--#if int($series_propercheck) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-series_propercheck')</span>
|
||||
<label class="config" for="dupes_propercheck">$T('opt-dupes_propercheck')</label>
|
||||
<input type="checkbox" name="dupes_propercheck" id="dupes_propercheck" value="1" <!--#if int($dupes_propercheck) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-dupes_propercheck')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pause_on_pwrar">$T('opt-pause_on_pwrar')</label>
|
||||
<select name="pause_on_pwrar" id="pause_on_pwrar">
|
||||
<option value="0" <!--#if int($pause_on_pwrar) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($pause_on_pwrar) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($pause_on_pwrar) == 2 then 'selected="selected"' else ""#--> >$T('abort')</option>
|
||||
<option value="2" <!--#if int($pause_on_pwrar) == 2 then 'selected="selected"' else ""#--> >$T('fail-to-history')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-pause_on_pwrar')</span>
|
||||
</div>
|
||||
@@ -137,7 +143,7 @@
|
||||
<select name="action_on_unwanted_extensions" id="action_on_unwanted_extensions">
|
||||
<option value="0" <!--#if int($action_on_unwanted_extensions) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($action_on_unwanted_extensions) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($action_on_unwanted_extensions) == 2 then 'selected="selected"' else ""#--> >$T('abort')</option>
|
||||
<option value="2" <!--#if int($action_on_unwanted_extensions) == 2 then 'selected="selected"' else ""#--> >$T('fail-to-history')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-action_on_unwanted_extensions')</span>
|
||||
</div>
|
||||
@@ -187,12 +193,12 @@
|
||||
<div class="field-pair advanced-settings <!--#if not $have_nice then "disabled" else "" #-->">
|
||||
<label class="config" for="nice">$T('opt-nice')</label>
|
||||
<input type="text" name="nice" id="nice" value="$nice" <!--#if not $have_nice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-nice')</span>
|
||||
<span class="desc">$T('readwiki')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings <!--#if not $have_ionice then "disabled" else "" #-->">
|
||||
<label class="config" for="ionice">$T('opt-ionice')</label>
|
||||
<input type="text" name="ionice" id="ionice" value="$ionice" <!--#if not $have_ionice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ionice')</span>
|
||||
<span class="desc">$T('readwiki')</span>
|
||||
</div>
|
||||
<!--#else#-->
|
||||
<div class="field-pair advanced-settings">
|
||||
@@ -204,13 +210,13 @@
|
||||
<option value="2" <!--#if int($win_process_prio) == 2 then 'selected="selected"' else ""#-->>$T('win_process_prio-low')</option>
|
||||
<option value="1" <!--#if int($win_process_prio) == 1 then 'selected="selected"' else ""#-->>$T('win_process_prio-idle')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-win_process_prio')</span>
|
||||
<span class="desc">$T('readwiki')</span>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="par_option">$T('opt-par_option')</label>
|
||||
<input type="text" name="par_option" id="par_option" value="$par_option" />
|
||||
<span class="desc">$T('explain-par_option')</span>
|
||||
<span class="desc">$T('readwiki')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="sfv_check">$T('opt-sfv_check')</label>
|
||||
@@ -253,16 +259,17 @@
|
||||
<span class="desc">$T('explain-cleanup_list')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="history_retention_select">$T('opt-history_retention')</label>
|
||||
<input type="hidden" name="history_retention" id="history_retention" value="$history_retention">
|
||||
<select name="history_retention_select" id="history_retention_select">
|
||||
<option value="0">$T('history_retention-all')</option>
|
||||
<option value="n">$T('history_retention-number')</option>
|
||||
<option value="d">$T('history_retention-days')</option>
|
||||
<option value="-1">$T('history_retention-none')</option>
|
||||
<label class="config" for="history_retention_option">$T('opt-history_retention')</label>
|
||||
<select name="history_retention_option" id="history_retention_option">
|
||||
<option value="all" <!--#if $auto_sort == "all" then 'selected="selected"' else ""#-->>$T('history_retention-all')</option>
|
||||
<option value="number-archive" <!--#if $history_retention_option == "number-archive" then 'selected="selected"' else ""#-->>$T('history_retention-number-archive')</option>
|
||||
<option value="number-delete" <!--#if $history_retention_option == "number-delete" then 'selected="selected"' else ""#-->>$T('history_retention-number-delete')</option>
|
||||
<option value="days-archive" <!--#if $history_retention_option == "days-archive" then 'selected="selected"' else ""#-->>$T('history_retention-days-archive')</option>
|
||||
<option value="days-delete" <!--#if $history_retention_option == "days-delete" then 'selected="selected"' else ""#-->>$T('history_retention-days-delete')</option>
|
||||
<option value="all-archive" <!--#if $history_retention_option == "all-archive" then 'selected="selected"' else ""#-->>$T('history_retention-archive')</option>
|
||||
<option value="all-delete" <!--#if $history_retention_option == "all-delete" then 'selected="selected"' else ""#-->>$T('history_retention-none')</option>
|
||||
</select>
|
||||
<input type="number" id="history_retention_number" name="history_retention_number" min="1">
|
||||
<span class="desc">$T('explain-history_retention').replace('. ', '.<br/>')</span>
|
||||
<input type="number" id="history_retention_number" name="history_retention_number" min="1" value="$history_retention_number">
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
@@ -353,52 +360,24 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('#history_retention_select, #history_retention_number').on('change', updateHistoryRetention)
|
||||
jQuery('#history_retention_option').on('change', updateHistoryRetention)
|
||||
function updateHistoryRetention() {
|
||||
var retention_setting = jQuery('#history_retention')
|
||||
var retention_select = jQuery('#history_retention_select').val()
|
||||
var retention_option = jQuery('#history_retention_option').val()
|
||||
var retention_number = jQuery('#history_retention_number')
|
||||
// Keep all or keep none
|
||||
if(retention_select === "0" || retention_select === "-1") {
|
||||
|
||||
if(retention_option === "number-archive" || retention_option === "number-delete") {
|
||||
retention_number.show()
|
||||
retention_number.attr('placeholder', '$T('history_retention-limit')')
|
||||
} else if(retention_option === "days-archive" || retention_option === "days-delete") {
|
||||
retention_number.show()
|
||||
retention_number.attr('placeholder', '$T('days').capitalize()')
|
||||
} else {
|
||||
retention_number.hide()
|
||||
retention_number.val('')
|
||||
retention_number.attr('placeholder', '')
|
||||
retention_setting.val(retention_select)
|
||||
} else {
|
||||
retention_number.show()
|
||||
// Days or number?
|
||||
if(retention_select.indexOf("d") !== -1) {
|
||||
retention_number.attr('placeholder', '$T('days').capitalize()')
|
||||
if(retention_number.val()) {
|
||||
retention_setting.val(retention_number.val() + 'd')
|
||||
} else if(parseInt(retention_setting.val()) > 0) {
|
||||
retention_number.val(parseInt(retention_setting.val()))
|
||||
}
|
||||
} else {
|
||||
retention_number.attr('placeholder', '$T('history_retention-limit')')
|
||||
if(retention_number.val()) {
|
||||
retention_setting.val(retention_number.val())
|
||||
} else if(parseInt(retention_setting.val()) > 0) {
|
||||
retention_number.val(parseInt(retention_setting.val()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Set the history-retention settig
|
||||
var retention_setting_value = jQuery('#history_retention').val()
|
||||
if(parseInt(retention_setting_value) > 0) {
|
||||
// Days or number?
|
||||
if(retention_setting_value.indexOf("d") !== -1) {
|
||||
jQuery('#history_retention_select').val("d")
|
||||
} else {
|
||||
jQuery('#history_retention_select').val("n")
|
||||
}
|
||||
jQuery('#history_retention_number').val(parseInt(retention_setting_value))
|
||||
} else {
|
||||
// Keep all or keep none
|
||||
jQuery('#history_retention_select').val(retention_setting_value)
|
||||
jQuery('#history_retention_number').hide()
|
||||
}
|
||||
updateHistoryRetention()
|
||||
|
||||
jQuery('.restoreDefaults').click(function(e) {
|
||||
// Get section name
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="$active_lang">
|
||||
<head>
|
||||
<title>SABnzbd - $T('login')</title>
|
||||
@@ -36,8 +37,8 @@
|
||||
<div class="alert alert-danger" role="alert">$error</div>
|
||||
<!--#end if#-->
|
||||
|
||||
<input type="text" class="form-control" name="username" placeholder="$T('srv-username')" required autofocus>
|
||||
<input type="password" class="form-control" name="password" placeholder="$T('srv-password')" required>
|
||||
<input type="text" class="form-control" name="username" placeholder="$T('srv-username')" autocomplete="username" required autofocus>
|
||||
<input type="password" class="form-control" name="password" placeholder="$T('srv-password')" autocomplete="current-password" required>
|
||||
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-circle-arrow-right"></span> $T('login') </button>
|
||||
|
||||
@@ -62,4 +63,4 @@
|
||||
} catch(err) { }
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -47,6 +47,7 @@ textarea,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>li>a.active,
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
.navbar-default .navbar-nav>li>a:focus,
|
||||
.navbar-logo:hover,
|
||||
.quoteBlock,
|
||||
.selected,
|
||||
@@ -207,7 +208,7 @@ ul.tabs a,
|
||||
#subscriptions,
|
||||
.RSS form[action="add_rss_feed"] tr:nth-child(even),
|
||||
.Config .table {
|
||||
border: 1px solid #555555 !important;
|
||||
border: 1px solid #555555;
|
||||
}
|
||||
|
||||
.Categories form:first-of-type tr:last-of-type,
|
||||
@@ -287,18 +288,9 @@ col2 h3 a,
|
||||
fill: #555555;
|
||||
}
|
||||
|
||||
/* Placeholders - Will not work if grouped! */
|
||||
::-webkit-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
::placeholder {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.tooltip-inner {
|
||||
|
||||
@@ -19,6 +19,7 @@ body {
|
||||
float: left;
|
||||
overflow: visible;
|
||||
border: 1px solid #dfdede;
|
||||
border-bottom: none !important;
|
||||
background-color: #FFF;
|
||||
width: 100%
|
||||
}
|
||||
@@ -164,6 +165,9 @@ input[type="checkbox"]+.desc {
|
||||
color: #666;
|
||||
margin: 1em 0;
|
||||
}
|
||||
.col2 p {
|
||||
margin-left: 3px;
|
||||
}
|
||||
.field-pair {
|
||||
padding: 6px;
|
||||
clear: both;
|
||||
@@ -1222,7 +1226,6 @@ input[type="checkbox"] {
|
||||
}
|
||||
.value-and-select select {
|
||||
min-width: 30px;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.dotOne, .dotTwo, .dotThree {
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
// Initialize
|
||||
this.element = $(element);
|
||||
this.initialDir = null;
|
||||
this.showFiles = false;
|
||||
this.currentBrowserPath = null;
|
||||
this.currentRequest = null;
|
||||
this.fileBrowserDialog = $('#filebrowser_modal .modal-body');
|
||||
@@ -99,6 +100,11 @@
|
||||
this.initialDir = this.element.data('initialdir') + folderSeperator + this.element.val();
|
||||
}
|
||||
|
||||
// Are we selecting files or folders
|
||||
if(this.element.data('files')) {
|
||||
this.showFiles = true
|
||||
}
|
||||
|
||||
// Browse
|
||||
this.browse(this.initialDir , folderBrowseUrl);
|
||||
|
||||
@@ -144,12 +150,20 @@
|
||||
// Still loading
|
||||
if (this.currentRequest) this.currentRequest.abort();
|
||||
|
||||
// Show hidden folders on Linux?
|
||||
var extraHidden = $('#show_hidden_folders').is(':checked') ? '&show_hidden_folders=1' : '';
|
||||
// Show hidden folders
|
||||
var params = { name: path}
|
||||
if($('#show_hidden_folders').is(':checked')) {
|
||||
params['show_hidden_folders'] = "1"
|
||||
}
|
||||
|
||||
// Show files?
|
||||
if(this.showFiles) {
|
||||
params['show_files'] = "1"
|
||||
}
|
||||
|
||||
// Get current folders
|
||||
this.currentBrowserPath = path;
|
||||
this.currentRequest = $.getJSON(endpoint + extraHidden, { name: path }, function (data) {
|
||||
this.currentRequest = $.getJSON(endpoint, params, function (data) {
|
||||
// Clean
|
||||
self.fileBrowserDialog.empty();
|
||||
|
||||
@@ -163,11 +177,21 @@
|
||||
}
|
||||
// Regular link
|
||||
link = $('<a class="list-group-item" href="javascript:void(0)" />').click(function () {
|
||||
self.browse(entry.path, endpoint); }
|
||||
).text(entry.name);
|
||||
// Are we looking for files and did we select a file?
|
||||
if(self.showFiles && !entry.dir) {
|
||||
// Trigger selection
|
||||
self.currentBrowserPath = entry.path
|
||||
$('#filebrowser_modal_accept').click()
|
||||
} else {
|
||||
self.browse(entry.path, endpoint);
|
||||
}
|
||||
}).text(entry.name);
|
||||
|
||||
// Back image
|
||||
if(entry.name === '..') {
|
||||
$('<span class="glyphicon glyphicon-arrow-left"></span> ').prependTo(link);
|
||||
} else if(!entry.dir) {
|
||||
$('<span class="glyphicon glyphicon-file"></span> ').prependTo(link);
|
||||
} else {
|
||||
$('<span class="glyphicon glyphicon-folder-open"></span> ').prependTo(link);
|
||||
}
|
||||
@@ -238,9 +262,10 @@ function do_restart() {
|
||||
// Show overlay
|
||||
$('.main-restarting').show()
|
||||
|
||||
// What template
|
||||
// Check if we need redirect
|
||||
// Uses == on purpose, because val() returns string and data() returns int!
|
||||
var switchedHTTPS = ($('#enable_https').is(':checked') === ($('#enable_https').data('original') === undefined))
|
||||
var portsUnchanged = ($('#port').val() === $('#port').data('original')) && ($('#https_port').val() === $('#https_port').data('original'))
|
||||
var portsUnchanged = ($('#port').val() == $('#port').data('original')) && ($('#https_port').val() == $('#https_port').data('original'))
|
||||
|
||||
// Are we on settings page or did nothing change?
|
||||
if(!$('body').hasClass('General') || (!switchedHTTPS && portsUnchanged)) {
|
||||
@@ -307,7 +332,7 @@ function do_restart() {
|
||||
});
|
||||
}
|
||||
|
||||
// Remove obfusication
|
||||
// Remove obfuscation
|
||||
function removeObfuscation() {
|
||||
$('input[data-hide]').each(function(index, objInput) {
|
||||
$(objInput).attr('name', $(objInput).data('hide'))
|
||||
@@ -323,6 +348,36 @@ function addRowColor() {
|
||||
})
|
||||
}
|
||||
|
||||
// Set default functions for the autocomplete everywhere
|
||||
jQuery.extend(jQuery.fn.typeahead.defaults, {
|
||||
source: function (query, process) {
|
||||
// If there's no separator, it must be a relative path
|
||||
if(query.split(folderSeperator).length < 2 && this.$element.data('initialdir')) {
|
||||
query = this.$element.data('initialdir') + folderSeperator + query;
|
||||
}
|
||||
var params = { compact: "1", name: query }
|
||||
if($('#show_hidden_folders').is(':checked')) {
|
||||
params['show_hidden_folders'] = "1"
|
||||
}
|
||||
if(this.$element.data('files')) {
|
||||
params['show_files'] = "1"
|
||||
}
|
||||
// Get info from the API
|
||||
return jQuery.get(folderBrowseUrl, params, function (data) {
|
||||
return process(data["paths"]);
|
||||
});
|
||||
},
|
||||
updater: function(item) {
|
||||
// Is it a relative path?
|
||||
if(item.indexOf(this.$element.data('initialdir')) === 0) {
|
||||
// Remove start
|
||||
return item.replace(this.$element.data('initialdir') + folderSeperator, '');
|
||||
}
|
||||
// Full path
|
||||
return item
|
||||
}
|
||||
})
|
||||
|
||||
$(document).ready(function () {
|
||||
/**
|
||||
Restart function
|
||||
@@ -435,6 +490,9 @@ $(document).ready(function () {
|
||||
addRowColor()
|
||||
}
|
||||
addRowColor()
|
||||
|
||||
// Add tooltips
|
||||
jQuery('[title]').tooltip()
|
||||
});
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="history" id="history-tab" data-bind="visible: hasHistory() || displayTabbed()" style="display: none">
|
||||
<div class="history" id="history-tab">
|
||||
<div class="history-header">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<a href="#" data-bind="click: history.showMultiEdit">
|
||||
<h2>$T('menu-history') <small data-bind="visible: history.showArchive()">($T('archive'))</small></h2>
|
||||
<a href="#" data-bind="click: history.showMultiEdit, visible: hasHistory()">
|
||||
<span class="glyphicon glyphicon-tasks" data-tooltip="true" data-placement="left" title="$T('Glitter-multiOperations')"></span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -18,7 +18,16 @@
|
||||
<th style="width: 60px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-bind="foreach: history.historyItems">
|
||||
<!-- ko if: !hasHistory() -->
|
||||
<tbody class="no-downloads">
|
||||
<tr>
|
||||
<td colspan="6" data-bind="attr: { 'colspan': 5 + extraHistoryColumns().length }">
|
||||
<span>$T('empty')</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<!-- /ko -->
|
||||
<tbody data-bind="foreach: history.historyItems, visible: hasHistory()" style="display: none;">
|
||||
<tr class="history-item" data-bind="css: {'history-failed-download':failed()}">
|
||||
<td>
|
||||
<div data-bind="visible: processingWaiting()">
|
||||
@@ -108,7 +117,7 @@
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<a href="#" data-bind="click: deleteSlot">
|
||||
<a href="#" data-bind="click: parent.triggerRemoveDownload">
|
||||
<span class="hover-button glyphicon glyphicon-trash" data-bind="css: { 'glyphicon-stop' : processingDownload() == 2, disabled : processingDownload() == 1 }, attr: { title: processingDownload() == 2 ? '$T('abort')' : '$T('nzo-delete')' }"></span>
|
||||
</a>
|
||||
</td>
|
||||
@@ -130,20 +139,21 @@
|
||||
</ul>
|
||||
|
||||
<div class="multioperations-selector" id="history-options">
|
||||
<a href="#" class="hover-button" title="$T('link-retryAll')" data-tooltip="true" data-placement="left" data-bind="click: history.retryAllFailed"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="hover-button" title="$T('showAllHis') / $T('showFailedHis')" data-tooltip="true" data-placement="left" data-bind="click: history.toggleShowFailed, css: { 'history-options-show-failed': history.showFailed }"><span class="glyphicon glyphicon-exclamation-sign"></span></a>
|
||||
<a href="#" class="hover-button history-archive" title="$T('showArchive') / $T('showAllHis')" data-tooltip="true" data-placement="top" data-bind="click: history.toggleShowArchive, css: { 'history-options-show-failed': history.showArchive }"><svg viewBox="6 6 36 36" height="14" width="14" class="archive-icon"><path d="M41.09 10.45l-2.77-3.36c-.56-.66-1.39-1.09-2.32-1.09h-24c-.93 0-1.76.43-2.31 1.09l-2.77 3.36c-.58.7-.92 1.58-.92 2.55v25c0 2.21 1.79 4 4 4h28c2.21 0 4-1.79 4-4v-25c0-.97-.34-1.85-.91-2.55zm-17.09 24.55l-11-11h7v-4h8v4h7l-11 11zm-13.75-25l1.63-2h24l1.87 2h-27.5z"/></svg></a>
|
||||
<a href="#" class="hover-button" title="$T('showFailedHis') / $T('showAllHis')" data-tooltip="true" data-placement="top" data-bind="click: history.toggleShowFailed, css: { 'history-options-show-failed': history.showFailed }"><span class="glyphicon glyphicon-exclamation-sign"></span></a>
|
||||
<a href="#" class="hover-button" title="$T('link-retryAll')" data-tooltip="true" data-placement="top" data-bind="click: history.retryAllFailed"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
|
||||
<div data-bind="visible: history.isMultiEditing()">
|
||||
<div data-bind="visible: (history.isMultiEditing() && hasHistory())">
|
||||
<span class="label label-default" data-bind="text: history.multiEditItems().length">0</span>
|
||||
<label for="multiedit-checkall-history">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-history" title="$T('Glitter-checkAll')" data-bind="click: history.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<a href="#" class="hover-button" data-bind="visible: history.isMultiEditing(), click: history.doMultiDelete">
|
||||
<a href="#" class="hover-button" title="$T('nzo-delete')" data-bind="visible: (history.isMultiEditing() && hasHistory()), click: history.doMultiDelete" data-tooltip="true" data-placement="top">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-bind="visible: !history.isMultiEditing()" data-toggle="modal" data-tooltip="true" data-placement="left">
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-bind="visible: !(history.isMultiEditing() && hasHistory())" data-toggle="modal" data-tooltip="true" data-placement="top">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -155,9 +165,3 @@
|
||||
<span data-bind="text: history.downloadedTotal"></span>B $T('Glitter-total')
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-container history-info" data-bind="visible: !hasHistory() && !displayTabbed()" style="display: none">
|
||||
<span class="glyphicon glyphicon-save"></span>
|
||||
<span data-bind="text: history.downloadedToday"></span>B $T('Glitter-today')
|
||||
<span data-bind="text: history.downloadedMonth"></span>B $T('Glitter-thisMonth')
|
||||
<span data-bind="text: history.downloadedTotal"></span>B $T('Glitter-total')
|
||||
</div>
|
||||
@@ -134,7 +134,7 @@
|
||||
<div class="col-sm-6">$T('dashboard-systemPerformance') </div>
|
||||
<div class="col-sm-6 col-dot-overflow" data-bind="visible: hasPerformanceInfo">
|
||||
<span data-bind="text: statusInfo.pystone"></span>
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small title="$cpumodel $cpusimd" data-tooltip="true">$cpumodel $cpusimd</small>
|
||||
</div>
|
||||
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
|
||||
@@ -143,7 +143,7 @@
|
||||
<div class="col-sm-6">$T('dashboard-downloadDirSpeed') </div>
|
||||
<div class="col-sm-6 col-dot-overflow" data-bind="visible: hasPerformanceInfo">
|
||||
<span data-bind="text: statusInfo.downloaddirspeed()"></span> MB/s
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small data-bind="text: statusInfo.downloaddir, attr: { 'data-original-title': statusInfo.downloaddir }" data-tooltip="true"></small>
|
||||
</div>
|
||||
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
|
||||
@@ -152,7 +152,7 @@
|
||||
<div class="col-sm-6">$T('dashboard-completeDirSpeed') </div>
|
||||
<div class="col-sm-6 col-dot-overflow" data-bind="visible: hasPerformanceInfo">
|
||||
<span data-bind="text: statusInfo.completedirspeed()"></span> MB/s
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small data-bind="text: statusInfo.completedir, attr: { 'data-original-title': statusInfo.completedir }" data-tooltip="true"></small>
|
||||
</div>
|
||||
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
|
||||
@@ -161,11 +161,17 @@
|
||||
<div class="col-sm-6">$T('dashboard-internetBandwidth') </div>
|
||||
<div class="col-sm-6" data-bind="visible: hasPerformanceInfo">
|
||||
<span data-bind="text: statusInfo.internetbandwidth()"></span> MB/s
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small><span data-bind="text: statusInfo.internetbandwidth()*8"></span> Mbps</small>
|
||||
</div>
|
||||
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">$T('platform') </div>
|
||||
<div class="col-sm-6">
|
||||
$platform
|
||||
</div>
|
||||
</div>
|
||||
<div class="row test-download">
|
||||
<div class="col-sm-6">$T('dashboard-testDownload') </div>
|
||||
<div class="col-sm-6">
|
||||
@@ -528,7 +534,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('category')</label>
|
||||
<div class="col-sm-6">
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText'"></select>
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: ''"></select>
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -537,7 +543,7 @@
|
||||
<div class="col-sm-6">
|
||||
<!-- This list is different from the one during download! -->
|
||||
<select name="Priority" class="form-control">
|
||||
<option value="-100">$T('default')</option>
|
||||
<option value=""></option>
|
||||
<option value="2">$T('pr-force')</option>
|
||||
<option value="1">$T('pr-high')</option>
|
||||
<option value="0">$T('pr-normal')</option>
|
||||
@@ -550,14 +556,14 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('swtag-pp')</label>
|
||||
<div class="col-sm-6">
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '$T('default')'"></select>
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: ''"></select>
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('eoq-scripts')</label>
|
||||
<div class="col-sm-6">
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '$T('default')', optionsValue: 'scriptValue', optionsText: 'scriptText', enable: (queue.scriptsList().length > 1)"></select>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '', optionsValue: 'scriptValue', optionsText: 'scriptText', enable: (queue.scriptsList().length > 1)"></select>
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -635,6 +641,59 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-delete-queue-job" class="modal modal-delete-job fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title row-wrap-text">$T('removeNZB-Files')</h4>
|
||||
</div>
|
||||
<form data-bind="submit: queue.removeDownloads">
|
||||
<div class="modal-body">
|
||||
$T('confirm-delete')
|
||||
|
||||
<ul data-bind="foreach: queue.deleteItems">
|
||||
<li data-bind="text: name"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">$T('cancel')</button>
|
||||
<button type="submit" class="btn btn-danger"><span class="glyphicon glyphicon-trash"></span> $T('nzo-delete')</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-delete-history-job" class="modal modal-delete-job fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title row-wrap-text">$T('nzo-delete')</h4>
|
||||
</div>
|
||||
<form data-bind="submit: history.removeDownloads">
|
||||
<div class="modal-body">
|
||||
$T('confirm-delete')
|
||||
|
||||
<ul data-bind="foreach: history.deleteItems">
|
||||
<li data-bind="text: historyStatus.name"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" data-bind="checked: history.showArchive()"> <span>$T('permanently-delete')</span>
|
||||
</label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">$T('cancel')</button>
|
||||
<button type="submit" class="btn btn-danger"><span class="glyphicon glyphicon-trash"></span> $T('nzo-delete')</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-retry-job" class="modal modal-small fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
@@ -665,6 +724,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
$T('Glitter-retryNoChecks')
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-repeat"></span> $T('button-retry')</button>
|
||||
@@ -712,13 +774,13 @@
|
||||
<td><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd/</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>$T('menu-irc'):</strong></td>
|
||||
<td><strong>$T('menu-live-chat'):</strong></td>
|
||||
<td><a href="https://sabnzbd.org/live-chat" target="_blank">https://sabnzbd.org/live-chat</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<p><small>Copyright (C) 2007-2021 The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
|
||||
<p><small>Copyright © 2007-2025 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -737,11 +799,18 @@
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purge-completed"><span class="glyphicon glyphicon-floppy-saved"></span> $T('purgeCompl')</button><hr />
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purge-page"><span class="glyphicon glyphicon-check"></span> $T('purgePage') <span class="label label-default" data-bind="text: history.historyItems().length"></span></button>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" data-bind="checked: history.showArchive()"> <span>$T('permanently-delete')</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_custom_pause" class="modal modal-small fade" tabindex="-1">
|
||||
<div id="modal-custom-pause" class="modal modal-small fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
<span data-bind="text: queueDataLeft"></span> $T('Glitter-left')
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: (quotaLimit() != 0) -->
|
||||
<!-- ko if: (parseInt(quotaLimit()) != 0) -->
|
||||
<div class="info-container-box">
|
||||
<span data-bind="css: { 'queue-error-info' : (parseInt(quotaLimitLeft())<=0) }">
|
||||
<span class="glyphicon glyphicon-log-in"></span> <span data-bind="text: quotaLimitLeft"></span>B / <span data-bind="text: quotaLimit"></span>B $T('quota-left')
|
||||
<span class="glyphicon glyphicon-log-in"></span> <span data-bind="text: quotaLimitLeft"></span> / <span data-bind="text: quotaLimit"></span> $T('quota-left')
|
||||
</span>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
@@ -163,7 +163,7 @@
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: removeDownload"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: parent.triggerRemoveDownload"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -174,7 +174,7 @@
|
||||
<label for="multiedit-checkall-queue">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-queue" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
<a href="#" class="hover-button" data-bind="click: queue.doMultiDelete">
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: queue.doMultiDelete" data-tooltip="true" data-placement="top">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -221,4 +221,4 @@
|
||||
<span data-bind="text: page"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
glitterTranslate.status['Unpack'] = "$T('stage-unpack')";
|
||||
glitterTranslate.status['Deobfuscate'] = "$T('stage-deobfuscate')";
|
||||
glitterTranslate.status['Script'] = "$T('stage-script')";
|
||||
glitterTranslate.status['RSS'] = "$T('stage-rss')";
|
||||
glitterTranslate.status['Source'] = "$T('stage-source')";
|
||||
glitterTranslate.status['Servers'] = "$T('stage-servers')";
|
||||
glitterTranslate.status['INFO'] = "$T('log-info')".replace('+', '').toUpperCase();
|
||||
|
||||
@@ -9,10 +9,12 @@ function HistoryListModel(parent) {
|
||||
self.lastUpdate = 0;
|
||||
self.historyItems = ko.observableArray([])
|
||||
self.showFailed = ko.observable(false).extend({ persist: 'historyShowFailed' });
|
||||
self.showArchive = ko.observable(false).extend({ persist: 'historyShowArchive' });
|
||||
self.isLoading = ko.observable(false).extend({ rateLimit: 100 });
|
||||
self.searchTerm = ko.observable('').extend({ rateLimit: { timeout: 400, method: "notifyWhenChangesStop" } });
|
||||
self.paginationLimit = ko.observable(10).extend({ persist: 'historyPaginationLimit' });
|
||||
self.totalItems = ko.observable(0);
|
||||
self.deleteItems = ko.observableArray([]);
|
||||
self.ppItems = ko.observable(0);
|
||||
self.pagination = new paginationModel(self);
|
||||
self.isMultiEditing = ko.observable(false).extend({ persist: 'historyIsMultiEditing' });
|
||||
@@ -118,6 +120,27 @@ function HistoryListModel(parent) {
|
||||
self.parent.refresh(true)
|
||||
});
|
||||
|
||||
self.triggerRemoveDownload = function(items) {
|
||||
// Show and fill modal
|
||||
self.deleteItems.removeAll()
|
||||
|
||||
// Single or multiple items?
|
||||
if(items.length) {
|
||||
ko.utils.arrayPushAll(self.deleteItems, items)
|
||||
} else {
|
||||
self.deleteItems.push(items)
|
||||
}
|
||||
|
||||
// Show modal or delete right away
|
||||
if(self.parent.confirmDeleteHistory()) {
|
||||
// Open modal if desired
|
||||
$('#modal-delete-history-job').modal("show")
|
||||
} else {
|
||||
// Otherwise just submit right away
|
||||
$('#modal-delete-history-job form').submit()
|
||||
}
|
||||
}
|
||||
|
||||
// Retry a job
|
||||
self.retryJob = function(form) {
|
||||
// Adding a extra retry file happens through this special function
|
||||
@@ -176,10 +199,17 @@ function HistoryListModel(parent) {
|
||||
|
||||
// Toggle showing failed
|
||||
self.toggleShowFailed = function(data, event) {
|
||||
// Set the loader so it doesn't flicker and then switch
|
||||
self.isLoading(true)
|
||||
self.showFailed(!self.showFailed())
|
||||
// Forde hide tooltip so it doesn't linger
|
||||
// Force hide tooltip so it doesn't linger
|
||||
$('#history-options a').tooltip('hide')
|
||||
// Force refresh
|
||||
self.parent.refresh(true)
|
||||
}
|
||||
|
||||
// Toggle showing archive
|
||||
self.toggleShowArchive = function(data, event) {
|
||||
self.showArchive(!self.showArchive())
|
||||
// Force hide tooltip so it doesn't linger
|
||||
$('#history-options a').tooltip('hide')
|
||||
// Force refresh
|
||||
self.parent.refresh(true)
|
||||
@@ -201,11 +231,9 @@ function HistoryListModel(parent) {
|
||||
|
||||
// Empty history options
|
||||
self.emptyHistory = function(data, event) {
|
||||
// Make sure no flickering
|
||||
self.isLoading(true)
|
||||
|
||||
// What event?
|
||||
var whatToRemove = $(event.target).data('action');
|
||||
var skipArchive = $('#modal-purge-history input[type="checkbox"]').prop("checked")
|
||||
var del_files, value;
|
||||
|
||||
// Purge failed
|
||||
@@ -238,6 +266,7 @@ function HistoryListModel(parent) {
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
archive: (!skipArchive) * 1,
|
||||
value: strIDs
|
||||
}).then(function() {
|
||||
// Clear search, refresh and hide
|
||||
@@ -252,8 +281,9 @@ function HistoryListModel(parent) {
|
||||
callAPI({
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
value: value,
|
||||
del_files: del_files
|
||||
del_files: del_files,
|
||||
archive: (!skipArchive) * 1,
|
||||
value: value
|
||||
}).then(function() {
|
||||
self.parent.refresh();
|
||||
$("#modal-purge-history").modal('hide');
|
||||
@@ -328,43 +358,68 @@ function HistoryListModel(parent) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Remove downloads from history
|
||||
self.removeDownloads = function(form) {
|
||||
// Hide modal and show notification
|
||||
$('#modal-delete-history-job').modal("hide")
|
||||
showNotification('.main-notification-box-removing')
|
||||
|
||||
var strIDsPP = '';
|
||||
var strIDsHistory = '';
|
||||
$.each(self.deleteItems(), function(index) {
|
||||
// Split in jobs that need post-processing aborted, and jobs that need to be deleted
|
||||
if(this.processingDownload() === 2) {
|
||||
strIDsPP = strIDsPP + this.id + ',';
|
||||
// These items should not be listed in the deletedItems later on
|
||||
// as active post-processing aren't removed from the history output
|
||||
self.deleteItems.remove(this)
|
||||
} else {
|
||||
strIDsHistory = strIDsHistory + this.id + ',';
|
||||
}
|
||||
})
|
||||
|
||||
// Trigger post-processing aborting
|
||||
if(strIDsPP !== "") {
|
||||
callAPI({
|
||||
mode: 'cancel_pp',
|
||||
value: strIDsPP
|
||||
}).then(function(response) {
|
||||
// Only hide and refresh
|
||||
self.parent.refresh();
|
||||
hideNotification()
|
||||
});
|
||||
}
|
||||
if(strIDsHistory !== "") {
|
||||
var skipArchive = $('#modal-delete-history-job input[type="checkbox"]').prop("checked")
|
||||
callAPI({
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
archive: (!skipArchive) * 1,
|
||||
value: strIDsHistory
|
||||
}).then(function(response) {
|
||||
self.historyItems.removeAll(self.deleteItems());
|
||||
self.multiEditItems.removeAll(self.deleteItems())
|
||||
self.parent.refresh();
|
||||
hideNotification()
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Delete all selected
|
||||
self.doMultiDelete = function() {
|
||||
// Anything selected?
|
||||
if(self.multiEditItems().length < 1) return;
|
||||
|
||||
// Need confirm
|
||||
if(!self.parent.confirmDeleteHistory() || confirm(glitterTranslate.removeDown)) {
|
||||
// List all the ID's
|
||||
var strIDs = '';
|
||||
$.each(self.multiEditItems(), function(index) {
|
||||
strIDs = strIDs + this.id + ',';
|
||||
})
|
||||
|
||||
// Show notification
|
||||
showNotification('.main-notification-box-removing-multiple', 0, self.multiEditItems().length)
|
||||
|
||||
// Remove
|
||||
callAPI({
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: strIDs
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure the queue doesnt flicker and then fade-out
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
self.isLoading(self.totalItems() > 1)
|
||||
self.parent.refresh();
|
||||
// Empty it
|
||||
self.multiEditItems.removeAll();
|
||||
// Hide notification
|
||||
hideNotification()
|
||||
}
|
||||
})
|
||||
}
|
||||
// Trigger modal
|
||||
self.triggerRemoveDownload(self.multiEditItems())
|
||||
}
|
||||
|
||||
// Focus on the confirm button
|
||||
$('#modal-delete-history-job').on("shown.bs.modal", function() {
|
||||
$('#modal-delete-history-job .btn[type="submit"]').focus()
|
||||
})
|
||||
|
||||
// On change of page we need to check all those that were in the list!
|
||||
self.historyItems.subscribe(function() {
|
||||
// We need to wait until the unit is actually finished rendering
|
||||
@@ -542,36 +597,4 @@ function HistoryModel(parent, data) {
|
||||
return false;
|
||||
})
|
||||
}
|
||||
|
||||
// Delete button
|
||||
self.deleteSlot = function(item, event) {
|
||||
// Confirm?
|
||||
if(!self.parent.parent.confirmDeleteHistory() || confirm(glitterTranslate.deleteMsg + ":\n" + item.historyStatus.name() + "\n\n" + glitterTranslate.removeDow1)) {
|
||||
// Are we still processing and it can be stopped?
|
||||
if(item.processingDownload() === 2) {
|
||||
callAPI({
|
||||
mode: 'cancel_pp',
|
||||
value: self.id
|
||||
})
|
||||
// All we can do is wait
|
||||
} else {
|
||||
// Delete the item
|
||||
callAPI({
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: self.id
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
self.parent.isLoading(self.parent.totalItems() > 1)
|
||||
self.parent.historyItems.remove(self);
|
||||
self.parent.multiEditItems.remove(function(inList) { return inList.id === self.id; })
|
||||
self.parent.parent.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -13,7 +13,7 @@ function ViewModel() {
|
||||
self.useGlobalOptions = ko.observable(true).extend({ persist: 'useGlobalOptions' });
|
||||
self.refreshRate = ko.observable(1).extend({ persist: 'pageRefreshRate' });
|
||||
self.dateFormat = ko.observable('fromNow').extend({ persist: 'pageDateFormat' });
|
||||
self.displayTabbed = ko.observable().extend({ persist: 'displayTabbed' });
|
||||
self.displayTabbed = ko.observable(false).extend({ persist: 'displayTabbed' });
|
||||
self.displayCompact = ko.observable(false).extend({ persist: 'displayCompact' });
|
||||
self.displayFullWidth = ko.observable(false).extend({ persist: 'displayFullWidth' });
|
||||
self.confirmDeleteQueue = ko.observable(true).extend({ persist: 'confirmDeleteQueue' });
|
||||
@@ -120,8 +120,7 @@ function ViewModel() {
|
||||
|
||||
// Dynamic history length check
|
||||
self.hasHistory = ko.pureComputed(function() {
|
||||
// We also 'have history' if we can't find any results of the search or there are no failed ones
|
||||
return (self.history.historyItems().length > 0 || self.history.searchTerm() || self.history.showFailed() || self.history.isLoading())
|
||||
return (self.history.historyItems().length > 0 || self.history.searchTerm() || self.history.isLoading())
|
||||
})
|
||||
|
||||
self.hasWarnings = ko.pureComputed(function() {
|
||||
@@ -338,7 +337,7 @@ function ViewModel() {
|
||||
limit: parseInt(self.queue.paginationLimit())
|
||||
}
|
||||
if (self.queue.searchTerm()) {
|
||||
parseSearchQuery(api_call, self.queue.searchTerm(), ["cat", "category", "priority"])
|
||||
parseSearchQuery(api_call, self.queue.searchTerm(), ["cat", "category", "priority", "status"])
|
||||
}
|
||||
var queueApi = callAPI(api_call)
|
||||
.done(self.updateQueue)
|
||||
@@ -364,10 +363,11 @@ function ViewModel() {
|
||||
failed_only: self.history.showFailed() * 1,
|
||||
start: self.history.pagination.currentStart(),
|
||||
limit: parseInt(self.history.paginationLimit()),
|
||||
archive: self.history.showArchive() * 1,
|
||||
last_history_update: self.history.lastUpdate
|
||||
}
|
||||
if (self.history.searchTerm()) {
|
||||
parseSearchQuery(history_call, self.history.searchTerm(), ["cat", "category"])
|
||||
parseSearchQuery(history_call, self.history.searchTerm(), ["cat", "category", "status"])
|
||||
}
|
||||
|
||||
// History
|
||||
@@ -397,7 +397,6 @@ function ViewModel() {
|
||||
if (keyword === "priority" && api_request["priority"]) {
|
||||
for (const prio_name in self.queue.priorityName) {
|
||||
api_request["priority"] = api_request["priority"].replace(prio_name, self.queue.priorityName[prio_name])
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -432,19 +431,17 @@ function ViewModel() {
|
||||
return;
|
||||
}
|
||||
// Show modal
|
||||
$('#modal_custom_pause').modal('show')
|
||||
|
||||
// Focus on the input field
|
||||
$('#modal_custom_pause').on('shown.bs.modal', function() {
|
||||
$('#customPauseInput').focus()
|
||||
})
|
||||
|
||||
// Reset on modal close
|
||||
$('#modal_custom_pause').on('hide.bs.modal', function() {
|
||||
self.pauseCustom('');
|
||||
})
|
||||
$('#modal-custom-pause').modal('show')
|
||||
}
|
||||
|
||||
$('#modal-custom-pause').on('shown.bs.modal', function() {
|
||||
// Focus on the input field when opening the modal
|
||||
$('#customPauseInput').focus()
|
||||
}).on('hide.bs.modal', function() {
|
||||
// Reset on modal close
|
||||
self.pauseCustom('');
|
||||
})
|
||||
|
||||
// Update on changes
|
||||
self.pauseCustom.subscribe(function(newValue) {
|
||||
// Is it plain numbers?
|
||||
@@ -456,7 +453,7 @@ function ViewModel() {
|
||||
// At least 3 charaters
|
||||
if (newValue.length < 3) {
|
||||
$('#customPauseOutput').text('').data('time', 0)
|
||||
$('#modal_custom_pause .btn-default').addClass('disabled')
|
||||
$('#modal-custom-pause .btn-default').addClass('disabled')
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -481,11 +478,11 @@ function ViewModel() {
|
||||
var pauseDuration = Math.round((pauseParsed - Date.parse('now')) / 1000 / 60);
|
||||
$('#customPauseOutput').html('<span class="glyphicon glyphicon-pause"></span> ' + glitterTranslate.pauseFor + ' ' + pauseDuration + ' ' + glitterTranslate.minutes)
|
||||
$('#customPauseOutput').data('time', pauseDuration)
|
||||
$('#modal_custom_pause .btn-default').removeClass('disabled')
|
||||
$('#modal-custom-pause .btn-default').removeClass('disabled')
|
||||
} else if (newValue) {
|
||||
// No..
|
||||
$('#customPauseOutput').text(glitterTranslate.pausePromptFail)
|
||||
$('#modal_custom_pause .btn-default').addClass('disabled')
|
||||
$('#modal-custom-pause .btn-default').addClass('disabled')
|
||||
}
|
||||
})
|
||||
|
||||
@@ -504,7 +501,7 @@ function ViewModel() {
|
||||
// Refresh and close the modal
|
||||
self.refresh()
|
||||
self.downloadsPaused(true);
|
||||
$('#modal_custom_pause').modal('hide')
|
||||
$('#modal-custom-pause').modal('hide')
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -656,15 +653,12 @@ function ViewModel() {
|
||||
name: $(form.nzbURL).val(),
|
||||
nzbname: $('#nzbname').val(),
|
||||
password: $('#password').val(),
|
||||
script: $('#modal-add-nzb select[name="Post-processing"]').val(),
|
||||
cat: $('#modal-add-nzb select[name="Category"]').val(),
|
||||
priority: $('#modal-add-nzb select[name="Priority"]').val(),
|
||||
pp: $('#modal-add-nzb select[name="Processing"]').val()
|
||||
pp: $('#modal-add-nzb select[name="Processing"]').val(),
|
||||
script: $('#modal-add-nzb select[name="Post-processing"]').val(),
|
||||
}
|
||||
|
||||
// Optional, otherwise they get mis-labeled if left empty
|
||||
if ($('#modal-add-nzb select[name="Category"]').val() !== '*') theCall.cat = $('#modal-add-nzb select[name="Category"]').val()
|
||||
if ($('#modal-add-nzb select[name="Processing"]').val()) theCall.pp = $('#modal-add-nzb select[name="Category"]').val()
|
||||
|
||||
// Add
|
||||
callAPI(theCall).then(function(r) {
|
||||
// Hide and reset/refresh
|
||||
@@ -703,15 +697,14 @@ function ViewModel() {
|
||||
data.append("mode", "addfile");
|
||||
data.append("nzbname", $('#nzbname').val());
|
||||
data.append("password", $('#password').val());
|
||||
data.append("script", $('#modal-add-nzb select[name="Post-processing"]').val())
|
||||
data.append("cat", $('#modal-add-nzb select[name="Category"]').val())
|
||||
data.append("priority", $('#modal-add-nzb select[name="Priority"]').val())
|
||||
data.append("pp", $('#modal-add-nzb select[name="Processing"]').val())
|
||||
data.append("script", $('#modal-add-nzb select[name="Post-processing"]').val())
|
||||
data.append("apikey", apiKey);
|
||||
|
||||
// Optional, otherwise they get mis-labeled if left empty
|
||||
if ($('#modal-add-nzb select[name="Category"]').val() !== '*') data.append("cat", $('#modal-add-nzb select[name="Category"]').val());
|
||||
if ($('#modal-add-nzb select[name="Processing"]').val()) data.append("pp", $('#modal-add-nzb select[name="Processing"]').val());
|
||||
|
||||
// Add this one
|
||||
debugger
|
||||
$.ajax({
|
||||
url: "./api",
|
||||
type: "POST",
|
||||
|
||||
@@ -32,6 +32,7 @@ function QueueListModel(parent) {
|
||||
// External var's
|
||||
self.queueItems = ko.observableArray([]);
|
||||
self.totalItems = ko.observable(0);
|
||||
self.deleteItems = ko.observableArray([]);
|
||||
self.isMultiEditing = ko.observable(false).extend({ persist: 'queueIsMultiEditing' });
|
||||
self.isLoading = ko.observable(false).extend({ rateLimit: 100 });
|
||||
self.multiEditItems = ko.observableArray([]);
|
||||
@@ -147,6 +148,27 @@ function QueueListModel(parent) {
|
||||
|
||||
}
|
||||
|
||||
self.triggerRemoveDownload = function(items) {
|
||||
// Show and fill modal
|
||||
self.deleteItems.removeAll()
|
||||
|
||||
// Single or multiple items?
|
||||
if(items.length) {
|
||||
ko.utils.arrayPushAll(self.deleteItems, items)
|
||||
} else {
|
||||
self.deleteItems.push(items)
|
||||
}
|
||||
|
||||
// Show modal or delete right away
|
||||
if(self.parent.confirmDeleteQueue()) {
|
||||
// Open modal if desired
|
||||
$('#modal-delete-queue-job').modal("show")
|
||||
} else {
|
||||
// Otherwise just submit right away
|
||||
$('#modal-delete-queue-job form').submit()
|
||||
}
|
||||
}
|
||||
|
||||
// Save pagination state
|
||||
self.paginationLimit.subscribe(function(newValue) {
|
||||
// Save in config if global
|
||||
@@ -401,42 +423,44 @@ function QueueListModel(parent) {
|
||||
|
||||
}
|
||||
|
||||
// Remove downloads from queue
|
||||
self.removeDownloads = function(form) {
|
||||
// Hide modal and show notification
|
||||
$('#modal-delete-queue-job').modal("hide")
|
||||
showNotification('.main-notification-box-removing')
|
||||
|
||||
var strIDs = '';
|
||||
$.each(self.deleteItems(), function(index) {
|
||||
strIDs = strIDs + this.id + ',';
|
||||
})
|
||||
|
||||
callAPI({
|
||||
mode: 'queue',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: strIDs
|
||||
}).then(function(response) {
|
||||
self.queueItems.removeAll(self.deleteItems());
|
||||
self.multiEditItems.removeAll(self.deleteItems())
|
||||
self.parent.refresh();
|
||||
hideNotification()
|
||||
});
|
||||
};
|
||||
|
||||
// Delete all selected
|
||||
self.doMultiDelete = function() {
|
||||
// Anything selected?
|
||||
if(self.multiEditItems().length < 1) return;
|
||||
|
||||
// Need confirm
|
||||
if(!self.parent.confirmDeleteQueue() || confirm(glitterTranslate.removeDown)) {
|
||||
// List all the ID's
|
||||
var strIDs = '';
|
||||
$.each(self.multiEditItems(), function(index) {
|
||||
strIDs = strIDs + this.id + ',';
|
||||
})
|
||||
|
||||
// Show notification
|
||||
showNotification('.main-notification-box-removing-multiple', 0, self.multiEditItems().length)
|
||||
|
||||
// Remove
|
||||
callAPI({
|
||||
mode: 'queue',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: strIDs
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure the queue doesnt flicker and then fade-out
|
||||
self.isLoading(true)
|
||||
self.parent.refresh()
|
||||
// Empty it
|
||||
self.multiEditItems.removeAll();
|
||||
// Hide notification
|
||||
hideNotification()
|
||||
}
|
||||
})
|
||||
}
|
||||
// Trigger modal
|
||||
self.triggerRemoveDownload(self.multiEditItems())
|
||||
}
|
||||
|
||||
// Focus on the confirm button
|
||||
$('#modal-delete-queue-job').on("shown.bs.modal", function() {
|
||||
$('#modal-delete-queue-job .btn[type="submit"]').focus()
|
||||
})
|
||||
|
||||
// On change of page we need to check all those that were in the list!
|
||||
self.queueItems.subscribe(function() {
|
||||
// We need to wait until the unit is actually finished rendering
|
||||
@@ -627,9 +651,37 @@ function QueueModel(parent, data) {
|
||||
self.editingName(true)
|
||||
self.nameForEdit(self.name())
|
||||
|
||||
// Select
|
||||
$(event.target).parents('.name').find('input').select()
|
||||
}
|
||||
// Select the input
|
||||
const $input = $(event.target).parents('.name').find('input');
|
||||
$input.select();
|
||||
|
||||
// Add Tab/Shift+Tab navigation
|
||||
$input.off('keydown.tabnav').on('keydown.tabnav', function (e) {
|
||||
if (e.key === 'Tab') {
|
||||
e.preventDefault();
|
||||
|
||||
// Find all rename inputs that are currently visible
|
||||
const inputs = $('.queue-table input[type="text"]');
|
||||
const currentIndex = inputs.index(this);
|
||||
let nextIndex = e.shiftKey ? currentIndex - 1 : currentIndex + 1;
|
||||
|
||||
// Wrap around
|
||||
if (nextIndex >= inputs.length) nextIndex = 0;
|
||||
if (nextIndex < 0) nextIndex = inputs.length - 1;
|
||||
|
||||
// Simulate clicking Rename on the next row
|
||||
const $nextRow = inputs.eq(nextIndex).closest('tr');
|
||||
$nextRow.find('.hover-button[title="Rename"]').click();
|
||||
|
||||
// Delay focusing to wait for new input to appear
|
||||
setTimeout(() => {
|
||||
const $nextInput = $('.queue-table input[type="text"]').eq(nextIndex);
|
||||
$nextInput.focus().select();
|
||||
}, 50);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Catch the submit action
|
||||
self.editingNameSubmit = function() {
|
||||
@@ -711,29 +763,5 @@ function QueueModel(parent, data) {
|
||||
})
|
||||
}
|
||||
|
||||
// Remove 1 download from queue
|
||||
self.removeDownload = function(item, event) {
|
||||
// Confirm and remove
|
||||
if(!self.parent.parent.confirmDeleteQueue() || confirm(glitterTranslate.deleteMsg + ":\n" + item.name() + "\n\n" + glitterTranslate.removeDow1)) {
|
||||
var itemToDelete = this;
|
||||
|
||||
// Show notification
|
||||
showNotification('.main-notification-box-removing')
|
||||
|
||||
callAPI({
|
||||
mode: 'queue',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: item.id
|
||||
}).then(function(response) {
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
self.parent.isLoading(self.parent.totalItems() > 1)
|
||||
parent.queueItems.remove(itemToDelete);
|
||||
parent.multiEditItems.remove(function(inList) { return inList.id === itemToDelete.id; })
|
||||
self.parent.parent.refresh();
|
||||
// Hide notifcation
|
||||
hideNotification()
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -140,6 +140,12 @@ select.form-control,
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.btn-default:not(.navbar-btn):hover,
|
||||
select:hover,
|
||||
input:hover {
|
||||
background-color: #666666;
|
||||
}
|
||||
|
||||
/* Needed to force the text-color */
|
||||
.table-striped>tbody>tr:nth-child(odd)>td,
|
||||
.table>tbody>tr:nth-child(odd)>td,
|
||||
@@ -200,7 +206,8 @@ tbody .caret {
|
||||
.info-container,
|
||||
#modal-options .options-status-box small,
|
||||
#modal-options #options-status small,
|
||||
#modal-options .tab-content h4 {
|
||||
#modal-options .tab-content h4,
|
||||
h2 small {
|
||||
color: #D6D6D6;
|
||||
}
|
||||
|
||||
@@ -266,16 +273,11 @@ button:focus {
|
||||
outline: initial;
|
||||
}
|
||||
|
||||
/* Placeholders - Will not work if grouped! */
|
||||
::-webkit-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
.archive-icon {
|
||||
fill: #EBEBEB;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
::placeholder {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 0.5 !important;
|
||||
}
|
||||
@@ -690,6 +690,10 @@ tbody.no-downloads tr td {
|
||||
border-bottom: 1px solid #F0F0F0 !important;
|
||||
}
|
||||
|
||||
tbody.no-downloads tr td>span {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
tbody.no-downloads tr td a {
|
||||
line-height: 2em;
|
||||
font-size: 1.5em;
|
||||
@@ -1103,20 +1107,26 @@ tr.queue-item>td:first-child>a {
|
||||
}
|
||||
|
||||
#history-options .hover-button {
|
||||
padding: 7px 8px 7px 8px;
|
||||
padding: 7px;
|
||||
line-height: 1.428571429;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#history-options .hover-button.history-archive {
|
||||
line-height: 1em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#history-options div {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#history-options input[name="multieditCheckAll"] {
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
top: -2px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
@@ -1186,6 +1196,10 @@ tr.queue-item>td:first-child>a {
|
||||
color: red !important;
|
||||
}
|
||||
|
||||
.history-options-show-failed .archive-icon {
|
||||
fill: #2bbd43;
|
||||
}
|
||||
|
||||
.processing-download {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
@@ -1521,6 +1535,34 @@ input[name="nzbURL"] {
|
||||
transition : border 500ms ease-out;
|
||||
}
|
||||
|
||||
/* DELETE MODAL */
|
||||
.modal-delete-job ul {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.modal-delete-job li {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.modal-delete-job .checkbox {
|
||||
float: left;
|
||||
margin: 8px 5px 0px;
|
||||
}
|
||||
|
||||
#modal-purge-history .checkbox {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.modal-delete-job .checkbox input,
|
||||
#modal-purge-history .checkbox input {
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.modal-delete-job .checkbox input+span,
|
||||
#modal-purge-history .checkbox input+span {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* HELP MODAL */
|
||||
|
||||
#modal-help .modal-body {
|
||||
|
||||
@@ -57,23 +57,25 @@
|
||||
<div class="form-group">
|
||||
<label for="port" class="col-sm-4 control-label">$T('srv-port')</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" name="port" id="port" value="<!--#if $port then $port else '563' #-->" />
|
||||
<input type="number" class="form-control" name="port" id="port" value="<!--#if $port then $port else '563' #-->" min="0" max="65535" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="connections" class="col-sm-4 control-label">$T('srv-connections')</label>
|
||||
<div class="col-sm-8">
|
||||
<input type="number" class="form-control" name="connections" id="connections" value="<!--#if $connections then $connections else '8'#-->" data-toggle="tooltip" data-placement="right" title="$T('wizard-server-con-explain') $T('wizard-server-con-eg')" />
|
||||
<input type="number" class="form-control" name="connections" id="connections" value="<!--#if $connections then $connections else '8'#-->" min="1" max="500" data-toggle="tooltip" data-placement="right" title="$T('wizard-server-con-explain') $T('wizard-server-con-eg')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="ssl_verify" class="col-sm-4 control-label">$T('opt-ssl_verify')</label>
|
||||
<div class="col-sm-8">
|
||||
<select name="ssl_verify" id="ssl_verify" class="form-control" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" <!--#if $ssl_verify == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
|
||||
<option value="1" <!--#if $ssl_verify == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
|
||||
<select name="ssl_verify" id="ssl_verify" class="form-control">
|
||||
<option value="3" <!--#if $ssl_verify == 3 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
|
||||
<option value="2" <!--#if $ssl_verify == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-medium')</option>
|
||||
<option value="1" <!--#if $ssl_verify == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-minimal')</option>
|
||||
<option value="0" <!--#if $ssl_verify == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('-', '<br/>-')</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -88,6 +88,10 @@ label {
|
||||
float: right;
|
||||
margin: 0;
|
||||
}
|
||||
.desc {
|
||||
font-size: 12px;
|
||||
font-style: italic;
|
||||
}
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2022-2023 The SABnzbd-Team (sabnzbd.org) -->
|
||||
<!-- Copyright 2022-2025 by The SABnzbd-Team (sabnzbd.org) -->
|
||||
<component type="desktop-application">
|
||||
<id>org.sabnzbd.sabnzbd</id>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
@@ -30,7 +30,18 @@
|
||||
<url type="faq">https://sabnzbd.org/wiki/faq</url>
|
||||
<url type="contact">https://sabnzbd.org/live-chat.html</url>
|
||||
<releases>
|
||||
<release version="4.2.0" date="2023-11-26" type="stable"/>
|
||||
<release version="4.5.2" date="2025-07-09" type="stable"/>
|
||||
<release version="4.5.1" date="2025-04-11" type="stable"/>
|
||||
<release version="4.5.0" date="2025-04-01" type="stable"/>
|
||||
<release version="4.4.1" date="2024-12-23" type="stable"/>
|
||||
<release version="4.4.0" date="2024-12-09" type="stable"/>
|
||||
<release version="4.3.3" date="2024-08-01" type="stable"/>
|
||||
<release version="4.3.2" date="2024-05-30" type="stable"/>
|
||||
<release version="4.3.1" date="2024-05-03" type="stable"/>
|
||||
<release version="4.3.0" date="2024-05-01" type="stable"/>
|
||||
<release version="4.2.2" date="2024-02-01" type="stable"/>
|
||||
<release version="4.2.1" date="2024-01-05" type="stable"/>
|
||||
<release version="4.2.0" date="2024-01-03" type="stable"/>
|
||||
<release version="4.1.0" date="2023-09-26" type="stable"/>
|
||||
<release version="4.0.3" date="2023-06-16" type="stable"/>
|
||||
<release version="4.0.2" date="2023-06-09" type="stable"/>
|
||||
@@ -49,11 +60,13 @@
|
||||
<control>touch</control>
|
||||
</supports>
|
||||
<recommends>
|
||||
<display_length compare="ge">small</display_length>
|
||||
<display_length compare="ge">640</display_length>
|
||||
<internet>always</internet>
|
||||
</recommends>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer_name>The SABnzbd-Team</developer_name>
|
||||
<developer id="org.sabnzbd">
|
||||
<name>The SABnzbd-Team</name>
|
||||
</developer>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/interface.png</image>
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
[Desktop Entry]
|
||||
Name=SABnzbd
|
||||
GenericName=Binary newsreader
|
||||
GenericName[fr]=Lecteur de newsgroups binaires
|
||||
GenericName[tr]=İkili haber grupları okuyucusu
|
||||
Comment=Download from Usenet
|
||||
Comment[fr]=Télécharger depuis Usenet
|
||||
Comment[tr]=Usenet ağından dosya indir
|
||||
Exec=/opt/sabnzbd/SABnzbd.py --browser 1 %F
|
||||
Icon=sabnzbd
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Network;FileTransfer;
|
||||
Keywords=usenet;binaries;download;nzb;nntp;newsreader;
|
||||
Keywords[fr]=usenet;binaires;télécharger;nzb;nntp;newsreader;
|
||||
Keywords[tr]=usenet;ikililer;indir;nzb;nntp;okuyucu;
|
||||
MimeType=application/x-nzb;application/x-compressed-nzb;
|
||||
|
||||
@@ -22,6 +22,11 @@ ExecStart=/opt/sabnzbd/SABnzbd.py --disable-file-log --logging 1 --browser 0
|
||||
User=%I
|
||||
Type=simple
|
||||
Restart=on-failure
|
||||
ProtectSystem=full
|
||||
DeviceAllow=/dev/null rw
|
||||
DeviceAllow=/dev/urandom r
|
||||
DevicePolicy=strict
|
||||
NoNewPrivileges=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
BIN
macos/7zip/7zz
Executable file
BIN
macos/7zip/7zz
Executable file
Binary file not shown.
144
macos/7zip/License.txt
Normal file
144
macos/7zip/License.txt
Normal file
@@ -0,0 +1,144 @@
|
||||
7-Zip for Linux and macOS
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
License for use and distribution
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
7-Zip Copyright (C) 1999-2024 Igor Pavlov.
|
||||
|
||||
The licenses for 7zz and 7zzs files are:
|
||||
|
||||
- The "GNU LGPL" as main license for most of the code
|
||||
- The "GNU LGPL" with "unRAR license restriction" for some code
|
||||
- The "BSD 3-clause License" for some code
|
||||
- The "BSD 2-clause License" for some code
|
||||
|
||||
Redistributions in binary form must reproduce related license information from this file.
|
||||
|
||||
Note:
|
||||
You can use 7-Zip on any computer, including a computer in a commercial
|
||||
organization. You don't need to register or pay for 7-Zip.
|
||||
|
||||
|
||||
GNU LGPL information
|
||||
--------------------
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You can receive a copy of the GNU Lesser General Public License from
|
||||
http://www.gnu.org/
|
||||
|
||||
|
||||
|
||||
|
||||
BSD 3-clause License in 7-Zip code
|
||||
----------------------------------
|
||||
|
||||
The "BSD 3-clause License" is used for the following code in 7z.dll
|
||||
1) LZFSE data decompression.
|
||||
That code was derived from the code in the "LZFSE compression library" developed by Apple Inc,
|
||||
that also uses the "BSD 3-clause License".
|
||||
2) ZSTD data decompression.
|
||||
that code was developed using original zstd decoder code as reference code.
|
||||
The original zstd decoder code was developed by Facebook Inc,
|
||||
that also uses the "BSD 3-clause License".
|
||||
|
||||
Copyright (c) 2015-2016, Apple Inc. All rights reserved.
|
||||
Copyright (c) Facebook, Inc. All rights reserved.
|
||||
Copyright (c) 2023-2024 Igor Pavlov.
|
||||
|
||||
Text of the "BSD 3-clause License"
|
||||
----------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
BSD 2-clause License in 7-Zip code
|
||||
----------------------------------
|
||||
|
||||
The "BSD 2-clause License" is used for the XXH64 code in 7-Zip.
|
||||
|
||||
XXH64 code in 7-Zip was derived from the original XXH64 code developed by Yann Collet.
|
||||
|
||||
Copyright (c) 2012-2021 Yann Collet.
|
||||
Copyright (c) 2023-2024 Igor Pavlov.
|
||||
|
||||
Text of the "BSD 2-clause License"
|
||||
----------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
unRAR license restriction
|
||||
-------------------------
|
||||
|
||||
The decompression engine for RAR archives was developed using source
|
||||
code of unRAR program.
|
||||
All copyrights to original unRAR code are owned by Alexander Roshal.
|
||||
|
||||
The license for original unRAR code has the following restriction:
|
||||
|
||||
The unRAR sources cannot be used to re-create the RAR compression algorithm,
|
||||
which is proprietary. Distribution of modified unRAR sources in separate form
|
||||
or as a part of other software is permitted, provided that it is clearly
|
||||
stated in the documentation and source comments that the code may
|
||||
not be used to develop a RAR (WinRAR) compatible archiver.
|
||||
|
||||
--
|
||||
BIN
macos/par2/arm64/par2
Executable file
BIN
macos/par2/arm64/par2
Executable file
Binary file not shown.
BIN
macos/par2/par2
Executable file
BIN
macos/par2/par2
Executable file
Binary file not shown.
BIN
macos/unrar/arm64/unrar
Executable file
BIN
macos/unrar/arm64/unrar
Executable file
Binary file not shown.
BIN
macos/unrar/unrar
Executable file
BIN
macos/unrar/unrar
Executable file
Binary file not shown.
BIN
osx/7zip/7zz
BIN
osx/7zip/7zz
Binary file not shown.
@@ -1,88 +0,0 @@
|
||||
7-Zip
|
||||
~~~~~
|
||||
License for use and distribution
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
7-Zip Copyright (C) 1999-2021 Igor Pavlov.
|
||||
|
||||
The licenses for 7zz file are:
|
||||
|
||||
- The "GNU LGPL" as main license for most of the code
|
||||
- The "GNU LGPL" with "unRAR license restriction" for some code
|
||||
- The "BSD 3-clause License" for some code
|
||||
|
||||
Redistributions in binary form must reproduce related license information from this file.
|
||||
|
||||
Note:
|
||||
You can use 7-Zip on any computer, including a computer in a commercial
|
||||
organization. You don't need to register or pay for 7-Zip.
|
||||
|
||||
|
||||
GNU LGPL information
|
||||
--------------------
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You can receive a copy of the GNU Lesser General Public License from
|
||||
http://www.gnu.org/
|
||||
|
||||
|
||||
|
||||
|
||||
BSD 3-clause License
|
||||
--------------------
|
||||
|
||||
The "BSD 3-clause License" is used for the code in 7z.dll that implements LZFSE data decompression.
|
||||
That code was derived from the code in the "LZFSE compression library" developed by Apple Inc,
|
||||
that also uses the "BSD 3-clause License":
|
||||
|
||||
----
|
||||
Copyright (c) 2015-2016, Apple Inc. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder(s) nor the names of any contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
----
|
||||
|
||||
|
||||
|
||||
|
||||
unRAR license restriction
|
||||
-------------------------
|
||||
|
||||
The decompression engine for RAR archives was developed using source
|
||||
code of unRAR program.
|
||||
All copyrights to original unRAR code are owned by Alexander Roshal.
|
||||
|
||||
The license for original unRAR code has the following restriction:
|
||||
|
||||
The unRAR sources cannot be used to re-create the RAR compression algorithm,
|
||||
which is proprietary. Distribution of modified unRAR sources in separate form
|
||||
or as a part of other software is permitted, provided that it is clearly
|
||||
stated in the documentation and source comments that the code may
|
||||
not be used to develop a RAR (WinRAR) compatible archiver.
|
||||
|
||||
|
||||
--
|
||||
Igor Pavlov
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
osx/unrar/unrar
BIN
osx/unrar/unrar
Binary file not shown.
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
@@ -16,7 +16,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -61,7 +61,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -90,7 +90,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -17,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -62,7 +62,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -91,7 +91,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
|
||||
102
po/email/da.po
102
po/email/da.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Standard E-mail-skabelon til SABnzbd\n"
|
||||
"## Dette er en Cheetah-skabelon\n"
|
||||
"## Dokumentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Linjeskift og blanktegn har betydning!\n"
|
||||
"##\n"
|
||||
"## Dette er e-mail-headerne \n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd har <!--#if $status then \"hentet\" else \"fejlet\" #--> job $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Herefter kommer kroppen, den tomme linje skal være der!\n"
|
||||
"\n"
|
||||
"Hej,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd har hentet \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd kunne ikke hente \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Færdig kl. $end_time\n"
|
||||
"Hentet $size\n"
|
||||
"\n"
|
||||
"Resultat af job:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Etape $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Output fra brugerscriptet \"$script\" (Afslutningskode = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Hav det godt!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Beklager!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## RSS E-mail-skabelon til SABnzbd\n"
|
||||
"## Dette er en Cheetah-skabelon\n"
|
||||
"## Dokumentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Linjeskift og blanktegn har betydning!\n"
|
||||
"##\n"
|
||||
"## Dette er e-mai-headere\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd har tilføjet $antal jobs til køen\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Herefter kommer kroppen, den tomme linje skal være der!\n"
|
||||
"\n"
|
||||
"Hej,\n"
|
||||
"\n"
|
||||
"SABnzbd har tilføjet $antal job(s) til køen.\n"
|
||||
"De er fra RSS-feedet \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Farvel\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Dårlig URL-hentning af E-mail-skabelon til SABnzbd\n"
|
||||
"## Dette er en Cheetah-skabelon\n"
|
||||
"## Dokumentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Linjeskift og blanktegn har betydning!\n"
|
||||
"##\n"
|
||||
"## Dette er e-mail-headere\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd kunne ikke hente en NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Herefter kommer kroppen, den tomme linje skal være der!\n"
|
||||
"\n"
|
||||
"Hej,\n"
|
||||
"\n"
|
||||
"SABnzbd kunne ikke hente NZB fra $url.\n"
|
||||
"Fejlmeddelelsen er: $msg\n"
|
||||
"\n"
|
||||
"Farvel\n"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Safihre <safihre@sabnzbd.org>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +21,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -109,7 +109,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -161,7 +161,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
|
||||
102
po/email/es.po
102
po/email/es.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Plantilla de correo predeterminada para SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentación: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## !Los saltos de línea y espacios en blanco son significativos¡\n"
|
||||
"##\n"
|
||||
"## Cabeceras de correo electrónico\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd <!--#if $status then \"he bajado\" else \"fallo en bajar\" #--> job $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## !Después de esto viene el cuerpo del mensaje, la línea en blanco es necesaria!\n"
|
||||
"\n"
|
||||
"Hola,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd he bajado \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd fallo en bajar \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Terminado a las $end_time\n"
|
||||
"$size bajado\n"
|
||||
"\n"
|
||||
"Resultado de la transferencia:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Etapa $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Producción desde el script de usuario \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Que lo disfrutes!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Perdon!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Plantilla de correo RSS para SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## !Los saltos de línea y espacios en blanco son significativos¡\n"
|
||||
"##\n"
|
||||
"## Cabeceras de correo electrónico\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd he añadido $amount transferencia(s) a la cola\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## !Después de esto viene el cuerpo del mensaje, la línea en blanco es necesaria!\n"
|
||||
"\n"
|
||||
"Hola,\n"
|
||||
"\n"
|
||||
"SABnzbd he añadido $amount transferencia(s) a la cola.\n"
|
||||
"Originaron desde el RSS \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
"$job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Adios\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Plantilla de correo para URLs incorrectas de SABnzbd\n"
|
||||
"## Esta es una plantilla Cheetah\n"
|
||||
"## Documentación: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Líneas nuevas y espacios en blanco IMPORTAN!\n"
|
||||
"##\n"
|
||||
"## Estas son las cabeceras del email\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd ha encontrado un error al recuperar un NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hola,\n"
|
||||
"\n"
|
||||
"SABnzbd ha encontrado un error al descargar un NZB desde $url.\n"
|
||||
"El error ha sido: $msg\n"
|
||||
"\n"
|
||||
"Un saludo\n"
|
||||
|
||||
100
po/email/fi.po
100
po/email/fi.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Oletus sähköpostipohja SABnzbd:lle\n"
|
||||
"## Tämä on Cheetah pohja\n"
|
||||
"## Dokumentaatio: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rivinvaihdot ja välilyönnit ovat merkitseviä!\n"
|
||||
"##\n"
|
||||
"## Nämä ovat otsaketiedot. Rivien ensimmäisiä sanoja ei saa vaihtaa!\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd on <!--#if $status then \"valmistunut\" else \"epäonnistunut\" #--> työssä $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Tämän jälkeen tulee viestin runko, ensimmäinen rivinvaihto on pakollinen!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd on ladannut \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd on epäonnistunut \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#--> latauksessa\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Valmistui $end_time\n"
|
||||
"Ladattu $size\n"
|
||||
"\n"
|
||||
"Työn lopputulos:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Tila $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Käyttäjän skriptin tuloste \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Nauti!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Pahoittelut!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## RSS sähköpostipohja SABnzbd:lle\n"
|
||||
"## Tämä on Cheetah pohja\n"
|
||||
"## Dokumentaatio: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rivinvaihdot ja välilyönnit ovat merkitseviä!\n"
|
||||
"##\n"
|
||||
"## Nämä ovat otsaketiedot. Rivien ensimmäisiä sanoja ei saa vaihtaa!\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd on lisännyt $amount työtä jonoon\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Tämän jälkeen tulee viestin runko, ensimmäinen rivinvaihto on pakollinen!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"\n"
|
||||
"SABnzbd on lisännyt $amount työtä jonoon.\n"
|
||||
"Ne ovat RSS syötteestä \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Heippa\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,23 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Virheellisen URL-noudon sähköpostin pohja SABnzbd ohjelmalle\n"
|
||||
"## Tämä on Cheetah pohja\n"
|
||||
"## Dokumentaatio: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rivinvaihdot ja välilyönnit ovat merkitseviä!\n"
|
||||
"##\n"
|
||||
"## Tässä on sähköpostin otsikkotiedot\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd ei voinut hakea NZB tiedostoa\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Tämän jälkeen tulee viestin sisältö, tyhjä rivi on pakollinen!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"\n"
|
||||
"SABnzbd ei voinut hakea NZB tiedostoa osoitteesta $url.\n"
|
||||
"Virheviesti: $msg\n"
|
||||
|
||||
109
po/email/fr.po
109
po/email/fr.po
@@ -1,14 +1,14 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Fred L <88com88@gmail.com>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2025\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +21,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,45 +60,44 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"#encoding UTF-8\n"
|
||||
"##\n"
|
||||
"## Template Email pour SABnzbd\n"
|
||||
"## Ceci est un template Cheetah\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Modèle d'e-mail par défaut pour SABnzbd\n"
|
||||
"## Ceci est un modèle Cheetah\n"
|
||||
"## Documentation : https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Les retours à la ligne et les espaces sont importants !\n"
|
||||
"##\n"
|
||||
"## Entêtes de l'email\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd <!--#if $status#-->Succès<!--#else#-->Echec<!--#end if#--> du téléchargement $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Après cela vient le contenu, la ligne vide est nécessaire! \n"
|
||||
"## Voici les en-têtes de l'email\n"
|
||||
"À : $to\n"
|
||||
"De : $from\n"
|
||||
"Date : $date\n"
|
||||
"Objet : SABnzbd a <!--#if $status then \"terminé\" else \"n'a pu terminer\" #--> la tâche $name\n"
|
||||
"X-priorité: 5\n"
|
||||
"X-MS-priorité: 5\n"
|
||||
"## Après cela vient le corps du message, la ligne vide est nécessaire !\n"
|
||||
"\n"
|
||||
"Bonjour,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd a téléchargé avec succès \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"SABnzbd a téléchargé \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd a téléchargé sans succès \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"SABnzbd n'a pu télécharger \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Terminé à $end_time\n"
|
||||
"Téléchargé $size\n"
|
||||
"$size téléchargés\n"
|
||||
"\n"
|
||||
"Résultat du téléchargement :\n"
|
||||
"Résultats de la tâche :\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Etape $stage <!--#slurp#-->\n"
|
||||
"Étape $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Sortie du script utilisateur \"$script\" (Code Retour = $script_ret):\n"
|
||||
"Résultats du script \"$script\" (Code de sortie = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"A bientôt !\n"
|
||||
"Amusez-vous bien !\n"
|
||||
"<!--#else#-->\n"
|
||||
"Désolé !\n"
|
||||
"<!--#end if#-->\n"
|
||||
@@ -108,7 +107,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -132,37 +131,37 @@ msgid ""
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Template Email pour SABnzbd\n"
|
||||
"## Ceci est un template Cheetah\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Modèle d'e-mail RSS pour SABnzbd\n"
|
||||
"## Ceci est un modèle Cheetah\n"
|
||||
"## Documentation : https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Les retours à la ligne et les espaces sont importants !\n"
|
||||
"## Les retours à la ligne et espaces sont importants !\n"
|
||||
"##\n"
|
||||
"## Entêtes de l'email\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd a ajouté $amount fichier(s) à la file d'attente\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Après cela vient le contenu, la ligne vide est nécessaire!\n"
|
||||
"## Voici les en-têtes de l'email\n"
|
||||
"À : $to\n"
|
||||
"De : $from\n"
|
||||
"Date : $date\n"
|
||||
"Objet : SABnzbd a ajouté $amount tâches dans la file d'attente\n"
|
||||
"X-priorité: 5\n"
|
||||
"X-MS-priorité: 5\n"
|
||||
"## Après cela vient le corps du message, la ligne vide est nécessaire !\n"
|
||||
"\n"
|
||||
"Bonjour,\n"
|
||||
"\n"
|
||||
"SABnzbd a ajouté $amount fichier(s) à la file d'attente.\n"
|
||||
"Ils proviennent du Flux RSS \"$feed\".\n"
|
||||
"SABnzbd a ajouté $amount tâche(s) à la file d'attente.\n"
|
||||
"Elles viennent du flux RSS \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Au Revoir\n"
|
||||
"Bye\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -183,24 +182,24 @@ msgid ""
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Modèle d'email d'URL incorrecte pour SABnzbd\n"
|
||||
"## Ceci est un modèle Cheetah\n"
|
||||
"## Documentation : https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"## Les retours à la ligne et les espaces sont importants !\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Voici les en-têtes de l'email\n"
|
||||
"À : $to\n"
|
||||
"De : $from\n"
|
||||
"Date : $date\n"
|
||||
"Objet : SABnzbd n'a pas réussi à récupérer un NZB\n"
|
||||
"X-priorité: 5\n"
|
||||
"X-MS-priorité: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"Bonjour,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"SABnzbd n'a pas réussi à récupérer le NZB depuis $url.\n"
|
||||
"Le message d'erreur était : $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# ION, 2020
|
||||
# Safihre <safihre@sabnzbd.org>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: ION, 2020\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: he\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -105,7 +105,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -157,7 +157,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
|
||||
113
po/email/it.po
Normal file
113
po/email/it.po
Normal file
@@ -0,0 +1,113 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/sabnzbd/teams/111101/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> job $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Finished at $end_time\n"
|
||||
"Downloaded $size\n"
|
||||
"\n"
|
||||
"Results of the job:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Stage $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Enjoy!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has added $amount job(s) to the queue.\n"
|
||||
"They are from RSS feed \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
104
po/email/nb.po
104
po/email/nb.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,56 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"#encoding UTF-8\n"
|
||||
"## Translation by ProtX\n"
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd har <!--#if $status then \"completed\" else \"failed\" #--> jobb $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd har lastet ned \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd mislyktes med å laste ned \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Ferdig $end_time\n"
|
||||
"Nedlastet $size\n"
|
||||
"\n"
|
||||
"Resultat av jobben:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Steg $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Utskrift fra brukerskript \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Gratulerer!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Synd!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -132,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd har lagt $amount jobber til køen\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Etter dette kommer meldingen, den tomme linjen er nødvendig!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"\n"
|
||||
"SABnzbd har lagt $amount jobb(er) til køen.\n"
|
||||
"Disse er fra RSS feeden \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Hade\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -183,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd ikke klarte å hente en NZB fil\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Etter dette kommer meldingen, den tomme linjen er nødvendig!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"\n"
|
||||
"SABnzbd klarte ikke å hente NZB fra $url.\n"
|
||||
"Feilmeldingen var: $msg\n"
|
||||
"\n"
|
||||
"Hade\n"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Safihre <safihre@sabnzbd.org>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +21,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -107,7 +107,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -159,7 +159,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
|
||||
102
po/email/pl.po
102
po/email/pl.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Domyślny szablon maila w SABnzbd\n"
|
||||
"## To jest szablon Cheetah\n"
|
||||
"## Dokumentacja: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Znak nowego wiersza i spacji ma znaczenie!\n"
|
||||
"##\n"
|
||||
"## To są nagłowki maila\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd <!--#if $status then \"zakończył\" else \"zakończył z błędem\" #--> zadanie $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Następnie treść maila, wymagana jest pusta linia!\n"
|
||||
"\n"
|
||||
"Cześć,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd pobrał \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd nie pobrał \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Zakończono o $end_time\n"
|
||||
"Pobrano $size\n"
|
||||
"\n"
|
||||
"Rezultat zadania:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Etap $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
"$result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Odpowiedź od skryptu \"$script\" (kod wyjścia = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Baw się dobrze!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Przykro mi!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Szablon wiadomości RSS dla SABnzbd\n"
|
||||
"## To jest szablon Cheetah\n"
|
||||
"## Dokumentacja: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Znak nowego wiersza i spacji ma znaczenie!\n"
|
||||
"##\n"
|
||||
"## To są nagłowki maila\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd dodał $amount zadań/zadania do kolejki\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Następnie treść maila, wymagana jest pusta linia!\n"
|
||||
"\n"
|
||||
"Cześć,\n"
|
||||
"\n"
|
||||
"SABnzbd dodał $amount zadanie/zadań do kolejki.\n"
|
||||
"Pochodzą one z wiadomości RSS \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
"$job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Nara\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Szablon wiadomości błędnego pobierania URL SABnzbd\n"
|
||||
"## To jest szablon Cheetah\n"
|
||||
"## Dokumentacja: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Znaki nowego wiersza i białe znaki mają znaczenie!\n"
|
||||
"##\n"
|
||||
"## To są nagłówki wiadomości\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd nie udało się pobrać pliku NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Po tym następuje treść. Pusty wiersz jest wymagany!\n"
|
||||
"\n"
|
||||
"Cześć,\n"
|
||||
"\n"
|
||||
"SABnzbd nie udało się pobrać pliku NZB z $url.\n"
|
||||
"Komunikat błędu: $msg\n"
|
||||
"\n"
|
||||
"Do usłyszenia.\n"
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Template padrão de e-mail para SABnzbd\n"
|
||||
"## Este é um template Cheetah\n"
|
||||
"## Documentação: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Novas linhas e espaços em branco são significativos!\n"
|
||||
"##\n"
|
||||
"## Estes são os cabeçalhos de e-mail\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd <!--#if $status then \"completou \" else \"falhou n\" #-->a tarefa $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Depois daqui vem o corpo. A linha vazia é necessária!\n"
|
||||
"\n"
|
||||
"Olá,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd baixou \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd falhou no download de \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Completado em $end_time\n"
|
||||
"Baixados $size\n"
|
||||
"\n"
|
||||
"Resultados da tarefa:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Etapa $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Retorno do script de usuário \"$script\" (Código de retorno = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Aproveite!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Lamento!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Template de e-mail RSS para SABnzbd\n"
|
||||
"## Este é um template Cheetah\n"
|
||||
"## Documentação: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Novas linhas e espaços em branco são significativos!\n"
|
||||
"##\n"
|
||||
"## Estes são os cabeçalhos de e-mail\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd adicionou $amount <!--#if $amount == \"1\" then \"tarefa\" else \"tarefas\" #--> à fila\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Depois daqui vem o corpo. A linha vazia é necessária!\n"
|
||||
"\n"
|
||||
"Olá,\n"
|
||||
"\n"
|
||||
"SABnzbd adicionou $amount <!--#if $amount == \"1\" then \"tarefa\" else \"tarefas\" #--> à fila.\n"
|
||||
"Elas são do feed RSS \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Tchau!\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Template de e-mail de busca em URL ruim para SABnzbd\n"
|
||||
"## Este é um template Cheetah\n"
|
||||
"## Documentação: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Novas linhas e espaços em branco são significativos!\n"
|
||||
"##\n"
|
||||
"## Estes são os cabeçalhos de e-mail\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd falhou ao buscar um NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Depois daqui vem o corpo. A linha vazia é necessária!\n"
|
||||
"\n"
|
||||
"Olá,\n"
|
||||
"\n"
|
||||
"SABnzbd não conseguiu obter o NZB de $url.\n"
|
||||
"A mensagem de erro foi: $msg\n"
|
||||
"\n"
|
||||
"Tchau!\n"
|
||||
|
||||
101
po/email/ro.po
101
po/email/ro.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Șablon Email Original pentru SABnzbd\n"
|
||||
"## Acesta este un Șablon Cheetah\n"
|
||||
"## Documentație: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"##Rândurile noi și caracterele spațiu sunt importante!\n"
|
||||
"##\n"
|
||||
"## Acestea sunt antetele email\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd <!--#if $status then \"a terminat\" else \"nu a reuşit\" #--> sarcina $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## După acesta urmează conţinutul, este necesar o linie goală!\n"
|
||||
"\n"
|
||||
"Salut,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd a descărcat \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd nu a reuşit să descarce \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Terminat la $end_time\n"
|
||||
"Mărime $size\n"
|
||||
"\n"
|
||||
"Rezultatele sarcinii:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Stagiu $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Rezultatul script-ului utilizatorului \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Bucuraţi-vă!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Ne pare rau!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,37 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"## Şablon Email RSS pentru SABnzbd\n"
|
||||
"## Acesta este un şablon Cheetah \n"
|
||||
"## Documentaţie: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rândurile noi și caracterele spațiu sunt importante!\n"
|
||||
"##\n"
|
||||
"## Acestea sunt antetele email\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd a adăugat $amount sarcini în coadă\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## După acesta urmează conţinutul, este necesar o linie goală!\n"
|
||||
"\n"
|
||||
"Salut,\n"
|
||||
"\n"
|
||||
"SABnzbd a adăugat $amount sarcină(e) în coadă.\n"
|
||||
"Ele sunt din fluxuri RSS \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"La revedere !\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -180,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Adresă URL Greşită şablon Email pentru SABnybd \n"
|
||||
"## Acesta este un şablon Cheetah\n"
|
||||
"## Documentaţie : http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Liniile noi şi spaţiile sunt importante!\n"
|
||||
"##\n"
|
||||
"## Acestea sunt headerele email\n"
|
||||
"Către: $to\n"
|
||||
"De la: $from\n"
|
||||
"Dată: $date\n"
|
||||
"Subiect: SABnzbd nu a reuşit să descarce un NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## După aceasta urmează corpul email, linia goală e necesară !\n"
|
||||
"\n"
|
||||
"Salut,\n"
|
||||
"\n"
|
||||
"SABnzbd nu a putut descărca NZB-ul de la adresa $url.\n"
|
||||
"Mesajul de eroare a fost: $msg\n"
|
||||
"\n"
|
||||
"La revedere!\n"
|
||||
|
||||
102
po/email/ru.po
102
po/email/ru.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Стандартный шаблон сообщения электронной почты\n"
|
||||
"## Это шаблон Cheetah\n"
|
||||
"## Документация: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Новые строки и пробелы имеют значение!\n"
|
||||
"##\n"
|
||||
"## Это заголовки электронной почты\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd: задание $name <!--#if $status then \"успешно выполнено\" else \"не удалось выполнить\" #-->\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Теперь следует тело сообщения. Пустая строка является обязательной!\n"
|
||||
"\n"
|
||||
"Привет.\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Системой SABnzbd загружено задание «$name» <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"Системе SABnzbd не удалось загрузить «$name» <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Время окончания загрузки: $end_time\n"
|
||||
"Загруженный размер: $size\n"
|
||||
"\n"
|
||||
"Результаты задания:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Stage $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Результат выполнения сценария «$script» (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Удачи!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Сожалеем.\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Шаблон RSS для электронной почты\n"
|
||||
"## Это шаблон Cheetah\n"
|
||||
"## Документация: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Новые строки и пробелы имеют значение!\n"
|
||||
"##\n"
|
||||
"## Это заголовки электронной почты\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: В очередь загрузки SABnzbd добавлены задания: $amount \n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Теперь следует тело сообщения. Пустая строка является обязательной!\n"
|
||||
"\n"
|
||||
"Привет.\n"
|
||||
"\n"
|
||||
"В очередь загрузки SABnzbd были добавлены задания: $amount.\n"
|
||||
"Они были получены из RSS-ленты «$feed».\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"До свидания\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Шаблон электронной почты для излечения неверного URL-адреса\n"
|
||||
"## Это шаблон Cheetah\n"
|
||||
"## Документация: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Новые строки и пробелы имеют значение!\n"
|
||||
"##\n"
|
||||
"## Это заголовки электронной почты\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: Службе SABnzbd не удалось загрузить NZB-файл\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Теперь следует тело сообщения. Пустая строка является обязательной!\n"
|
||||
"\n"
|
||||
"Привет.\n"
|
||||
"\n"
|
||||
"Службе SABnzbd не удалось загрузить NZB-файл по адресу $url.\n"
|
||||
"Сообщение об ошибке: $msg\n"
|
||||
"\n"
|
||||
"Конец сообщения\n"
|
||||
|
||||
102
po/email/sr.po
102
po/email/sr.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Основни шаблон ел. поште за САБнзбд\n"
|
||||
"## Ово је Гепард шаблон\n"
|
||||
"## Документација: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Нови редови и размаци су важни!\n"
|
||||
"##\n"
|
||||
"## Ово су заглавља ел. поште\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: САБнзбд је <!--#if $status then \"completed\" else \"failed\" #--> посао „$name“\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## После тога долази разрада, празни редови су потребни!\n"
|
||||
"\n"
|
||||
"Здраво,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"САБнзбд је преузео „$name“ <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"САБнзбд није успео да преузме „$name“ <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Завршено је у $end_time\n"
|
||||
"Преузето је $size\n"
|
||||
"\\n\n"
|
||||
"Резултат рада:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Фаза $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Излаз корисничке скрипте „$script“ (Шифра излаза = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Уживајте!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Жао ми је!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## РСС шаблон ел. поште за САБнзбд\n"
|
||||
"## Ово је Гепард шаблон\n"
|
||||
"## Документација: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Нови редови и размаци су важни!\n"
|
||||
"##\n"
|
||||
"## Ово су заглавља ел. поште\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject САБнзбд је додао $amount посла у ред\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## После тога долази разрада, празни редови су потребни!\n"
|
||||
"\n"
|
||||
"Здраво,\n"
|
||||
"\n"
|
||||
"САБнзбд је додао $amount посао(ла) у ред.\n"
|
||||
"Долазе са РСС довода „$feed“.\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Поздрав\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Шаблон ел. поште лошег набављања адресе за САБнзбд\n"
|
||||
"## Ово је Гепард шаблон\n"
|
||||
"## Документација: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Нови редови и размаци су важни!\n"
|
||||
"##\n"
|
||||
"## Ово су заглавља ел. поште\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: САБнзбд није успео да преузме НЗБ\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## После тога долази разрада, празни редови су потребни!\n"
|
||||
"\n"
|
||||
"Здраво,\n"
|
||||
"\n"
|
||||
"САБнзбд није успео да преузме НЗБ са „$url“.\n"
|
||||
"Порука грешке је: $msg\n"
|
||||
"\n"
|
||||
"Поздрав\n"
|
||||
|
||||
102
po/email/sv.po
102
po/email/sv.po
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"## Translation by Andreas Lindberg andypandyswe@gmail.com\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> job $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hej,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd har laddat ned \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd misslyckades med att ladda ned \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Färdig $end_time\n"
|
||||
"Nedladdat $size\n"
|
||||
"\n"
|
||||
"Resultat:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Stage $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Utmatning från användarskript \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Lycka till!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Beklagar!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd har lagt till $amount jobb i kön\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hej,\n"
|
||||
"\n"
|
||||
"SABnzbd har lagt till $amount jobb i kön.\n"
|
||||
"De kommer från RSS feed \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Hej då\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd misslyckades med att hämta en NZB -fil\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hej,\n"
|
||||
"\n"
|
||||
"SABnzbd har misslyckats med att hämta NZB -filen från $url.\n"
|
||||
"Felmeddelandet lyder: $msg\n"
|
||||
"\n"
|
||||
"Hej då\n"
|
||||
|
||||
205
po/email/tr.po
Normal file
205
po/email/tr.po
Normal file
@@ -0,0 +1,205 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# mauron, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: mauron, 2025\n"
|
||||
"Language-Team: Turkish (https://app.transifex.com/sabnzbd/teams/111101/tr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: tr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> job $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Finished at $end_time\n"
|
||||
"Downloaded $size\n"
|
||||
"\n"
|
||||
"Results of the job:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Stage $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Enjoy!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd için varsayılan e-posta şablonu\n"
|
||||
"## Bu, bir Cheetah şablonudur\n"
|
||||
"## Belgelendirme: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Yeni satırlar ve boşluklar önemlidir!\n"
|
||||
"##\n"
|
||||
"## Bunlar e-posta başlıklarıdır\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd, şu işi <!--#if $status then \"indirdi\" else \"indiremedi\" #--> job $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Bu satırdan sonra içerik başlar, boş satır gereklidir!\n"
|
||||
"\n"
|
||||
"Merhaba,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd şu dosyayı indirdi \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd şu dosyayı indirmede başarısız oldu \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Şu tarihte bitti: $end_time\n"
|
||||
"Şu miktar indirildi: $size\n"
|
||||
"\n"
|
||||
"İşin sonucu:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Aşama $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"\"$script\" kullanıcı betiğinin çıktısı (Çıkış kodu = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Görüşmek üzere!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Özür dileriz!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has added $amount job(s) to the queue.\n"
|
||||
"They are from RSS feed \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd için RSS e-posta şablonu\n"
|
||||
"## Bu, bir Cheetah şablonudur\n"
|
||||
"## Belgelendirme: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Yeni satırlar ve boşluklar önemlidir!\n"
|
||||
"##\n"
|
||||
"## Bunlar, e-posta başlıklarıdır\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd, $amount işi kuyruğa ekledi\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Bundan sonra mesaj gövdesi gelir, boş satır gereklidir!\n"
|
||||
"\n"
|
||||
"Merhaba,\n"
|
||||
"\n"
|
||||
"SABnzbd, $amount işi kuyruğa ekledi.\n"
|
||||
"Bunlar şu RSS beslemesindendir: \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Görüşmek üzere\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd için yanlış URL alma e-posta şablonu\n"
|
||||
"## Bu, bir Cheetah şablonudur\n"
|
||||
"## Belgelendirme: https://sabnzbd.org/wiki/extra/email-templates\\n\n"
|
||||
"##\n"
|
||||
"## Yeni satırlar ve boşluklar önemlidir!\n"
|
||||
"##\n"
|
||||
"## Bunlar, e-posta başlıklarıdır\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd, bir NZB dosyası almada başarısız oldu\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Bundan sonra mesaj gövdesi gelir, boş satır gereklidir!\n"
|
||||
"\n"
|
||||
"Merhaba,\n"
|
||||
"\n"
|
||||
"SABnzbd, NZB dosyasını şu bağlantıdan almada başarısız oldu: $url.\n"
|
||||
"Hata mesajı şuydu: $msg\n"
|
||||
"\n"
|
||||
"Görüşmek üzere\n"
|
||||
@@ -1,14 +1,10 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +17,7 @@ msgid ""
|
||||
"##\n"
|
||||
"## Default Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -60,54 +56,13 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd 默认电子邮件模板\n"
|
||||
"## 这是一款 Cheetah 模板\n"
|
||||
"## 文档: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## 新行与空格均有重要意义!\n"
|
||||
"##\n"
|
||||
"## 这些是电子邮件头\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd 已<!--#if $status then \"完成\" else \"失败\" #-->任务 $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## 到主体部分时,必须要有空行!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd 已完成 \"$name\" 的下载 <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd 下载 \"$name\" 失败 <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"完成于 $end_time\n"
|
||||
"已下载 $size\n"
|
||||
"\n"
|
||||
"任务结果:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Stage $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"用户脚本 \"$script\" 输出内容 (退出代码 = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Enjoy!\n"
|
||||
"<!--#else#-->\n"
|
||||
"非常抱歉!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -130,38 +85,13 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd RSS 电子邮件模板\n"
|
||||
"## 这是一款 Cheetah 模板\n"
|
||||
"## 文档: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## 新行及空格均有重要意义!\n"
|
||||
"##\n"
|
||||
"## 这些是电子邮件头\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd 已将 $amount 项任务加入队列\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## 到主体部分时,必须要有空行!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd 已将 $amount 项任务加入队列。\n"
|
||||
"它们出自 RSS feed \"$feed\"。\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## Documentation: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
@@ -181,25 +111,3 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd 装取 URL 错误电子邮件模板\n"
|
||||
"## 这是一款 Cheetah 模板\n"
|
||||
"## 文档: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## 新行与空格均有重要意义!\n"
|
||||
"##\n"
|
||||
"## 这些是电子邮件头\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd 装取 NZB 失败\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## 到主体部分时必须要有空行!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd 从 $url 检索 NZB 失败。\n"
|
||||
"错误信息为: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
@@ -72,16 +72,6 @@ msgstr ""
|
||||
msgid "HTTP and HTTPS ports cannot be the same"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Current umask (%o) might deny SABnzbd access to the files and folders it creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -120,6 +110,21 @@ msgstr ""
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Current umask (%o) might deny SABnzbd access to the files and folders it creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Completed Download Folder %s is on FAT file system, limiting maximum file size to 4GB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -148,6 +153,70 @@ msgstr ""
|
||||
msgid "Test Notification"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "There are no connections set. Please set at least one connection."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Password masked in ******, please re-enter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Invalid server details"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Could not connect to %s on port %s. It appears that %s operates as a web server (port 80), possibly an indexer, not a usenet server. You have to fill a usenet server."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Could not connect to %s on port %s. Use the default usenet settings: port 563 and SSL turned on"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Could not connect to %s on port %s. Use the default usenet settings: port 119 and SSL turned off"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Timed out: Try enabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Timed out"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Connection Successful!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Could not determine connection result (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
msgstr ""
|
||||
@@ -162,11 +231,6 @@ msgstr ""
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
@@ -258,8 +322,9 @@ msgstr ""
|
||||
msgid "Permissions setting of %s might deny SABnzbd access to the files and folders it creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgid "Network path \"%s\" should not be used here"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
@@ -275,6 +340,11 @@ msgstr ""
|
||||
msgid "Do not use a folder in the application folder as your Scripts Folder, it might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "The par2 application was switched, any custom par2 parameters were removed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -347,6 +417,10 @@ msgstr ""
|
||||
msgid "Deobfuscate renamed %d file(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/deobfuscate_filenames.py
|
||||
msgid "Deobfuscate renamed %d subtitle file(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py, sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
@@ -379,7 +453,7 @@ msgid "Resuming"
|
||||
msgstr ""
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
@@ -416,6 +490,11 @@ msgstr ""
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "%s@%s: Received unknown status code %s for article %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr ""
|
||||
@@ -608,10 +687,6 @@ msgstr ""
|
||||
msgid "API Key incorrect, Use the api key from Config->General in your 3rd party program:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/utils/servertests.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
@@ -621,10 +696,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr ""
|
||||
|
||||
#. Config->RSS, tab header
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "Feed"
|
||||
@@ -682,6 +753,112 @@ msgstr ""
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge Queue"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#. History page button
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge History"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Limit Speed"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
#. One minute
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "min"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr ""
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Scan watched folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Complete Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Incomplete Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Restart without login"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Queue First 10 Items"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Empty"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "History Last 10 Items"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Go to wizard"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Stopping..."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "d"
|
||||
msgstr ""
|
||||
@@ -815,6 +992,10 @@ msgstr ""
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, disk full"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr ""
|
||||
@@ -924,11 +1105,6 @@ msgstr ""
|
||||
msgid "Verifying"
|
||||
msgstr ""
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying SFV verification"
|
||||
msgstr ""
|
||||
@@ -946,7 +1122,7 @@ msgid "Certificate hostname mismatch: the server hostname is not listed in the c
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Certificate not valid. This is most probably a server issue."
|
||||
msgid "Certificate could not be validated. This could be a server issue or due to a locally injected certificate (for example by firewall or virus scanner). Try setting Certificate verification to Medium."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
@@ -958,21 +1134,15 @@ msgstr ""
|
||||
msgid "Wiki"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Failed to connect: %s %s@%s:%s (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Startup/Shutdown"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates - Config->Scheduling
|
||||
#: sabnzbd/notifier.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/notifier.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Config->RSS after adding to queue
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Added NZB"
|
||||
@@ -1002,6 +1172,21 @@ msgstr ""
|
||||
msgid "Other Messages"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Open complete folder"
|
||||
msgstr ""
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button "download item"
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Not available"
|
||||
msgstr ""
|
||||
@@ -1015,6 +1200,25 @@ msgstr ""
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send Apprise message - no URLs defined"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "One or more Apprise URLs could not be loaded."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send one or more Apprise Notifications"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send Apprise message"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Bad response from Pushover (%s): %s"
|
||||
@@ -1179,98 +1383,6 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge Queue"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#. History page button
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge History"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Limit Speed"
|
||||
msgstr ""
|
||||
|
||||
#. One minute
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "min"
|
||||
msgstr ""
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Scan watched folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Complete Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Incomplete Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Restart without login"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Queue First 10 Items"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Empty"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "History Last 10 Items"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Go to wizard"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Stopping..."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Problem with"
|
||||
msgstr ""
|
||||
@@ -1369,9 +1481,9 @@ msgstr ""
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Completed Download Folder %s is on FAT file system, limiting maximum file size to 4GB"
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -1542,7 +1654,6 @@ msgstr ""
|
||||
msgid "Incompatible feed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/rss.py
|
||||
msgid "Empty RSS entry found (%s)"
|
||||
msgstr ""
|
||||
@@ -1551,10 +1662,6 @@ msgstr ""
|
||||
msgid "Show interface"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Open complete folder"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
@@ -1617,11 +1724,6 @@ msgstr ""
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr ""
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -1642,6 +1744,11 @@ msgstr ""
|
||||
msgid "Script"
|
||||
msgstr ""
|
||||
|
||||
#. PP RSS feed of the NZB - Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "RSS"
|
||||
msgstr ""
|
||||
|
||||
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Source"
|
||||
@@ -1697,6 +1804,11 @@ msgstr ""
|
||||
msgid "Verifying..."
|
||||
msgstr ""
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
msgstr ""
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "disable server"
|
||||
@@ -1914,7 +2026,6 @@ msgstr ""
|
||||
msgid "Home page"
|
||||
msgstr ""
|
||||
|
||||
#. Used in "IRC or IRC-Webaccess"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
@@ -1981,7 +2092,7 @@ msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "IRC"
|
||||
msgid "Live Chat"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
@@ -2014,11 +2125,6 @@ msgstr ""
|
||||
msgid "Scheduling"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "RSS"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Notifications"
|
||||
@@ -2143,6 +2249,11 @@ msgstr ""
|
||||
msgid "Delete all items from the queue?"
|
||||
msgstr ""
|
||||
|
||||
#. Delete confirmation popup
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to remove these jobs?"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge NZBs"
|
||||
@@ -2163,6 +2274,11 @@ msgstr ""
|
||||
msgid "Remove NZB & Delete Files"
|
||||
msgstr ""
|
||||
|
||||
#. Checkbox if job should be added to Archive
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Permanently delete (skip archive)"
|
||||
msgstr ""
|
||||
|
||||
#. Caption for missing articles in Queue
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Missing articles"
|
||||
@@ -2182,6 +2298,10 @@ msgstr ""
|
||||
msgid "Reset Quota now"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Archive"
|
||||
msgstr ""
|
||||
|
||||
#. Button/link hiding History job details
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Hide details"
|
||||
@@ -2202,6 +2322,11 @@ msgstr ""
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#. Button showing all archived jobs
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Archive"
|
||||
msgstr ""
|
||||
|
||||
#. History table header - Size of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Size"
|
||||
@@ -2374,6 +2499,11 @@ msgstr ""
|
||||
msgid "Used cache"
|
||||
msgstr ""
|
||||
|
||||
#. What platform we are on (e.g. Windows/macOS/Ubuntu/UnRaid/etc)
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Platform"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This will restart SABnzbd.<br />Use it when you think the program has a stability problem.<br />Downloading will be paused before the restart and resume afterwards."
|
||||
msgstr ""
|
||||
@@ -2406,10 +2536,6 @@ msgstr ""
|
||||
msgid "Enable 7zip"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will be encrypted, however, validating a server's identity using its certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA certificates are required."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Speed up repairs by installing par2cmdline-turbo, it is available for many platforms."
|
||||
msgstr ""
|
||||
@@ -2427,7 +2553,6 @@ msgstr ""
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
|
||||
#. Notification Script settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Read the Wiki Help on this!"
|
||||
msgstr ""
|
||||
@@ -2461,11 +2586,11 @@ msgid "Port SABnzbd should listen on."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Web Interface"
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a skin."
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2593,24 +2718,32 @@ msgstr ""
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Automatically delete completed jobs from History. Beware that Duplicate Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgid "Move jobs to the archive if the history exceeds specified number of jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgid "Delete jobs if the history and archive exceeds specified number of jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgid "Move jobs to the archive after specified number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Delete jobs from the history and archive after specified number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Move all completed jobs to archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Delete all completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2904,19 +3037,19 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect Duplicate Downloads"
|
||||
msgid "Identical download detection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect identical NZB files (based on items in your History or files in .nzb Backup Folder)"
|
||||
msgid "Detect identical downloads based on name or NZB contents."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect duplicate episodes in series"
|
||||
msgid "Smart duplicate detection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect identical episodes in series (based on \"name/season/episode\" of items in your History)"
|
||||
msgid "Detect duplicates based on analysis of the filename."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2924,7 +3057,7 @@ msgid "Allow proper releases"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Bypass series duplicate detection if PROPER, REAL or REPACK is detected in the download name"
|
||||
msgid "Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in the download name."
|
||||
msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
@@ -2934,17 +3067,16 @@ msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fail job (move to History)"
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Tag job"
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#. Three way switch for encrypted posts
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Abort"
|
||||
msgid "Abort post-processing"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3059,10 +3191,6 @@ msgstr ""
|
||||
msgid "Check for New Release"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Weekly check for new SABnzbd release."
|
||||
msgstr ""
|
||||
|
||||
#. Pick list for weekly test for new releases
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Also test releases"
|
||||
@@ -3292,7 +3420,7 @@ msgid "Certificate verification"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Minimal: when SSL is enabled, verify the identity of the server using its certificates. Strict: verify and enforce matching hostname."
|
||||
msgid "When SSL is enabled: - Strict: enforce full certificate verification. This is the most secure setting. - Medium: verify that the certificate is valid and matches the server address, but allow certificates locally injected (for example by firewall or virus scanner).- Minimal: verify that the certificate is valid. This is not secure, any valid certificate could be used. - Disabled: no certification verification. This is not secure at all, anyone could intercept your connection. "
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3303,6 +3431,10 @@ msgstr ""
|
||||
msgid "Minimal"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Medium"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Strict"
|
||||
msgstr ""
|
||||
@@ -3358,14 +3490,6 @@ msgstr ""
|
||||
msgid "Bandwidth"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send Group"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send group command before requesting articles."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Personal notes"
|
||||
msgstr ""
|
||||
@@ -3740,6 +3864,29 @@ msgstr ""
|
||||
msgid "Device to which message should be sent"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Apprise notifications"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send notifications using Apprise to almost any notification service"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Default Apprise URLs"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use a comma and/or space to identify more than one URL."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Override the default URLs for specific notification types below, if desired."
|
||||
msgstr ""
|
||||
|
||||
#. Header for Notification Script notification section
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Notification Script"
|
||||
@@ -4080,6 +4227,10 @@ msgstr ""
|
||||
msgid "Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Web Interface"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Refresh rate"
|
||||
msgstr ""
|
||||
@@ -4184,6 +4335,10 @@ msgstr ""
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be completed' are disabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "View Script Log"
|
||||
msgstr ""
|
||||
@@ -4437,47 +4592,3 @@ msgstr ""
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "There are no connections set. Please set at least one connection."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Password masked in ******, please re-enter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Invalid server details"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Timed out: Try enabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Timed out"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Connection Successful!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Could not determine connection result (%s)"
|
||||
msgstr ""
|
||||
|
||||
|
||||
668
po/main/cs.po
668
po/main/cs.po
@@ -1,5 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# Pavel C <quoing_transifex@mess.cz>, 2023
|
||||
@@ -7,7 +7,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
@@ -83,22 +83,6 @@ msgstr ""
|
||||
msgid "HTTP and HTTPS ports cannot be the same"
|
||||
msgstr "HTTP a HTTPS porty nemohou být stejné"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems "
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
"SABnzbd spuštěno s kódováním %s, zatímco doporučené je UTF-8. Očekávejte "
|
||||
"problémy se jmény souborů a adresářů při stahování."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -137,6 +121,29 @@ msgstr "Zachycen signál %s, ukládám a ukončuji..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Neopravitelná chyba při ukládání stavového souboru"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid ""
|
||||
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems "
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
"SABnzbd spuštěno s kódováním %s, zatímco doporučené je UTF-8. Očekávejte "
|
||||
"problémy se jmény souborů a adresářů při stahování."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid ""
|
||||
"Completed Download Folder %s is on FAT file system, limiting maximum file "
|
||||
"size to 4GB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -165,6 +172,78 @@ msgstr "Email funční"
|
||||
msgid "Test Notification"
|
||||
msgstr "Otestovat notifikace"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "There are no connections set. Please set at least one connection."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Password masked in ******, please re-enter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Invalid server details"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Could not connect to %s on port %s. It appears that %s operates as a web "
|
||||
"server (port 80), possibly an indexer, not a usenet server. You have to fill"
|
||||
" a usenet server."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Could not connect to %s on port %s. Use the default usenet settings: port "
|
||||
"563 and SSL turned on"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Could not connect to %s on port %s. Use the default usenet settings: port "
|
||||
"119 and SSL turned off"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa serveru \"%s:%s\" není správná."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Timed out: Try enabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Timed out"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Connection Successful!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Přihlášené selhalo, zkontrolujte jméno a heslo."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Could not determine connection result (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
msgstr "Překládám adresu"
|
||||
@@ -179,11 +258,6 @@ msgstr "Žádný"
|
||||
msgid "Default"
|
||||
msgstr "Výchozí"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr "Nepodařilo se zkompilovat regex pro hledaný výraz: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
@@ -285,9 +359,10 @@ msgid ""
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "UNC cesta \"%s\" zde není povolena"
|
||||
msgid "Network path \"%s\" should not be used here"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
@@ -306,6 +381,12 @@ msgid ""
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The par2 application was switched, any custom par2 parameters were removed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -378,6 +459,10 @@ msgstr ""
|
||||
msgid "Deobfuscate renamed %d file(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/deobfuscate_filenames.py
|
||||
msgid "Deobfuscate renamed %d subtitle file(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py, sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr "Přímé rozbalení"
|
||||
@@ -414,7 +499,7 @@ msgid "Resuming"
|
||||
msgstr "Obnovování"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Pozastaveno"
|
||||
@@ -454,6 +539,11 @@ msgstr ""
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "%s@%s: Received unknown status code %s for article %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Příliš mnoho spojení k serveru %s [%s]"
|
||||
@@ -658,10 +748,6 @@ msgstr ""
|
||||
"Nesprávný API klíč, použijte api klíč z Nastavení->Obecné ve vašem programu "
|
||||
"třetí strany:"
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/utils/servertests.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Přihlášené selhalo, zkontrolujte jméno a heslo."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
@@ -671,10 +757,6 @@ msgstr "Nezdařený pokus o přihlášení od %s"
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa serveru \"%s:%s\" není správná."
|
||||
|
||||
#. Config->RSS, tab header
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "Feed"
|
||||
@@ -733,6 +815,118 @@ msgstr "CHYBA:"
|
||||
msgid "Back"
|
||||
msgstr "Zpět"
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
msgstr "Výstrahy"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Nečinný"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Queue"
|
||||
msgstr "Fronta"
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge Queue"
|
||||
msgstr "Vyprázdnit frontu"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "History"
|
||||
msgstr "Historie"
|
||||
|
||||
#. History page button
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge History"
|
||||
msgstr "Vyprázdnit historii"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Limit Speed"
|
||||
msgstr "Omezit rychlost"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pozastavit"
|
||||
|
||||
#. One minute
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "min"
|
||||
msgstr "minuta"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Obnovit stahování"
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Zkontrolovat sledovanou složku"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Číst všechny RSS kanály"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Complete Folder"
|
||||
msgstr "Složka dokončených"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Složka nedokončených"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Restart"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Restart bez přihlášení"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Quit"
|
||||
msgstr "Vypnout"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Queue First 10 Items"
|
||||
msgstr "Fronta prvních 10 položek"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Empty"
|
||||
msgstr "Prázdný"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "History Last 10 Items"
|
||||
msgstr "Historie posledních 10 položek"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Go to wizard"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Stopping..."
|
||||
msgstr "Zastavuji..."
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "d"
|
||||
msgstr "d"
|
||||
@@ -871,6 +1065,10 @@ msgstr ""
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Rozbalování selhalo, chyba zápisu nebo plný disk?"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, disk full"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Rozbalování selhalo, cesta k souboru je příliš dlouhá."
|
||||
@@ -984,11 +1182,6 @@ msgstr "Kontroluji další soubory"
|
||||
msgid "Verifying"
|
||||
msgstr "Ověřuji"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
msgstr "Kontroluji"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Zkouším SFV ověření"
|
||||
@@ -1010,8 +1203,11 @@ msgstr ""
|
||||
"certifikátu. Toto je chyba serveru."
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Certificate not valid. This is most probably a server issue."
|
||||
msgstr "Certifikát není validní. Pravděpodobně chyba serveru."
|
||||
msgid ""
|
||||
"Certificate could not be validated. This could be a server issue or due to a"
|
||||
" locally injected certificate (for example by firewall or virus scanner). "
|
||||
"Try setting Certificate verification to Medium."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Server %s uses an untrusted certificate [%s]"
|
||||
@@ -1022,24 +1218,15 @@ msgstr "Server %s používá nedůvěryhodný certifikát [%s]"
|
||||
msgid "Wiki"
|
||||
msgstr "Wiki"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Failed to connect: %s %s@%s:%s (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Startup/Shutdown"
|
||||
msgstr "Spuštění/Vypnutí"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/notifier.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pozastavit"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/notifier.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Obnovit stahování"
|
||||
|
||||
#. Notification - Config->RSS after adding to queue
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Added NZB"
|
||||
@@ -1069,6 +1256,22 @@ msgstr "Fronta dokončena"
|
||||
msgid "Other Messages"
|
||||
msgstr "Ostatní zprávy"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Otevřít složku s kompletními soubory"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
msgstr "Stahování"
|
||||
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Not available"
|
||||
msgstr "Nedostupné"
|
||||
@@ -1082,6 +1285,25 @@ msgstr "Nepodařilo se odeslat macOS oznámení"
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Nepodařilo se odeslat Prowl zprávu"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send Apprise message - no URLs defined"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "One or more Apprise URLs could not be loaded."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send one or more Apprise Notifications"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send Apprise message"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Bad response from Pushover (%s): %s"
|
||||
@@ -1246,100 +1468,6 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pozastavuji duplikátní NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
msgstr "Výstrahy"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Nečinný"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Queue"
|
||||
msgstr "Fronta"
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge Queue"
|
||||
msgstr "Vyprázdnit frontu"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "History"
|
||||
msgstr "Historie"
|
||||
|
||||
#. History page button
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge History"
|
||||
msgstr "Vyprázdnit historii"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Limit Speed"
|
||||
msgstr "Omezit rychlost"
|
||||
|
||||
#. One minute
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "min"
|
||||
msgstr "minuta"
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Zkontrolovat sledovanou složku"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Číst všechny RSS kanály"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Complete Folder"
|
||||
msgstr "Složka dokončených"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Složka nedokončených"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Restart"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Restart bez přihlášení"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Quit"
|
||||
msgstr "Vypnout"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Queue First 10 Items"
|
||||
msgstr "Fronta prvních 10 položek"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Empty"
|
||||
msgstr "Prázdný"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "History Last 10 Items"
|
||||
msgstr "Historie posledních 10 položek"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Go to wizard"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Stopping..."
|
||||
msgstr "Zastavuji..."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Problem with"
|
||||
msgstr "Problém s"
|
||||
@@ -1441,12 +1569,10 @@ msgstr ""
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
msgstr "Stará fronta nalezena, použijte Status->Repair pro konverzi fronty"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid ""
|
||||
"Completed Download Folder %s is on FAT file system, limiting maximum file "
|
||||
"size to 4GB"
|
||||
msgstr ""
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr "Nepodařilo se zkompilovat regex pro hledaný výraz: %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Download might fail, only %s of required %s available"
|
||||
@@ -1616,7 +1742,6 @@ msgstr "RSS kanál %s byl prázdný"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Nekompatibilní kanál"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/rss.py
|
||||
msgid "Empty RSS entry found (%s)"
|
||||
msgstr "Prázdný RSS záznam nalezen (%s)"
|
||||
@@ -1625,10 +1750,6 @@ msgstr "Prázdný RSS záznam nalezen (%s)"
|
||||
msgid "Show interface"
|
||||
msgstr "Zobrazit rozhraní"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Otevřít složku s kompletními soubory"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
@@ -1691,12 +1812,6 @@ msgstr ""
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Zkouším aktualizovat stav neexistujícího serveru %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
msgstr "Stahování"
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -1717,6 +1832,11 @@ msgstr ""
|
||||
msgid "Script"
|
||||
msgstr "Skript"
|
||||
|
||||
#. PP RSS feed of the NZB - Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "RSS"
|
||||
msgstr "RSS"
|
||||
|
||||
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Source"
|
||||
@@ -1772,6 +1892,11 @@ msgstr "Rychlá kontrola..."
|
||||
msgid "Verifying..."
|
||||
msgstr "Kontroluji..."
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
msgstr "Kontroluji"
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "disable server"
|
||||
@@ -1989,7 +2114,6 @@ msgstr "Verze pythonu"
|
||||
msgid "Home page"
|
||||
msgstr "Domovská stránka"
|
||||
|
||||
#. Used in "IRC or IRC-Webaccess"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "or"
|
||||
msgstr "nebo"
|
||||
@@ -2056,8 +2180,8 @@ msgstr "Fórum"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "IRC"
|
||||
msgstr "IRC"
|
||||
msgid "Live Chat"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2089,11 +2213,6 @@ msgstr "Přepínače"
|
||||
msgid "Scheduling"
|
||||
msgstr "Plánování"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "RSS"
|
||||
msgstr "RSS"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Notifications"
|
||||
@@ -2218,6 +2337,11 @@ msgstr "Skripty"
|
||||
msgid "Delete all items from the queue?"
|
||||
msgstr "Smazat všechny položky z fronty?"
|
||||
|
||||
#. Delete confirmation popup
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to remove these jobs?"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge NZBs"
|
||||
@@ -2238,6 +2362,11 @@ msgstr "Odstranit NZB"
|
||||
msgid "Remove NZB & Delete Files"
|
||||
msgstr "Odstranit NZB a smazat soubory"
|
||||
|
||||
#. Checkbox if job should be added to Archive
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Permanently delete (skip archive)"
|
||||
msgstr ""
|
||||
|
||||
#. Caption for missing articles in Queue
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Missing articles"
|
||||
@@ -2257,6 +2386,10 @@ msgstr "ručně"
|
||||
msgid "Reset Quota now"
|
||||
msgstr "Vynulovat kvótu"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Archive"
|
||||
msgstr ""
|
||||
|
||||
#. Button/link hiding History job details
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Hide details"
|
||||
@@ -2277,6 +2410,11 @@ msgstr "Zobrazit neúspěšné"
|
||||
msgid "Show All"
|
||||
msgstr "Zobrazit vše"
|
||||
|
||||
#. Button showing all archived jobs
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Archive"
|
||||
msgstr ""
|
||||
|
||||
#. History table header - Size of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Size"
|
||||
@@ -2453,6 +2591,11 @@ msgstr ""
|
||||
msgid "Used cache"
|
||||
msgstr "Využití cache"
|
||||
|
||||
#. What platform we are on (e.g. Windows/macOS/Ubuntu/UnRaid/etc)
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Platform"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This will restart SABnzbd.<br />Use it when you think the program has a "
|
||||
@@ -2495,14 +2638,6 @@ msgstr ""
|
||||
msgid "Enable 7zip"
|
||||
msgstr "Povolit 7zip"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
" be encrypted, however, validating a server's identity using its "
|
||||
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
|
||||
" certificates are required."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
@@ -2522,7 +2657,6 @@ msgstr ""
|
||||
msgid "Backup"
|
||||
msgstr "Záloha"
|
||||
|
||||
#. Notification Script settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Read the Wiki Help on this!"
|
||||
msgstr ""
|
||||
@@ -2556,11 +2690,11 @@ msgid "Port SABnzbd should listen on."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Web Interface"
|
||||
msgstr "Webové rozhraní"
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a skin."
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2703,27 +2837,36 @@ msgstr ""
|
||||
msgid "History Retention"
|
||||
msgstr "Retence historie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr "Zachovat všechny úkoly"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr "Maximální počet dokončených úkolů"
|
||||
msgid ""
|
||||
"Move jobs to the archive if the history exceeds specified number of jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr "Počet dnů pro zachování dokončených ukolů "
|
||||
msgid ""
|
||||
"Delete jobs if the history and archive exceeds specified number of jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr "Nauchovávat dokončené úkoly"
|
||||
msgid "Move jobs to the archive after specified number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Delete jobs from the history and archive after specified number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Move all completed jobs to archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Delete all completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
@@ -3047,23 +3190,19 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect Duplicate Downloads"
|
||||
msgstr "Detekovat duplicitní stahování"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Detect identical NZB files (based on items in your History or files in .nzb "
|
||||
"Backup Folder)"
|
||||
msgid "Identical download detection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect duplicate episodes in series"
|
||||
msgid "Detect identical downloads based on name or NZB contents."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Detect identical episodes in series (based on \"name/season/episode\" of "
|
||||
"items in your History)"
|
||||
msgid "Smart duplicate detection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect duplicates based on analysis of the filename."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3072,8 +3211,8 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
|
||||
"the download name"
|
||||
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
|
||||
"the download name."
|
||||
msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
@@ -3083,17 +3222,16 @@ msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fail job (move to History)"
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Tag job"
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#. Three way switch for encrypted posts
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Abort"
|
||||
msgid "Abort post-processing"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3216,10 +3354,6 @@ msgstr ""
|
||||
msgid "Check for New Release"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Weekly check for new SABnzbd release."
|
||||
msgstr ""
|
||||
|
||||
#. Pick list for weekly test for new releases
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Also test releases"
|
||||
@@ -3464,8 +3598,13 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Minimal: when SSL is enabled, verify the identity of the server using its "
|
||||
"certificates. Strict: verify and enforce matching hostname."
|
||||
"When SSL is enabled: - Strict: enforce full certificate verification. This "
|
||||
"is the most secure setting. - Medium: verify that the certificate is valid "
|
||||
"and matches the server address, but allow certificates locally injected (for"
|
||||
" example by firewall or virus scanner).- Minimal: verify that the "
|
||||
"certificate is valid. This is not secure, any valid certificate could be "
|
||||
"used. - Disabled: no certification verification. This is not secure at all, "
|
||||
"anyone could intercept your connection. "
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3476,6 +3615,10 @@ msgstr ""
|
||||
msgid "Minimal"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Medium"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Strict"
|
||||
msgstr ""
|
||||
@@ -3533,14 +3676,6 @@ msgstr ""
|
||||
msgid "Bandwidth"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send Group"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send group command before requesting articles."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Personal notes"
|
||||
msgstr ""
|
||||
@@ -3921,6 +4056,30 @@ msgstr ""
|
||||
msgid "Device to which message should be sent"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Apprise notifications"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send notifications using Apprise to almost any notification service"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Default Apprise URLs"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use a comma and/or space to identify more than one URL."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Override the default URLs for specific notification types below, if desired."
|
||||
msgstr ""
|
||||
|
||||
#. Header for Notification Script notification section
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Notification Script"
|
||||
@@ -4282,6 +4441,10 @@ msgstr ""
|
||||
msgid "Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Web Interface"
|
||||
msgstr "Webové rozhraní"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Refresh rate"
|
||||
msgstr ""
|
||||
@@ -4386,6 +4549,12 @@ msgstr ""
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
|
||||
"completed' are disabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "View Script Log"
|
||||
msgstr ""
|
||||
@@ -4644,48 +4813,3 @@ msgstr ""
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Zkouším stáhnout NZB z %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "There are no connections set. Please set at least one connection."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Password masked in ******, please re-enter"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Invalid server details"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Timed out: Try enabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Timed out"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Connection Successful!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Could not determine connection result (%s)"
|
||||
msgstr ""
|
||||
|
||||
692
po/main/da.po
692
po/main/da.po
File diff suppressed because it is too large
Load Diff
800
po/main/de.po
800
po/main/de.po
File diff suppressed because it is too large
Load Diff
736
po/main/es.po
736
po/main/es.po
File diff suppressed because it is too large
Load Diff
670
po/main/fi.po
670
po/main/fi.po
@@ -1,12 +1,12 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
|
||||
"Project-Id-Version: SABnzbd-4.6.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
@@ -83,23 +83,6 @@ msgstr ""
|
||||
msgid "HTTP and HTTPS ports cannot be the same"
|
||||
msgstr "HTTP- ja HTTPS-portit eivät voi olla samoja"
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems "
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
"SABnzbd käynnistettiin %s merkistökoodauksella. Tämän pitäisi olla UTF-8. "
|
||||
"Unicode-merkkejä tiedosto- ja kansionimissä sisältävät lataukset voivat "
|
||||
"aiheuttaa ongelmia."
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: SABnzbd.py
|
||||
msgid "Could not load additional certificates from certifi package"
|
||||
@@ -139,6 +122,30 @@ msgstr "Signaali %s kaapattu, tallennetaan ja lopetetaan..."
|
||||
msgid "Fatal error at saving state"
|
||||
msgstr "Vakava virhe tallennettaessa tilaa"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid ""
|
||||
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems "
|
||||
"with Unicoded file and directory names in downloads."
|
||||
msgstr ""
|
||||
"SABnzbd käynnistettiin %s merkistökoodauksella. Tämän pitäisi olla UTF-8. "
|
||||
"Unicode-merkkejä tiedosto- ja kansionimissä sisältävät lataukset voivat "
|
||||
"aiheuttaa ongelmia."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid ""
|
||||
"Current umask (%o) might deny SABnzbd access to the files and folders it "
|
||||
"creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid ""
|
||||
"Completed Download Folder %s is on FAT file system, limiting maximum file "
|
||||
"size to 4GB"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Restarting because of crashed postprocessor"
|
||||
@@ -167,6 +174,79 @@ msgstr "Sähköpostitus onnistui"
|
||||
msgid "Test Notification"
|
||||
msgstr "Testaa ilmoitusta"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Isäntänimeä ei ole asetettu."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "There are no connections set. Please set at least one connection."
|
||||
msgstr "Yhteyksiä ei ole asetettu. Aktivoi ainakin yksi yhteys."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Password masked in ******, please re-enter"
|
||||
msgstr "Salasana on piilotettu ******, syötä uudelleen"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Invalid server details"
|
||||
msgstr "Virheelliset palvelimen tiedot"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Could not connect to %s on port %s. It appears that %s operates as a web "
|
||||
"server (port 80), possibly an indexer, not a usenet server. You have to fill"
|
||||
" a usenet server."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Could not connect to %s on port %s. Use the default usenet settings: port "
|
||||
"563 and SSL turned on"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Could not connect to %s on port %s. Use the default usenet settings: port "
|
||||
"119 and SSL turned off"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Palvelimen osoite \"%s:%s\" ei ole kelvollinen."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Timed out: Try enabling SSL or connecting on a different port."
|
||||
msgstr "Aikakatkaistu: Yritä laittaa SSL päälle tai yhdistä toiseen porttiin."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Timed out"
|
||||
msgstr "Aikakatkaistiin"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
"Tuntematon SSL protokolla: Kokeile ottaa SSL käytöstä tai vaihda porttia."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Palvelin vaatii käyttäjänimen ja salasanan."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Yhdistäminen onnistui!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Varmennus epäonnistui, tarkista käyttäjänimi/salasana."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr "Liikaa yhteyksiä, keskeytä lataaminen tai yritä myöhemmin uudelleen"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Could not determine connection result (%s)"
|
||||
msgstr "Yhteystestin lopputulosta ei voitu määrittää (%s)"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
msgstr "Selvitetään osoitetta"
|
||||
@@ -181,11 +261,6 @@ msgstr "Ei mitään"
|
||||
msgid "Default"
|
||||
msgstr "Oletus"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr "Regex käännös epäonnistui hakutermille: %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
@@ -283,9 +358,10 @@ msgid ""
|
||||
" it creates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "UNC path \"%s\" not allowed here"
|
||||
msgstr "TUNT polku \"%s\" ei ole sallittu"
|
||||
msgid "Network path \"%s\" should not be used here"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/cfg.py
|
||||
msgid "Queue not empty, cannot change folder."
|
||||
@@ -304,6 +380,12 @@ msgid ""
|
||||
"might be emptied during updates."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/cfg.py
|
||||
msgid ""
|
||||
"The par2 application was switched, any custom par2 parameters were removed"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/config.py
|
||||
msgid "Configuration locked, cannot save settings"
|
||||
@@ -376,6 +458,10 @@ msgstr ""
|
||||
msgid "Deobfuscate renamed %d file(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/deobfuscate_filenames.py
|
||||
msgid "Deobfuscate renamed %d subtitle file(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py, sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
@@ -410,7 +496,7 @@ msgid "Resuming"
|
||||
msgstr "Jatketaan"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Keskeytetty"
|
||||
@@ -449,6 +535,11 @@ msgstr "Alustaminen epäonnistui kohteessa %s@%s syy: %s"
|
||||
msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "%s@%s: Received unknown status code %s for article %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Liikaa yhteyksiä palvelimelle %s [%s]"
|
||||
@@ -663,10 +754,6 @@ msgstr ""
|
||||
"API avain virheellinen, käytä Asetukset->Yleiset löytyvää api avainta "
|
||||
"käyttämääsi kolmannen osapuolen ohjelmaan:"
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/utils/servertests.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Varmennus epäonnistui, tarkista käyttäjänimi/salasana."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Unsuccessful login attempt from %s"
|
||||
@@ -676,10 +763,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Palvelimen osoite \"%s:%s\" ei ole kelvollinen."
|
||||
|
||||
#. Config->RSS, tab header
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "Feed"
|
||||
@@ -738,6 +821,118 @@ msgstr "VIRHE:"
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
msgstr "Varoitukset"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Toimeton"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Queue"
|
||||
msgstr "Jono"
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge Queue"
|
||||
msgstr "Tyhjennä jono"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "History"
|
||||
msgstr "Historia"
|
||||
|
||||
#. History page button
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge History"
|
||||
msgstr "Tyhjennä historia"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Limit Speed"
|
||||
msgstr "Nopeusrajoitus"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
|
||||
#. One minute
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "min"
|
||||
msgstr "minuutti"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Jatka"
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Tarkista vahdittu kansio"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Lue kaikki RSS syötteet"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Complete Folder"
|
||||
msgstr "Valmistuneet-kansio"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Lataukset-kansio"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Vianmääritys"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Käynnistä uudelleen"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Käynnistä uudelleen ilman kirjautumista"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Quit"
|
||||
msgstr "Lopeta"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Queue First 10 Items"
|
||||
msgstr "Vie ensimmäiset 10 kohdetta jonoon"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/skintext.py
|
||||
msgid "Empty"
|
||||
msgstr "Tyhjä"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "History Last 10 Items"
|
||||
msgstr "Vie viimeiset 10 kohdetta historiaan"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Go to wizard"
|
||||
msgstr "Mene velhoon"
|
||||
|
||||
#: sabnzbd/macosmenu.py
|
||||
msgid "Stopping..."
|
||||
msgstr "Pysäytetään..."
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py
|
||||
msgid "d"
|
||||
msgstr "pv"
|
||||
@@ -873,6 +1068,10 @@ msgstr ""
|
||||
msgid "Unpacking failed, write error or disk is full?"
|
||||
msgstr "Purkaminen epäonnistui, kirjoitusvirhe tai levy täynnä?"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, disk full"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking failed, path is too long"
|
||||
msgstr "Purkaminen epäonnistui, polku on liian pitkä"
|
||||
@@ -984,11 +1183,6 @@ msgstr ""
|
||||
msgid "Verifying"
|
||||
msgstr "Varmennetaan"
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
msgstr "Tarkistetaan"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Trying SFV verification"
|
||||
msgstr "Yritetään SFV varmennusta"
|
||||
@@ -1008,7 +1202,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Certificate not valid. This is most probably a server issue."
|
||||
msgid ""
|
||||
"Certificate could not be validated. This could be a server issue or due to a"
|
||||
" locally injected certificate (for example by firewall or virus scanner). "
|
||||
"Try setting Certificate verification to Medium."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
@@ -1020,24 +1217,15 @@ msgstr "Palvelin %s käyttää epäluotettavaa sertifikaattia [%s]"
|
||||
msgid "Wiki"
|
||||
msgstr "Wiki"
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Failed to connect: %s %s@%s:%s (%s)"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Startup/Shutdown"
|
||||
msgstr "Käynnistys/Sammutus"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/notifier.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/notifier.py, sabnzbd/osxmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Jatka"
|
||||
|
||||
#. Notification - Config->RSS after adding to queue
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Added NZB"
|
||||
@@ -1067,6 +1255,22 @@ msgstr "Jono valmistunut"
|
||||
msgid "Other Messages"
|
||||
msgstr "Muut viestit"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Avaa valmistuneet-kansio"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
msgstr "Lataa"
|
||||
|
||||
#: sabnzbd/notifier.py, sabnzbd/skintext.py
|
||||
msgid "Not available"
|
||||
msgstr "Ei saatavilla"
|
||||
@@ -1080,6 +1284,25 @@ msgstr ""
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Prowl viestin lähetys epäonnistui"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send Apprise message - no URLs defined"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "One or more Apprise URLs could not be loaded."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send one or more Apprise Notifications"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Failed to send Apprise message"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Bad response from Pushover (%s): %s"
|
||||
@@ -1244,100 +1467,6 @@ msgstr "%s artikkelissa oli ei-vastaavia kaksoiskappaleita"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Keskeytetään kaksoiskappale NZB \"%s\""
|
||||
|
||||
#. Footer: indicator of warnings
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Warnings"
|
||||
msgstr "Varoitukset"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Toimeton"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Queue"
|
||||
msgstr "Jono"
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge Queue"
|
||||
msgstr "Tyhjennä jono"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "History"
|
||||
msgstr "Historia"
|
||||
|
||||
#. History page button
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Purge History"
|
||||
msgstr "Tyhjennä historia"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Limit Speed"
|
||||
msgstr "Nopeusrajoitus"
|
||||
|
||||
#. One minute
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "min"
|
||||
msgstr "minuutti"
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/skintext.py
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Tarkista vahdittu kansio"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Lue kaikki RSS syötteet"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Complete Folder"
|
||||
msgstr "Valmistuneet-kansio"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Lataukset-kansio"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Vianmääritys"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Käynnistä uudelleen"
|
||||
|
||||
#: sabnzbd/osxmenu.py, sabnzbd/sabtray.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Käynnistä uudelleen ilman kirjautumista"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Quit"
|
||||
msgstr "Lopeta"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Queue First 10 Items"
|
||||
msgstr "Vie ensimmäiset 10 kohdetta jonoon"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Empty"
|
||||
msgstr "Tyhjä"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "History Last 10 Items"
|
||||
msgstr "Vie viimeiset 10 kohdetta historiaan"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Go to wizard"
|
||||
msgstr "Mene velhoon"
|
||||
|
||||
#: sabnzbd/osxmenu.py
|
||||
msgid "Stopping..."
|
||||
msgstr "Pysäytetään..."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Problem with"
|
||||
msgstr "Ongelma"
|
||||
@@ -1467,12 +1596,10 @@ msgstr "Virhe %s: Syötä kelvollinen käyttäjänimi ja salasana."
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
msgstr "Vanhan version jono havaittiin, käytä Tila->Korjaa muuntaaksesi jonon"
|
||||
|
||||
#. Warning message
|
||||
#. Error message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid ""
|
||||
"Completed Download Folder %s is on FAT file system, limiting maximum file "
|
||||
"size to 4GB"
|
||||
msgstr ""
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr "Regex käännös epäonnistui hakutermille: %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Download might fail, only %s of required %s available"
|
||||
@@ -1642,7 +1769,6 @@ msgstr "RSS syöte %s oli tyhjä"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Puutteellinen syöte"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/rss.py
|
||||
msgid "Empty RSS entry found (%s)"
|
||||
msgstr "Tyhjä RSS kohde löytyi (%s)"
|
||||
@@ -1651,10 +1777,6 @@ msgstr "Tyhjä RSS kohde löytyi (%s)"
|
||||
msgid "Show interface"
|
||||
msgstr "Näytä käyttöliittymä"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Avaa valmistuneet-kansio"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
@@ -1717,12 +1839,6 @@ msgstr "Ajastettu tuntemattomalle palvelimelle %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Yritettiin asettaa tila ei olemassa olevalle palvelimelle %s"
|
||||
|
||||
#. Queue status "download" - Post processing pick list - Config->RSS button
|
||||
#. "download item"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Download"
|
||||
msgstr "Lataa"
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -1743,6 +1859,11 @@ msgstr ""
|
||||
msgid "Script"
|
||||
msgstr "Skripti"
|
||||
|
||||
#. PP RSS feed of the NZB - Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "RSS"
|
||||
msgstr "RSS"
|
||||
|
||||
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Source"
|
||||
@@ -1798,6 +1919,11 @@ msgstr "Pikatarkistus..."
|
||||
msgid "Verifying..."
|
||||
msgstr "Varmennetaan..."
|
||||
|
||||
#. PP status
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Checking"
|
||||
msgstr "Tarkistetaan"
|
||||
|
||||
#. #: Config->Scheduler
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "disable server"
|
||||
@@ -2015,7 +2141,6 @@ msgstr "Python versio"
|
||||
msgid "Home page"
|
||||
msgstr "Kotisivu"
|
||||
|
||||
#. Used in "IRC or IRC-Webaccess"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "or"
|
||||
msgstr "tai"
|
||||
@@ -2082,8 +2207,8 @@ msgstr "Foorumi"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "IRC"
|
||||
msgstr "IRC"
|
||||
msgid "Live Chat"
|
||||
msgstr ""
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -2115,11 +2240,6 @@ msgstr "Muuttujat"
|
||||
msgid "Scheduling"
|
||||
msgstr "Ajastus"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "RSS"
|
||||
msgstr "RSS"
|
||||
|
||||
#. Main menu item
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Notifications"
|
||||
@@ -2244,6 +2364,11 @@ msgstr "Skriptit"
|
||||
msgid "Delete all items from the queue?"
|
||||
msgstr "Poistetaanko kaikki kohteet jonosta?"
|
||||
|
||||
#. Delete confirmation popup
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Are you sure you want to remove these jobs?"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge NZBs"
|
||||
@@ -2264,6 +2389,11 @@ msgstr "Poista NZB"
|
||||
msgid "Remove NZB & Delete Files"
|
||||
msgstr "Poista NZB ja tiedostot"
|
||||
|
||||
#. Checkbox if job should be added to Archive
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Permanently delete (skip archive)"
|
||||
msgstr ""
|
||||
|
||||
#. Caption for missing articles in Queue
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Missing articles"
|
||||
@@ -2283,6 +2413,10 @@ msgstr "käsikäyttöinen"
|
||||
msgid "Reset Quota now"
|
||||
msgstr "Resetoi latausrajoitus nyt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Archive"
|
||||
msgstr ""
|
||||
|
||||
#. Button/link hiding History job details
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Hide details"
|
||||
@@ -2303,6 +2437,11 @@ msgstr "Näytä epäonnistuneet"
|
||||
msgid "Show All"
|
||||
msgstr "Näytä kaikki"
|
||||
|
||||
#. Button showing all archived jobs
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Show Archive"
|
||||
msgstr ""
|
||||
|
||||
#. History table header - Size of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Size"
|
||||
@@ -2479,6 +2618,11 @@ msgstr "Asetustiedosto"
|
||||
msgid "Used cache"
|
||||
msgstr "Käytetty välimuisti"
|
||||
|
||||
#. What platform we are on (e.g. Windows/macOS/Ubuntu/UnRaid/etc)
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Platform"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This will restart SABnzbd.<br />Use it when you think the program has a "
|
||||
@@ -2532,14 +2676,6 @@ msgstr ""
|
||||
msgid "Enable 7zip"
|
||||
msgstr "7zip käytössä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
|
||||
" be encrypted, however, validating a server's identity using its "
|
||||
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
|
||||
" certificates are required."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
|
||||
@@ -2559,7 +2695,6 @@ msgstr "Käynnissäoloaika"
|
||||
msgid "Backup"
|
||||
msgstr "Varmuuskopioi"
|
||||
|
||||
#. Notification Script settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Read the Wiki Help on this!"
|
||||
msgstr "Lue Wikin ohjeet tähän!"
|
||||
@@ -2593,12 +2728,12 @@ msgid "Port SABnzbd should listen on."
|
||||
msgstr "Portti jota SABnzbdn tulisi kuunnella."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Web Interface"
|
||||
msgstr "Web-käyttöliittymä"
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a skin."
|
||||
msgstr "Valitse teema."
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
@@ -2750,26 +2885,35 @@ msgstr ""
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgid ""
|
||||
"Move jobs to the archive if the history exceeds specified number of jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgid ""
|
||||
"Delete jobs if the history and archive exceeds specified number of jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgid "Move jobs to the archive after specified number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Delete jobs from the history and archive after specified number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Move all completed jobs to archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Delete all completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3122,23 +3266,19 @@ msgstr ""
|
||||
" lataamista."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect Duplicate Downloads"
|
||||
msgstr "Tunnista päällekkäiset lataukset"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Detect identical NZB files (based on items in your History or files in .nzb "
|
||||
"Backup Folder)"
|
||||
msgid "Identical download detection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect duplicate episodes in series"
|
||||
msgstr "Tunnista identtiset jaksot sarjassa"
|
||||
msgid "Detect identical downloads based on name or NZB contents."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Detect identical episodes in series (based on \"name/season/episode\" of "
|
||||
"items in your History)"
|
||||
msgid "Smart duplicate detection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Detect duplicates based on analysis of the filename."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3147,8 +3287,8 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
|
||||
"the download name"
|
||||
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
|
||||
"the download name."
|
||||
msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
@@ -3158,18 +3298,17 @@ msgstr "Hylkää"
|
||||
|
||||
#. Four way switch for duplicates
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fail job (move to History)"
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#. Four way switch for duplicates
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Tag job"
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#. Three way switch for encrypted posts
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Abort"
|
||||
msgstr "Peruuta"
|
||||
msgid "Abort post-processing"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Action when unwanted extension detected"
|
||||
@@ -3299,10 +3438,6 @@ msgstr ""
|
||||
msgid "Check for New Release"
|
||||
msgstr "Tarkista uusi versio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Weekly check for new SABnzbd release."
|
||||
msgstr "Tarkistaa viikottain uusimman SABnzbd version."
|
||||
|
||||
#. Pick list for weekly test for new releases
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Also test releases"
|
||||
@@ -3554,8 +3689,13 @@ msgstr "Sertifikaatin varmennus"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Minimal: when SSL is enabled, verify the identity of the server using its "
|
||||
"certificates. Strict: verify and enforce matching hostname."
|
||||
"When SSL is enabled: - Strict: enforce full certificate verification. This "
|
||||
"is the most secure setting. - Medium: verify that the certificate is valid "
|
||||
"and matches the server address, but allow certificates locally injected (for"
|
||||
" example by firewall or virus scanner).- Minimal: verify that the "
|
||||
"certificate is valid. This is not secure, any valid certificate could be "
|
||||
"used. - Disabled: no certification verification. This is not secure at all, "
|
||||
"anyone could intercept your connection. "
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3566,6 +3706,10 @@ msgstr "Ei käytössä"
|
||||
msgid "Minimal"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Medium"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Strict"
|
||||
msgstr "Tiukka"
|
||||
@@ -3623,14 +3767,6 @@ msgstr "Testataan pavelimen tietoja..."
|
||||
msgid "Bandwidth"
|
||||
msgstr "Kaista"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send Group"
|
||||
msgstr "Lähetä ryhmä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send group command before requesting articles."
|
||||
msgstr "Lähettää ryhmäkomennon ennen artikkeleiden pyytämistä."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Personal notes"
|
||||
msgstr "Henkilökohtaiset huomautukset"
|
||||
@@ -4015,6 +4151,30 @@ msgstr "Laite"
|
||||
msgid "Device to which message should be sent"
|
||||
msgstr "Laite johon viesti lähetetään"
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Apprise notifications"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Send notifications using Apprise to almost any notification service"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Default Apprise URLs"
|
||||
msgstr ""
|
||||
|
||||
#. Apprise settings
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use a comma and/or space to identify more than one URL."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Override the default URLs for specific notification types below, if desired."
|
||||
msgstr ""
|
||||
|
||||
#. Header for Notification Script notification section
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Notification Script"
|
||||
@@ -4388,6 +4548,10 @@ msgstr "VAROITUS:"
|
||||
msgid "Fetch"
|
||||
msgstr "Nouda"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Web Interface"
|
||||
msgstr "Web-käyttöliittymä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Refresh rate"
|
||||
msgstr "Päivitysväli"
|
||||
@@ -4492,6 +4656,12 @@ msgstr "Ylin"
|
||||
msgid "Bottom"
|
||||
msgstr "Alin"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When you Retry a job, 'Duplicate Detection' and 'Abort jobs that cannot be "
|
||||
"completed' are disabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "View Script Log"
|
||||
msgstr "Näytä skriptien loki"
|
||||
@@ -4760,49 +4930,3 @@ msgstr "Osoitteen nouto epäonnistui; %s"
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Trying to fetch NZB from %s"
|
||||
msgstr "Yritetään noutaa NZB osoitteesta %s"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "The hostname is not set."
|
||||
msgstr "Isäntänimeä ei ole asetettu."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "There are no connections set. Please set at least one connection."
|
||||
msgstr "Yhteyksiä ei ole asetettu. Aktivoi ainakin yksi yhteys."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Password masked in ******, please re-enter"
|
||||
msgstr "Salasana on piilotettu ******, syötä uudelleen"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Invalid server details"
|
||||
msgstr "Virheelliset palvelimen tiedot"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Timed out: Try enabling SSL or connecting on a different port."
|
||||
msgstr "Aikakatkaistu: Yritä laittaa SSL päälle tai yhdistä toiseen porttiin."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Timed out"
|
||||
msgstr "Aikakatkaistiin"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid ""
|
||||
"Unknown SSL protocol: Try disabling SSL or connecting on a different port."
|
||||
msgstr ""
|
||||
"Tuntematon SSL protokolla: Kokeile ottaa SSL käytöstä tai vaihda porttia."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Server requires username and password."
|
||||
msgstr "Palvelin vaatii käyttäjänimen ja salasanan."
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Yhdistäminen onnistui!"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr "Liikaa yhteyksiä, keskeytä lataaminen tai yritä myöhemmin uudelleen"
|
||||
|
||||
#: sabnzbd/utils/servertests.py
|
||||
msgid "Could not determine connection result (%s)"
|
||||
msgstr "Yhteystestin lopputulosta ei voitu määrittää (%s)"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user