forked from I2P_Developers/i2p.i2p
Compare commits
597 Commits
i2p-0.9.9
...
i2p-0.9.14
Author | SHA1 | Date | |
---|---|---|---|
1246e1c498 | |||
d6b0b1b93c | |||
1e0c970c95 | |||
db9f49c7d4 | |||
1603353ae8 | |||
6753d23309 | |||
ca5755b0fd | |||
2c8223274d | |||
f0dd09cf9c | |||
4746d9eb80 | |||
99401c5639 | |||
58578d9020 | |||
af575d6c95 | |||
e9c8748c0b | |||
08409d016b | |||
42bfbfc60b | |||
c7c087d964 | |||
bd45d5483f | |||
ce4874d825 | |||
9b408b67ef | |||
c3bf100082 | |||
b282ccd890 | |||
f38b741813 | |||
3a899d52d1 | |||
a2567b0ee2 | |||
4b0019c732 | |||
5d21738410 | |||
df81006b42 | |||
2c7006e9bd | |||
b1caa8d5a3 | |||
8b2ffada10 | |||
0998738e94 | |||
c04062bbdf | |||
0c7a3a3a39 | |||
f364a83f4f | |||
9dabc75866 | |||
2c185ea76c | |||
39e859c368 | |||
dfbe3c4eb1 | |||
b8170a544b | |||
4e7f92ec89 | |||
292683268b | |||
dc14abd4d3 | |||
dd782f08f7 | |||
d57dc9a8a2 | |||
4e463d57ce | |||
e0c0cc8b63 | |||
cc50d47376 | |||
4da7548caa | |||
91a676cb36 | |||
48a32fb3b8 | |||
845b45a57d | |||
7b7a620999 | |||
82217d5ebc | |||
b95ec70d7d | |||
aa3d3670a4 | |||
8198c83982 | |||
75ff7987b8 | |||
9c87685c02 | |||
ce2bb85440 | |||
43fdff2292 | |||
06525adf3d | |||
cff4210dfd | |||
d855c5de50 | |||
f1a738340f | |||
9827c48527 | |||
367d68e552 | |||
1498ed361e | |||
91bc16ce05 | |||
861a1e26d7 | |||
a5b2f9a5e9 | |||
9550484037 | |||
b33284bb8e | |||
ce2694e8fb | |||
44073732e2 | |||
fef591412e | |||
f191e50b14 | |||
3379432e5f | |||
bb9129b61b | |||
0fc3029aaa | |||
d8c8586ccf | |||
38a4728283 | |||
7888705b01 | |||
31938f49d6 | |||
c95ed2ea96 | |||
b5ed247a53 | |||
22aff49747 | |||
e4430f05e4 | |||
1047691c64 | |||
f3180b3f6f | |||
616866cc9e | |||
58512b8230 | |||
ca4555c496 | |||
bc99bc7206 | |||
1420c773a6 | |||
690b40ed77 | |||
986de4c1d6 | |||
01da32364f | |||
8b1abc08db | |||
69e56f8f6b | |||
b611d0238a | |||
2dcc9b7a1e | |||
3e54b5d544 | |||
8845ce6e1c | |||
ff189e796c | |||
89c07ac969 | |||
a8e878f894 | |||
1f8f3eb4d9 | |||
8fd2a05bf9 | |||
002d057c92 | |||
ab44488e4c | |||
653ffbc82e | |||
95fd0291e3 | |||
2a269ff1a9 | |||
83ccfb4596 | |||
e968828916 | |||
ed85a2b82b | |||
e692e21dc9 | |||
662fe3ebc2 | |||
1bf8fd92e4 | |||
4dd8a6421a | |||
884b285bf5 | |||
cb340152df | |||
299a44e7eb | |||
40e5bcbdbb | |||
d328e78727 | |||
1bcb9b24b6 | |||
3c1c130bf0 | |||
df3442563c | |||
331b1fa742 | |||
b97a53177e | |||
633b71ba19 | |||
f3dd42143d | |||
7c79f5d5e5 | |||
af5c0bd8a7 | |||
c07bfe34ab | |||
49681415e2 | |||
190e8c01b7 | |||
6ae86f7d81 | |||
0aeb3ca75e | |||
1d3e12abb7 | |||
5e8428ef6c | |||
19e3064529 | |||
f9dbd74ad8 | |||
ff837cf66e | |||
e0914c358e | |||
0e9bb23c7b | |||
7ff5d36f07 | |||
5a3eab0c7c | |||
c28f707f55 | |||
ef96c88719 | |||
faa2435e33 | |||
0537a221d3 | |||
99c5a1978f | |||
d106f483a1 | |||
dee84e70ae | |||
09995b77b4 | |||
06894f9f0b | |||
73943b1a08 | |||
b573dab05f | |||
a766eca283 | |||
a65edbef92 | |||
7479aa235e | |||
4167cd955b | |||
d1bd893a7b | |||
2467856011 | |||
d32b4e9f24 | |||
1acd5caaa8 | |||
f69b757305 | |||
d2db41bc89 | |||
f3b4377ee1 | |||
551a8091a9 | |||
f994590ad7 | |||
8371b8f806 | |||
5d04f8db89 | |||
06de347373 | |||
2bf2eb482e | |||
a93666cd36 | |||
dbb7eb3d88 | |||
39169f0450 | |||
df71308664 | |||
e393f82eb7 | |||
8480a204ea | |||
197be5f60f | |||
5621e9b390 | |||
485d785e0b | |||
8d71d496be | |||
738bae46d2 | |||
d519228efb | |||
72c404c4d4 | |||
d2e3547a2e | |||
8d9790fd77 | |||
cd91a6b2a4 | |||
e165c1805d | |||
292b0a81c0 | |||
b9e9c07d95 | |||
837bf9eafe | |||
cfdbef05c5 | |||
47b10e9771 | |||
1b5a2ddef3 | |||
c161649ed5 | |||
c9b5c03e1b | |||
c4c04d7ec5 | |||
b4e03fa969 | |||
1cdcf1cb0a | |||
56b6992ca8 | |||
2beaea4a86 | |||
2dc97b160a | |||
a014918c0d | |||
fb9a4eb87a | |||
cd83c48526 | |||
5b2766ddfb | |||
f912b01137 | |||
b0db4e4fff | |||
649f76fb06 | |||
67ea2f3717 | |||
e9e535cb94 | |||
7822b5c3ac | |||
767bd05ce1 | |||
36ebe19cd7 | |||
943ea957a2 | |||
04a3673366 | |||
1dfbe73b73 | |||
87889bb322 | |||
aa0616d7c5 | |||
611ff6357e | |||
91d7a0ab98 | |||
f5661da595 | |||
3f56ce206d | |||
8a2308b411 | |||
04cabf40b5 | |||
4e0c4f6f98 | |||
75bd235eb2 | |||
05236b093a | |||
260ebe512c | |||
c2dab16c8c | |||
945d455f33 | |||
c8f8f6ff34 | |||
0d4f597a59 | |||
775047fbc2 | |||
1e4b43314c | |||
b365817c99 | |||
bbb04774d1 | |||
1823e5e641 | |||
4d2dc1c8e8 | |||
6986f90bf8 | |||
b43ebd2486 | |||
7bf3ea5200 | |||
490727b401 | |||
49f4f3398d | |||
b84682fdc9 | |||
b9491b269b | |||
b70cbb28b2 | |||
673c14287a | |||
b4a0ffdbbd | |||
3b2e5bded2 | |||
67eb3cc140 | |||
5a683149ab | |||
b75ad1ca5a | |||
552ab31559 | |||
4abfde4047 | |||
6ecfedba37 | |||
43883a90d2 | |||
3930113f00 | |||
029198c213 | |||
493788f4f8 | |||
028776de88 | |||
705de68aa3 | |||
eb96a74e32 | |||
614f34c6b4 | |||
f77a3c7f56 | |||
6de81d41d2 | |||
7ac9dc5542 | |||
2195c2fe98 | |||
3f35e927dd | |||
5ec659513b | |||
1039a4b7a0 | |||
88899c1233 | |||
d429514a3a | |||
b2c6fcbb73 | |||
3b1e030b39 | |||
e097a1caeb | |||
d6b09f8bab | |||
6d46344171 | |||
24e807b238 | |||
fdf6f5d51f | |||
4b938a02e7 | |||
44a5740a04 | |||
8d73b2e838 | |||
e1fc6893b4 | |||
7487ab8848 | |||
e675416b8c | |||
24a133fe67 | |||
0570feda6f | |||
b206665c72 | |||
8a6fb132f5 | |||
6992ca8b98 | |||
fd916a7646 | |||
90cd68900e | |||
3f865edb4f | |||
2e8681de2c | |||
2d85b98c20 | |||
d28d6efb79 | |||
43d84a5f07 | |||
e4d57f62bb | |||
a974268e7b | |||
1695af7011 | |||
682c4cd0b8 | |||
0f6d039391 | |||
d6233a8798 | |||
4f12e81dbb | |||
ab612d0088 | |||
3fa7bb9dc5 | |||
22b3d4d70b | |||
bd6c588c74 | |||
6c202e8f1d | |||
24e6750529 | |||
af7ce8e18e | |||
c73f0eeeb5 | |||
c68769cf7f | |||
3e639a319d | |||
1bbb79f5b1 | |||
84e6991374 | |||
5d1796bb6f | |||
bfba732f76 | |||
738c5ed14e | |||
beed080390 | |||
3624d66c12 | |||
2cca2781fd | |||
31d485299c | |||
a39f667c2f | |||
5283fc923e | |||
c57552f4e9 | |||
96b4c6b219 | |||
51911bd9a8 | |||
1f5926e4e9 | |||
d6a02a13ad | |||
e282491798 | |||
2b0dfed012 | |||
9d80aff977 | |||
a0724dc009 | |||
8c820bb237 | |||
3fdc964eac | |||
597662d0dc | |||
17c80c29e6 | |||
5d0bfc63fa | |||
0c449f8b8e | |||
36b6baa33e | |||
2c049878c6 | |||
81c58c1796 | |||
36a3edf612 | |||
4b6fd3d387 | |||
f777696e14 | |||
c9c181c14a | |||
a62b7a4374 | |||
9d7a9c9895 | |||
5d6a1c5e35 | |||
c48266fdc4 | |||
895d54d36d | |||
ba0e1a3aa9 | |||
6ec665db50 | |||
7f4c52cf42 | |||
37728e38c9 | |||
18b4a2427b | |||
3102970540 | |||
c679091afd | |||
91cdf85772 | |||
aab8b10adf | |||
5bcfe1ec72 | |||
4209c291ba | |||
7c5dc7fa55 | |||
c6dfb8744a | |||
6e0ca92041 | |||
2f7eb56790 | |||
8c98ef7328 | |||
45997fd1d5 | |||
6a3e5ec620 | |||
18cbf3d253 | |||
4df6a6f47b | |||
5542406f3d | |||
a9fceae181 | |||
c79ff0dc09 | |||
e2fc5c6957 | |||
5667a6647f | |||
b70d616083 | |||
75fa2b1809 | |||
66d9017d58 | |||
53efb7119a | |||
8b946bb56b | |||
8ed34e3edf | |||
d8fef53aef | |||
6af82f2a9a | |||
36b2547ca4 | |||
72e96cdd23 | |||
a2ba9bbdb1 | |||
f6d9a6917f | |||
2e91890401 | |||
1956068698 | |||
855cae0a45 | |||
ef3a12f01a | |||
37bf750ab9 | |||
090a790a9d | |||
8ef3bb3d82 | |||
388019249d | |||
91d1364832 | |||
2ec1d8484f | |||
9a01fdf57c | |||
deec84713f | |||
0d028122a6 | |||
4998f86efe | |||
839bd51bc8 | |||
936f2bb317 | |||
0cd774273c | |||
fe391ff29f | |||
001b127258 | |||
7c00a5165f | |||
e1c3e2c1c7 | |||
e9b3577eec | |||
3622501471 | |||
b7207fd29f | |||
4dc1241d2f | |||
c59603d31b | |||
3ab149a399 | |||
99f28519fb | |||
05aa88b4e8 | |||
887f953efb | |||
5e16c42e4e | |||
2cea7cdb30 | |||
e60da8e8ff | |||
be12995753 | |||
c30419107f | |||
2cacded182 | |||
ec22a1dafc | |||
434bf13be9 | |||
236df32f30 | |||
28575dbdae | |||
5b9d669d79 | |||
b2f4fde7e5 | |||
9eefe1e935 | |||
b91f041ad7 | |||
ba96f72899 | |||
5d322245d8 | |||
6b16907e40 | |||
0c326f989e | |||
e0a499dd0f | |||
0f862124fe | |||
d00be4ceee | |||
ec8354860e | |||
f9144f2fbf | |||
5d2ff5e648 | |||
ce475d2cd6 | |||
72bd1fe91b | |||
747d833392 | |||
3427464de6 | |||
9ca625a64e | |||
9e87fd9b13 | |||
5b6ed48ec0 | |||
96f6865835 | |||
fa50f9f246 | |||
538b4b10d7 | |||
bdb3e26d07 | |||
ec87600e80 | |||
0624f46e67 | |||
ece1198dd4 | |||
8bbab31872 | |||
8c6922ac5f | |||
6b67f399f6 | |||
a9598633b3 | |||
1fb2672b67 | |||
4308ce6347 | |||
32b095efbd | |||
eb4bdfcefb | |||
fc6554cabc | |||
058590f69b | |||
576984badc | |||
9825fcf97b | |||
1ed96d72b2 | |||
a29935abb3 | |||
e92a5da5a5 | |||
f08e0299ef | |||
9757435b09 | |||
80fadb4580 | |||
8658c23974 | |||
0264cc9030 | |||
bd5b6b32b5 | |||
dc0a1281bf | |||
c20c697126 | |||
44e7110c9a | |||
c860c49c6b | |||
b16e66d39a | |||
3b06f0b83c | |||
0bc6c23ac9 | |||
17e63b054c | |||
0fae0640d6 | |||
d054e12952 | |||
dc60c2b478 | |||
b59aa1fb69 | |||
54a21bfa7b | |||
50f55877f8 | |||
f9ff262318 | |||
91ba76f2a6 | |||
ec97bc2f81 | |||
fba209ca7d | |||
b91b242a1a | |||
38186c8f75 | |||
1b3aefbbce | |||
c03511b971 | |||
78e7599a8a | |||
dc871cf1eb | |||
e98b9d0af5 | |||
2a09d5baa6 | |||
41e071efe5 | |||
e8e239616f | |||
1feb317f8b | |||
09668453d0 | |||
5842e25205 | |||
5219791673 | |||
bf485d8bce | |||
cc97a19d3c | |||
38c02b44b9 | |||
04a596899a | |||
ee1ed1bb82 | |||
2b39d28e99 | |||
8cb503d8bb | |||
efff25a87c | |||
6e2583ad92 | |||
af84bcf945 | |||
3dc429415b | |||
ec9dd25631 | |||
2bda87d5a7 | |||
a7a816e0a7 | |||
3d9d722cee | |||
289a8e7b40 | |||
7d3aa33c25 | |||
0db1314595 | |||
68641626aa | |||
5b9fb403c9 | |||
a4114b96fd | |||
de184ed139 | |||
04c342ec6a | |||
27ce28027d | |||
3acfdbe8f7 | |||
d9fed57c89 | |||
46e7e9be82 | |||
d87d4eb232 | |||
88ea451f81 | |||
7b0b07933f | |||
c180292358 | |||
a3fa48dcbe | |||
1112fc8544 | |||
efe3bd2c05 | |||
f112baac48 | |||
ed2feb3ff7 | |||
a17b1b99c0 | |||
27bc32f2f3 | |||
b535054e13 | |||
97a9a6090a | |||
8b8e2c88c1 | |||
9d7ee30c15 | |||
4ee144533a | |||
0f2a983bb7 | |||
8fd2f9090e | |||
8770d7eae0 | |||
c59ef24acf | |||
85aa2fb083 | |||
434b9fa0d1 | |||
56116ad8c2 | |||
9804e5b7d9 | |||
2f33186e58 | |||
0347c56c96 | |||
e77409e57a | |||
615ba94559 | |||
76925fa3bd | |||
c6f2d4948b | |||
8699c82614 | |||
1d7eedd463 | |||
796a231f54 | |||
e1fcad686c | |||
e498e2113f | |||
f42ac71fe0 | |||
74f2fd06cc | |||
143a0dfc47 | |||
844bae18ba | |||
9e4d5c0e61 | |||
9b8d3eb688 | |||
8478bfbddc | |||
d6bb5f6a4d | |||
e9fec9354b | |||
f9f0e6d0a2 | |||
3bc0be1cbe | |||
8d826cee93 | |||
e853d9a40b | |||
15bf94b479 | |||
6314f33d8f | |||
5fa0376f58 | |||
552dd189a5 | |||
dbe0a8240e |
48
.gitignore
vendored
Normal file
48
.gitignore
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
# Just to try and prevent some noob disasters.
|
||||
# Use git add -f foo.jar to ignore this ignore list
|
||||
|
||||
# generated release files
|
||||
*.exe
|
||||
*.[gx]z
|
||||
*.bz2
|
||||
*.[rwjt]ar
|
||||
*.sig
|
||||
*.su[d23]
|
||||
*.deb
|
||||
*.zip
|
||||
*.torrent
|
||||
|
||||
*~
|
||||
web-fragment.xml
|
||||
web-out.xml
|
||||
*.out
|
||||
|
||||
# Temporary/build dirs
|
||||
build/
|
||||
pkg-temp/
|
||||
classes/
|
||||
dist/
|
||||
/installer/resources/locale/mo
|
||||
/tmp
|
||||
/apps/jetty/jettylib
|
||||
*_jsp.java
|
||||
*.class
|
||||
|
||||
# Debian-related
|
||||
/debian/copyright
|
||||
/debian/changelog
|
||||
.pc/
|
||||
|
||||
# Build property overrides
|
||||
/override.properties
|
||||
|
||||
# Reporting
|
||||
*.fba
|
||||
sloccount.sc
|
||||
/reports/
|
||||
|
||||
# Don't allow patches
|
||||
*.(diff|patch)
|
||||
|
||||
# but allow debian/patches
|
||||
!/debian/patches/*.(patch|diff)
|
@ -16,10 +16,12 @@ _jsp\.java$
|
||||
\.sig$
|
||||
\.sud$
|
||||
\.su2$
|
||||
.\su3$
|
||||
\.tar$
|
||||
\.war$
|
||||
.\deb$
|
||||
\.zip$
|
||||
\.torrent$
|
||||
^\.
|
||||
~$
|
||||
web-fragment.xml
|
||||
@ -31,13 +33,14 @@ web-out.xml
|
||||
/build
|
||||
/classes
|
||||
/dist
|
||||
/mo
|
||||
^installer/resources/locale/mo
|
||||
/tmp
|
||||
^apps/jetty/jettylib
|
||||
|
||||
# Debian-related
|
||||
^debian/copyright
|
||||
^debian/changelog
|
||||
^.pc/
|
||||
|
||||
# Build property overrides
|
||||
override.properties
|
||||
|
52
.tx/config
52
.tx/config
@ -14,7 +14,9 @@ trans.nb = apps/i2ptunnel/locale/messages_nb.po
|
||||
trans.nl = apps/i2ptunnel/locale/messages_nl.po
|
||||
trans.pl = apps/i2ptunnel/locale/messages_pl.po
|
||||
trans.pt = apps/i2ptunnel/locale/messages_pt.po
|
||||
trans.pt_BR = apps/i2ptunnel/locale/messages_pt_BR.po
|
||||
trans.ru_RU = apps/i2ptunnel/locale/messages_ru.po
|
||||
trans.sk = apps/i2ptunnel/locale/messages_sk.po
|
||||
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
|
||||
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
|
||||
trans.vi = apps/i2ptunnel/locale/messages_vi.po
|
||||
@ -34,6 +36,7 @@ trans.nb = apps/i2ptunnel/locale-proxy/messages_nb.po
|
||||
trans.nl = apps/i2ptunnel/locale-proxy/messages_nl.po
|
||||
trans.pl = apps/i2ptunnel/locale-proxy/messages_pl.po
|
||||
trans.pt = apps/i2ptunnel/locale-proxy/messages_pt.po
|
||||
trans.pt_BR = apps/i2ptunnel/locale-proxy/messages_pt_BR.po
|
||||
trans.ro = apps/i2ptunnel/locale-proxy/messages_ro.po
|
||||
trans.ru_RU = apps/i2ptunnel/locale-proxy/messages_ru.po
|
||||
trans.sv_SE = apps/i2ptunnel/locale-proxy/messages_sv.po
|
||||
@ -60,6 +63,7 @@ trans.nb = apps/routerconsole/locale/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale/messages_nl.po
|
||||
trans.pl = apps/routerconsole/locale/messages_pl.po
|
||||
trans.pt = apps/routerconsole/locale/messages_pt.po
|
||||
trans.pt_BR = apps/routerconsole/locale/messages_pt_BR.po
|
||||
trans.ro = apps/routerconsole/locale/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale/messages_ru.po
|
||||
trans.sv_SE = apps/routerconsole/locale/messages_sv.po
|
||||
@ -75,13 +79,16 @@ trans.ar = apps/routerconsole/locale-news/messages_ar.po
|
||||
trans.de = apps/routerconsole/locale-news/messages_de.po
|
||||
trans.es = apps/routerconsole/locale-news/messages_es.po
|
||||
trans.fr = apps/routerconsole/locale-news/messages_fr.po
|
||||
trans.he = apps/routerconsole/locale-news/messages_he.po
|
||||
trans.ja = apps/routerconsole/locale-news/messages_ja.po
|
||||
trans.it = apps/routerconsole/locale-news/messages_it.po
|
||||
trans.nl = apps/routerconsole/locale-news/messages_nl.po
|
||||
trans.pl = apps/routerconsole/locale-news/messages_pl.po
|
||||
trans.pt = apps/routerconsole/locale-news/messages_pt.po
|
||||
trans.pt_BR = apps/routerconsole/locale-news/messages_pt_BR.po
|
||||
trans.ro = apps/routerconsole/locale-news/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale-news/messages_ru.po
|
||||
trans.sk = apps/routerconsole/locale-news/messages_sk.po
|
||||
trans.sv_SE = apps/routerconsole/locale-news/messages_sv.po
|
||||
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
|
||||
trans.zh_CN = apps/routerconsole/locale-news/messages_zh.po
|
||||
@ -104,8 +111,10 @@ trans.nb = apps/routerconsole/locale-countries/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
|
||||
trans.pl = apps/routerconsole/locale-countries/messages_pl.po
|
||||
trans.pt = apps/routerconsole/locale-countries/messages_pt.po
|
||||
trans.pt_BR = apps/routerconsole/locale-countries/messages_pt_BR.po
|
||||
trans.ro = apps/routerconsole/locale-countries/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale-countries/messages_ru.po
|
||||
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
|
||||
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
|
||||
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
|
||||
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
|
||||
@ -127,6 +136,7 @@ trans.pl = apps/i2psnark/locale/messages_pl.po
|
||||
trans.pt = apps/i2psnark/locale/messages_pt.po
|
||||
trans.ro = apps/i2psnark/locale/messages_ro.po
|
||||
trans.ru_RU = apps/i2psnark/locale/messages_ru.po
|
||||
trans.sk = apps/i2psnark/locale/messages_sk.po
|
||||
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
|
||||
trans.vi = apps/i2psnark/locale/messages_vi.po
|
||||
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
|
||||
@ -147,6 +157,7 @@ trans.ja = apps/susidns/locale/messages_ja.po
|
||||
trans.nl = apps/susidns/locale/messages_nl.po
|
||||
trans.pl = apps/susidns/locale/messages_pl.po
|
||||
trans.pt = apps/susidns/locale/messages_pt.po
|
||||
trans.pt_BR = apps/susidns/locale/messages_pt_BR.po
|
||||
trans.ro = apps/susidns/locale/messages_ro.po
|
||||
trans.ru_RU = apps/susidns/locale/messages_ru.po
|
||||
trans.sv_SE = apps/susidns/locale/messages_sv.po
|
||||
@ -169,8 +180,10 @@ trans.it = apps/desktopgui/locale/messages_it.po
|
||||
trans.ja = apps/desktopgui/locale/messages_ja.po
|
||||
trans.nl = apps/desktopgui/locale/messages_nl.po
|
||||
trans.pl = apps/desktopgui/locale/messages_pl.po
|
||||
trans.pt_BR = apps/desktopgui/locale/messages_pt_BR.po
|
||||
trans.ro = apps/desktopgui/locale/messages_ro.po
|
||||
trans.ru_RU = apps/desktopgui/locale/messages_ru.po
|
||||
trans.sk = apps/desktopgui/locale/messages_sk.po
|
||||
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
|
||||
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
|
||||
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
|
||||
@ -186,11 +199,13 @@ trans.es = apps/susimail/locale/messages_es.po
|
||||
trans.fr = apps/susimail/locale/messages_fr.po
|
||||
trans.hu = apps/susimail/locale/messages_hu.po
|
||||
trans.it = apps/susimail/locale/messages_it.po
|
||||
trans.ja = apps/susimail/locale/messages_ja.po
|
||||
trans.nl = apps/susimail/locale/messages_nl.po
|
||||
trans.ru_RU = apps/susimail/locale/messages_ru.po
|
||||
trans.sv_SE = apps/susimail/locale/messages_sv.po
|
||||
trans.pl = apps/susimail/locale/messages_pl.po
|
||||
trans.pt = apps/susimail/locale/messages_pt.po
|
||||
trans.pt_BR = apps/susimail/locale/messages_pt_BR.po
|
||||
trans.ro = apps/susimail/locale/messages_ro.po
|
||||
trans.uk_UA = apps/susimail/locale/messages_uk.po
|
||||
trans.vi = apps/susimail/locale/messages_vi.po
|
||||
@ -206,10 +221,13 @@ trans.es = debian/po/es.po
|
||||
trans.fr = debian/po/fr.po
|
||||
trans.it = debian/po/it.po
|
||||
trans.hu = debian/po/hu.po
|
||||
trans.ja = debian/po/ja.po
|
||||
trans.ko = debian/po/ko.po
|
||||
trans.pl = debian/po/pl.po
|
||||
trans.pt = debian/po/pt.po
|
||||
trans.ro = debian/po/ro.po
|
||||
trans.ru_RU = debian/po/ru.po
|
||||
trans.sk = debian/po/sk.po
|
||||
trans.sv_SE = debian/po/sv.po
|
||||
trans.uk_UA = debian/po/uk.po
|
||||
trans.tr_TR = debian/po/tr.po
|
||||
@ -222,13 +240,41 @@ trans.de = installer/resources/locale/po/messages_de.po
|
||||
trans.es = installer/resources/locale/po/messages_es.po
|
||||
trans.fr = installer/resources/locale/po/messages_fr.po
|
||||
trans.it = installer/resources/locale/po/messages_it.po
|
||||
trans.pl = installer/resources/locale/po/messages_pl.po
|
||||
trans.ja = installer/resources/locale/po/messages_ja.po
|
||||
trans.pt = installer/resources/locale/po/messages_pt.po
|
||||
trans.pt_BR = installer/resources/locale/po/messages_pt_BR.po
|
||||
trans.ro = installer/resources/locale/po/messages_ro.po
|
||||
trans.sv_SE = installer/resources/locale/po/messages_sv.po
|
||||
trans.ru_RU = installer/resources/locale/po/messages_ru.po
|
||||
trans.sk = installer/resources/locale/po/messages_sk.po
|
||||
trans.sv_SE = installer/resources/locale/po/messages_sv.po
|
||||
trans.tr_TR = installer/resources/locale/po/messages_tr.po
|
||||
trans.zh_CN = installer/resources/locale/po/messages_zh.po
|
||||
|
||||
[main]
|
||||
host = http://www.transifex.net
|
||||
[I2P.getopt]
|
||||
source_file = core/java/src/gnu/getopt/MessagesBundle.properties
|
||||
source_lang = en
|
||||
type = PROPERTIES
|
||||
trans.cs = core/java/src/gnu/getopt/MessagesBundle_cs.properties
|
||||
trans.de = core/java/src/gnu/getopt/MessagesBundle_de.properties
|
||||
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
|
||||
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
|
||||
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
|
||||
trans.it = core/java/src/gnu/getopt/MessagesBundle_it.properties
|
||||
trans.ja = core/java/src/gnu/getopt/MessagesBundle_ja.properties
|
||||
trans.nl = core/java/src/gnu/getopt/MessagesBundle_nl.properties
|
||||
trans.nb = core/java/src/gnu/getopt/MessagesBundle_nb.properties
|
||||
trans.pl = core/java/src/gnu/getopt/MessagesBundle_pl.properties
|
||||
trans.pt_BR = core/java/src/gnu/getopt/MessagesBundle_pt_BR.properties
|
||||
trans.ro = core/java/src/gnu/getopt/MessagesBundle_ro.properties
|
||||
trans.ru_RU = core/java/src/gnu/getopt/MessagesBundle_ru.properties
|
||||
trans.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
|
||||
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
|
||||
|
||||
[I2P.streaming]
|
||||
source_file = apps/ministreaming/locale/messages_en.po
|
||||
source_lang = en
|
||||
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
|
@ -12,7 +12,7 @@ you may use:
|
||||
to configure the router.
|
||||
|
||||
If you're having trouble, swing by http://forum.i2p/, check the
|
||||
website at http://www.i2p2.de/, or get on irc://irc.freenode.net/#i2p
|
||||
website at https://geti2p.net/, or get on irc://irc.freenode.net/#i2p
|
||||
|
||||
I2P will create and store files and configuration data in the user directory
|
||||
~/.i2p/ on Linux and %APPDATA%\I2P\ on Windows. This directory is created
|
||||
@ -39,7 +39,10 @@ To uninstall I2P:
|
||||
rm -rf $I2PInstallDir ~/.i2p
|
||||
|
||||
Supported JVMs:
|
||||
Windows: Latest available from http://java.com/download (1.5+ supported)
|
||||
Linux: Latest available from http://java.com/download (1.5+ supported)
|
||||
FreeBSD: 1.5-compatible (NIO required)
|
||||
Other operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||
All platforms: Java 1.6 or higher required; 1.7 or higher recommended
|
||||
Windows: OpenJDK or Oracle from http://java.com/download
|
||||
Linux: OpenJDK or Oracle from http://java.com/download
|
||||
FreeBSD: OpenJDK or Oracle from http://java.com/download
|
||||
Raspberry Pi: Oracle 8 Early Access https://jdk8.java.net/download.html
|
||||
PowerPC: IBM SDK 7 http://www.ibm.com/developerworks/java/jdk/linux/download.html
|
||||
Other operating systems and JVMs: See https://trac.i2p2.de/wiki/java or https://geti2p.net/download
|
||||
|
13
LICENSE.txt
13
LICENSE.txt
@ -36,7 +36,7 @@ Public domain except as listed below:
|
||||
Copyright (c) 2003, TheCrypto
|
||||
See licenses/LICENSE-ElGamalDSA.txt
|
||||
|
||||
SHA256 and HMAC-SHA256:
|
||||
SHA256 and HMAC:
|
||||
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
|
||||
@ -76,6 +76,11 @@ Public domain except as listed below:
|
||||
Copyright 2012 Hiroshi Nakamura <nahi@ruby-lang.org>
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Getopt:
|
||||
Copyright (c) 1998 by Aaron M. Renn (arenn@urbanophile.com)
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
|
||||
Router (router.jar):
|
||||
Public domain except as listed below:
|
||||
UPnP.java:
|
||||
@ -177,7 +182,7 @@ Applications:
|
||||
By welterde.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
Jetty 7.6.13.v20130916:
|
||||
Jetty 8.1.15.v20140411:
|
||||
See licenses/ABOUT-Jetty.html
|
||||
See licenses/NOTICE-Jetty.html
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
@ -243,8 +248,8 @@ Applications:
|
||||
Bundles systray4j-2.4.1:
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
Tomcat 6.0.37:
|
||||
Copyright 1999-2013 The Apache Software Foundation
|
||||
Tomcat 6.0.41:
|
||||
Copyright 1999-2014 The Apache Software Foundation
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/NOTICE-Tomcat.txt
|
||||
|
||||
|
10
README.txt
10
README.txt
@ -15,20 +15,20 @@ To build:
|
||||
ant installer-osx
|
||||
|
||||
Run 'ant' with no arguments to see other build options.
|
||||
See INSTALL.txt or http://www.i2p2.de/download.html for installation instructions.
|
||||
See INSTALL.txt or https://geti2p.net/download for installation instructions.
|
||||
|
||||
Documentation:
|
||||
http://www.i2p2.de/how
|
||||
https://geti2p.net/how
|
||||
API: run 'ant javadoc' then start at build/javadoc/index.html
|
||||
|
||||
Latest release:
|
||||
http://www.i2p2.de/download
|
||||
https://geti2p.net/download
|
||||
|
||||
To get development branch from source control:
|
||||
http://www.i2p2.de/newdevelopers
|
||||
https://geti2p.net/newdevelopers
|
||||
|
||||
FAQ:
|
||||
http://www.i2p2.de/faq
|
||||
https://geti2p.net/faq
|
||||
|
||||
Need help?
|
||||
IRC irc.freenode.net #i2p
|
||||
|
@ -1,30 +1,70 @@
|
||||
ou will need atleast monotone > = 0.41 to get the most recent build source
|
||||
and connect it to an already running i2p router.
|
||||
Getting the sources
|
||||
===================
|
||||
|
||||
OR:
|
||||
Monotone
|
||||
--------
|
||||
|
||||
You may download the actual "stable" source from
|
||||
http://code.google.com/p/i2p/downloads/list
|
||||
The bleeding-edge source code is available both within and outside of I2P. The
|
||||
I2P project uses Monotone to maintain the codebase.
|
||||
|
||||
You will need to follwing tools to build the i2p and i2p-base packages:
|
||||
Information on retrieving the source with monotone is available within I2P at
|
||||
http://i2p-projekt.i2p/monotone and from the internet at https://geti2p.net/monotone.
|
||||
|
||||
bash >= 3.1.017
|
||||
requiredbuilder >= 0.16.3 ( http://www.stabellini.net/requiredbuilder.html )
|
||||
jre >= 6u11
|
||||
jdk >= 6u11
|
||||
apache-ant >= 1.7.1
|
||||
perl >= 5.10.0
|
||||
python >= 2.5.2
|
||||
Monotone 1.0 Slackbuilds are available at http://slackbuilds.org/.
|
||||
|
||||
Reccomended:
|
||||
monotone >= 0.41 ( http://pkgs.dr.ea.ms )
|
||||
Git
|
||||
---
|
||||
|
||||
See also:
|
||||
Git is also an option to retrieve the I2P source code. That said, the I2P
|
||||
Monotone servers are *the* authoritative source.
|
||||
|
||||
i2p/readme.txt
|
||||
Public Git repositories hosting the I2P source and managed by I2P project team members include
|
||||
|
||||
AND
|
||||
- https://github.com/i2p/i2p.i2p
|
||||
- http://git.repo.i2p/w/i2p.i2p.git (mirrored from Github)
|
||||
- http://sourceforge.net/p/i2p/code/
|
||||
|
||||
i2p-base/readme.txt
|
||||
|
||||
for information and handy tips.
|
||||
Tarball
|
||||
-------
|
||||
|
||||
The latest stable release is always available from the I2P homepage at
|
||||
https://geti2p.net/get/.
|
||||
|
||||
|
||||
This SlackBuild
|
||||
===============
|
||||
|
||||
Requirements
|
||||
-------------
|
||||
|
||||
The following are needed to build the i2p package:
|
||||
|
||||
* jre >= 6
|
||||
* jdk >= 6
|
||||
* gettext
|
||||
* apache-ant >= 1.7.1
|
||||
|
||||
If you don't care about bundling the translations, the gettext requirement can
|
||||
be avoided by adding -Drequire.gettext=false to the ant lines in
|
||||
i2p/i2p.SlackBuild
|
||||
|
||||
A JRE >= v6 is the only requirement to run I2P.
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
As the root user, run either $I2PSRC/Slackware/i2p/i2p.SlackBuild or `ant slackpkg` to create a package
|
||||
in $I2PSRC/Slackware/i2p which can be installed using the Slackware packaging tools.
|
||||
|
||||
See also
|
||||
========
|
||||
|
||||
Please also take a look at
|
||||
|
||||
* i2p/README
|
||||
* eepget(1)
|
||||
* i2prouter(1)
|
||||
* http://i2p-projekt.i2p / https://geti2p.net
|
||||
|
||||
for additional information and tips.
|
||||
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<project basedir="." default="slackpkg">
|
||||
<target name="slackpkg">
|
||||
<echo message="Building Slackware package." />
|
||||
<exec executable="./i2p-base.SlackBuild">
|
||||
</exec>
|
||||
</target>
|
||||
</project>
|
@ -1,157 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
#
|
||||
# Now in the future we only need to look for '#I2P' and '#/I2P'
|
||||
# for modifications to rc.local and rc.local_shutdown.
|
||||
# I was a moron for not doing it this way in the first place :-) -- Sponge
|
||||
#
|
||||
#
|
||||
|
||||
touch /etc/rc.d/rc.local
|
||||
touch /etc/rc.d/rc.local_shutdown
|
||||
|
||||
echo
|
||||
echo -n "Check 1: /etc/rc.d/rc.local "
|
||||
I2PRCA=`grep -c /etc/rc.d/rc.local -e '/etc/rc.d/rc.i2p'`
|
||||
|
||||
if [ $I2PRCA -eq 0 ] ; then
|
||||
echo '#I2P' >> /etc/rc.d/rc.local
|
||||
echo '( cd /tmp ; rm -Rf i2p-*.tmp )' >> /etc/rc.d/rc.local
|
||||
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local
|
||||
echo " sh /etc/rc.d/rc.i2p start" >> /etc/rc.d/rc.local
|
||||
echo "fi" >> /etc/rc.d/rc.local
|
||||
echo '#/I2P' >> /etc/rc.d/rc.local
|
||||
echo "modified."
|
||||
else
|
||||
echo -n "looks OK so far,"
|
||||
# Fix old installs, or where people have modified.
|
||||
|
||||
echo -n " Check 1A: "
|
||||
I2PRCC=`grep -c /etc/rc.d/rc.local -e 'i2p-\*\.tmp'`
|
||||
|
||||
if [ $I2PRCC -eq 0 ] ; then
|
||||
DATA=$(cat /etc/rc.d/rc.local | sed -re 's/if \[ -x \/etc\/rc\.d\/rc\.i2p \] ; then/#I2P\n\( cd \/tmp ; rm -Rf i2p-*.tmp \)\nif \[ -x \/etc\/rc.d\/rc.i2p \] ; then/')
|
||||
echo "${DATA}" > /etc/rc.d/rc.local
|
||||
echo -n "additional modifications applied,"
|
||||
else
|
||||
echo -n "looks OK so far,"
|
||||
fi
|
||||
|
||||
echo -n " Check 1B: "
|
||||
I2PRCE=`grep -c /etc/rc.d/rc.local -e 'i2p-\*\.tmp'`
|
||||
if [ $I2PRCE -eq 0 ] ; then
|
||||
DATATOP=$(cat /etc/rc.d/rc.local | sed -n '0,/i2p-\*\.tmp/p' | sed '$d' )
|
||||
DATABOT=$(cat /etc/rc.d/rc.local | sed -n '/i2p-\*\.tmp/,$p' | sed -n '/^fi/,$p' | sed "1d")
|
||||
echo "${DATATOP}" > /etc/rc.d/rc.local
|
||||
echo '#I2P' >> /etc/rc.d/rc.local
|
||||
echo '( cd /tmp ; rm -Rf i2p-*.tmp )' >> /etc/rc.d/rc.local
|
||||
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local
|
||||
echo " sh /etc/rc.d/rc.i2p start" >> /etc/rc.d/rc.local
|
||||
echo "fi" >> /etc/rc.d/rc.local
|
||||
echo '#/I2P' >> /etc/rc.d/rc.local
|
||||
echo "${DATABOT}" >> /etc/rc.d/rc.local
|
||||
|
||||
echo -n "additional modifications applied,"
|
||||
else
|
||||
echo -n "looks ok so far,"
|
||||
fi
|
||||
echo -n " Check 1C: "
|
||||
I2PRCF=`grep -c /etc/rc.d/rc.local -e '#/I2P'`
|
||||
if [ $I2PRCF -eq 0 ] ; then
|
||||
DATATOP=$(cat /etc/rc.d/rc.local | sed -n '0,/^#I2P/p' | sed '$d' )
|
||||
DATABOT=$(cat /etc/rc.d/rc.local | sed -n '/^#I2P/,$p' | sed -n '/^fi/,$p' | sed "1d")
|
||||
echo "${DATATOP}" > /etc/rc.d/rc.local
|
||||
echo '#I2P' >> /etc/rc.d/rc.local
|
||||
echo '( cd /tmp ; rm -Rf i2p-*.tmp )' >> /etc/rc.d/rc.local
|
||||
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local
|
||||
echo " sh /etc/rc.d/rc.i2p start" >> /etc/rc.d/rc.local
|
||||
echo "fi" >> /etc/rc.d/rc.local
|
||||
echo '#/I2P' >> /etc/rc.d/rc.local
|
||||
echo "${DATABOT}" >> /etc/rc.d/rc.local
|
||||
|
||||
echo -n "additional modifications applied,"
|
||||
else
|
||||
echo -n "looks ok so far,"
|
||||
fi
|
||||
echo " Done."
|
||||
fi
|
||||
|
||||
echo -n "Check 2: /etc/rc.d/rc.local_shutdown "
|
||||
I2PRCB=`grep -c /etc/rc.d/rc.local_shutdown -e '/etc/rc.d/rc.i2p'`
|
||||
if [ $I2PRCB -eq 0 ] ; then
|
||||
echo "#I2P" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local_shutdown
|
||||
echo " sh /etc/rc.d/rc.i2p stop" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "fi" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "#/I2P" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "modified."
|
||||
else
|
||||
echo -n "looks OK so far,"
|
||||
# Fix old installs
|
||||
|
||||
echo -n " Check 1A: "
|
||||
I2PRCG=`grep -c /etc/rc.d/rc.local_shutdown -e '#I2P'`
|
||||
if [ $I2PRCG -eq 0 ] ; then
|
||||
DATATOP=$(cat /etc/rc.d/rc.local_shutdown | sed -n '0,/^if \[ -x \/etc\/rc\.d\/rc\.i2p \] ; then/p' | sed '$d' )
|
||||
DATABOT=$(cat /etc/rc.d/rc.local_shutdown | sed -n '/^if \[ -x \/etc\/rc\.d\/rc\.i2p \] ; then/,$p' | sed -n '/^fi/,$p' | sed "1d")
|
||||
echo "${DATATOP}" > /etc/rc.d/rc.local_shutdown
|
||||
echo '#I2P' >> /etc/rc.d/rc.local_shutdown
|
||||
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local_shutdown
|
||||
echo " sh /etc/rc.d/rc.i2p stop" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "fi" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "#/I2P" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "${DATABOT}" >> /etc/rc.d/rc.local_shutdown
|
||||
echo -n "additional modifications applied,"
|
||||
else
|
||||
echo -n "looks OK so far,"
|
||||
fi
|
||||
echo -n " Check 1B: "
|
||||
I2PRCH=`grep -c /etc/rc.d/rc.local_shutdown -e '#/I2P'`
|
||||
if [ $I2PRCH -eq 0 ] ; then
|
||||
DATATOP=$(cat /etc/rc.d/rc.local_shutdown | sed -n '0,/^#I2P/p' | sed '$d' )
|
||||
DATABOT=$(cat /etc/rc.d/rc.local_shutdown | sed -n '/^#I2P/,$p' | sed -n '/^fi/,$p' | sed "1d")
|
||||
echo "${DATATOP}" > /etc/rc.d/rc.local_shutdown
|
||||
echo '#I2P' >> /etc/rc.d/rc.local_shutdown
|
||||
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local_shutdown
|
||||
echo " sh /etc/rc.d/rc.i2p stop" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "fi" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "#/I2P" >> /etc/rc.d/rc.local_shutdown
|
||||
echo "${DATABOT}" >> /etc/rc.d/rc.local_shutdown
|
||||
echo -n "additional modifications applied,"
|
||||
else
|
||||
echo -n "looks OK so far,"
|
||||
fi
|
||||
echo " Done."
|
||||
fi
|
||||
|
||||
if [ -f /etc/rc.d/rc.i2p ] ; then
|
||||
if [ -x /etc/rc.d/rc.i2p ] ; then
|
||||
chmod +x /etc/rc.d/rc.i2p.new
|
||||
fi
|
||||
# Hopefully get admin's attention.
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -e "\007" ; sleep 0.3
|
||||
echo "It apears that you already have /etc/rc.d/rc.i2p"
|
||||
echo "You should replace it with /etc/rc.d/rc.i2p.new as soon as possible"
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -ne "\007" ; sleep 0.3
|
||||
echo -e "\007" ; sleep 0.3
|
||||
else
|
||||
mv /etc/rc.d/rc.i2p.new /etc/rc.d/rc.i2p
|
||||
echo
|
||||
echo "Installation finished. The i2p start/stop script has been"
|
||||
echo "installed in /etc/rc.d . You should chmod +x"
|
||||
echo '/etc/rc.d/rc.i2p to start it on boot.'
|
||||
echo
|
||||
fi
|
||||
|
||||
exit
|
@ -1,57 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Heavily based on the Slackware 12.2 SlackBuild
|
||||
# Slackware build script for I2P
|
||||
#
|
||||
# PLEASE READ THIS:
|
||||
# How to start I2P:
|
||||
# After installpkg command, doinst.sh will execute a post-installation script
|
||||
# needed by I2P. After that you have to chmod +x /etc/rc.d/rc.i2p and start
|
||||
# I2P service with /etc/rc.d/rc.i2p start.
|
||||
#
|
||||
# Now tell your browser to user this proxy: localhost on port 4444 and open
|
||||
# this page: http://localhost:7657/index.jsp
|
||||
#
|
||||
# Here you can configure I2P, watch network status and navigate anonimously.
|
||||
# It's suggested to subscribe to various dns host, like i2host.i2p
|
||||
# For any additional information, visit i2host.i2p and forum.i2p
|
||||
#
|
||||
|
||||
CWD=$(pwd)
|
||||
TMP=/tmp
|
||||
PKG=/$TMP/package-base-i2p
|
||||
NAME=i2p-base
|
||||
VERSION=0.0.4
|
||||
BUILD=1sponge
|
||||
ARCH=noarch
|
||||
INSTALL_DIR=opt
|
||||
|
||||
# Less than slackware 13?
|
||||
SLKPLT=$(cat /etc/slackware-version | sed -re "s/(Slackware )([0-9]*)(.*)/\2/")
|
||||
if [ $SLKPLT -lt 13 ] ; then
|
||||
EXT=tgz
|
||||
else
|
||||
EXT=txz
|
||||
fi
|
||||
|
||||
rm -rf $PKG
|
||||
mkdir -p $PKG
|
||||
cd $PKG
|
||||
chown -R root:root .
|
||||
|
||||
mkdir -p $PKG/etc/rc.d
|
||||
mkdir -p $PKG/install
|
||||
sed "s|directory|/$INSTALL_DIR/i2p/i2prouter|g" "$CWD/rc.i2p_def" > $PKG/etc/rc.d/rc.i2p.new
|
||||
chmod 644 $PKG/etc/rc.d/rc.i2p.new
|
||||
cat "$CWD/doinst.sh" > $PKG/install/doinst.sh
|
||||
cat "$CWD/slack-desc" > $PKG/install/slack-desc
|
||||
|
||||
cd $PKG
|
||||
#
|
||||
# Not really that important to exec this
|
||||
# as there aren't any deps we don't know.
|
||||
#
|
||||
# requiredbuilder -v -y -s $CWD $PKG
|
||||
#
|
||||
cat "$CWD/slack-required" > $PKG/install/slack-required
|
||||
makepkg -l y -c n $CWD/${NAME}-$VERSION-$ARCH-$BUILD.$EXT
|
@ -1,68 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Start/stop i2p service.
|
||||
|
||||
i2p_start() {
|
||||
# Check if router is up first!
|
||||
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory status )'" > /dev/null
|
||||
if [ $? -eq 0 ] ; then {
|
||||
# I2p is already running, so tell the user.
|
||||
echo "I2P is already running..."
|
||||
i2p_status
|
||||
}
|
||||
else
|
||||
{
|
||||
# Just in-case there are leftover junk in /tmp...
|
||||
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
|
||||
# Now that all junk is cleaned up, start.
|
||||
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory start )'"
|
||||
}
|
||||
fi
|
||||
}
|
||||
|
||||
i2p_stop() {
|
||||
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory stop )'"
|
||||
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
|
||||
}
|
||||
|
||||
i2p_restart() {
|
||||
# We want a FULL cycle here, not the wrappers idea of this!
|
||||
i2p_stop
|
||||
i2p_start
|
||||
}
|
||||
|
||||
i2p_status() {
|
||||
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory status )'"
|
||||
}
|
||||
|
||||
i2p_console() {
|
||||
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory console )'"
|
||||
}
|
||||
|
||||
i2p_dump() {
|
||||
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory dump )'"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
'start')
|
||||
i2p_start
|
||||
;;
|
||||
'stop')
|
||||
i2p_stop
|
||||
;;
|
||||
'restart')
|
||||
i2p_restart
|
||||
;;
|
||||
'status')
|
||||
i2p_status
|
||||
;;
|
||||
'console')
|
||||
i2p_console
|
||||
;;
|
||||
'dump')
|
||||
i2p_dump
|
||||
;;
|
||||
*)
|
||||
echo "usage $0 start|stop|restart|status|console|dump"
|
||||
;;
|
||||
esac
|
||||
|
@ -1,10 +0,0 @@
|
||||
An rc file called rc.i2p has been placed into the /etc/rc.d directory.
|
||||
If you want to change installation dir, change the variable INSTALL_DIR
|
||||
on base-i2p.SlackBuild and rebuild the package. You also will need to do the
|
||||
same for the i2p package.
|
||||
|
||||
The install script will insert everything needed into /etc/rc.d/rc.local and
|
||||
into /etc/rc.d/rc.local_shutdown automatically.
|
||||
|
||||
If you want to start I2P at boot you have to chmod +x /etc/rc.d/rc.i2p
|
||||
|
@ -1,19 +0,0 @@
|
||||
# HOW TO EDIT THIS FILE:
|
||||
# The "handy ruler" below makes it easier to edit a package description. Line
|
||||
# up the first '|' above the ':' following the base package name, and the '|' on
|
||||
# the right side marks the last column you can put a character in. You must make
|
||||
# exactly 11 lines for the formatting to be correct. It's also customary to
|
||||
# leave one space after the ':'.
|
||||
|
||||
|-----handy-ruler------------------------------------------------------|
|
||||
base-i2p: base-i2p (I2P anonymizing network base config files)
|
||||
base-i2p:
|
||||
base-i2p: I2P is an anonymizing network, offering a simple layer that
|
||||
base-i2p: identity-sensitive applications can use to securely communicate. All
|
||||
base-i2p: data is wrapped with several layers of encryption, and the network is
|
||||
base-i2p: both distributed and dynamic, with no trusted parties.
|
||||
base-i2p: Many applications are available that interface with I2P, including
|
||||
base-i2p: mail, peer-peer file sharing, IRC chat, and others.
|
||||
base-i2p:
|
||||
base-i2p: This package provides the startup files.
|
||||
base-i2p:
|
@ -1 +0,0 @@
|
||||
bash >= 3.1.017
|
89
Slackware/i2p/README
Normal file
89
Slackware/i2p/README
Normal file
@ -0,0 +1,89 @@
|
||||
The I2P package will be installed to /opt/i2p.
|
||||
|
||||
To install to another location, set the variable INSTALL_DIR in i2p.SlackBuild
|
||||
and rebuild the package.
|
||||
|
||||
|
||||
Installing and Upgrading:
|
||||
=========================
|
||||
|
||||
I2P has an auto-update function but generally speaking packages are managed by
|
||||
packaging systems. Changing a package's files outside of the package system can
|
||||
cause problems. To upgrade when there's a new I2P release, retrieve the new
|
||||
source, re-run the SlackBuild, then use upgradepkg to update.
|
||||
|
||||
To ignore all this and upgrade "in-network", simply change the permissions of the installation
|
||||
directory (/opt/i2p by default). Something like the following would suffice:
|
||||
|
||||
chown -R USERNAME /opt/i2p
|
||||
|
||||
|
||||
Starting and using I2P
|
||||
======================
|
||||
|
||||
Using the initscript
|
||||
--------------------
|
||||
|
||||
To start I2P at boot, set the executable bit on /etc/rc.d/rc.i2p, add this
|
||||
script to rc.local*, and set the variable "RUN_AS_USER" in /etc/rc.d/rc.i2p.
|
||||
|
||||
Optionally, create a new user/group with limited rights to run I2P.
|
||||
|
||||
Something like the following would work to start I2P at system boot, running under the
|
||||
"i2p" account:
|
||||
|
||||
echo '[ -x /etc/rc.d/rc.i2p ] && /etc/rc.d/rc.i2p start' >> /etc/rc.d/rc.local
|
||||
echo '[ -x /etc/rc.d/rc.i2p ] && /etc/rc.d/rc.i2p stop' >> /etc/.rc.d/rc.local_shutdown
|
||||
sed -i .bak 's/^.*\(RUN_AS_USER\)=.*/\1=i2p/' /etc/rc.d/rc.i2p
|
||||
chmod 755 /etc/rc.d/rc.i2p
|
||||
|
||||
Unless running as a user named "i2psvc", I2P's config directory defaults to
|
||||
$HOME/.i2p. In the case of the "i2psvc" user, the default config directory is
|
||||
/var/lib/i2p/i2p-config.
|
||||
|
||||
It should not need to be said that using the "root" account is not recommended.
|
||||
|
||||
When running using the initscript, I2P will write its logs to /var/log/i2p.
|
||||
|
||||
Starting I2P "on-demand"
|
||||
------------------------
|
||||
|
||||
As with a normal installation, I2P can be started with "i2prouter start". The
|
||||
i2prouter and eepget scripts hve been installed to /usr/bin so they'll be
|
||||
accessible in the default system PATH.
|
||||
|
||||
When running using the i2prouter script, I2P will write its logs to $HOME/.i2p.
|
||||
|
||||
|
||||
Configuring your browser
|
||||
------------------------
|
||||
|
||||
In order to access eepSites (I2P-internal web sites) your web browser needs to
|
||||
be configured. Set the HTTP Proxy to 127.0.0.1 and port 4444. For more information, see
|
||||
https://geti2p.net/en/about/browser-config
|
||||
|
||||
The I2P router console is reachable at http://127.0.0.1:7657.
|
||||
|
||||
|
||||
Addressbook subscriptions
|
||||
-------------------------
|
||||
|
||||
Please see the FAQs at http://i2p-projekt.i2p/faq or https://geti2p.net/faq for information about
|
||||
the various addressbook services.
|
||||
|
||||
|
||||
Chatting on IRC
|
||||
---------------
|
||||
|
||||
I2P comes preconfigured with a tunnel pointing to the I2P-only IRC network,
|
||||
Irc2P. Signing on is easy, just connect to 127.0.0.1 on port 6668. Do not
|
||||
configure a proxy in your IRC client.
|
||||
|
||||
|
||||
Additional information
|
||||
======================
|
||||
|
||||
Within I2P: http://i2p-projekt.i2p/, http://forum.i2p/, http://zzz.i2p/, http://trac.i2p2.i2p/
|
||||
On the Internet: https://geti2p.net/, https://trac.i2p2.de
|
||||
Manpages: i2prouter(1), eepget(1)
|
||||
|
@ -2,7 +2,7 @@
|
||||
<project basedir="." default="slackpkg">
|
||||
<target name="slackpkg">
|
||||
<echo message="Building Slackware package." />
|
||||
<exec executable="./i2p.SlackBuild">
|
||||
</exec>
|
||||
<chmod file="./i2p.Slackbuild" perm="755" />
|
||||
<exec executable="./i2p.SlackBuild" failifexecutionfails="true" />
|
||||
</target>
|
||||
</project>
|
||||
|
@ -1,72 +1,60 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
# Abort on error or unset variables
|
||||
set -e
|
||||
set -u
|
||||
|
||||
# This is changed by i2p.SlackBuild
|
||||
INST_DIR=directory
|
||||
PKGNAME="%pkg"
|
||||
|
||||
( cd install
|
||||
config() {
|
||||
NEW="$1"
|
||||
OLD="$(dirname $NEW)/$(basename $NEW .new)"
|
||||
if [ ! -r $NEW ]; then
|
||||
# If we get here there's a flaw in the packaging. We'll just return so that
|
||||
# we don't emit a spurious error for the user. (It's not the user's problem).
|
||||
return
|
||||
fi
|
||||
|
||||
echo
|
||||
for i in *.config ; {
|
||||
if [ -f $INST_DIR/$i ] ; then
|
||||
echo "Please check ${INST_DIR}${i}, as there is a new version."
|
||||
cp $i $INST_DIR/$i.new
|
||||
else
|
||||
cp $i $INST_DIR/$i
|
||||
fi
|
||||
# If this file doesn't exist yet, drop the .new extension.
|
||||
if [ ! -r $OLD ]; then
|
||||
mv $NEW $OLD
|
||||
return
|
||||
elif [ "$(md5sum $OLD | cut -d' ' -f1)" = "$(md5sum $NEW | cut -d' ' -f1)" ]; then
|
||||
# If there are no differences in the files, remove the file with the .new extension.
|
||||
rm $NEW
|
||||
return
|
||||
fi
|
||||
# Alert the admin if they differ, but let's not be terribly obnoxious about it.
|
||||
echo "WARNING: The files $OLD and $NEW differ." >&2
|
||||
}
|
||||
|
||||
)
|
||||
# Unlike previous versions of the package, we install i2prouter and eepget to /usr/bin
|
||||
# to make them available within the system PATH.
|
||||
|
||||
( cd $INST_DIR
|
||||
if [ -f blocklist.txt ] ; then
|
||||
echo "Please check ${INST_DIR}blocklist.txt, as there is a new version."
|
||||
else
|
||||
mv blocklist.txt.new blocklist.txt
|
||||
fi
|
||||
)
|
||||
# Users might still want to /opt/i2p/i2prouter or /opt/i2p/eepget so we'll create symlinks
|
||||
# in the installation directory.
|
||||
ln -sf /usr/bin/eepget $INST_DIR
|
||||
ln -sf /usr/bin/i2prouter $INST_DIR
|
||||
(cd /usr/doc/$PKGNAME; ln -sf $INST_DIR/history.txt changelog)
|
||||
|
||||
( cd $INST_DIR/eepsite
|
||||
if [ -f jetty.xml ] ; then
|
||||
echo "Please check ${INST_DIR}/eepsite, as there are new files."
|
||||
else
|
||||
find $PKG/$INSTALL_DIR/i2p -name "*.xml.new" -exec sh -c 'mv "$0" "${0/.new}"' {} \;
|
||||
fi
|
||||
)
|
||||
|
||||
( cd $INST_DIR/eepsite/docroot
|
||||
if [ -f index.html ] ; then
|
||||
rm index.html.new
|
||||
else
|
||||
mv index.html.new index.html
|
||||
fi
|
||||
if [ -f favicon.ico ] ; then
|
||||
rm favicon.ico.new
|
||||
else
|
||||
mv favicon.ico.new favicon.ico
|
||||
fi
|
||||
)
|
||||
|
||||
echo
|
||||
echo "FINISHING I2P INSTALLATION. PLEASE WAIT."
|
||||
|
||||
cd $INST_DIR
|
||||
|
||||
|
||||
|
||||
OS_ARCH=`uname -m`
|
||||
X86_64=`echo "$OS_ARCH" | grep x86_64`
|
||||
if [ "X$X86_64" = "X" ]; then
|
||||
wrapperpath="./lib/wrapper/linux"
|
||||
if $(uname -m | grep -q '64'); then
|
||||
(cd $INST_DIR; ln -sf i2psvc-linux-x86-64 i2psvc)
|
||||
else
|
||||
wrapperpath="./lib/wrapper/linux64"
|
||||
(cd $INST_DIR; ln -sf i2psvc-linux-x86-32 i2psvc)
|
||||
fi
|
||||
cp $wrapperpath/libwrapper.so ./lib/
|
||||
cp $wrapperpath/wrapper.jar ./lib/
|
||||
cp $wrapperpath/i2psvc .
|
||||
rm -rf ./lib/wrapper
|
||||
chmod 744 ./i2psvc
|
||||
|
||||
echo
|
||||
echo "Installation finished."
|
||||
echo
|
||||
config /etc/rc.d/rc.i2p.new
|
||||
config $INST_DIR/wrapper.config.new
|
||||
|
||||
exit
|
||||
if [ -e /var/log/packages/i2p-base* ]; then
|
||||
echo "Warning: This package supercedes the 'i2p-base' package." >&2
|
||||
echo
|
||||
echo "You may want to 'removepkg i2p-base'" >&2
|
||||
echo "and check the contents of /etc/rc.d/rc.local*" >&2
|
||||
echo "for correctness" >&2
|
||||
fi
|
||||
|
||||
# Remove extraneous 'sh' from sponge's set-up
|
||||
sed -i 's|sh /etc/rc\.d/rc\.i2p|/etc/rc.d/rc.i2p|g' /etc/rc.d/rc.local*
|
||||
|
@ -3,135 +3,124 @@
|
||||
# Heavily based on the Slackware 12.2 SlackBuild
|
||||
# Slackware build script for I2P
|
||||
#
|
||||
# PLEASE READ THIS:
|
||||
# Probably you will never have to update I2P packages with upgradepkg,
|
||||
# just because I2P has an auto-update function.
|
||||
# Really you should not ever use any "upgrade" method.
|
||||
#
|
||||
# The correct way to upgrade is to:
|
||||
# 1: install the upgrade
|
||||
# 2: remove the old package
|
||||
#
|
||||
# It is a terrible shame that upgradepkg doesn't do this, infact,
|
||||
# it would actually be the correct way for *any* package!
|
||||
# Packages are generally prohibited from being updated outside
|
||||
# of the package manager; this I2P SlackBuild is no different.
|
||||
#
|
||||
# If you'd like to use the I2P "in-network" updates anyway, you'll need to
|
||||
# grant the user that I2P will run as write permission to the installation directory
|
||||
# (/opt/i2p by default).
|
||||
#
|
||||
# For safety's sake, a user's I2P config files will *never* be overwritten by any upgrade method.
|
||||
# In the future this SlackBuild may alert when a default config file is updated.
|
||||
##
|
||||
|
||||
BUILD=1sponge
|
||||
# Make sure makepkg and friends can be found
|
||||
PATH=$PATH:/sbin
|
||||
|
||||
# abort on error and unset variables (same as set -e and set -u, respectively)
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
|
||||
if [ $(id -ur) -ne 0 ]; then
|
||||
echo "ERROR: SlackBuilds require root access." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BUILD=1kytv
|
||||
# INSTALL_DIR is referenced from /, don't prefix it with a '/'
|
||||
INSTALL_DIR=opt
|
||||
NAME=i2p
|
||||
ARCH=noarch
|
||||
|
||||
# Less than slackware 13?
|
||||
SLKPLT=$(cat /etc/slackware-version | sed -re "s/(Slackware )([0-9]*)(.*)/\2/")
|
||||
if [ $SLKPLT -lt 13 ] ; then
|
||||
EXT=tgz
|
||||
else
|
||||
EXT=txz
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# This mess is here due to the totally moronic way i2p does versioning.
|
||||
# We correct it here.
|
||||
#
|
||||
ROUTER=$(echo -ne "_")$(cat ../../router/java/src/net/i2p/router/RouterVersion.java | grep -e "public final static long BUILD" | cut -f2 -d"=" | cut -f1 -d";" | sed -re "s/ //g")
|
||||
if [ "$ROUTER" == "_" ] ; then
|
||||
ROUTER="_0"
|
||||
fi
|
||||
|
||||
#
|
||||
# That was the easy one, now for the tough one.
|
||||
#
|
||||
|
||||
CORE=$(cat ../../core/java/src/net/i2p/CoreVersion.java | grep -e "public final static String VERSION" | cut -f2 -d'"' | sed -re "s/ //g")
|
||||
CORE1=$(echo -n $CORE.x.x | sed -re "s/(.*)\.(.*)\.(.*)\.(.*)/\1/")
|
||||
CORE2=$(echo -n $CORE.x | sed -re "s/(.*)\.(.*)\.(.*)\.(.*)/\1/")
|
||||
|
||||
if [ "$CORE.x.x" == "$CORE1" ] ; then
|
||||
CORE=$(echo -ne $CORE".0.0")
|
||||
fi
|
||||
if [ "$CORE.x" == "$CORE2" ] ; then
|
||||
CORE=$(echo -ne $CORE".0")
|
||||
fi
|
||||
|
||||
VERSION=$(echo $CORE$ROUTER)
|
||||
#
|
||||
# Whew!
|
||||
# OK, let's build i2p
|
||||
#
|
||||
|
||||
CWD=$(pwd)
|
||||
CWD=$(readlink -m $(dirname $0))
|
||||
I2PSRC=$(readlink -m $CWD/../../)
|
||||
TMP=/tmp
|
||||
|
||||
PKG=$TMP/package-i2p
|
||||
rm -rf $PKG
|
||||
mkdir -p $PKG
|
||||
|
||||
cd $CWD/../../
|
||||
if [ -e "/etc/slackware-version" ]; then
|
||||
# Older than Slackware 13?
|
||||
SLACKVER=$(sed -e "s/Slackware\s\+\([0-9]\+\)\.\?\([0-9]\+\)\?/\1/" /etc/slackware-version)
|
||||
if [ $SLACKVER -lt 13 ] ; then
|
||||
EXT=tgz
|
||||
else
|
||||
EXT=txz
|
||||
fi
|
||||
else
|
||||
echo "ERROR: This script is only intended for use on Slackware systems.">&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract version strings
|
||||
I2PBUILD=$(sed -e '/^.\+long\s\+BUILD/!d' -e 's/^.\+long\s\+BUILD\s\+=\s\+\([0-9]\+\);/\1/' $I2PSRC/router/java/src/net/i2p/router/RouterVersion.java)
|
||||
# Thanks to user "ihavei2p" for the second awk statement
|
||||
# If the version is x.y, it'll be set to x.y.0. Otherwise the version string will be unchanged
|
||||
CORE=$(awk -F'"' '/static\s+String\s+VERSION/{print $2}' $I2PSRC/core/java/src/net/i2p/CoreVersion.java | \
|
||||
awk -F. '{ if (NF > 3) { print; exit } else if ($3 == "") { $3=0; print $1"."$2"."$3 } else print }')
|
||||
VERSION="${CORE}_${I2PBUILD}"
|
||||
|
||||
[ -d $PKG ] && rm -rf $PKG
|
||||
mkdir -p $PKG/$INSTALL_DIR $PKG/install
|
||||
|
||||
cd "$I2PSRC"
|
||||
ant distclean
|
||||
#ant dist
|
||||
ant tarball
|
||||
ant jbigi-linux-x86-only preppkg-unix
|
||||
|
||||
tar xjvf i2p.tar.bz2 -C $TMP
|
||||
chown -R root:root $I2PSRC/pkg-temp
|
||||
cp -a $I2PSRC/pkg-temp $PKG/$INSTALL_DIR/i2p
|
||||
|
||||
cd $TMP/i2p
|
||||
chown -R root:root .
|
||||
|
||||
mkdir -p $PKG/$INSTALL_DIR/
|
||||
cp -a ../i2p $PKG/$INSTALL_DIR/
|
||||
|
||||
mkdir -p $PKG/install
|
||||
|
||||
#############################################################################
|
||||
# Preconfigureation to make package smaller, and...
|
||||
# we keep as much as reasonable in the installation directory.
|
||||
# This makes the install map fairly well to the standard installation.
|
||||
# It also makes it easier to find the log and pid files!
|
||||
#############################################################################
|
||||
# $INSTALL_DIR is used by this SlackBuild.
|
||||
# [%$]INSTALL_PATH , [%$]SYSTEM_java_io_tmpdir, and [%$]USER_HOME have the correct paths set
|
||||
# by the IzPack installer.
|
||||
cd $PKG/$INSTALL_DIR/i2p
|
||||
for file in wrapper.config eepget i2prouter runplain.sh; do
|
||||
sed -i "s|[%$]INSTALL_PATH|/$INSTALL_DIR/i2p|g;s|[$%]SYSTEM_java_io_tmpdir|$TMP|g;s/[%$]USER_HOME/\$HOME/g" $file
|
||||
done
|
||||
mv wrapper.config wrapper.config.new
|
||||
|
||||
# wrapper.config $INSTALL_PATH and $SYSTEM_java_io_tmpdir
|
||||
sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" wrapper.config > a
|
||||
sed "s|\$SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > wrapper.config
|
||||
# eepget %INSTALL_PATH
|
||||
sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" eepget > a
|
||||
rm eepget
|
||||
mv a eepget
|
||||
# runplain.sh %INSTALL_PATH and %SYSTEM_java_io_tmpdir
|
||||
sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" runplain.sh > a
|
||||
sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > runplain.sh
|
||||
# i2prouter %INSTALL_PATH and %SYSTEM_java_io_tmpdir
|
||||
sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" i2prouter > a
|
||||
rm i2prouter
|
||||
mv a i2prouter
|
||||
sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" i2prouter > a
|
||||
sed "s|#ALLOW_ROOT=true|ALLOW_ROOT=true|g" a > i2prouter
|
||||
install -d $PKG/usr/bin
|
||||
install -d $PKG/usr/doc/$NAME-$VERSION
|
||||
install -d $PKG/etc/rc.d
|
||||
mv licenses LICENSE.txt -t $PKG/usr/doc/$NAME-$VERSION
|
||||
|
||||
chmod 744 ./i2prouter
|
||||
chmod 744 ./osid
|
||||
chmod 744 ./runplain.sh
|
||||
chmod 744 ./eepget
|
||||
chmod 744 ./scripts/i2pbench.sh
|
||||
chmod 744 ./scripts/i2ptest.sh
|
||||
rm -Rf ./lib/*.dll ./*.bat ./*.exe ./installer ./icons ./a postinstall.sh
|
||||
# runplain.sh will live in the installation directory. eepget and i2prouter will go to /usr/bin
|
||||
# with symlinks in INST_DIR (created in doinst.sh)
|
||||
install -m755 i2prouter $PKG/usr/bin
|
||||
install -m755 eepget $PKG/usr/bin
|
||||
chmod 755 ./runplain.sh
|
||||
|
||||
mv $PKG/$INSTALL_DIR/i2p/*.config $PKG/install
|
||||
mv $PKG/$INSTALL_DIR/i2p/blocklist.txt $PKG/$INSTALL_DIR/i2p/blocklist.txt.new
|
||||
find $PKG/$INSTALL_DIR/i2p -name "*.xml" -exec mv {} {}.new \;
|
||||
mv $PKG/$INSTALL_DIR/i2p/eepsite/docroot/index.html $PKG/$INSTALL_DIR/i2p/eepsite/docroot/index.html.new
|
||||
mv $PKG/$INSTALL_DIR/i2p/eepsite/docroot/favicon.ico $PKG/$INSTALL_DIR/i2p/eepsite/docroot/favicon.ico.new
|
||||
sed "s|directory|/$INSTALL_DIR/i2p/|g" $CWD/doinst.sh > $PKG/install/doinst.sh
|
||||
cat $CWD/slack-desc > $PKG/install/slack-desc
|
||||
if [ $INSTALL_DIR != 'opt' ]; then
|
||||
sed "s|\(The I2P package\)\s\+will be\s\+\(installed to\).+|\1 has been \2 $INSTALL_DIR/i2p|g" $CWD/README > $PKG/usr/doc/$NAME-$VERSION/README
|
||||
else
|
||||
sed "s|will be installed|has been installed|" $CWD/README > $PKG/usr/doc/$NAME-$VERSION/README
|
||||
fi
|
||||
|
||||
install -d $PKG/usr/man/man1
|
||||
gzip -9 man/*.1
|
||||
install -m644 man/*.1.gz $PKG/usr/man/man1
|
||||
rm -rf ./man
|
||||
|
||||
# We install all x86 wrapper binaries.
|
||||
# The i2prouter script will try to determine the OS (linux), the bits (32 VS 64) and should be able
|
||||
# to figure out the correct wrapper binary to use.
|
||||
|
||||
# However: In case the i2prouter script's detection fails, "$INST_DIR/i2psvc" will point to
|
||||
# what 'we' think the correct binary is.
|
||||
#
|
||||
# A good reason for installing all binaries: in case the user, for whatever reason, switches from an
|
||||
# x64 JRE to an x86 JRE, I2P should continue to work without needing to be reinstalled.
|
||||
install -m755 $I2PSRC/installer/lib/wrapper/linux/i2psvc ./i2psvc-linux-x86-32
|
||||
install -m644 $I2PSRC/installer/lib/wrapper/linux/libwrapper.so ./lib/libwrapper-linux-x86-32.so
|
||||
install -m755 $I2PSRC/installer/lib/wrapper/linux64/i2psvc ./i2psvc-linux-x86-64
|
||||
install -m644 $I2PSRC/installer/lib/wrapper/linux64/libwrapper.so ./lib/libwrapper-linux-x86-64.so
|
||||
install -m644 $I2PSRC/installer/lib/wrapper/all/wrapper.jar ./lib/wrapper.jar
|
||||
install -m644 $I2PSRC/build/jbigi.jar $PKG/$INSTALL_DIR/i2p/lib/jbigi.jar
|
||||
|
||||
rm -f ./postinstall.sh ./osid ./INSTALL-*.txt
|
||||
sed "s|directory|/$INSTALL_DIR/i2p|" $CWD/doinst.sh > $PKG/install/doinst.sh
|
||||
sed -i "s|%pkg|$NAME-$VERSION|" $PKG/install/doinst.sh
|
||||
sed "s|%INST_DIR|/$INSTALL_DIR/i2p|" $CWD/rc.i2p> $PKG/etc/rc.d/rc.i2p.new
|
||||
cp $CWD/slack-desc $PKG/install/slack-desc
|
||||
|
||||
cd $PKG
|
||||
#
|
||||
# requiredbuilder messes up REALLY bad, and thinks java is perl?!
|
||||
# It also did not catch the shell requirements! BOOOOOOOOOOO! HISSSSSSSS!
|
||||
#
|
||||
# requiredbuilder -v -y -s $CWD $PKG
|
||||
#
|
||||
cat $CWD/slack-required > $PKG/install/slack-required
|
||||
cp $CWD/slack-required $PKG/install/slack-required
|
||||
makepkg -l y -c n $CWD/${NAME}-$VERSION-$ARCH-$BUILD.$EXT
|
||||
|
185
Slackware/i2p/rc.i2p
Normal file
185
Slackware/i2p/rc.i2p
Normal file
@ -0,0 +1,185 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Abort on errors
|
||||
set -e
|
||||
|
||||
##
|
||||
# This *must* be configured. Set this to the user that will run I2P.
|
||||
# Note: If you don't want I2P to start automatically at boot,
|
||||
# use "i2prouter start" as a non-root user to start I2P.
|
||||
#RUN_AS_USER=
|
||||
##
|
||||
|
||||
##
|
||||
# Set the locale as desired.
|
||||
# Note: this is not the same as the language shown in the I2P router console.
|
||||
# This affects the locale used in wrapper.log. For best results, use a
|
||||
# unicode enabled locale. This is especially important for foreign language torrents.
|
||||
#
|
||||
# If not set the user's configured locale will be used.
|
||||
#RCLOCALE=
|
||||
##
|
||||
|
||||
#####################################################
|
||||
# Nothing below this point should need to be edited #
|
||||
#####################################################
|
||||
# %INST_DIR is set by i2p.SlackBuild
|
||||
INSTALL_DIR="%INST_DIR"
|
||||
# Make sure the package is installed and that the wrapper can be found
|
||||
[ -d $INSTALL_DIR ] && [ -x $INSTALL_DIR/i2psvc ] || (echo "The I2P package is not installed" >&2 ; exit 1)
|
||||
|
||||
if [ -z $RUN_AS_USER ]; then
|
||||
echo "ERROR: RUN_AS_USER not configured in $0" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $(id -ur) -ne 0 ]; then
|
||||
echo 'ERROR: You must be root to start this service.' >&2
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $RCLOCALE ]; then
|
||||
if [ ! $(locale -a |grep -q "en_US\.utf8") ]; then
|
||||
RCLOCALE="en_US.utf8"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Abort this script if any referenced variables haven't been set
|
||||
set -u
|
||||
|
||||
if $(uname -m |grep -q '64'); then
|
||||
BITS='64'
|
||||
else
|
||||
BITS=''
|
||||
fi
|
||||
|
||||
PATH="$PATH:/usr/lib$BITS/java/bin:/usr/lib$BITS/java/jre/bin"
|
||||
RUN=/var/run/i2p
|
||||
PIDFILE="$RUN/i2p.pid"
|
||||
WRAPPER_CONF="$INSTALL_DIR/wrapper.config"
|
||||
WRAPPERLOG=/var/log/i2p/wrapper.log
|
||||
I2PTEMP="/tmp/i2p-daemon"
|
||||
DESC="The I2P daemon"
|
||||
JAVABINARY=$(awk -F'=' '/^ *wrapper\.java\.command/{print $2}' "$WRAPPER_CONF")
|
||||
|
||||
if [ ! $(which $JAVABINARY 2>/dev/null) ]; then
|
||||
for rc in /etc/profile.d/*jdk*.sh /etc/profile.d/*java*.sh; do
|
||||
[ -r $rc ] && . $rc
|
||||
done
|
||||
if [ ! $(which $JAVABINARY 2>/dev/null) ]; then
|
||||
echo "ERROR: Cannot find java. Please set the path to java in $WRAPPER_CONF" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
JAVA=$(which $JAVABINARY 2>/dev/null)
|
||||
|
||||
I2P_ARGS="$WRAPPER_CONF \
|
||||
wrapper.java.additional.1=-DloggerFilenameOverride=/var/log/i2p/log-router-@.txt \
|
||||
wrapper.java.additional.10=-Dwrapper.logfile=$WRAPPERLOG \
|
||||
wrapper.java.additional.11=-Di2p.dir.pid=$RUN \
|
||||
wrapper.java.additional.12=-Di2p.dir.temp=$I2PTEMP \
|
||||
wrapper.java.command=$JAVA \
|
||||
wrapper.logfile=$WRAPPERLOG \
|
||||
wrapper.pidfile=$PIDFILE \
|
||||
wrapper.daemonize=TRUE"
|
||||
|
||||
LC_ALL=$RCLOCALE
|
||||
LANG=$RCLOCALE
|
||||
export LC_ALL LANG
|
||||
|
||||
is_running() {
|
||||
if [ -r $PIDFILE ]; then
|
||||
PID="$(cat ${PIDFILE})" 2>/dev/null 2>&1
|
||||
if ! kill -0 $PID >/dev/null 2>&1; then
|
||||
rm "$PIDFILE"
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
start() {
|
||||
if is_running; then
|
||||
echo "ERROR: $DESC is already running." >&2
|
||||
fi
|
||||
|
||||
for DIR in $RUN $I2PTEMP; do
|
||||
test -d $DIR && rm -rf $DIR
|
||||
mkdir -p $DIR
|
||||
chown -R $RUN_AS_USER $DIR
|
||||
done
|
||||
[ -d /var/log/i2p ] || mkdir /var/log/i2p
|
||||
chown -R $RUN_AS_USER /var/log/i2p
|
||||
|
||||
echo -n "Starting $DESC..."
|
||||
TZ=UTC su $RUN_AS_USER -c "$INSTALL_DIR/i2psvc $I2P_ARGS"
|
||||
is_running
|
||||
echo "[pid: $PID]"
|
||||
}
|
||||
|
||||
stop(){
|
||||
if is_running; then
|
||||
echo -n "Stopping $DESC [pid: $PID] (this could take a while)."
|
||||
kill "$PID" >/dev/null 2>&1
|
||||
while kill -0 "$PID" > /dev/null 2>&1; do
|
||||
echo -n .
|
||||
sleep 1
|
||||
done
|
||||
rm -rf "$RUN" "$I2PTEMP"
|
||||
echo done.
|
||||
return 0
|
||||
else
|
||||
echo "$DESC is not running." >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Unset +u to allow the 'usage' text to be displayed
|
||||
set +u
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
status)
|
||||
if is_running; then
|
||||
echo "$DESC is running [pid: $PID]" >&2
|
||||
else
|
||||
echo "$DESC is not running." >&2
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
graceful)
|
||||
if is_running; then
|
||||
kill -HUP $PID
|
||||
echo "Graceful shutdown of $DESC initiated." >&2
|
||||
echo "This may take up to 11 minutes." >&2
|
||||
fi
|
||||
;;
|
||||
dump)
|
||||
if is_running; then
|
||||
kill -3 $PID
|
||||
echo "Threads dumped to $WRAPPERLOG" >&2
|
||||
else
|
||||
echo "$DESC is not running." >&2
|
||||
fi
|
||||
;;
|
||||
restart)
|
||||
if is_running; then
|
||||
stop
|
||||
start
|
||||
else
|
||||
echo "$DESC is not running." >&2
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "usage: $0 start|stop|status|restart|graceful|dump"
|
||||
;;
|
||||
esac
|
@ -1,47 +0,0 @@
|
||||
Building:
|
||||
The i2p package will be installed in /opt/i2p
|
||||
|
||||
If you want to change installation dir, change the variable INSTALL_DIR
|
||||
on i2p.SlackBuild and rebuild the package. You will also need to do the same
|
||||
in the base-i2p package.
|
||||
|
||||
Installation and Upgrade:
|
||||
Probably you will never have to update i2p packages. However if you do,
|
||||
be sure to installpkg first, then removepkg or custom config files can
|
||||
be lost with upgradepkg. I2P has an auto-update function. However using
|
||||
installpkg then removepkg lowers the demand on the I2P network as a
|
||||
whole, and is by far faster.
|
||||
|
||||
After installpkg command, doinst.sh will execute a postinstallation script
|
||||
needed by I2P. Be sure to also install the base-i2p package.
|
||||
|
||||
Optional:
|
||||
|
||||
chmod +x /etc/rc.d/rc.i2p only if you want it to start on boot and stop on
|
||||
shutdown.
|
||||
|
||||
How to start I2P:
|
||||
|
||||
Start I2P service with-
|
||||
sh /etc/rc.d/rc.i2p start
|
||||
|
||||
Now tell your browser to user this proxy: localhost on port 4444 and open
|
||||
this page: http://localhost:7657/index.jsp
|
||||
Here you can configure I2P, watch network status and navigate anonimously.
|
||||
It's suggested to subscribe to various addressbook hosts so that you can
|
||||
get to the many available eepsites and other service on I2P. These are not
|
||||
set up by default for security reasons.
|
||||
|
||||
Please see the faqs on http://www.i2p2.i2p/ or http://www.i2p2.de/ on how
|
||||
to subscribe to the various addressbook services.
|
||||
|
||||
To stop I2P:
|
||||
/etc/rc.d/rc.i2p stop
|
||||
|
||||
|
||||
For any additional information:
|
||||
|
||||
Within I2P- http://www.i2p2.i2p/, http://forum.i2p/, http://zzz.i2p
|
||||
|
||||
Internet (not reccomended!) - http://www.i2p2.de/, http://forum.i2p2.de/
|
||||
|
@ -6,7 +6,7 @@
|
||||
# leave one space after the ':'.
|
||||
|
||||
|-----handy-ruler----------------------------------------------------------|
|
||||
i2p: i2p (an anonymizing network)
|
||||
i2p: I2P (an anonymizing network)
|
||||
i2p:
|
||||
i2p: I2P is an anonymizing network, offering a simple layer that
|
||||
i2p: identity-sensitive applications can use to securely communicate. All
|
||||
@ -14,6 +14,6 @@ i2p: data is wrapped with several layers of encryption, and the network is
|
||||
i2p: both distributed and dynamic, with no trusted parties.
|
||||
i2p: Many applications are available that interface with I2P, including
|
||||
i2p: mail, peer-peer file sharing, IRC chat, and others.
|
||||
i2p: WARNING: To upgrade installpkg FIRST _THEN_ removepkg.
|
||||
i2p: For more information, see: http://www.i2p2.de/
|
||||
i2p:
|
||||
i2p: For more information, see: https://geti2p.net/
|
||||
i2p:
|
||||
|
@ -1,4 +1 @@
|
||||
jre >= 5
|
||||
i2p-base >= 0.0.1
|
||||
bash >= 3.1.017
|
||||
|
||||
jre >= 6
|
||||
|
@ -15,6 +15,8 @@
|
||||
*/
|
||||
package net.i2p.BOB;
|
||||
|
||||
import static net.i2p.app.ClientAppState.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
@ -25,12 +27,17 @@ import java.net.InetAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.URL;
|
||||
import java.util.Arrays;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.*;
|
||||
import net.i2p.client.I2PClient;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.SimpleScheduler;
|
||||
import net.i2p.util.SimpleTimer2;
|
||||
|
||||
@ -105,57 +112,76 @@ import net.i2p.util.SimpleTimer2;
|
||||
*
|
||||
* @author sponge
|
||||
*/
|
||||
public class BOB {
|
||||
public class BOB implements Runnable, ClientApp {
|
||||
|
||||
public final static String PROP_CONFIG_LOCATION = "BOB.config";
|
||||
public final static String PROP_BOB_PORT = "BOB.port";
|
||||
public final static String PROP_BOB_HOST = "BOB.host";
|
||||
public final static String PROP_CFG_VER = "BOB.CFG.VER";
|
||||
private static NamedDB database;
|
||||
private static Properties props = new Properties();
|
||||
private static AtomicBoolean spin = new AtomicBoolean(true);
|
||||
|
||||
private static BOB _bob;
|
||||
|
||||
private NamedDB database;
|
||||
private Properties props = new Properties();
|
||||
private AtomicBoolean spin = new AtomicBoolean(true);
|
||||
private static final String P_RUNNING = "RUNNING";
|
||||
private static final String P_STARTING = "STARTING";
|
||||
private static final String P_STOPPING = "STOPPING";
|
||||
private static AtomicBoolean lock = new AtomicBoolean(false);
|
||||
private AtomicBoolean lock = new AtomicBoolean(false);
|
||||
// no longer used.
|
||||
// private static int maxConnections = 0;
|
||||
|
||||
/**
|
||||
* Log a warning
|
||||
*
|
||||
* @param arg
|
||||
*/
|
||||
public static void info(String arg) {
|
||||
System.out.println("INFO:" + arg);
|
||||
(new Log(BOB.class)).info(arg);
|
||||
}
|
||||
private final Logger _log;
|
||||
private final ClientAppManager _mgr;
|
||||
private final String[] _args;
|
||||
private volatile ClientAppState _state = UNINITIALIZED;
|
||||
|
||||
/**
|
||||
* Log a warning
|
||||
*
|
||||
* @param arg
|
||||
*/
|
||||
public static void warn(String arg) {
|
||||
System.out.println("WARNING:" + arg);
|
||||
(new Log(BOB.class)).warn(arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Log an error
|
||||
*
|
||||
* @param arg
|
||||
*/
|
||||
public static void error(String arg) {
|
||||
System.out.println("ERROR: " + arg);
|
||||
(new Log(BOB.class)).error(arg);
|
||||
}
|
||||
private volatile ServerSocket listener;
|
||||
private volatile Thread _runner;
|
||||
|
||||
/**
|
||||
* Stop BOB gracefully
|
||||
* @deprecated unused
|
||||
*/
|
||||
public static void stop() {
|
||||
spin.set(false);
|
||||
_bob.shutdown(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* For ClientApp interface.
|
||||
* Does NOT open the listener socket or start threads; caller must call startup()
|
||||
*
|
||||
* @param mgr may be null
|
||||
* @param args non-null
|
||||
* @throws Exception on bad args
|
||||
* @since 0.9.10
|
||||
*/
|
||||
public BOB(I2PAppContext context, ClientAppManager mgr, String[] args) {
|
||||
// If we were run from command line, log to stdout
|
||||
boolean logToStdout = false;
|
||||
URL classResource = BOB.class.getResource("BOB.class");
|
||||
if (classResource != null) {
|
||||
String classPath = classResource.toString();
|
||||
if (classPath.startsWith("jar")) {
|
||||
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
|
||||
"/META-INF/MANIFEST.MF";
|
||||
try {
|
||||
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
|
||||
Attributes attrs = manifest.getMainAttributes();
|
||||
String mainClass = attrs.getValue("Main-Class");
|
||||
if ("net.i2p.BOB.Main".equals(mainClass))
|
||||
logToStdout = true;
|
||||
} catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
|
||||
_log = new Logger(context.logManager().getLog(BOB.class), logToStdout);
|
||||
|
||||
_mgr = mgr;
|
||||
_args = args;
|
||||
_state = INITIALIZED;
|
||||
database = new NamedDB();
|
||||
loadConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,8 +190,22 @@ public class BOB {
|
||||
* @param args
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
database = new NamedDB();
|
||||
ServerSocket listener = null;
|
||||
try {
|
||||
_bob = new BOB(I2PAppContext.getGlobalContext(), null, args);
|
||||
_bob.startup();
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
private void loadConfig() {
|
||||
int i = 0;
|
||||
boolean save = false;
|
||||
// Set up all defaults to be passed forward to other threads.
|
||||
@ -176,116 +216,144 @@ public class BOB {
|
||||
SimpleTimer2 Y2 = SimpleTimer2.getInstance();
|
||||
i = Y1.hashCode();
|
||||
i = Y2.hashCode();
|
||||
Log _log = new Log(BOB.class);
|
||||
try {
|
||||
{
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
}
|
||||
try {
|
||||
FileInputStream fi = new FileInputStream(cfg);
|
||||
props.load(fi);
|
||||
fi.close();
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
warn("Unable to load up the BOB config file " + cfg.getAbsolutePath() + ", Using defaults.");
|
||||
warn(fnfe.toString());
|
||||
save = true;
|
||||
} catch (IOException ioe) {
|
||||
warn("IOException on BOB config file " + cfg.getAbsolutePath() + ", using defaults.");
|
||||
warn(ioe.toString());
|
||||
}
|
||||
{
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
}
|
||||
// Global router and client API configurations that are missing are set to defaults here.
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_HOST)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_PORT)) {
|
||||
props.setProperty(PROP_BOB_PORT, "2827"); // 0xB0B
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("inbound.length")) {
|
||||
props.setProperty("inbound.length", "1");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("outbound.length")) {
|
||||
props.setProperty("outbound.length", "1");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("inbound.lengthVariance")) {
|
||||
props.setProperty("inbound.lengthVariance", "0");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("outbound.lengthVariance")) {
|
||||
props.setProperty("outbound.lengthVariance", "0");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_HOST)) {
|
||||
props.setProperty(PROP_BOB_HOST, "localhost");
|
||||
save = true;
|
||||
}
|
||||
// PROP_RELIABILITY_NONE, PROP_RELIABILITY_BEST_EFFORT, PROP_RELIABILITY_GUARANTEED
|
||||
if (!props.containsKey(PROP_CFG_VER)) {
|
||||
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_NONE);
|
||||
props.setProperty(PROP_CFG_VER,"1");
|
||||
save = true;
|
||||
}
|
||||
if (save) {
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
}
|
||||
try {
|
||||
warn("Writing new defaults file " + cfg.getAbsolutePath());
|
||||
FileOutputStream fo = new FileOutputStream(cfg);
|
||||
props.store(fo, cfg.getAbsolutePath());
|
||||
fo.close();
|
||||
} catch (IOException ioe) {
|
||||
error("IOException on BOB config file " + cfg.getAbsolutePath() + ", " + ioe);
|
||||
}
|
||||
}
|
||||
|
||||
i = 0;
|
||||
boolean g = false;
|
||||
spin.set(true);
|
||||
FileInputStream fi = null;
|
||||
try {
|
||||
info("BOB is now running.");
|
||||
listener = new ServerSocket(Integer.parseInt(props.getProperty(PROP_BOB_PORT)), 10, InetAddress.getByName(props.getProperty(PROP_BOB_HOST)));
|
||||
Socket server = null;
|
||||
listener.setSoTimeout(500); // .5 sec
|
||||
|
||||
while (spin.get()) {
|
||||
//DoCMDS connection;
|
||||
|
||||
try {
|
||||
server = listener.accept();
|
||||
server.setKeepAlive(true);
|
||||
g = true;
|
||||
} catch (ConnectException ce) {
|
||||
g = false;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
}
|
||||
|
||||
if (g) {
|
||||
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
|
||||
Thread t = new Thread(conn_c);
|
||||
t.setName("BOB.DoCMDS " + i);
|
||||
t.start();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
fi = new FileInputStream(cfg);
|
||||
props.load(fi);
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
_log.warn("Unable to load up the BOB config file " + cfg.getAbsolutePath() + ", Using defaults.", fnfe);
|
||||
save = true;
|
||||
} catch (IOException ioe) {
|
||||
error("IOException on socket listen: " + ioe);
|
||||
ioe.printStackTrace();
|
||||
_log.warn("IOException on BOB config file " + cfg.getAbsolutePath() + ", using defaults.", ioe);
|
||||
} finally {
|
||||
if (fi != null) try { fi.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
// Global router and client API configurations that are missing are set to defaults here.
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_HOST)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_PORT)) {
|
||||
props.setProperty(PROP_BOB_PORT, "2827"); // 0xB0B
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("inbound.length")) {
|
||||
props.setProperty("inbound.length", "1");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("outbound.length")) {
|
||||
props.setProperty("outbound.length", "1");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("inbound.lengthVariance")) {
|
||||
props.setProperty("inbound.lengthVariance", "0");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("outbound.lengthVariance")) {
|
||||
props.setProperty("outbound.lengthVariance", "0");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_HOST)) {
|
||||
props.setProperty(PROP_BOB_HOST, "localhost");
|
||||
save = true;
|
||||
}
|
||||
// PROP_RELIABILITY_NONE, PROP_RELIABILITY_BEST_EFFORT, PROP_RELIABILITY_GUARANTEED
|
||||
if (!props.containsKey(PROP_CFG_VER)) {
|
||||
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_NONE);
|
||||
props.setProperty(PROP_CFG_VER,"1");
|
||||
save = true;
|
||||
}
|
||||
if (save) {
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
}
|
||||
FileOutputStream fo = null;
|
||||
try {
|
||||
_log.warn("Writing new defaults file " + cfg.getAbsolutePath());
|
||||
fo = new FileOutputStream(cfg);
|
||||
props.store(fo, cfg.getAbsolutePath());
|
||||
} catch (IOException ioe) {
|
||||
_log.error("IOException on BOB config file " + cfg.getAbsolutePath(), ioe);
|
||||
} finally {
|
||||
if (fo != null) try { fo.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
private void startListener() throws IOException {
|
||||
listener = new ServerSocket(Integer.parseInt(props.getProperty(PROP_BOB_PORT)), 10, InetAddress.getByName(props.getProperty(PROP_BOB_HOST)));
|
||||
listener.setSoTimeout(500); // .5 sec
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
private void startThread() {
|
||||
I2PAppThread t = new I2PAppThread(this, "BOBListener");
|
||||
t.start();
|
||||
_runner = t;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
public void run() {
|
||||
if (listener == null) return;
|
||||
changeState(RUNNING);
|
||||
_log.info("BOB is now running.");
|
||||
if (_mgr != null)
|
||||
_mgr.register(this);
|
||||
|
||||
int i = 0;
|
||||
boolean g = false;
|
||||
spin.set(true);
|
||||
try {
|
||||
Socket server = null;
|
||||
|
||||
while (spin.get()) {
|
||||
//DoCMDS connection;
|
||||
|
||||
try {
|
||||
server = listener.accept();
|
||||
server.setKeepAlive(true);
|
||||
g = true;
|
||||
} catch (ConnectException ce) {
|
||||
g = false;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
}
|
||||
|
||||
if (g) {
|
||||
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
|
||||
Thread t = new Thread(conn_c);
|
||||
t.setName("BOB.DoCMDS " + i);
|
||||
t.start();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
changeState(STOPPING);
|
||||
} catch (Exception e) {
|
||||
if (spin.get())
|
||||
_log.error("Unexpected error while listening for connections", e);
|
||||
else
|
||||
e = null;
|
||||
changeState(STOPPING, e);
|
||||
} finally {
|
||||
info("BOB is now shutting down...");
|
||||
_log.info("BOB is now shutting down...");
|
||||
// Clean up everything.
|
||||
try {
|
||||
listener.close();
|
||||
@ -316,8 +384,8 @@ public class BOB {
|
||||
database.releaseReadLock();
|
||||
}
|
||||
}
|
||||
info("BOB is now stopped.");
|
||||
|
||||
changeState(STOPPED);
|
||||
_log.info("BOB is now stopped.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -369,4 +437,86 @@ public class BOB {
|
||||
waitjoin(groups[i], level + 1, groups[i].getName());
|
||||
}
|
||||
}
|
||||
|
||||
////// begin ClientApp interface
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
@Override
|
||||
public void startup() throws IOException {
|
||||
if (_state != INITIALIZED)
|
||||
return;
|
||||
changeState(STARTING);
|
||||
try {
|
||||
startListener();
|
||||
} catch (IOException e) {
|
||||
_log.error("Error starting BOB on"
|
||||
+ props.getProperty(PROP_BOB_HOST)
|
||||
+ ":" + props.getProperty(PROP_BOB_PORT), e);
|
||||
changeState(START_FAILED, e);
|
||||
throw e;
|
||||
}
|
||||
startThread();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
@Override
|
||||
public void shutdown(String[] args) {
|
||||
if (_state != RUNNING)
|
||||
return;
|
||||
changeState(STOPPING);
|
||||
spin.set(false);
|
||||
if (_runner != null)
|
||||
_runner.interrupt();
|
||||
else
|
||||
changeState(STOPPED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
@Override
|
||||
public ClientAppState getState() {
|
||||
return _state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "BOB";
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "BOB " + Arrays.toString(_args);
|
||||
}
|
||||
|
||||
////// end ClientApp interface
|
||||
////// begin ClientApp helpers
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
private void changeState(ClientAppState state) {
|
||||
changeState(state, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.10
|
||||
*/
|
||||
private synchronized void changeState(ClientAppState state, Exception e) {
|
||||
_state = state;
|
||||
if (_mgr != null)
|
||||
_mgr.notify(this, state, null, e);
|
||||
}
|
||||
|
||||
////// end ClientApp helpers
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ import net.i2p.client.I2PClientFactory;
|
||||
//import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.Destination;
|
||||
//import net.i2p.i2ptunnel.I2PTunnel;
|
||||
import net.i2p.util.Log;
|
||||
// needed only for debugging.
|
||||
// import java.util.logging.Level;
|
||||
// import java.util.logging.Logger;
|
||||
@ -56,7 +55,7 @@ public class DoCMDS implements Runnable {
|
||||
private ByteArrayOutputStream prikey;
|
||||
private boolean dk, ns, ip, op;
|
||||
private NamedDB nickinfo;
|
||||
private Log _log;
|
||||
private Logger _log;
|
||||
private AtomicBoolean LIVE;
|
||||
private AtomicBoolean lock;
|
||||
/* database strings */
|
||||
@ -164,7 +163,7 @@ public class DoCMDS implements Runnable {
|
||||
* @param database
|
||||
* @param _log
|
||||
*/
|
||||
DoCMDS(AtomicBoolean LIVE, AtomicBoolean lock, Socket server, Properties props, NamedDB database, Log _log) {
|
||||
DoCMDS(AtomicBoolean LIVE, AtomicBoolean lock, Socket server, Properties props, NamedDB database, Logger _log) {
|
||||
this.lock = lock;
|
||||
this.LIVE = LIVE;
|
||||
this.server = server;
|
||||
@ -606,7 +605,7 @@ public class DoCMDS implements Runnable {
|
||||
break die;
|
||||
}
|
||||
} catch (I2PException ipe) {
|
||||
BOB.error("Error generating keys" + ipe);
|
||||
_log.error("Error generating keys", ipe);
|
||||
out.println("ERROR generating keys");
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,6 @@ import net.i2p.I2PException;
|
||||
import net.i2p.client.streaming.I2PServerSocket;
|
||||
import net.i2p.client.streaming.I2PSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
* Listen on I2P and connect to TCP
|
||||
@ -32,7 +31,7 @@ import net.i2p.util.Log;
|
||||
public class I2Plistener implements Runnable {
|
||||
|
||||
private NamedDB info, database;
|
||||
private Log _log;
|
||||
private Logger _log;
|
||||
public I2PSocketManager socketManager;
|
||||
public I2PServerSocket serverSocket;
|
||||
private AtomicBoolean lives;
|
||||
@ -45,7 +44,7 @@ public class I2Plistener implements Runnable {
|
||||
* @param database
|
||||
* @param _log
|
||||
*/
|
||||
I2Plistener(I2PServerSocket SS, I2PSocketManager S, NamedDB info, NamedDB database, Log _log, AtomicBoolean lives) {
|
||||
I2Plistener(I2PServerSocket SS, I2PSocketManager S, NamedDB info, NamedDB database, Logger _log, AtomicBoolean lives) {
|
||||
this.database = database;
|
||||
this.info = info;
|
||||
this._log = _log;
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package net.i2p.BOB;
|
||||
|
||||
import java.util.Enumeration;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
@ -39,10 +39,8 @@ public class Lifted {
|
||||
*
|
||||
**/
|
||||
public static void copyProperties(Properties src_prop, Properties dest_prop) {
|
||||
for (Enumeration propertyNames = src_prop.propertyNames();
|
||||
propertyNames.hasMoreElements();) {
|
||||
Object key = propertyNames.nextElement();
|
||||
dest_prop.put(key, src_prop.get(key));
|
||||
for (Map.Entry<Object, Object> e : src_prop.entrySet()) {
|
||||
dest_prop.put((String)e.getKey(), (String)e.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
44
apps/BOB/src/net/i2p/BOB/Logger.java
Normal file
44
apps/BOB/src/net/i2p/BOB/Logger.java
Normal file
@ -0,0 +1,44 @@
|
||||
package net.i2p.BOB;
|
||||
|
||||
import net.i2p.util.Log;
|
||||
|
||||
public class Logger {
|
||||
public Log log;
|
||||
private boolean logToStdout;
|
||||
|
||||
public Logger(Log log, boolean logToStdout) {
|
||||
this.log = log;
|
||||
this.logToStdout = logToStdout;
|
||||
}
|
||||
|
||||
public void info(String msg) {
|
||||
if (logToStdout)
|
||||
System.out.println("INFO: " + msg);
|
||||
if (log.shouldLog(Log.INFO))
|
||||
log.info(msg);
|
||||
}
|
||||
|
||||
public void warn(String msg) {
|
||||
warn(msg, null);
|
||||
}
|
||||
|
||||
public void warn(String msg, Throwable e) {
|
||||
if (logToStdout) {
|
||||
System.out.println("WARNING: " + msg);
|
||||
if (e != null)
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (log.shouldLog(Log.WARN))
|
||||
log.warn(msg, e);
|
||||
}
|
||||
|
||||
public void error(String msg, Throwable e) {
|
||||
if (logToStdout) {
|
||||
System.out.println("ERROR: " + msg);
|
||||
if (e != null)
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (log.shouldLog(Log.ERROR))
|
||||
log.error(msg, e);
|
||||
}
|
||||
}
|
@ -22,6 +22,7 @@ import java.net.ServerSocket;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import net.i2p.I2PException;
|
||||
import net.i2p.client.I2PClient;
|
||||
import net.i2p.client.streaming.I2PServerSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.client.streaming.I2PSocketManagerFactory;
|
||||
@ -36,7 +37,7 @@ import net.i2p.util.Log;
|
||||
public class MUXlisten implements Runnable {
|
||||
|
||||
private NamedDB database, info;
|
||||
private Log _log;
|
||||
private Logger _log;
|
||||
private I2PSocketManager socketManager;
|
||||
private ByteArrayInputStream prikey;
|
||||
private ThreadGroup tg;
|
||||
@ -57,7 +58,7 @@ public class MUXlisten implements Runnable {
|
||||
* @throws net.i2p.I2PException
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Log _log) throws I2PException, IOException, RuntimeException {
|
||||
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
|
||||
try {
|
||||
int port = 0;
|
||||
InetAddress host = null;
|
||||
@ -96,10 +97,20 @@ public class MUXlisten implements Runnable {
|
||||
this.database.releaseReadLock();
|
||||
this.info.releaseReadLock();
|
||||
|
||||
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
|
||||
int i2cpPort = 7654;
|
||||
String i2cpPortStr = Q.getProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
try {
|
||||
i2cpPort = Integer.parseInt(i2cpPortStr);
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new IllegalArgumentException("Invalid I2CP port specified [" + i2cpPortStr + "]");
|
||||
}
|
||||
|
||||
if (this.come_in) {
|
||||
this.listener = new ServerSocket(port, backlog, host);
|
||||
}
|
||||
socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
|
||||
socketManager = I2PSocketManagerFactory.createManager(
|
||||
prikey, i2cpHost, i2cpPort, Q);
|
||||
} catch (IOException e) {
|
||||
// Something went bad.
|
||||
this.database.getWriteLock();
|
||||
|
@ -22,7 +22,6 @@ import java.net.SocketTimeoutException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import net.i2p.client.streaming.I2PServerSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
* Listen on TCP port and connect to I2P
|
||||
@ -32,7 +31,7 @@ import net.i2p.util.Log;
|
||||
public class TCPlistener implements Runnable {
|
||||
|
||||
private NamedDB info, database;
|
||||
private Log _log;
|
||||
private Logger _log;
|
||||
public I2PSocketManager socketManager;
|
||||
public I2PServerSocket serverSocket;
|
||||
private ServerSocket listener;
|
||||
@ -45,7 +44,7 @@ public class TCPlistener implements Runnable {
|
||||
* @param database
|
||||
* @param _log
|
||||
*/
|
||||
TCPlistener(ServerSocket listener, I2PSocketManager S, NamedDB info, NamedDB database, Log _log, AtomicBoolean lives) {
|
||||
TCPlistener(ServerSocket listener, I2PSocketManager S, NamedDB info, NamedDB database, Logger _log, AtomicBoolean lives) {
|
||||
this.database = database;
|
||||
this.info = info;
|
||||
this._log = _log;
|
||||
|
@ -106,8 +106,10 @@ public class UDPIOthread implements I2PSessionListener, Runnable {
|
||||
// _log.debug("Message available: id = " + msgId + " size = " + size);
|
||||
try {
|
||||
byte msg[] = session.receiveMessage(msgId);
|
||||
out.write(msg);
|
||||
out.flush();
|
||||
if (msg != null) {
|
||||
out.write(msg);
|
||||
out.flush();
|
||||
}
|
||||
} catch (I2PSessionException ise) {
|
||||
up = false;
|
||||
} catch (IOException ioe) {
|
||||
|
@ -7,6 +7,7 @@
|
||||
<property name="jar" value="addressbook.jar"/>
|
||||
<property name="war" value="addressbook.war"/>
|
||||
<property name="javac.compilerargs" value="" />
|
||||
<property name="javac.version" value="1.6" />
|
||||
|
||||
<target name="init">
|
||||
<mkdir dir="${build}"/>
|
||||
@ -24,6 +25,18 @@
|
||||
<typefound name="depend" />
|
||||
</condition>
|
||||
<target name="depend" if="depend.available">
|
||||
<depend
|
||||
cache="../../build"
|
||||
srcdir="${src}"
|
||||
destdir="${build}" >
|
||||
<!-- Depend on classes instead of jars where available -->
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/obj" />
|
||||
</classpath>
|
||||
</depend>
|
||||
</target>
|
||||
|
||||
<target name="dependServlet" if="depend.available">
|
||||
<depend
|
||||
cache="../../build"
|
||||
srcdir="${src}"
|
||||
@ -37,9 +50,22 @@
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="init, depend">
|
||||
<javac debug="true" deprecation="on" source="1.5" target="1.5"
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}">
|
||||
srcdir="${src}" destdir="${build}"
|
||||
excludes="net/i2p/addressbook/Servlet.java">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="compileServlet" depends="init, dependServlet, compile">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}"
|
||||
includes="net/i2p/addressbook/Servlet.java">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
@ -48,11 +74,11 @@
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- unused for now, as we oddly ship addressbook as a .war -->
|
||||
<!-- unused for now (except for Android), as we oddly ship addressbook as a .war -->
|
||||
<target name="jar" depends="compile, changes">
|
||||
<jar basedir="${build}" destfile="${dist}/${jar}">
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes" value="" />
|
||||
<jar basedir="${build}" destfile="${dist}/${jar}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="addressbook.Daemon"/>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
@ -64,7 +90,7 @@
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="war" depends="compile, changes, warUpToDate" unless="war.uptodate">
|
||||
<target name="war" depends="compileServlet, changes, warUpToDate" unless="war.uptodate">
|
||||
<mkdir dir="${dist}/tmp"/>
|
||||
<mkdir dir="${dist}/tmp/WEB-INF"/>
|
||||
<mkdir dir="${dist}/tmp/WEB-INF/classes"/>
|
||||
|
@ -91,7 +91,7 @@ class ConfigParser {
|
||||
String inputLine;
|
||||
inputLine = input.readLine();
|
||||
while (inputLine != null) {
|
||||
inputLine = ConfigParser.stripComments(inputLine);
|
||||
inputLine = stripComments(inputLine);
|
||||
String[] splitLine = inputLine.split("=");
|
||||
if (splitLine.length == 2) {
|
||||
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
|
||||
@ -116,7 +116,7 @@ class ConfigParser {
|
||||
FileInputStream fileStream = new FileInputStream(file);
|
||||
BufferedReader input = new BufferedReader(new InputStreamReader(
|
||||
fileStream));
|
||||
Map<String, String> rv = ConfigParser.parse(input);
|
||||
Map<String, String> rv = parse(input);
|
||||
try {
|
||||
fileStream.close();
|
||||
} catch (IOException ioe) {}
|
||||
@ -136,7 +136,7 @@ class ConfigParser {
|
||||
public static Map<String, String> parse(String string) throws IOException {
|
||||
StringReader stringReader = new StringReader(string);
|
||||
BufferedReader input = new BufferedReader(stringReader);
|
||||
return ConfigParser.parse(input);
|
||||
return parse(input);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -153,7 +153,7 @@ class ConfigParser {
|
||||
public static Map<String, String> parse(File file, Map<String, String> map) {
|
||||
Map<String, String> result;
|
||||
try {
|
||||
result = ConfigParser.parse(file);
|
||||
result = parse(file);
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
if (!result.containsKey(entry.getKey()))
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
@ -161,7 +161,7 @@ class ConfigParser {
|
||||
} catch (IOException exp) {
|
||||
result = map;
|
||||
try {
|
||||
ConfigParser.write(result, file);
|
||||
write(result, file);
|
||||
} catch (IOException exp2) {
|
||||
}
|
||||
}
|
||||
@ -182,7 +182,7 @@ class ConfigParser {
|
||||
List<String> result = new LinkedList<String>();
|
||||
String inputLine = input.readLine();
|
||||
while (inputLine != null) {
|
||||
inputLine = ConfigParser.stripComments(inputLine).trim();
|
||||
inputLine = stripComments(inputLine).trim();
|
||||
if (inputLine.length() > 0) {
|
||||
result.add(inputLine);
|
||||
}
|
||||
@ -205,7 +205,7 @@ class ConfigParser {
|
||||
FileInputStream fileStream = new FileInputStream(file);
|
||||
BufferedReader input = new BufferedReader(new InputStreamReader(
|
||||
fileStream));
|
||||
List<String> rv = ConfigParser.parseSubscriptions(input);
|
||||
List<String> rv = parseSubscriptions(input);
|
||||
try {
|
||||
fileStream.close();
|
||||
} catch (IOException ioe) {}
|
||||
@ -224,7 +224,7 @@ class ConfigParser {
|
||||
public static List<String> parseSubscriptions(String string) throws IOException {
|
||||
StringReader stringReader = new StringReader(string);
|
||||
BufferedReader input = new BufferedReader(stringReader);
|
||||
return ConfigParser.parseSubscriptions(input);
|
||||
return parseSubscriptions(input);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -234,18 +234,30 @@ class ConfigParser {
|
||||
*
|
||||
* @param file
|
||||
* A File to attempt to parse.
|
||||
* @param list list of files to parse
|
||||
* @param list The default subscriptions to be saved and returned if the file cannot be read
|
||||
* @return A List consisting of one element for each line in file, or if
|
||||
* file cannot be read, list.
|
||||
*/
|
||||
public static List<String> parseSubscriptions(File file, List<String> list) {
|
||||
List<String> result;
|
||||
try {
|
||||
result = ConfigParser.parseSubscriptions(file);
|
||||
result = parseSubscriptions(file);
|
||||
// Fix up files that contain the old default
|
||||
// which was changed in 0.9.11
|
||||
if (result.remove(Daemon.OLD_DEFAULT_SUB)) {
|
||||
for (String sub : list) {
|
||||
if (!result.contains(sub))
|
||||
result.add(sub);
|
||||
}
|
||||
try {
|
||||
writeSubscriptions(result, file);
|
||||
// TODO log
|
||||
} catch (IOException ioe) {}
|
||||
}
|
||||
} catch (IOException exp) {
|
||||
result = list;
|
||||
try {
|
||||
ConfigParser.writeSubscriptions(result, file);
|
||||
writeSubscriptions(result, file);
|
||||
} catch (IOException exp2) {
|
||||
}
|
||||
}
|
||||
@ -289,8 +301,7 @@ class ConfigParser {
|
||||
boolean success = false;
|
||||
if (!isWindows) {
|
||||
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
|
||||
ConfigParser
|
||||
.write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(tmp), "UTF-8")));
|
||||
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(tmp), "UTF-8")));
|
||||
success = tmp.renameTo(file);
|
||||
if (!success) {
|
||||
tmp.delete();
|
||||
@ -299,8 +310,7 @@ class ConfigParser {
|
||||
}
|
||||
if (!success) {
|
||||
// hmm, that didn't work, try it the old way
|
||||
ConfigParser
|
||||
.write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
|
||||
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
|
||||
}
|
||||
}
|
||||
|
||||
@ -337,7 +347,7 @@ class ConfigParser {
|
||||
*/
|
||||
public static void writeSubscriptions(List<String> list, File file)
|
||||
throws IOException {
|
||||
ConfigParser.writeSubscriptions(list, new BufferedWriter(
|
||||
writeSubscriptions(list, new BufferedWriter(
|
||||
new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,9 @@ public class Daemon {
|
||||
private static final Daemon _instance = new Daemon();
|
||||
private volatile boolean _running;
|
||||
private static final boolean DEBUG = false;
|
||||
private static final String DEFAULT_SUB = "http://i2p-projekt.i2p/hosts.txt";
|
||||
/** @since 0.9.12 */
|
||||
static final String OLD_DEFAULT_SUB = "http://www.i2p2.i2p/hosts.txt";
|
||||
|
||||
/**
|
||||
* Update the router and published address books using remote data from the
|
||||
@ -253,7 +256,7 @@ public class Daemon {
|
||||
|
||||
List<String> defaultSubs = new LinkedList<String>();
|
||||
// defaultSubs.add("http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/hosts.txt");
|
||||
defaultSubs.add("http://www.i2p2.i2p/hosts.txt");
|
||||
defaultSubs.add(DEFAULT_SUB);
|
||||
|
||||
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
|
||||
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, settings
|
||||
|
@ -41,7 +41,9 @@ import javax.servlet.http.HttpServletResponse;
|
||||
*
|
||||
*/
|
||||
public class Servlet extends HttpServlet {
|
||||
private DaemonThread thread;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private transient DaemonThread thread;
|
||||
//private String nonce;
|
||||
//private static final String PROP_NONCE = "addressbook.nonce";
|
||||
|
||||
|
@ -4,6 +4,15 @@
|
||||
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
|
||||
|
||||
<web-app>
|
||||
<filter>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>addressbook</servlet-name>
|
||||
<servlet-class>net.i2p.addressbook.Servlet</servlet-class>
|
||||
|
@ -3,7 +3,7 @@
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_router"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="lib" path="/lib/wrapper/all/wrapper.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/installer"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
||||
|
@ -7,12 +7,13 @@
|
||||
<property name="jar" value="desktopgui.jar"/>
|
||||
<property name="resources" value="resources"/>
|
||||
<property name="javadoc" value="javadoc"/>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="javac.version" value="1.6" />
|
||||
<property name="require.gettext" value="true" />
|
||||
|
||||
<condition property="no.bundle">
|
||||
<isfalse value="${require.gettext}" />
|
||||
</condition>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="require.gettext" value="true" />
|
||||
|
||||
<target name="init">
|
||||
<mkdir dir="${build}"/>
|
||||
@ -27,7 +28,7 @@
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="init">
|
||||
<javac debug="true" deprecation="on" source="1.5" target="1.5"
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
|
@ -3,19 +3,19 @@
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
# foo <foo@bar>, 2009.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-09 18:07+0000\n"
|
||||
"PO-Revision-Date: 2011-03-22 15:49+0000\n"
|
||||
"Last-Translator: blabla <blabla@trash-mail.com>\n"
|
||||
"Language-Team: German <>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
@ -46,10 +46,10 @@ msgstr "I2P neustarten"
|
||||
msgid "Stop I2P"
|
||||
msgstr "I2P beenden"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr "Systemleistensymbol konfigurieren"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr "Systemleistensymbol aktivieren?"
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P desktopgui\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||
"Language-Team: duck <duck@mail.i2p>\n"
|
||||
@ -46,10 +46,10 @@ msgstr ""
|
||||
msgid "Stop I2P"
|
||||
msgstr ""
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr ""
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr ""
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# blabla <blabla@trash-mail.com>, 2011
|
||||
# ducki2p <ducki2p@gmail.com>, 2011
|
||||
@ -11,15 +11,16 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-09 19:14+0000\n"
|
||||
"PO-Revision-Date: 2013-06-08 04:50+0000\n"
|
||||
"Last-Translator: Boxoa590\n"
|
||||
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/fr/)\n"
|
||||
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"fr/)\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
@ -50,10 +51,10 @@ msgstr "Redémarrer I2P"
|
||||
msgid "Stop I2P"
|
||||
msgstr "Arrêter I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr "Configuration de l'icône de notification"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr "Activer l'icône de notification ?"
|
||||
|
57
apps/desktopgui/locale/messages_pt_BR.po
Normal file
57
apps/desktopgui/locale/messages_pt_BR.po
Normal file
@ -0,0 +1,57 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# testsubject67 <deborinha97@hotmail.com>, 2014
|
||||
# blueboy, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
||||
"PO-Revision-Date: 2014-07-05 17:40+0000\n"
|
||||
"Last-Translator: testsubject67 <deborinha97@hotmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/I2P/language/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pt_BR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
msgid "Start I2P"
|
||||
msgstr "Conectar-se à I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
||||
msgid "I2P is starting!"
|
||||
msgstr "Conectando-se a I2P!"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
||||
msgid "Starting"
|
||||
msgstr "Conectando"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
||||
msgid "Launch I2P Browser"
|
||||
msgstr "Lançar o navegador I2P "
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
||||
msgid "Configure desktopgui"
|
||||
msgstr "Configurar desktopgui"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
||||
msgid "Restart I2P"
|
||||
msgstr "Reinicializar o roteador I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
||||
msgid "Stop I2P"
|
||||
msgstr "Interromper o roteador I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr "Configuração de ícone de bandeja"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr "Ativar ícone de bandeja?"
|
@ -2,21 +2,23 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
||||
"POT-Creation-Date: 2014-01-09 19:03+0000\n"
|
||||
"PO-Revision-Date: 2013-11-11 11:31+0000\n"
|
||||
"Last-Translator: polearnik <polearnik@mail.ru>\n"
|
||||
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/ro/)\n"
|
||||
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"ro/)\n"
|
||||
"Language: ro\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ro\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
||||
"2:1));\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
msgid "Start I2P"
|
||||
@ -46,10 +48,10 @@ msgstr "Restart I2P"
|
||||
msgid "Stop I2P"
|
||||
msgstr "Stop I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr "Configurare pictogramei din bara de sistem"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr "Ar trebui să fie activata pictograma din bara de sistem?"
|
||||
|
@ -6,14 +6,14 @@
|
||||
# Translators:
|
||||
# ducki2p <ducki2p@gmail.com>, 2011
|
||||
# foo <foo@bar>, 2009
|
||||
# Roman Azarenko <x12ozmouse@ya.ru>, 2013
|
||||
# Роман Азаренко <transifex@basicxp.ru>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
||||
"PO-Revision-Date: 2013-07-07 11:44+0000\n"
|
||||
"Last-Translator: Roman Azarenko <x12ozmouse@ya.ru>\n"
|
||||
"PO-Revision-Date: 2013-12-04 11:46+0000\n"
|
||||
"Last-Translator: Bergitte <alvina_alexandrova@mail.ru>\n"
|
||||
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/I2P/language/ru_RU/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
57
apps/desktopgui/locale/messages_sk.po
Normal file
57
apps/desktopgui/locale/messages_sk.po
Normal file
@ -0,0 +1,57 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# Krantišek <jaksrn@gmail.com>, 2014
|
||||
# Svistwarrior273 <romanbeno273@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
||||
"PO-Revision-Date: 2014-04-20 09:56+0000\n"
|
||||
"Last-Translator: Svistwarrior273 <romanbeno273@gmail.com>\n"
|
||||
"Language-Team: Slovak (http://www.transifex.com/projects/p/I2P/language/sk/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: sk\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
msgid "Start I2P"
|
||||
msgstr "Spustiť I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
||||
msgid "I2P is starting!"
|
||||
msgstr "I2P sa spúšťa!"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
||||
msgid "Starting"
|
||||
msgstr "Spúšťa sa"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
||||
msgid "Launch I2P Browser"
|
||||
msgstr "Spustiť I2P prehliadač"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
||||
msgid "Configure desktopgui"
|
||||
msgstr "Nakonfigurovať desktopgui"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
||||
msgid "Restart I2P"
|
||||
msgstr "Reštartovať I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
||||
msgid "Stop I2P"
|
||||
msgstr "Zastaviť I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr "Konfigurácia ikony v lište"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr "Mala by byť ikona v lište povolená?"
|
@ -3,20 +3,22 @@
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# <gribua@gmail.com>, 2011.
|
||||
# Translators:
|
||||
# Denis Blank <gribua@gmail.com>, 2011
|
||||
# LinuxChata, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
||||
"PO-Revision-Date: 2011-06-19 14:01+0000\n"
|
||||
"Last-Translator: Pharmasolin <gribua@gmail.com>\n"
|
||||
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.net/projects/p/I2P/team/uk_UA/)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
||||
"PO-Revision-Date: 2014-06-22 10:20+0000\n"
|
||||
"Last-Translator: LinuxChata\n"
|
||||
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/I2P/language/uk_UA/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: uk_UA\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
msgid "Start I2P"
|
||||
@ -46,12 +48,10 @@ msgstr "Перезапустити I2P"
|
||||
msgid "Stop I2P"
|
||||
msgstr "Зупинити I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
||||
msgid "Tray icon configuration"
|
||||
msgstr "Настройка трей-іконки"
|
||||
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
||||
msgid "Should tray icon be enabled?"
|
||||
msgstr "Чм повинна трей-іконка бути включена?"
|
||||
|
||||
|
||||
msgstr "Чи повинна трей-іконка бути включена?"
|
||||
|
@ -7,9 +7,6 @@ package net.i2p.desktopgui;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.UnsupportedLookAndFeelException;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.desktopgui.router.RouterManager;
|
||||
import net.i2p.desktopgui.util.*;
|
||||
import net.i2p.util.Log;
|
||||
|
@ -1,28 +1,15 @@
|
||||
package net.i2p.desktopgui;
|
||||
|
||||
import java.awt.AWTException;
|
||||
import java.awt.Desktop;
|
||||
import java.awt.Image;
|
||||
import java.awt.MenuItem;
|
||||
import java.awt.PopupMenu;
|
||||
import java.awt.SystemTray;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.TrayIcon;
|
||||
import java.awt.Desktop.Action;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.swing.SwingWorker;
|
||||
|
||||
import net.i2p.desktopgui.i18n.DesktopguiTranslator;
|
||||
import net.i2p.desktopgui.router.RouterManager;
|
||||
import net.i2p.desktopgui.util.BrowseException;
|
||||
import net.i2p.desktopgui.util.ConfigurationManager;
|
||||
import net.i2p.desktopgui.util.I2PDesktop;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
|
@ -32,7 +32,6 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
@ -115,7 +114,7 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
|
||||
System.out.println("Enabling desktopgui");
|
||||
}
|
||||
try {
|
||||
RouterManager.getRouterContext().setProperty(property, value);
|
||||
RouterManager.getRouterContext().router().saveConfig(property, value);
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(DesktopguiConfigurationFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
@ -5,8 +5,6 @@ import java.io.IOException;
|
||||
import org.tanukisoftware.wrapper.WrapperManager;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.desktopgui.i18n.DesktopguiTranslator;
|
||||
import net.i2p.desktopgui.util.ConfigurationManager;
|
||||
import net.i2p.router.Router;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.Log;
|
||||
|
@ -78,7 +78,7 @@ public class ConfigurationManager {
|
||||
* @return The value of a configuration: true if found, defaultValue if not found.
|
||||
*/
|
||||
public boolean getBooleanConfiguration(String arg, boolean defaultValue) {
|
||||
Boolean value = ((Boolean) booleanConfigurations.get("startWithI2P"));
|
||||
Boolean value = booleanConfigurations.get("startWithI2P");
|
||||
System.out.println(value);
|
||||
if(value != null) {
|
||||
return value;
|
||||
|
@ -1,13 +1,8 @@
|
||||
package net.i2p.desktopgui.util;
|
||||
|
||||
import java.awt.Desktop;
|
||||
import java.awt.TrayIcon;
|
||||
import java.awt.Desktop.Action;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import net.i2p.desktopgui.router.RouterManager;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
public class I2PDesktop {
|
||||
|
@ -17,29 +17,28 @@
|
||||
<classpath>
|
||||
<pathelement location="../../../core/java/build/obj" />
|
||||
<pathelement location="../../ministreaming/java/build/obj" />
|
||||
<pathelement location="../../jetty/jettylib/org.mortbay.jetty.jar" />
|
||||
<pathelement location="../../jetty/jettylib/javax.servlet.jar" />
|
||||
<pathelement location="../../jetty/jettylib/jetty-servlet.jar" />
|
||||
<pathelement location="../../jetty/jettylib/jetty-util.jar" />
|
||||
</classpath>
|
||||
</depend>
|
||||
</target>
|
||||
|
||||
<property name="javac.compilerargs" value="" />
|
||||
<property name="javac.version" value="1.6" />
|
||||
<property name="require.gettext" value="true" />
|
||||
|
||||
<condition property="no.bundle">
|
||||
<isfalse value="${require.gettext}" />
|
||||
</condition>
|
||||
<property name="javac.compilerargs" value="" />
|
||||
<property name="require.gettext" value="true" />
|
||||
|
||||
<target name="compile" depends="depend">
|
||||
<mkdir dir="./build" />
|
||||
<mkdir dir="./build/obj" />
|
||||
<javac
|
||||
srcdir="./src"
|
||||
debug="true" deprecation="on" source="1.5" target="1.5"
|
||||
debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
destdir="./build/obj"
|
||||
includeAntRuntime="false"
|
||||
classpath="../../../core/java/build/i2p.jar:../../jetty/jettylib/org.mortbay.jetty.jar:../../jetty/jettylib/javax.servlet.jar:../../jetty/jettylib/jetty-servlet.jar:../../jetty/jettylib/jetty-util.jar:../../ministreaming/java/build/mstreaming.jar" >
|
||||
classpath="../../../core/java/build/i2p.jar:../../jetty/jettylib/javax.servlet.jar:../../ministreaming/java/build/mstreaming.jar" >
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
</javac>
|
||||
</target>
|
||||
|
@ -31,7 +31,7 @@ abstract class ExtensionHandler {
|
||||
public static final int ID_DHT = 3;
|
||||
/** not using the option bit since the compact format is different */
|
||||
public static final String TYPE_DHT = "i2p_dht";
|
||||
/** Pieces * SHA1 Hash length, + 25% extra for file names, benconding overhead, etc */
|
||||
/** Pieces * SHA1 Hash length, + 25% extra for file names, bencoding overhead, etc */
|
||||
private static final int MAX_METADATA_SIZE = Storage.MAX_PIECES * 20 * 5 / 4;
|
||||
private static final int PARALLEL_REQUESTS = 3;
|
||||
|
||||
|
@ -76,6 +76,7 @@ public class I2PSnarkUtil {
|
||||
public static final int MAX_CONNECTIONS = 16; // per torrent
|
||||
public static final String PROP_MAX_BW = "i2cp.outboundBytesPerSecond";
|
||||
public static final boolean DEFAULT_USE_DHT = true;
|
||||
public static final String EEPGET_USER_AGENT = "I2PSnark";
|
||||
|
||||
public I2PSnarkUtil(I2PAppContext ctx) {
|
||||
this(ctx, "i2psnark");
|
||||
@ -252,6 +253,8 @@ public class I2PSnarkUtil {
|
||||
opts.setProperty("i2p.streaming.enforceProtocol", "true");
|
||||
if (opts.getProperty("i2p.streaming.disableRejectLogging") == null)
|
||||
opts.setProperty("i2p.streaming.disableRejectLogging", "true");
|
||||
if (opts.getProperty("i2p.streaming.answerPings") == null)
|
||||
opts.setProperty("i2p.streaming.answerPings", "false");
|
||||
_manager = I2PSocketManagerFactory.createManager(_i2cpHost, _i2cpPort, opts);
|
||||
_connecting = false;
|
||||
}
|
||||
@ -391,6 +394,7 @@ public class I2PSnarkUtil {
|
||||
}
|
||||
}
|
||||
EepGet get = new I2PSocketEepGet(_context, _manager, retries, out.getAbsolutePath(), fetchURL);
|
||||
get.addHeader("User-Agent", EEPGET_USER_AGENT);
|
||||
if (get.fetch(timeout)) {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Fetch successful [" + url + "]: size=" + out.length());
|
||||
@ -432,6 +436,7 @@ public class I2PSnarkUtil {
|
||||
}
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(initialSize);
|
||||
EepGet get = new I2PSocketEepGet(_context, _manager, retries, -1, maxSize, null, out, fetchURL);
|
||||
get.addHeader("User-Agent", EEPGET_USER_AGENT);
|
||||
if (get.fetch(timeout)) {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Fetch successful [" + url + "]: size=" + out.size());
|
||||
|
@ -187,7 +187,7 @@ class MagnetState {
|
||||
* @return true if this was the last piece
|
||||
* @throws NPE, IllegalArgumentException, IOException, ...
|
||||
*/
|
||||
public MetaInfo buildMetaInfo() throws Exception {
|
||||
private MetaInfo buildMetaInfo() throws Exception {
|
||||
// top map has nothing in it but the info map (no announce)
|
||||
Map<String, BEValue> map = new HashMap<String, BEValue>();
|
||||
InputStream is = new ByteArrayInputStream(metainfoBytes);
|
||||
|
@ -156,11 +156,11 @@ public class MetaInfo
|
||||
if (val == null) {
|
||||
this.announce_list = null;
|
||||
} else {
|
||||
this.announce_list = new ArrayList();
|
||||
this.announce_list = new ArrayList<List<String>>();
|
||||
List<BEValue> bl1 = val.getList();
|
||||
for (BEValue bev : bl1) {
|
||||
List<BEValue> bl2 = bev.getList();
|
||||
List<String> sl2 = new ArrayList();
|
||||
List<String> sl2 = new ArrayList<String>();
|
||||
for (BEValue bev2 : bl2) {
|
||||
sl2.add(bev2.getString());
|
||||
}
|
||||
@ -220,7 +220,9 @@ public class MetaInfo
|
||||
Object o = val.getValue();
|
||||
// Is it supposed to be a number or a string?
|
||||
// i2psnark does it as a string. BEP 27 doesn't say.
|
||||
// Transmission does numbers.
|
||||
// Transmission does numbers. So does libtorrent.
|
||||
// We handle both as of 0.9.9.
|
||||
// We switch to storing as number as of 0.9.14.
|
||||
privateTorrent = "1".equals(o) ||
|
||||
((o instanceof Number) && ((Number) o).intValue() == 1);
|
||||
} else {
|
||||
@ -259,9 +261,9 @@ public class MetaInfo
|
||||
if (size == 0)
|
||||
throw new InvalidBEncodingException("zero size files list");
|
||||
|
||||
List<List<String>> m_files = new ArrayList(size);
|
||||
List<List<String>> m_files_utf8 = new ArrayList(size);
|
||||
List<Long> m_lengths = new ArrayList(size);
|
||||
List<List<String>> m_files = new ArrayList<List<String>>(size);
|
||||
List<List<String>> m_files_utf8 = new ArrayList<List<String>>(size);
|
||||
List<Long> m_lengths = new ArrayList<Long>(size);
|
||||
long l = 0;
|
||||
for (int i = 0; i < list.size(); i++)
|
||||
{
|
||||
@ -287,7 +289,7 @@ public class MetaInfo
|
||||
if (path_length == 0)
|
||||
throw new InvalidBEncodingException("zero size file path list");
|
||||
|
||||
List<String> file = new ArrayList(path_length);
|
||||
List<String> file = new ArrayList<String>(path_length);
|
||||
Iterator<BEValue> it = path_list.iterator();
|
||||
while (it.hasNext()) {
|
||||
String s = it.next().getString();
|
||||
@ -310,7 +312,7 @@ public class MetaInfo
|
||||
path_list = val.getList();
|
||||
path_length = path_list.size();
|
||||
if (path_length > 0) {
|
||||
file = new ArrayList(path_length);
|
||||
file = new ArrayList<String>(path_length);
|
||||
it = path_list.iterator();
|
||||
while (it.hasNext())
|
||||
file.add(it.next().getString());
|
||||
@ -515,9 +517,10 @@ public class MetaInfo
|
||||
|
||||
sha1.update(bs, off, length);
|
||||
byte[] hash = sha1.digest();
|
||||
for (int i = 0; i < 20; i++)
|
||||
for (int i = 0; i < 20; i++) {
|
||||
if (hash[i] != piece_hashes[20 * piece + i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -537,9 +540,10 @@ public class MetaInfo
|
||||
_log.warn("Error checking", ioe);
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < 20; i++)
|
||||
for (int i = 0; i < 20; i++) {
|
||||
if (hash[i] != piece_hashes[20 * piece + i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -573,10 +577,10 @@ public class MetaInfo
|
||||
*/
|
||||
public MetaInfo reannounce(String announce) throws InvalidBEncodingException
|
||||
{
|
||||
Map<String, BEValue> m = new HashMap();
|
||||
Map<String, BEValue> m = new HashMap<String, BEValue>();
|
||||
if (announce != null)
|
||||
m.put("announce", new BEValue(DataHelper.getUTF8(announce)));
|
||||
Map info = createInfoMap();
|
||||
Map<String, BEValue> info = createInfoMap();
|
||||
m.put("info", new BEValue(info));
|
||||
return new MetaInfo(m);
|
||||
}
|
||||
@ -586,12 +590,12 @@ public class MetaInfo
|
||||
*/
|
||||
public synchronized byte[] getTorrentData()
|
||||
{
|
||||
Map m = new HashMap();
|
||||
Map<String, Object> m = new HashMap<String, Object>();
|
||||
if (announce != null)
|
||||
m.put("announce", announce);
|
||||
if (announce_list != null)
|
||||
m.put("announce-list", announce_list);
|
||||
Map info = createInfoMap();
|
||||
Map<String, BEValue> info = createInfoMap();
|
||||
m.put("info", info);
|
||||
// don't save this locally, we should only do this once
|
||||
return BEncoder.bencode(m);
|
||||
@ -615,31 +619,44 @@ public class MetaInfo
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Creating new infomap", new Exception());
|
||||
// otherwise we must create it
|
||||
Map info = new HashMap();
|
||||
info.put("name", name);
|
||||
Map<String, BEValue> info = new HashMap<String, BEValue>();
|
||||
info.put("name", new BEValue(DataHelper.getUTF8(name)));
|
||||
if (name_utf8 != null)
|
||||
info.put("name.utf-8", name_utf8);
|
||||
info.put("name.utf-8", new BEValue(DataHelper.getUTF8(name_utf8)));
|
||||
// BEP 27
|
||||
if (privateTorrent)
|
||||
info.put("private", "1");
|
||||
// switched to number in 0.9.14
|
||||
//info.put("private", new BEValue(DataHelper.getUTF8("1")));
|
||||
info.put("private", new BEValue(Integer.valueOf(1)));
|
||||
|
||||
info.put("piece length", Integer.valueOf(piece_length));
|
||||
info.put("pieces", piece_hashes);
|
||||
info.put("piece length", new BEValue(Integer.valueOf(piece_length)));
|
||||
info.put("pieces", new BEValue(piece_hashes));
|
||||
if (files == null)
|
||||
info.put("length", Long.valueOf(length));
|
||||
info.put("length", new BEValue(Long.valueOf(length)));
|
||||
else
|
||||
{
|
||||
List l = new ArrayList();
|
||||
List<BEValue> l = new ArrayList<BEValue>();
|
||||
for (int i = 0; i < files.size(); i++)
|
||||
{
|
||||
Map file = new HashMap();
|
||||
file.put("path", files.get(i));
|
||||
if ( (files_utf8 != null) && (files_utf8.size() > i) )
|
||||
file.put("path.utf-8", files_utf8.get(i));
|
||||
file.put("length", lengths.get(i));
|
||||
l.add(file);
|
||||
Map<String, BEValue> file = new HashMap<String, BEValue>();
|
||||
List<String> fi = files.get(i);
|
||||
List<BEValue> befiles = new ArrayList<BEValue>(fi.size());
|
||||
for (int j = 0; j < fi.size(); j++) {
|
||||
befiles.add(new BEValue(DataHelper.getUTF8(fi.get(j))));
|
||||
}
|
||||
file.put("path", new BEValue(befiles));
|
||||
if ( (files_utf8 != null) && (files_utf8.size() > i) ) {
|
||||
List<String> fiu = files_utf8.get(i);
|
||||
List<BEValue> beufiles = new ArrayList<BEValue>(fiu.size());
|
||||
for (int j = 0; j < fiu.size(); j++) {
|
||||
beufiles.add(new BEValue(DataHelper.getUTF8(fiu.get(j))));
|
||||
}
|
||||
file.put("path.utf-8", new BEValue(beufiles));
|
||||
}
|
||||
file.put("length", new BEValue(lengths.get(i)));
|
||||
l.add(new BEValue(file));
|
||||
}
|
||||
info.put("files", l);
|
||||
info.put("files", new BEValue(l));
|
||||
}
|
||||
|
||||
// TODO if we add the ability for other keys in the first constructor
|
||||
|
@ -31,7 +31,7 @@ import net.i2p.util.SecureFile;
|
||||
*
|
||||
* @since 0.8.2
|
||||
*/
|
||||
class PartialPiece implements Comparable {
|
||||
class PartialPiece implements Comparable<PartialPiece> {
|
||||
|
||||
// we store the piece so we can use it in compareTo()
|
||||
private final Piece piece;
|
||||
@ -295,8 +295,7 @@ class PartialPiece implements Comparable {
|
||||
* then rarest first,
|
||||
* then highest downloaded first
|
||||
*/
|
||||
public int compareTo(Object o) throws ClassCastException {
|
||||
PartialPiece opp = (PartialPiece)o;
|
||||
public int compareTo(PartialPiece opp) {
|
||||
int d = this.piece.compareTo(opp.piece);
|
||||
if (d != 0)
|
||||
return d;
|
||||
|
@ -39,7 +39,7 @@ import net.i2p.util.Log;
|
||||
|
||||
import org.klomp.snark.bencode.BEValue;
|
||||
|
||||
public class Peer implements Comparable
|
||||
public class Peer implements Comparable<Peer>
|
||||
{
|
||||
private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(Peer.class);
|
||||
// Identifying property, the peer id of the other side.
|
||||
@ -194,9 +194,8 @@ public class Peer implements Comparable
|
||||
* Compares the PeerIDs.
|
||||
* @deprecated unused?
|
||||
*/
|
||||
public int compareTo(Object o)
|
||||
public int compareTo(Peer p)
|
||||
{
|
||||
Peer p = (Peer)o;
|
||||
int rv = peerID.compareTo(p.peerID);
|
||||
if (rv == 0) {
|
||||
if (_id > p._id) return 1;
|
||||
|
@ -221,7 +221,8 @@ class PeerCheckerTask implements Runnable
|
||||
peer.keepAlive();
|
||||
// announce them to local tracker (TrackerClient does this too)
|
||||
if (dht != null && (_runCount % 5) == 0) {
|
||||
dht.announce(coordinator.getInfoHash(), peer.getPeerID().getDestHash());
|
||||
dht.announce(coordinator.getInfoHash(), peer.getPeerID().getDestHash(),
|
||||
peer.isCompleted());
|
||||
}
|
||||
}
|
||||
|
||||
@ -270,7 +271,7 @@ class PeerCheckerTask implements Runnable
|
||||
|
||||
// announce ourselves to local tracker (TrackerClient does this too)
|
||||
if (dht != null && (_runCount % 16) == 0) {
|
||||
dht.announce(coordinator.getInfoHash());
|
||||
dht.announce(coordinator.getInfoHash(), coordinator.completed());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ class PeerConnectionOut implements Runnable
|
||||
nm = null;
|
||||
}
|
||||
|
||||
if (m == null && nm != null)
|
||||
if (nm != null)
|
||||
{
|
||||
m = nm;
|
||||
//SimpleTimer.getInstance().removeEvent(nm.expireEvent);
|
||||
|
@ -1202,22 +1202,23 @@ class PeerCoordinator implements PeerListener
|
||||
boolean skipped = false;
|
||||
for(Piece piece : wantedPieces) {
|
||||
if (piece.getId() == savedPiece) {
|
||||
if (peer.isCompleted() && piece.getPeerCount() > 1) {
|
||||
if (peer.isCompleted() && piece.getPeerCount() > 1 &&
|
||||
wantedPieces.size() > 2*END_GAME_THRESHOLD) {
|
||||
// Try to preserve rarest-first
|
||||
// by not requesting a partial piece that non-seeders also have
|
||||
// by not requesting a partial piece that at least two non-seeders also have
|
||||
// from a seeder
|
||||
boolean nonSeeds = false;
|
||||
int nonSeeds = 0;
|
||||
for (Peer pr : peers) {
|
||||
PeerState state = pr.state;
|
||||
if (state == null) continue;
|
||||
BitField bf = state.bitfield;
|
||||
if (bf == null) continue;
|
||||
if (bf.get(savedPiece) && !pr.isCompleted()) {
|
||||
nonSeeds = true;
|
||||
break;
|
||||
if (++nonSeeds > 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nonSeeds) {
|
||||
if (nonSeeds > 1) {
|
||||
skipped = true;
|
||||
break;
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ import org.klomp.snark.bencode.InvalidBEncodingException;
|
||||
* and the PeerID is not required.
|
||||
* Equality is now determined solely by the dest hash.
|
||||
*/
|
||||
class PeerID implements Comparable
|
||||
public class PeerID implements Comparable<PeerID>
|
||||
{
|
||||
private byte[] id;
|
||||
private Destination address;
|
||||
@ -52,6 +52,7 @@ class PeerID implements Comparable
|
||||
private boolean triedDestLookup;
|
||||
private final int hash;
|
||||
private final I2PSnarkUtil util;
|
||||
private String _toStringCache;
|
||||
|
||||
public PeerID(byte[] id, Destination address)
|
||||
{
|
||||
@ -76,15 +77,15 @@ class PeerID implements Comparable
|
||||
* Creates a PeerID from a Map containing BEncoded peer id, ip and
|
||||
* port.
|
||||
*/
|
||||
public PeerID(Map m)
|
||||
public PeerID(Map<String, BEValue> m)
|
||||
throws InvalidBEncodingException, UnknownHostException
|
||||
{
|
||||
BEValue bevalue = (BEValue)m.get("peer id");
|
||||
BEValue bevalue = m.get("peer id");
|
||||
if (bevalue == null)
|
||||
throw new InvalidBEncodingException("peer id missing");
|
||||
id = bevalue.getBytes();
|
||||
|
||||
bevalue = (BEValue)m.get("ip");
|
||||
bevalue = m.get("ip");
|
||||
if (bevalue == null)
|
||||
throw new InvalidBEncodingException("ip missing");
|
||||
address = I2PSnarkUtil.getDestinationFromBase64(bevalue.getString());
|
||||
@ -195,10 +196,8 @@ class PeerID implements Comparable
|
||||
* Compares port, address and id.
|
||||
* @deprecated unused? and will NPE now that address can be null?
|
||||
*/
|
||||
public int compareTo(Object o)
|
||||
public int compareTo(PeerID pid)
|
||||
{
|
||||
PeerID pid = (PeerID)o;
|
||||
|
||||
int result = port - pid.port;
|
||||
if (result != 0)
|
||||
return result;
|
||||
@ -218,13 +217,15 @@ class PeerID implements Comparable
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the String "id@address" where id is the base64 encoded id
|
||||
* and address is the base64 dest (was the base64 hash of the dest) which
|
||||
* Returns the String "id@address" where id is the first 4 chars of the base64 encoded id
|
||||
* and address is the first 6 chars of the base64 dest (was the base64 hash of the dest) which
|
||||
* should match what the bytemonsoon tracker reports on its web pages.
|
||||
*/
|
||||
@Override
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
if (_toStringCache != null)
|
||||
return _toStringCache;
|
||||
if (id == null || address == null)
|
||||
return "unkn@" + Base64.encode(destHash).substring(0, 6);
|
||||
int nonZero = 0;
|
||||
@ -234,7 +235,8 @@ class PeerID implements Comparable
|
||||
break;
|
||||
}
|
||||
}
|
||||
return Base64.encode(id, nonZero, id.length-nonZero).substring(0,4) + "@" + address.toBase64().substring(0,6);
|
||||
_toStringCache = Base64.encode(id, nonZero, id.length-nonZero).substring(0,4) + "@" + address.toBase64().substring(0,6);
|
||||
return _toStringCache;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -37,8 +37,8 @@ class PeerMonitorTask implements Runnable
|
||||
|
||||
private final PeerCoordinator coordinator;
|
||||
|
||||
private long lastDownloaded = 0;
|
||||
private long lastUploaded = 0;
|
||||
//private long lastDownloaded = 0;
|
||||
//private long lastUploaded = 0;
|
||||
|
||||
PeerMonitorTask(PeerCoordinator coordinator)
|
||||
{
|
||||
|
@ -7,7 +7,7 @@ import java.util.Set;
|
||||
* This class is used solely by PeerCoordinator.
|
||||
* Caller must synchronize on many of these methods.
|
||||
*/
|
||||
class Piece implements Comparable {
|
||||
class Piece implements Comparable<Piece> {
|
||||
|
||||
private final int id;
|
||||
private final Set<PeerID> peers;
|
||||
@ -26,11 +26,11 @@ class Piece implements Comparable {
|
||||
* Highest priority first,
|
||||
* then rarest first
|
||||
*/
|
||||
public int compareTo(Object o) throws ClassCastException {
|
||||
int pdiff = ((Piece)o).priority - this.priority; // reverse
|
||||
public int compareTo(Piece op) {
|
||||
int pdiff = op.priority - this.priority; // reverse
|
||||
if (pdiff != 0)
|
||||
return pdiff;
|
||||
return this.peers.size() - ((Piece)o).peers.size();
|
||||
return this.peers.size() - op.peers.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -69,8 +69,6 @@ public class Snark
|
||||
"Commands: 'info', 'list', 'quit'.";
|
||||
****/
|
||||
|
||||
// String indicating main activity
|
||||
String activity = "Not started";
|
||||
|
||||
/****
|
||||
private static class OOMListener implements I2PThread.OOMEventListener {
|
||||
@ -227,7 +225,7 @@ public class Snark
|
||||
private final CompleteListener completeListener;
|
||||
private volatile boolean stopped;
|
||||
private volatile boolean starting;
|
||||
private byte[] id;
|
||||
private final byte[] id;
|
||||
private final byte[] infoHash;
|
||||
private String additionalTrackerURL;
|
||||
protected final I2PSnarkUtil _util;
|
||||
@ -236,6 +234,8 @@ public class Snark
|
||||
private volatile String trackerProblems;
|
||||
private volatile int trackerSeenPeers;
|
||||
private volatile boolean _autoStoppable;
|
||||
// String indicating main activity
|
||||
private volatile String activity = "Not started";
|
||||
|
||||
|
||||
/** from main() via parseArguments() single torrent */
|
||||
@ -317,7 +317,6 @@ public class Snark
|
||||
*/
|
||||
|
||||
// Figure out what the torrent argument represents.
|
||||
meta = null;
|
||||
File f = null;
|
||||
InputStream in = null;
|
||||
byte[] x_infoHash = null;
|
||||
@ -1152,8 +1151,8 @@ public class Snark
|
||||
// System.out.println(); // We have all the disk space we need.
|
||||
}
|
||||
|
||||
private boolean allChecked = false;
|
||||
private boolean checking = false;
|
||||
private boolean allChecked;
|
||||
private boolean checking;
|
||||
//private boolean prechecking = true;
|
||||
|
||||
public void storageChecked(Storage storage, int num, boolean checked)
|
||||
@ -1230,6 +1229,7 @@ public class Snark
|
||||
*/
|
||||
final static int MIN_TOTAL_UPLOADERS = 4;
|
||||
final static int MAX_TOTAL_UPLOADERS = 10;
|
||||
|
||||
public boolean overUploadLimit(int uploaders) {
|
||||
if (_peerCoordinatorSet == null || uploaders <= 0)
|
||||
return false;
|
||||
|
@ -7,6 +7,7 @@ import java.io.FileOutputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@ -24,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.data.Base64;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.update.*;
|
||||
@ -112,7 +114,7 @@ public class SnarkManager implements CompleteListener {
|
||||
* "name", "announceURL=websiteURL" pairs
|
||||
* '=' in announceURL must be escaped as ,
|
||||
*/
|
||||
public static final String DEFAULT_TRACKERS[] = {
|
||||
private static final String DEFAULT_TRACKERS[] = {
|
||||
// "Postman", "http://YRgrgTLGnbTq2aZOZDJQ~o6Uk5k6TK-OZtx0St9pb0G-5EGYURZioxqYG8AQt~LgyyI~NCj6aYWpPO-150RcEvsfgXLR~CxkkZcVpgt6pns8SRc3Bi-QSAkXpJtloapRGcQfzTtwllokbdC-aMGpeDOjYLd8b5V9Im8wdCHYy7LRFxhEtGb~RL55DA8aYOgEXcTpr6RPPywbV~Qf3q5UK55el6Kex-6VCxreUnPEe4hmTAbqZNR7Fm0hpCiHKGoToRcygafpFqDw5frLXToYiqs9d4liyVB-BcOb0ihORbo0nS3CLmAwZGvdAP8BZ7cIYE3Z9IU9D1G8JCMxWarfKX1pix~6pIA-sp1gKlL1HhYhPMxwyxvuSqx34o3BqU7vdTYwWiLpGM~zU1~j9rHL7x60pVuYaXcFQDR4-QVy26b6Pt6BlAZoFmHhPcAuWfu-SFhjyZYsqzmEmHeYdAwa~HojSbofg0TMUgESRXMw6YThK1KXWeeJVeztGTz25sL8AAAA.i2p/announce.php=http://tracker.postman.i2p/"
|
||||
// , "eBook", "http://E71FRom6PZNEqTN2Lr8P-sr23b7HJVC32KoGnVQjaX6zJiXwhJy2HsXob36Qmj81TYFZdewFZa9mSJ533UZgGyQkXo2ahctg82JKYZfDe5uDxAn1E9YPjxZCWJaFJh0S~UwSs~9AZ7UcauSJIoNtpxrtbmRNVFLqnkEDdLZi26TeucfOmiFmIWnVblLniWv3tG1boE9Abd-6j3FmYVrRucYuepAILYt6katmVNOk6sXmno1Eynrp~~MBuFq0Ko6~jsc2E2CRVYXDhGHEMdt-j6JUz5D7S2RIVzDRqQyAZLKJ7OdQDmI31przzmne1vOqqqLC~1xUumZVIvF~yOeJUGNjJ1Vx0J8i2BQIusn1pQJ6UCB~ZtZZLQtEb8EPVCfpeRi2ri1M5CyOuxN0V5ekmPHrYIBNevuTCRC26NP7ZS5VDgx1~NaC3A-CzJAE6f1QXi0wMI9aywNG5KGzOPifcsih8eyGyytvgLtrZtV7ykzYpPCS-rDfITncpn5hliPUAAAA.i2p/pub/bt/announce.php=http://de-ebook-archiv.i2p/pub/bt/"
|
||||
// , "Gaytorrents", "http://uxPWHbK1OIj9HxquaXuhMiIvi21iK0~ZiG9d8G0840ZXIg0r6CbiV71xlsqmdnU6wm0T2LySriM0doW2gUigo-5BNkUquHwOjLROiETnB3ZR0Ml4IGa6QBPn1aAq2d9~g1r1nVjLE~pcFnXB~cNNS7kIhX1d6nLgYVZf0C2cZopEow2iWVUggGGnAA9mHjE86zLEnTvAyhbAMTqDQJhEuLa0ZYSORqzJDMkQt90MV4YMjX1ICY6RfUSFmxEqu0yWTrkHsTtRw48l~dz9wpIgc0a0T9C~eeWvmBFTqlJPtQZwntpNeH~jF7nlYzB58olgV2HHFYpVYD87DYNzTnmNWxCJ5AfDorm6AIUCV2qaE7tZtI1h6fbmGpGlPyW~Kw5GXrRfJwNvr6ajwAVi~bPVnrBwDZezHkfW4slOO8FACPR28EQvaTu9nwhAbqESxV2hCTq6vQSGjuxHeOuzBOEvRWkLKOHWTC09t2DbJ94FSqETmZopTB1ukEmaxRWbKSIaAAAA.i2p/announce.php=http://gaytorrents.i2p/"
|
||||
@ -129,6 +131,17 @@ public class SnarkManager implements CompleteListener {
|
||||
// ,"Exotrack", "http://blbgywsjubw3d2zih2giokakhe3o2cko7jtte4risb3hohbcoyva.b32.i2p/announce.php=http://exotrack.i2p/"
|
||||
};
|
||||
|
||||
public static final Set<String> DEFAULT_TRACKER_ANNOUNCES;
|
||||
|
||||
static {
|
||||
Set<String> ann = new HashSet();
|
||||
for (int i = 1; i < DEFAULT_TRACKERS.length; i += 2) {
|
||||
String urls[] = DEFAULT_TRACKERS[i].split("=", 2);
|
||||
ann.add(urls[0]);
|
||||
}
|
||||
DEFAULT_TRACKER_ANNOUNCES = Collections.unmodifiableSet(ann);
|
||||
}
|
||||
|
||||
/** comma delimited list of name=announceURL=baseURL for the trackers to be displayed */
|
||||
public static final String PROP_TRACKERS = "i2psnark.trackers";
|
||||
|
||||
@ -187,7 +200,9 @@ public class SnarkManager implements CompleteListener {
|
||||
public void timeReached() {
|
||||
if (!_running)
|
||||
return;
|
||||
_umgr = _context.updateManager();
|
||||
ClientAppManager cmgr = _context.clientAppManager();
|
||||
if (cmgr != null)
|
||||
_umgr = (UpdateManager) cmgr.getRegisteredApp(UpdateManager.APP_NAME);
|
||||
if (_umgr != null) {
|
||||
_uhandler = new UpdateHandler(_context, _umgr, SnarkManager.this);
|
||||
_umgr.register(_uhandler, UpdateType.ROUTER_SIGNED, UpdateMethod.TORRENT, 10);
|
||||
@ -424,7 +439,7 @@ public class SnarkManager implements CompleteListener {
|
||||
String i2cpHost = _config.getProperty(PROP_I2CP_HOST);
|
||||
int i2cpPort = getInt(PROP_I2CP_PORT, 7654);
|
||||
String opts = _config.getProperty(PROP_I2CP_OPTS);
|
||||
Map i2cpOpts = new HashMap();
|
||||
Map<String, String> i2cpOpts = new HashMap<String, String>();
|
||||
if (opts != null) {
|
||||
StringTokenizer tok = new StringTokenizer(opts, " ");
|
||||
while (tok.hasMoreTokens()) {
|
||||
@ -1652,7 +1667,7 @@ public class SnarkManager implements CompleteListener {
|
||||
*/
|
||||
private void monitorTorrents(File dir) {
|
||||
String fileNames[] = dir.list(TorrentFilenameFilter.instance());
|
||||
List<String> foundNames = new ArrayList(0);
|
||||
List<String> foundNames = new ArrayList<String>(0);
|
||||
if (fileNames != null) {
|
||||
for (int i = 0; i < fileNames.length; i++) {
|
||||
try {
|
||||
@ -1738,7 +1753,7 @@ public class SnarkManager implements CompleteListener {
|
||||
* @since 0.9.1
|
||||
*/
|
||||
public List<Tracker> getSortedTrackers() {
|
||||
List<Tracker> rv = new ArrayList(_trackerMap.values());
|
||||
List<Tracker> rv = new ArrayList<Tracker>(_trackerMap.values());
|
||||
Collections.sort(rv, new IgnoreCaseComparator());
|
||||
return rv;
|
||||
}
|
||||
@ -1955,7 +1970,7 @@ public class SnarkManager implements CompleteListener {
|
||||
* ignore case, current locale
|
||||
* @since 0.9
|
||||
*/
|
||||
private static class IgnoreCaseComparator implements Comparator<Tracker> {
|
||||
private static class IgnoreCaseComparator implements Comparator<Tracker>, Serializable {
|
||||
public int compare(Tracker l, Tracker r) {
|
||||
return l.name.toLowerCase().compareTo(r.name.toLowerCase());
|
||||
}
|
||||
|
@ -518,7 +518,9 @@ public class Storage
|
||||
// Create base as file.
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Creating/Checking file: " + base);
|
||||
if (!base.createNewFile() && !base.exists())
|
||||
// createNewFile() can throw a "Permission denied" IOE even if the file exists???
|
||||
// so do it second
|
||||
if (!base.exists() && !base.createNewFile())
|
||||
throw new IOException("Could not create file " + base);
|
||||
|
||||
_torrentFiles.add(new TorrentFile(base, base, metainfo.getTotalLength()));
|
||||
@ -714,7 +716,9 @@ public class Storage
|
||||
f = new File(base, name);
|
||||
else
|
||||
f = new SecureFile(base, name);
|
||||
if (!f.createNewFile() && !f.exists())
|
||||
// createNewFile() can throw a "Permission denied" IOE even if the file exists???
|
||||
// so do it second
|
||||
if (!f.exists() && !f.createNewFile())
|
||||
throw new IOException("Could not create file " + f);
|
||||
}
|
||||
}
|
||||
|
@ -71,6 +71,7 @@ public class TrackerClient implements Runnable {
|
||||
private static final String COMPLETED_EVENT = "completed";
|
||||
private static final String STOPPED_EVENT = "stopped";
|
||||
private static final String NOT_REGISTERED = "torrent not registered"; //bytemonsoon
|
||||
private static final String NOT_REGISTERED_2 = "torrent not found"; // diftracker
|
||||
/** this is our equivalent to router.utorrent.com for bootstrap */
|
||||
private static final String DEFAULT_BACKUP_TRACKER = "http://tracker.welterde.i2p/a";
|
||||
|
||||
@ -82,8 +83,11 @@ public class TrackerClient implements Runnable {
|
||||
private final static int MAX_CONSEC_FAILS = 5; // slow down after this
|
||||
private final static int LONG_SLEEP = 30*60*1000; // sleep a while after lots of fails
|
||||
private final static long MIN_TRACKER_ANNOUNCE_INTERVAL = 15*60*1000;
|
||||
private final static long MIN_DHT_ANNOUNCE_INTERVAL = 10*60*1000;
|
||||
private final static long MIN_DHT_ANNOUNCE_INTERVAL = 39*60*1000;
|
||||
/** No guidance in BEP 5; standard practice is K (=8) */
|
||||
private static final int DHT_ANNOUNCE_PEERS = 4;
|
||||
public static final int PORT = 6881;
|
||||
private static final int MAX_TRACKERS = 12;
|
||||
|
||||
private final I2PSnarkUtil _util;
|
||||
private final MetaInfo meta;
|
||||
@ -106,6 +110,8 @@ public class TrackerClient implements Runnable {
|
||||
// these 2 used in loop()
|
||||
private volatile boolean runStarted;
|
||||
private volatile int consecutiveFails;
|
||||
// if we don't want anything else.
|
||||
// Not necessarily seeding, as we may have skipped some files.
|
||||
private boolean completed;
|
||||
private volatile boolean _fastUnannounce;
|
||||
private long lastDHTAnnounce;
|
||||
@ -288,6 +294,7 @@ public class TrackerClient implements Runnable {
|
||||
}
|
||||
|
||||
// announce list
|
||||
// We completely ignore the BEP 12 processing rules
|
||||
if (meta != null && !meta.isPrivate()) {
|
||||
List<List<String>> list = meta.getAnnounceList();
|
||||
if (list != null) {
|
||||
@ -300,6 +307,12 @@ public class TrackerClient implements Runnable {
|
||||
_log.debug("Additional announce (list): [" + url + "] for infoHash: " + infoHash);
|
||||
}
|
||||
}
|
||||
if (trackers.size() > 2) {
|
||||
// shuffle everything but the primary
|
||||
TCTracker pri = trackers.remove(0);
|
||||
Collections.shuffle(trackers, _util.getContext().random());
|
||||
trackers.add(0, pri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -345,7 +358,13 @@ public class TrackerClient implements Runnable {
|
||||
private boolean isNewValidTracker(Set<Hash> existing, String ann) {
|
||||
Hash h = getHostHash(ann);
|
||||
if (h == null) {
|
||||
_log.error("Bad announce URL: [" + ann + ']');
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Bad announce URL: [" + ann + ']');
|
||||
return false;
|
||||
}
|
||||
if (existing.size() >= MAX_TRACKERS) {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Not using announce URL, we have enough: [" + ann + ']');
|
||||
return false;
|
||||
}
|
||||
boolean rv = existing.add(h);
|
||||
@ -375,7 +394,7 @@ public class TrackerClient implements Runnable {
|
||||
// Local DHT tracker announce
|
||||
DHT dht = _util.getDHT();
|
||||
if (dht != null && (meta == null || !meta.isPrivate()))
|
||||
dht.announce(snark.getInfoHash());
|
||||
dht.announce(snark.getInfoHash(), coordinator.completed());
|
||||
|
||||
int oldSeenPeers = snark.getTrackerSeenPeers();
|
||||
int maxSeenPeers = 0;
|
||||
@ -509,7 +528,7 @@ public class TrackerClient implements Runnable {
|
||||
coordinator.getPeerCount() <= 0 &&
|
||||
_util.getContext().clock().now() > _startedOn + 2*60*60*1000 &&
|
||||
snark.getTotalLength() > 0 &&
|
||||
uploaded >= 2 * snark.getTotalLength()) {
|
||||
uploaded >= snark.getTotalLength() * 3 / 2) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Auto stopping " + snark.getBaseName());
|
||||
snark.setAutoStoppable(false);
|
||||
@ -523,7 +542,8 @@ public class TrackerClient implements Runnable {
|
||||
DHT dht = _util.getDHT();
|
||||
if (dht != null) {
|
||||
for (Peer peer : peers) {
|
||||
dht.announce(snark.getInfoHash(), peer.getPeerID().getDestHash());
|
||||
dht.announce(snark.getInfoHash(), peer.getPeerID().getDestHash(),
|
||||
false); // TODO actual seed/leech status
|
||||
}
|
||||
}
|
||||
|
||||
@ -556,13 +576,15 @@ public class TrackerClient implements Runnable {
|
||||
// don't show secondary tracker problems to the user
|
||||
if (tr.isPrimary)
|
||||
snark.setTrackerProblems(tr.trackerProblems);
|
||||
if (tr.trackerProblems.toLowerCase(Locale.US).startsWith(NOT_REGISTERED)) {
|
||||
String tplc = tr.trackerProblems.toLowerCase(Locale.US);
|
||||
if (tplc.startsWith(NOT_REGISTERED) || tplc.startsWith(NOT_REGISTERED_2)) {
|
||||
// Give a guy some time to register it if using opentrackers too
|
||||
//if (trckrs.size() == 1) {
|
||||
// stop = true;
|
||||
// snark.stopTorrent();
|
||||
//} else { // hopefully each on the opentrackers list is really open
|
||||
if (tr.registerFails++ > MAX_REGISTER_FAILS)
|
||||
if (tr.registerFails++ > MAX_REGISTER_FAILS ||
|
||||
(!tr.isPrimary && tr.registerFails > MAX_REGISTER_FAILS / 2))
|
||||
tr.stop = true;
|
||||
//
|
||||
}
|
||||
@ -636,7 +658,9 @@ public class TrackerClient implements Runnable {
|
||||
numwant = 1;
|
||||
else
|
||||
numwant = _util.getMaxConnections();
|
||||
Collection<Hash> hashes = dht.getPeersAndAnnounce(snark.getInfoHash(), numwant, 5*60*1000, 1, 3*60*1000);
|
||||
Collection<Hash> hashes = dht.getPeersAndAnnounce(snark.getInfoHash(), numwant,
|
||||
5*60*1000, DHT_ANNOUNCE_PEERS, 3*60*1000,
|
||||
coordinator.completed(), numwant <= 1);
|
||||
if (!hashes.isEmpty()) {
|
||||
runStarted = true;
|
||||
lastDHTAnnounce = _util.getContext().clock().now();
|
||||
@ -836,8 +860,7 @@ public class TrackerClient implements Runnable {
|
||||
return false;
|
||||
}
|
||||
return url.getProtocol().equals("http") &&
|
||||
(url.getHost().endsWith(".i2p") || url.getHost().equals("i2p")) &&
|
||||
url.getPort() < 0;
|
||||
(url.getHost().endsWith(".i2p") || url.getHost().equals("i2p"));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -852,7 +875,7 @@ public class TrackerClient implements Runnable {
|
||||
} catch (MalformedURLException mue) {
|
||||
return null;
|
||||
}
|
||||
if (url.getPort() >= 0 || !url.getProtocol().equals("http"))
|
||||
if (!url.getProtocol().equals("http"))
|
||||
return null;
|
||||
String host = url.getHost();
|
||||
if (host.endsWith(".i2p"))
|
||||
|
@ -62,7 +62,7 @@ class TrackerInfo
|
||||
private TrackerInfo(Map<String, BEValue> m, byte[] my_id, byte[] infohash, MetaInfo metainfo, I2PSnarkUtil util)
|
||||
throws IOException
|
||||
{
|
||||
BEValue reason = (BEValue)m.get("failure reason");
|
||||
BEValue reason = m.get("failure reason");
|
||||
if (reason != null)
|
||||
{
|
||||
failure_reason = reason.getString();
|
||||
@ -72,13 +72,13 @@ class TrackerInfo
|
||||
else
|
||||
{
|
||||
failure_reason = null;
|
||||
BEValue beInterval = (BEValue)m.get("interval");
|
||||
BEValue beInterval = m.get("interval");
|
||||
if (beInterval == null)
|
||||
throw new InvalidBEncodingException("No interval given");
|
||||
else
|
||||
interval = beInterval.getInt();
|
||||
|
||||
BEValue bePeers = (BEValue)m.get("peers");
|
||||
BEValue bePeers = m.get("peers");
|
||||
if (bePeers == null) {
|
||||
peers = Collections.emptySet();
|
||||
} else {
|
||||
@ -93,14 +93,14 @@ class TrackerInfo
|
||||
peers = p;
|
||||
}
|
||||
|
||||
BEValue bev = (BEValue)m.get("complete");
|
||||
BEValue bev = m.get("complete");
|
||||
if (bev != null) try {
|
||||
complete = bev.getInt();
|
||||
if (complete < 0)
|
||||
complete = 0;
|
||||
} catch (InvalidBEncodingException ibe) {}
|
||||
|
||||
bev = (BEValue)m.get("incomplete");
|
||||
bev = m.get("incomplete");
|
||||
if (bev != null) try {
|
||||
incomplete = bev.getInt();
|
||||
if (incomplete < 0)
|
||||
|
@ -21,6 +21,7 @@
|
||||
package org.klomp.snark.bencode;
|
||||
|
||||
import java.io.EOFException;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigInteger;
|
||||
@ -232,10 +233,8 @@ public class BDecoder
|
||||
|
||||
if (c == '-')
|
||||
{
|
||||
c = read();
|
||||
if (c == '0')
|
||||
throw new InvalidBEncodingException("Negative zero not allowed");
|
||||
chars.append((char)c);
|
||||
c = read();
|
||||
}
|
||||
|
||||
if (c < '1' || c > '9')
|
||||
@ -281,7 +280,7 @@ public class BDecoder
|
||||
+ (char)c + "'");
|
||||
indicator = 0;
|
||||
|
||||
List result = new ArrayList();
|
||||
List<BEValue> result = new ArrayList<BEValue>();
|
||||
c = getNextIndicator();
|
||||
while (c != 'e')
|
||||
{
|
||||
@ -308,7 +307,7 @@ public class BDecoder
|
||||
+ (char)c + "'");
|
||||
indicator = 0;
|
||||
|
||||
Map result = new HashMap();
|
||||
Map<String, BEValue> result = new HashMap<String, BEValue>();
|
||||
c = getNextIndicator();
|
||||
while (c != 'e')
|
||||
{
|
||||
@ -376,4 +375,21 @@ public class BDecoder
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* prints out the decoded data
|
||||
* @since 0.9.14
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args.length != 1) {
|
||||
System.err.println("Usage: BDecoder file.torrent");
|
||||
System.exit(1);
|
||||
}
|
||||
try {
|
||||
BEValue bev = bdecode(new FileInputStream(args[0]));
|
||||
System.out.println(bev.toString());
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,12 +49,12 @@ public class BEValue
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public BEValue(List value)
|
||||
public BEValue(List<BEValue> value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public BEValue(Map value)
|
||||
public BEValue(Map<String, BEValue> value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
@ -142,11 +142,12 @@ public class BEValue
|
||||
* succeeds when the BEValue is actually a List, otherwise it will
|
||||
* throw a InvalidBEncodingException.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<BEValue> getList() throws InvalidBEncodingException
|
||||
{
|
||||
try
|
||||
{
|
||||
return (List)value;
|
||||
return (List<BEValue>)value;
|
||||
}
|
||||
catch (ClassCastException cce)
|
||||
{
|
||||
@ -159,11 +160,12 @@ public class BEValue
|
||||
* values. This operation only succeeds when the BEValue is actually
|
||||
* a Map, otherwise it will throw a InvalidBEncodingException.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public Map<String, BEValue> getMap() throws InvalidBEncodingException
|
||||
{
|
||||
try
|
||||
{
|
||||
return (Map)value;
|
||||
return (Map<String, BEValue>)value;
|
||||
}
|
||||
catch (ClassCastException cce)
|
||||
{
|
||||
|
@ -59,9 +59,9 @@ public class BEncoder
|
||||
else if (o instanceof Number)
|
||||
bencode((Number)o, out);
|
||||
else if (o instanceof List)
|
||||
bencode((List)o, out);
|
||||
bencode((List<?>)o, out);
|
||||
else if (o instanceof Map)
|
||||
bencode((Map<String, Object>)o, out);
|
||||
bencode((Map<?, ?>)o, out);
|
||||
else if (o instanceof BEValue)
|
||||
bencode(((BEValue)o).getValue(), out);
|
||||
else
|
||||
@ -110,7 +110,7 @@ public class BEncoder
|
||||
out.write('e');
|
||||
}
|
||||
|
||||
public static byte[] bencode(List l)
|
||||
public static byte[] bencode(List<?> l)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -124,10 +124,10 @@ public class BEncoder
|
||||
}
|
||||
}
|
||||
|
||||
public static void bencode(List l, OutputStream out) throws IOException
|
||||
public static void bencode(List<?> l, OutputStream out) throws IOException
|
||||
{
|
||||
out.write('l');
|
||||
Iterator it = l.iterator();
|
||||
Iterator<?> it = l.iterator();
|
||||
while (it.hasNext())
|
||||
bencode(it.next(), out);
|
||||
out.write('e');
|
||||
@ -155,7 +155,7 @@ public class BEncoder
|
||||
out.write(bs);
|
||||
}
|
||||
|
||||
public static byte[] bencode(Map<String, Object> m)
|
||||
public static byte[] bencode(Map<?, ?> m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -169,23 +169,29 @@ public class BEncoder
|
||||
}
|
||||
}
|
||||
|
||||
public static void bencode(Map<String, Object> m, OutputStream out) throws IOException
|
||||
public static void bencode(Map<?, ?> m, OutputStream out)
|
||||
throws IOException, IllegalArgumentException
|
||||
{
|
||||
out.write('d');
|
||||
|
||||
// Keys must be sorted. XXX - But is this the correct order?
|
||||
Set<String> s = m.keySet();
|
||||
List<String> l = new ArrayList(s);
|
||||
Set<?> s = m.keySet();
|
||||
List<String> l = new ArrayList<String>(s.size());
|
||||
for (Object k : s) {
|
||||
// Keys must be Strings.
|
||||
if (String.class.isAssignableFrom(k.getClass()))
|
||||
l.add((String) k);
|
||||
else
|
||||
throw new IllegalArgumentException("Cannot bencode map: contains non-String key of type " + k.getClass());
|
||||
}
|
||||
Collections.sort(l);
|
||||
|
||||
Iterator<String> it = l.iterator();
|
||||
while(it.hasNext())
|
||||
{
|
||||
// Keys must be Strings.
|
||||
String key = it.next();
|
||||
Object value = m.get(key);
|
||||
bencode(key, out);
|
||||
bencode(value, out);
|
||||
bencode(m.get(key), out);
|
||||
}
|
||||
|
||||
out.write('e');
|
||||
|
@ -36,7 +36,7 @@ public interface DHT {
|
||||
public void ping(Destination dest, int port);
|
||||
|
||||
/**
|
||||
* Get peers for a torrent, and announce to the closest node we find.
|
||||
* Get peers for a torrent, and announce to the closest annMax nodes we find.
|
||||
* Blocking!
|
||||
* Caller should run in a thread.
|
||||
*
|
||||
@ -45,9 +45,13 @@ public interface DHT {
|
||||
* @param maxWait the maximum time to wait (ms) must be > 0
|
||||
* @param annMax the number of peers to announce to
|
||||
* @param annMaxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
|
||||
* @param isSeed true if seed, false if leech
|
||||
* @param noSeeds true if we do not want seeds in the result
|
||||
* @return possibly empty (never null)
|
||||
*/
|
||||
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait);
|
||||
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait,
|
||||
int annMax, long annMaxWait,
|
||||
boolean isSeed, boolean noSeeds);
|
||||
|
||||
/**
|
||||
* Announce to ourselves.
|
||||
@ -55,16 +59,16 @@ public interface DHT {
|
||||
*
|
||||
* @param ih the Info Hash (torrent)
|
||||
*/
|
||||
public void announce(byte[] ih);
|
||||
public void announce(byte[] ih, boolean isSeed);
|
||||
|
||||
/**
|
||||
* Announce somebody else we know about.
|
||||
* Announce somebody else we know about to ourselves.
|
||||
* Non-blocking.
|
||||
*
|
||||
* @param ih the Info Hash (torrent)
|
||||
* @param peerHash the peer's Hash
|
||||
*/
|
||||
public void announce(byte[] ih, byte[] peerHash);
|
||||
public void announce(byte[] ih, byte[] peerHash, boolean isSeed);
|
||||
|
||||
/**
|
||||
* Remove reference to ourselves in the local tracker.
|
||||
@ -84,9 +88,10 @@ public interface DHT {
|
||||
*
|
||||
* @param ih the Info Hash (torrent)
|
||||
* @param maxWait the maximum total time to wait (ms) or 0 to do all in parallel and return immediately.
|
||||
* @param isSeed true if seed, false if leech
|
||||
* @return the number of successful announces, not counting ourselves.
|
||||
*/
|
||||
public int announce(byte[] ih, int max, long maxWait);
|
||||
public int announce(byte[] ih, int max, long maxWait, boolean isSeed);
|
||||
|
||||
/**
|
||||
* Stop everything.
|
||||
|
@ -34,7 +34,8 @@ class DHTTracker {
|
||||
|
||||
/** stagger with other cleaners */
|
||||
private static final long CLEAN_TIME = 199*1000;
|
||||
private static final long MAX_EXPIRE_TIME = 45*60*1000;
|
||||
/** no guidance in BEP 5; Vuze is 8h */
|
||||
private static final long MAX_EXPIRE_TIME = 3*60*60*1000L;
|
||||
private static final long MIN_EXPIRE_TIME = 15*60*1000;
|
||||
private static final long DELTA_EXPIRE_TIME = 3*60*1000;
|
||||
private static final int MAX_PEERS = 2000;
|
||||
@ -59,7 +60,7 @@ class DHTTracker {
|
||||
_isRunning = false;
|
||||
}
|
||||
|
||||
void announce(InfoHash ih, Hash hash) {
|
||||
void announce(InfoHash ih, Hash hash, boolean isSeed) {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Announce " + hash + " for " + ih);
|
||||
Peers peers = _torrents.get(ih);
|
||||
@ -78,6 +79,9 @@ class DHTTracker {
|
||||
if (peer2 != null)
|
||||
peer = peer2;
|
||||
peer.setLastSeen(_context.clock().now());
|
||||
// don't let false trump true, as not all sources know the seed status
|
||||
if (isSeed)
|
||||
peer.setSeed(true);
|
||||
} else {
|
||||
// We could update setLastSeen if he is already
|
||||
// in there, but that would tend to keep
|
||||
@ -93,26 +97,42 @@ class DHTTracker {
|
||||
Peers peers = _torrents.get(ih);
|
||||
if (peers == null)
|
||||
return;
|
||||
Peer peer = new Peer(hash.getData());
|
||||
peers.remove(peer);
|
||||
peers.remove(hash);
|
||||
}
|
||||
|
||||
/**
|
||||
* Caller's responsibility to remove himself from the list
|
||||
*
|
||||
* @param noSeeds true if we do not want seeds in the result
|
||||
* @return list or empty list (never null)
|
||||
*/
|
||||
List<Hash> getPeers(InfoHash ih, int max) {
|
||||
List<Hash> getPeers(InfoHash ih, int max, boolean noSeeds) {
|
||||
Peers peers = _torrents.get(ih);
|
||||
if (peers == null)
|
||||
if (peers == null || max <= 0)
|
||||
return Collections.emptyList();
|
||||
|
||||
int size = peers.size();
|
||||
List<Hash> rv = new ArrayList<Hash>(peers.values());
|
||||
if (max < size) {
|
||||
Collections.shuffle(rv, _context.random());
|
||||
List<Peer> rv = new ArrayList<Peer>(peers.values());
|
||||
int size = rv.size();
|
||||
if (max < size)
|
||||
Collections.shuffle(rv, _context.random());
|
||||
if (noSeeds) {
|
||||
int i = 0;
|
||||
for (Iterator<Peer> iter = rv.iterator(); iter.hasNext(); ) {
|
||||
if (iter.next().isSeed())
|
||||
iter.remove();
|
||||
else if (++i >= max)
|
||||
break;
|
||||
}
|
||||
if (max < rv.size())
|
||||
rv = rv.subList(0, max);
|
||||
} else {
|
||||
if (max < size)
|
||||
rv = rv.subList(0, max);
|
||||
}
|
||||
return rv;
|
||||
// a Peer is a Hash
|
||||
List rv1 = rv;
|
||||
List<Hash> rv2 = rv1;
|
||||
return rv2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -10,6 +10,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
@ -305,7 +306,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get peers for a torrent, and announce to the closest node we find.
|
||||
* Get peers for a torrent, and announce to the closest annMax nodes we find.
|
||||
* This is an iterative lookup in the DHT.
|
||||
* Blocking!
|
||||
* Caller should run in a thread.
|
||||
@ -315,12 +316,16 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* @param maxWait the maximum time to wait (ms) must be > 0
|
||||
* @param annMax the number of peers to announce to
|
||||
* @param annMaxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
|
||||
* @param isSeed true if seed, false if leech
|
||||
* @param noSeeds true if we do not want seeds in the result
|
||||
* @return possibly empty (never null)
|
||||
*/
|
||||
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait) {
|
||||
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait,
|
||||
int annMax, long annMaxWait,
|
||||
boolean isSeed, boolean noSeeds) {
|
||||
// check local tracker first
|
||||
InfoHash iHash = new InfoHash(ih);
|
||||
Collection<Hash> rv = _tracker.getPeers(iHash, max);
|
||||
Collection<Hash> rv = _tracker.getPeers(iHash, max, noSeeds);
|
||||
rv.remove(_myNodeInfo.getHash());
|
||||
if (rv.size() >= max)
|
||||
return rv;
|
||||
@ -356,7 +361,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Try " + i + ": " + nInfo);
|
||||
|
||||
ReplyWaiter waiter = sendGetPeers(nInfo, iHash);
|
||||
ReplyWaiter waiter = sendGetPeers(nInfo, iHash, noSeeds);
|
||||
if (waiter == null)
|
||||
continue;
|
||||
synchronized(waiter) {
|
||||
@ -415,7 +420,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
}
|
||||
// now announce
|
||||
if (!heardFrom.isEmpty()) {
|
||||
announce(ih);
|
||||
announce(ih, isSeed);
|
||||
// announce to the closest we've heard from
|
||||
int annCnt = 0;
|
||||
long start = _context.clock().now();
|
||||
@ -424,7 +429,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Announcing to closest from get peers: " + annTo);
|
||||
long toWait = annMaxWait > 0 ? Math.min(annMaxWait, 60*1000) : 0;
|
||||
if (announce(ih, annTo, toWait))
|
||||
if (announce(ih, annTo, toWait, isSeed))
|
||||
annCnt++;
|
||||
if (annMaxWait > 0) {
|
||||
annMaxWait -= _context.clock().now() - start;
|
||||
@ -437,7 +442,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
// so this is essentially just a retry
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Announcing to closest in kbuckets after get peers failed");
|
||||
announce(ih, annMax, annMaxWait);
|
||||
announce(ih, annMax, annMaxWait, isSeed);
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO)) {
|
||||
_log.info("Finished get Peers, returning " + rv.size());
|
||||
@ -454,21 +459,21 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
*
|
||||
* @param ih the Info Hash (torrent)
|
||||
*/
|
||||
public void announce(byte[] ih) {
|
||||
public void announce(byte[] ih, boolean isSeed) {
|
||||
InfoHash iHash = new InfoHash(ih);
|
||||
_tracker.announce(iHash, _myNodeInfo.getHash());
|
||||
_tracker.announce(iHash, _myNodeInfo.getHash(), isSeed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Announce somebody else we know about.
|
||||
* Announce somebody else we know about to ourselves.
|
||||
* Non-blocking.
|
||||
*
|
||||
* @param ih the Info Hash (torrent)
|
||||
* @param peerHash the peer's Hash
|
||||
*/
|
||||
public void announce(byte[] ih, byte[] peerHash) {
|
||||
public void announce(byte[] ih, byte[] peerHash, boolean isSeed) {
|
||||
InfoHash iHash = new InfoHash(ih);
|
||||
_tracker.announce(iHash, new Hash(peerHash));
|
||||
_tracker.announce(iHash, new Hash(peerHash), isSeed);
|
||||
// Do NOT do this, corrupts the Hash cache and the Peer ID
|
||||
//_tracker.announce(iHash, Hash.create(peerHash));
|
||||
}
|
||||
@ -500,10 +505,11 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* @param ih the Info Hash (torrent)
|
||||
* @param max maximum number of peers to announce to
|
||||
* @param maxWait the maximum total time to wait (ms) or 0 to do all in parallel and return immediately.
|
||||
* @param isSeed true if seed, false if leech
|
||||
* @return the number of successful announces, not counting ourselves.
|
||||
*/
|
||||
public int announce(byte[] ih, int max, long maxWait) {
|
||||
announce(ih);
|
||||
public int announce(byte[] ih, int max, long maxWait, boolean isSeed) {
|
||||
announce(ih, isSeed);
|
||||
int rv = 0;
|
||||
long start = _context.clock().now();
|
||||
InfoHash iHash = new InfoHash(ih);
|
||||
@ -513,7 +519,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
for (NodeInfo nInfo : nodes) {
|
||||
if (!_isRunning)
|
||||
break;
|
||||
if (announce(ih, nInfo, Math.min(maxWait, 60*1000)))
|
||||
if (announce(ih, nInfo, Math.min(maxWait, 60*1000), isSeed))
|
||||
rv++;
|
||||
maxWait -= _context.clock().now() - start;
|
||||
if (maxWait < 1000)
|
||||
@ -531,9 +537,10 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* @param ih the Info Hash (torrent)
|
||||
* @param nInfo the peer to announce to
|
||||
* @param maxWait the maximum time to wait (ms) or 0 to return immediately.
|
||||
* @param isSeed true if seed, false if leech
|
||||
* @return success
|
||||
*/
|
||||
private boolean announce(byte[] ih, NodeInfo nInfo, long maxWait) {
|
||||
private boolean announce(byte[] ih, NodeInfo nInfo, long maxWait, boolean isSeed) {
|
||||
InfoHash iHash = new InfoHash(ih);
|
||||
// it isn't clear from BEP 5 if a token is bound to a single infohash?
|
||||
// for now, just bind to the NID
|
||||
@ -549,7 +556,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
return false;
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("No token for announce to " + nInfo + ", sending get_peers first");
|
||||
ReplyWaiter waiter = sendGetPeers(nInfo, iHash);
|
||||
ReplyWaiter waiter = sendGetPeers(nInfo, iHash, false);
|
||||
if (waiter == null)
|
||||
return false;
|
||||
long start = _context.clock().now();
|
||||
@ -580,7 +587,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
}
|
||||
|
||||
// send and wait on rcv msg lock unless maxWait <= 0
|
||||
ReplyWaiter waiter = sendAnnouncePeer(nInfo, iHash, token);
|
||||
ReplyWaiter waiter = sendAnnouncePeer(nInfo, iHash, token, isSeed);
|
||||
if (waiter == null)
|
||||
return false;
|
||||
if (maxWait <= 0)
|
||||
@ -722,15 +729,18 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* Blocking if we have to look up the dest for the nodeinfo
|
||||
*
|
||||
* @param nInfo who to send it to
|
||||
* @param noSeeds true if we do not want seeds in the result
|
||||
* @return null on error
|
||||
*/
|
||||
private ReplyWaiter sendGetPeers(NodeInfo nInfo, InfoHash ih) {
|
||||
private ReplyWaiter sendGetPeers(NodeInfo nInfo, InfoHash ih, boolean noSeeds) {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Sending get peers of " + ih + " to: " + nInfo);
|
||||
_log.info("Sending get peers of " + ih + " to: " + nInfo + " noseeds? " + noSeeds);
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("q", "get_peers");
|
||||
Map<String, Object> args = new HashMap<String, Object>();
|
||||
args.put("info_hash", ih.getData());
|
||||
if (noSeeds)
|
||||
args.put("noseed", Integer.valueOf(1));
|
||||
map.put("a", args);
|
||||
ReplyWaiter rv = sendQuery(nInfo, map, true);
|
||||
// save the InfoHash so we can get it later
|
||||
@ -743,11 +753,12 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* Non-blocking, will fail if we don't have the dest for the nodeinfo
|
||||
*
|
||||
* @param nInfo who to send it to
|
||||
* @param isSeed true if seed, false if leech
|
||||
* @return null on error
|
||||
*/
|
||||
private ReplyWaiter sendAnnouncePeer(NodeInfo nInfo, InfoHash ih, Token token) {
|
||||
private ReplyWaiter sendAnnouncePeer(NodeInfo nInfo, InfoHash ih, Token token, boolean isSeed) {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Sending announce of " + ih + " to: " + nInfo);
|
||||
_log.info("Sending announce of " + ih + " to: " + nInfo + " seed? " + isSeed);
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("q", "announce_peer");
|
||||
Map<String, Object> args = new HashMap<String, Object>();
|
||||
@ -755,6 +766,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
// port ignored
|
||||
args.put("port", Integer.valueOf(TrackerClient.PORT));
|
||||
args.put("token", token.getData());
|
||||
args.put("seed", Integer.valueOf(isSeed ? 1 : 0));
|
||||
map.put("a", args);
|
||||
// an announce need not be signed, we have a token
|
||||
ReplyWaiter rv = sendQuery(nInfo, map, false);
|
||||
@ -814,16 +826,20 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
// All errors use the response port.
|
||||
|
||||
/**
|
||||
* Unused
|
||||
*
|
||||
* @param nInfo who to send it to
|
||||
* @return success
|
||||
*/
|
||||
private boolean sendError(NodeInfo nInfo, MsgID msgID, int err, String msg) {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Sending error " + msg + " to: " + nInfo);
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
Map<String, Object> resps = new HashMap<String, Object>();
|
||||
map.put("r", resps);
|
||||
return sendResponse(nInfo, msgID, map);
|
||||
Map<String, Object> map = new HashMap<String, Object>(4);
|
||||
List<Object> error = new ArrayList(2);
|
||||
error.add(Integer.valueOf(err));
|
||||
error.add(msg);
|
||||
map.put("e", error);
|
||||
return sendError(nInfo, msgID, map);
|
||||
}
|
||||
|
||||
// Low-level send methods
|
||||
@ -910,7 +926,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param toPort the query port, we will increment here
|
||||
* Unused
|
||||
*
|
||||
* @return success
|
||||
*/
|
||||
private boolean sendError(NodeInfo nInfo, MsgID msgID, Map<String, Object> map) {
|
||||
@ -1113,14 +1130,22 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
} else if (method.equals("get_peers")) {
|
||||
byte[] hash = args.get("info_hash").getBytes();
|
||||
InfoHash ih = new InfoHash(hash);
|
||||
receiveGetPeers(msgID, nInfo, ih);
|
||||
boolean noSeeds = false;
|
||||
BEValue nos = args.get("noseed");
|
||||
if (nos != null)
|
||||
noSeeds = nos.getInt() == 1;
|
||||
receiveGetPeers(msgID, nInfo, ih, noSeeds);
|
||||
} else if (method.equals("announce_peer")) {
|
||||
byte[] hash = args.get("info_hash").getBytes();
|
||||
InfoHash ih = new InfoHash(hash);
|
||||
// this is the "TCP" port, we don't care
|
||||
//int port = args.get("port").getInt();
|
||||
byte[] token = args.get("token").getBytes();
|
||||
receiveAnnouncePeer(msgID, ih, token);
|
||||
boolean isSeed = false;
|
||||
BEValue iss = args.get("seed");
|
||||
if (iss != null)
|
||||
isSeed = iss.getInt() == 1;
|
||||
receiveAnnouncePeer(msgID, ih, token, isSeed);
|
||||
} else {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Unknown query method rcvd: " + method);
|
||||
@ -1233,18 +1258,22 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
/**
|
||||
* Handle and respond to the query
|
||||
*/
|
||||
private void receiveGetPeers(MsgID msgID, NodeInfo nInfo, InfoHash ih) throws InvalidBEncodingException {
|
||||
private void receiveGetPeers(MsgID msgID, NodeInfo nInfo,
|
||||
InfoHash ih, boolean noSeeds) throws InvalidBEncodingException {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Rcvd get_peers from: " + nInfo + " for: " + ih);
|
||||
_log.info("Rcvd get_peers from: " + nInfo + " for: " + ih + " noseeds? " + noSeeds);
|
||||
// generate and save random token
|
||||
Token token = new Token(_context);
|
||||
_outgoingTokens.put(token, nInfo);
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Stored new OB token: " + token + " for: " + nInfo);
|
||||
|
||||
List<Hash> peers = _tracker.getPeers(ih, MAX_WANT);
|
||||
List<Hash> peers = _tracker.getPeers(ih, MAX_WANT, noSeeds);
|
||||
// Check this before removing him, so we don't needlessly send nodes
|
||||
// if he's the only one on the torrent.
|
||||
boolean noPeers = peers.isEmpty();
|
||||
peers.remove(nInfo.getHash()); // him
|
||||
if (peers.isEmpty()) {
|
||||
if (noPeers) {
|
||||
// similar to find node, but with token
|
||||
// get closest from DHT
|
||||
List<NodeInfo> nodes = _knownNodes.findClosest(ih, K);
|
||||
@ -1256,9 +1285,14 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
}
|
||||
sendNodes(nInfo, msgID, token, nodeArray);
|
||||
} else {
|
||||
List<byte[]> hashes = new ArrayList<byte[]>(peers.size());
|
||||
for (Hash peer : peers) {
|
||||
hashes.add(peer.getData());
|
||||
List<byte[]> hashes;
|
||||
if (peers.isEmpty()) {
|
||||
hashes = Collections.EMPTY_LIST;
|
||||
} else {
|
||||
hashes = new ArrayList<byte[]>(peers.size());
|
||||
for (Hash peer : peers) {
|
||||
hashes.add(peer.getData());
|
||||
}
|
||||
}
|
||||
sendPeers(nInfo, msgID, token, hashes);
|
||||
}
|
||||
@ -1269,7 +1303,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* We have no node info here, it came on response port, we have to get it from the token.
|
||||
* So we can't verify that it came from the same peer, as BEP 5 specifies.
|
||||
*/
|
||||
private void receiveAnnouncePeer(MsgID msgID, InfoHash ih, byte[] tok) throws InvalidBEncodingException {
|
||||
private void receiveAnnouncePeer(MsgID msgID, InfoHash ih,
|
||||
byte[] tok, boolean isSeed) throws InvalidBEncodingException {
|
||||
Token token = new Token(tok);
|
||||
NodeInfo nInfo = _outgoingTokens.get(token);
|
||||
if (nInfo == null) {
|
||||
@ -1280,9 +1315,9 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
return;
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Rcvd announce from: " + nInfo + " for: " + ih);
|
||||
_log.info("Rcvd announce from: " + nInfo + " for: " + ih + " seed? " + isSeed);
|
||||
|
||||
_tracker.announce(ih, nInfo.getHash());
|
||||
_tracker.announce(ih, nInfo.getHash(), isSeed);
|
||||
// the reply for an announce is the same as the reply for a ping
|
||||
sendPong(nInfo, msgID);
|
||||
}
|
||||
@ -1341,7 +1376,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
* @throws NPE, IllegalArgumentException, and others too
|
||||
*/
|
||||
private List<NodeInfo> receiveNodes(NodeInfo nInfo, byte[] ids) throws InvalidBEncodingException {
|
||||
int max = Math.min(K, ids.length / NodeInfo.LENGTH);
|
||||
// Azureus sends 20
|
||||
int max = Math.min(3 * K, ids.length / NodeInfo.LENGTH);
|
||||
List<NodeInfo> rv = new ArrayList<NodeInfo>(max);
|
||||
for (int off = 0; off < ids.length && rv.size() < max; off += NodeInfo.LENGTH) {
|
||||
NodeInfo nInf = new NodeInfo(ids, off);
|
||||
@ -1399,6 +1435,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
// Errors.....
|
||||
|
||||
/**
|
||||
* @param error 1st item is error code, 2nd is message string
|
||||
* @throws NPE, and others too
|
||||
*/
|
||||
private void receiveError(ReplyWaiter waiter, List<BEValue> error) throws InvalidBEncodingException {
|
||||
@ -1536,6 +1573,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
|
||||
// TODO throttle
|
||||
try {
|
||||
byte[] payload = session.receiveMessage(msgId);
|
||||
if (payload == null)
|
||||
return;
|
||||
_rxPkts.incrementAndGet();
|
||||
_rxBytes.addAndGet(payload.length);
|
||||
if (toPort == _qPort) {
|
||||
|
@ -3,6 +3,7 @@ package org.klomp.snark.dht;
|
||||
* From zzzot, modded and relicensed to GPLv2
|
||||
*/
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Comparator;
|
||||
|
||||
import net.i2p.crypto.SHA1Hash;
|
||||
@ -15,7 +16,7 @@ import net.i2p.data.DataHelper;
|
||||
* @since 0.9.2
|
||||
* @author zzz
|
||||
*/
|
||||
class NodeInfoComparator implements Comparator<NodeInfo> {
|
||||
class NodeInfoComparator implements Comparator<NodeInfo>, Serializable {
|
||||
private final byte[] _base;
|
||||
|
||||
public NodeInfoComparator(SHA1Hash h) {
|
||||
|
@ -14,7 +14,9 @@ import net.i2p.data.Hash;
|
||||
*/
|
||||
class Peer extends Hash {
|
||||
|
||||
private long lastSeen;
|
||||
private volatile long lastSeen;
|
||||
// todo we could pack this into the upper bit of lastSeen
|
||||
private volatile boolean isSeed;
|
||||
|
||||
public Peer(byte[] data) {
|
||||
super(data);
|
||||
@ -27,4 +29,14 @@ class Peer extends Hash {
|
||||
public void setLastSeen(long now) {
|
||||
lastSeen = now;
|
||||
}
|
||||
|
||||
/** @since 0.9.14 */
|
||||
public boolean isSeed() {
|
||||
return isSeed;
|
||||
}
|
||||
|
||||
/** @since 0.9.14 */
|
||||
public void setSeed(boolean isSeed) {
|
||||
this.isSeed = isSeed;
|
||||
}
|
||||
}
|
||||
|
@ -37,10 +37,10 @@ abstract class PersistDHT {
|
||||
public static synchronized void loadDHT(KRPC krpc, File file) {
|
||||
Log log = I2PAppContext.getGlobalContext().logManager().getLog(PersistDHT.class);
|
||||
int count = 0;
|
||||
FileInputStream in = null;
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
in = new FileInputStream(file);
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(in, "ISO-8859-1"));
|
||||
br = new BufferedReader(new InputStreamReader(
|
||||
new FileInputStream(file), "ISO-8859-1"));
|
||||
String line = null;
|
||||
while ( (line = br.readLine()) != null) {
|
||||
if (line.startsWith("#"))
|
||||
@ -61,7 +61,7 @@ abstract class PersistDHT {
|
||||
if (log.shouldLog(Log.WARN) && file.exists())
|
||||
log.warn("Error reading the DHT File", ioe);
|
||||
} finally {
|
||||
if (in != null) try { in.close(); } catch (IOException ioe) {}
|
||||
if (br != null) try { br.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
if (log.shouldLog(Log.INFO))
|
||||
log.info("Loaded " + count + " nodes from " + file);
|
||||
|
@ -27,7 +27,6 @@ import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.UnavailableException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
@ -85,16 +84,17 @@ import net.i2p.util.SystemVersion;
|
||||
*/
|
||||
class BasicServlet extends HttpServlet
|
||||
{
|
||||
protected final I2PAppContext _context;
|
||||
protected final Log _log;
|
||||
private static final long serialVersionUID = 1L;
|
||||
protected transient final I2PAppContext _context;
|
||||
protected transient final Log _log;
|
||||
protected File _resourceBase;
|
||||
private String _warBase;
|
||||
|
||||
private final MimeTypes _mimeTypes;
|
||||
private transient final MimeTypes _mimeTypes;
|
||||
|
||||
/** same as PeerState.PARTSIZE */
|
||||
private static final int BUFSIZE = 16*1024;
|
||||
private ByteCache _cache = ByteCache.getInstance(16, BUFSIZE);
|
||||
private transient ByteCache _cache = ByteCache.getInstance(16, BUFSIZE);
|
||||
|
||||
private static final int WAR_CACHE_CONTROL_SECS = 24*60*60;
|
||||
private static final int FILE_CACHE_CONTROL_SECS = 24*60*60;
|
||||
@ -124,8 +124,10 @@ class BasicServlet extends HttpServlet
|
||||
* Files are served from here
|
||||
*/
|
||||
protected void setResourceBase(File base) throws UnavailableException {
|
||||
if (!base.isDirectory())
|
||||
if (!base.isDirectory()) {
|
||||
_log.log(Log.CRIT, "Configured i2psnark directory " + base + " does not exist");
|
||||
throw new UnavailableException("Resource base does not exist: " + base);
|
||||
}
|
||||
_resourceBase = base;
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Resource base is " + _resourceBase);
|
||||
@ -325,7 +327,7 @@ class BasicServlet extends HttpServlet
|
||||
long content_length = content.getContentLength();
|
||||
|
||||
// see if there are any range headers
|
||||
Enumeration reqRanges = request.getHeaders("Range");
|
||||
Enumeration<?> reqRanges = request.getHeaders("Range");
|
||||
|
||||
if (reqRanges == null || !reqRanges.hasMoreElements()) {
|
||||
// if there were no ranges, send entire entity
|
||||
|
@ -13,11 +13,13 @@ import net.i2p.I2PAppContext;
|
||||
import net.i2p.client.streaming.I2PSocketEepGet;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.crypto.SHA1;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.EepGet;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.SecureFile;
|
||||
|
||||
import org.klomp.snark.I2PSnarkUtil;
|
||||
import org.klomp.snark.MetaInfo;
|
||||
import org.klomp.snark.Snark;
|
||||
import org.klomp.snark.SnarkManager;
|
||||
@ -95,7 +97,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
|
||||
add(file);
|
||||
} else {
|
||||
_mgr.addMessage(_("Torrent was not retrieved from {0}", urlify(_url)) +
|
||||
((_failCause != null) ? (": " + _failCause) : ""));
|
||||
((_failCause != null) ? (": " + DataHelper.stripHTML(_failCause)) : ""));
|
||||
}
|
||||
if (file != null)
|
||||
file.delete();
|
||||
@ -130,6 +132,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
|
||||
return null;
|
||||
_eepGet = new I2PSocketEepGet(_ctx, manager, RETRIES, out.getAbsolutePath(), _url);
|
||||
_eepGet.addStatusListener(this);
|
||||
_eepGet.addHeader("User-Agent", I2PSnarkUtil.EEPGET_USER_AGENT);
|
||||
if (_eepGet.fetch()) {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Fetch successful [" + _url + "]: size=" + out.length());
|
||||
@ -175,7 +178,10 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
|
||||
// This may take a LONG time to create the storage.
|
||||
_mgr.copyAndAddTorrent(file, canonical);
|
||||
snark = _mgr.getTorrentByBaseName(originalName);
|
||||
snark.startTorrent();
|
||||
if (snark != null)
|
||||
snark.startTorrent();
|
||||
else
|
||||
throw new IOException("Unknown error - check logs");
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
_mgr.addMessage(_("Torrent at {0} was not valid", urlify(_url)) + ": " + ioe.getMessage());
|
||||
|
@ -1,12 +1,9 @@
|
||||
package org.klomp.snark.web;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.io.Serializable;
|
||||
import java.text.Collator;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
@ -16,7 +13,6 @@ import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@ -26,20 +22,18 @@ import java.util.TreeSet;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.Base64;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
import org.klomp.snark.I2PSnarkUtil;
|
||||
import org.klomp.snark.MagnetURI;
|
||||
import org.klomp.snark.MetaInfo;
|
||||
import org.klomp.snark.Peer;
|
||||
import org.klomp.snark.PeerID;
|
||||
import org.klomp.snark.Snark;
|
||||
import org.klomp.snark.SnarkManager;
|
||||
import org.klomp.snark.Storage;
|
||||
@ -51,12 +45,14 @@ import org.klomp.snark.dht.DHT;
|
||||
* Refactored to eliminate Jetty dependencies.
|
||||
*/
|
||||
public class I2PSnarkServlet extends BasicServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
/** generally "/i2psnark" */
|
||||
private String _contextPath;
|
||||
/** generally "i2psnark" */
|
||||
private String _contextName;
|
||||
private SnarkManager _manager;
|
||||
private static long _nonce;
|
||||
private transient SnarkManager _manager;
|
||||
private long _nonce;
|
||||
private String _themePath;
|
||||
private String _imgPath;
|
||||
private String _lastAnnounceURL;
|
||||
@ -163,6 +159,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
// this is the part after /i2psnark
|
||||
String path = req.getServletPath();
|
||||
resp.setHeader("X-Frame-Options", "SAMEORIGIN");
|
||||
resp.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
|
||||
resp.setHeader("X-XSS-Protection", "1; mode=block");
|
||||
|
||||
String peerParam = req.getParameter("p");
|
||||
String stParam = req.getParameter("st");
|
||||
@ -171,9 +169,10 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
peerParam.replaceAll("[a-zA-Z0-9~=-]", "").length() > 0) { // XSS
|
||||
peerString = "";
|
||||
} else {
|
||||
peerString = "?p=" + peerParam;
|
||||
peerString = "?p=" + DataHelper.stripHTML(peerParam);
|
||||
}
|
||||
if (stParam != null && !stParam.equals("0")) {
|
||||
stParam = DataHelper.stripHTML(stParam);
|
||||
if (peerString.length() > 0)
|
||||
peerString += "&st=" + stParam;
|
||||
else
|
||||
@ -251,7 +250,15 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
out.write(DOCTYPE + "<html>\n" +
|
||||
"<head><link rel=\"shortcut icon\" href=\"" + _themePath + "favicon.ico\">\n" +
|
||||
"<title>");
|
||||
out.write(_("I2PSnark - Anonymous BitTorrent Client"));
|
||||
if (_contextName.equals(DEFAULT_NAME))
|
||||
out.write(_("I2PSnark"));
|
||||
else
|
||||
out.write(_contextName);
|
||||
out.write(" - ");
|
||||
if (isConfigure)
|
||||
out.write(_("Configuration"));
|
||||
else
|
||||
out.write(_("Anonymous BitTorrent Client"));
|
||||
if ("2".equals(peerParam))
|
||||
out.write(" | Debug Mode");
|
||||
out.write("</title>\n");
|
||||
@ -388,7 +395,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
String ua = req.getHeader("User-Agent");
|
||||
boolean isDegraded = ua != null && (ua.startsWith("Lynx") || ua.startsWith("w3m") ||
|
||||
ua.startsWith("ELinks") || ua.startsWith("Links") ||
|
||||
ua.startsWith("Dillo"));
|
||||
ua.startsWith("Dillo") || ua.startsWith("Emacs-w3m"));
|
||||
boolean noThinsp = isDegraded || (ua != null && ua.startsWith("Opera"));
|
||||
|
||||
// pages
|
||||
@ -542,7 +549,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
|
||||
String stParamStr = stParam == null ? "" : "&st=" + stParam;
|
||||
for (int i = 0; i < total; i++) {
|
||||
Snark snark = (Snark)snarks.get(i);
|
||||
Snark snark = snarks.get(i);
|
||||
boolean showPeers = showDebug || "1".equals(peerParam) || Base64.encode(snark.getInfoHash()).equals(peerParam);
|
||||
boolean hide = i < start || i >= start + pageSize;
|
||||
displaySnark(out, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug, hide, stParamStr);
|
||||
@ -684,7 +691,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
String action = req.getParameter("action");
|
||||
if (action == null) {
|
||||
// http://www.onenaught.com/posts/382/firefox-4-change-input-type-image-only-submits-x-and-y-not-name
|
||||
Map params = req.getParameterMap();
|
||||
@SuppressWarnings("unchecked") // TODO-Java6: Remove cast, return type is correct
|
||||
Map<String, String[]> params = req.getParameterMap();
|
||||
for (Object o : params.keySet()) {
|
||||
String key = (String) o;
|
||||
if (key.startsWith("action_") && key.endsWith(".x")) {
|
||||
@ -758,8 +766,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (torrent != null) {
|
||||
byte infoHash[] = Base64.decode(torrent);
|
||||
if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
|
||||
for (Iterator iter = _manager.listTorrentFiles().iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
for (String name : _manager.listTorrentFiles() ) {
|
||||
Snark snark = _manager.getTorrent(name);
|
||||
if ( (snark != null) && (DataHelper.eq(infoHash, snark.getInfoHash())) ) {
|
||||
_manager.stopTorrent(snark, false);
|
||||
@ -781,8 +788,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (torrent != null) {
|
||||
byte infoHash[] = Base64.decode(torrent);
|
||||
if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
|
||||
for (Iterator iter = _manager.listTorrentFiles().iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
for (String name : _manager.listTorrentFiles() ) {
|
||||
Snark snark = _manager.getTorrent(name);
|
||||
if ( (snark != null) && (DataHelper.eq(infoHash, snark.getInfoHash())) ) {
|
||||
MetaInfo meta = snark.getMetaInfo();
|
||||
@ -809,8 +815,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (torrent != null) {
|
||||
byte infoHash[] = Base64.decode(torrent);
|
||||
if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
|
||||
for (Iterator iter = _manager.listTorrentFiles().iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
for (String name : _manager.listTorrentFiles() ) {
|
||||
Snark snark = _manager.getTorrent(name);
|
||||
if ( (snark != null) && (DataHelper.eq(infoHash, snark.getInfoHash())) ) {
|
||||
MetaInfo meta = snark.getMetaInfo();
|
||||
@ -849,7 +854,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
}
|
||||
}
|
||||
// step 2 make Set of dirs with reverse sort
|
||||
Set<File> dirs = new TreeSet(Collections.reverseOrder());
|
||||
Set<File> dirs = new TreeSet<File>(Collections.reverseOrder());
|
||||
for (List<String> list : files) {
|
||||
for (int i = 1; i < list.size(); i++) {
|
||||
dirs.add(Storage.getFileFromNames(f, list.subList(0, i)));
|
||||
@ -922,8 +927,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (announceURL.equals("none"))
|
||||
announceURL = null;
|
||||
_lastAnnounceURL = announceURL;
|
||||
List<String> backupURLs = new ArrayList();
|
||||
Enumeration e = req.getParameterNames();
|
||||
List<String> backupURLs = new ArrayList<String>();
|
||||
Enumeration<?> e = req.getParameterNames();
|
||||
while (e.hasMoreElements()) {
|
||||
Object o = e.nextElement();
|
||||
if (!(o instanceof String))
|
||||
@ -955,7 +960,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
_manager.addMessage(_("Error - Cannot mix private and public trackers in a torrent"));
|
||||
return;
|
||||
}
|
||||
announceList = new ArrayList(backupURLs.size());
|
||||
announceList = new ArrayList<List<String>>(backupURLs.size());
|
||||
for (String url : backupURLs) {
|
||||
announceList.add(Collections.singletonList(url));
|
||||
}
|
||||
@ -1017,10 +1022,10 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (action.equals(_("Delete selected")) || action.equals(_("Save tracker configuration"))) {
|
||||
boolean changed = false;
|
||||
Map<String, Tracker> trackers = _manager.getTrackerMap();
|
||||
List<String> removed = new ArrayList();
|
||||
List<String> open = new ArrayList();
|
||||
List<String> priv = new ArrayList();
|
||||
Enumeration e = req.getParameterNames();
|
||||
List<String> removed = new ArrayList<String>();
|
||||
List<String> open = new ArrayList<String>();
|
||||
List<String> priv = new ArrayList<String>();
|
||||
Enumeration<?> e = req.getParameterNames();
|
||||
while (e.hasMoreElements()) {
|
||||
Object o = e.nextElement();
|
||||
if (!(o instanceof String))
|
||||
@ -1045,7 +1050,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
}
|
||||
|
||||
open.removeAll(removed);
|
||||
List<String> oldOpen = new ArrayList(_manager.util().getOpenTrackers());
|
||||
List<String> oldOpen = new ArrayList<String>(_manager.util().getOpenTrackers());
|
||||
Collections.sort(oldOpen);
|
||||
Collections.sort(open);
|
||||
if (!open.equals(oldOpen))
|
||||
@ -1054,7 +1059,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
priv.removeAll(removed);
|
||||
// open trumps private
|
||||
priv.removeAll(open);
|
||||
List<String> oldPriv = new ArrayList(_manager.getPrivateTrackers());
|
||||
List<String> oldPriv = new ArrayList<String>(_manager.getPrivateTrackers());
|
||||
Collections.sort(oldPriv);
|
||||
Collections.sort(priv);
|
||||
if (!priv.equals(oldPriv))
|
||||
@ -1074,11 +1079,11 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
_manager.saveTrackerMap();
|
||||
// open trumps private
|
||||
if (req.getParameter("_add_open_") != null) {
|
||||
List newOpen = new ArrayList(_manager.util().getOpenTrackers());
|
||||
List<String> newOpen = new ArrayList<String>(_manager.util().getOpenTrackers());
|
||||
newOpen.add(aurl);
|
||||
_manager.saveOpenTrackers(newOpen);
|
||||
} else if (req.getParameter("_add_private_") != null) {
|
||||
List newPriv = new ArrayList(_manager.getPrivateTrackers());
|
||||
List<String> newPriv = new ArrayList<String>(_manager.getPrivateTrackers());
|
||||
newPriv.add(aurl);
|
||||
_manager.savePrivateTrackers(newPriv);
|
||||
}
|
||||
@ -1119,8 +1124,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
* (I guess this is worth it, a lot of torrents start with "The "
|
||||
* @since 0.7.14
|
||||
*/
|
||||
private static class TorrentNameComparator implements Comparator<Snark> {
|
||||
private final Comparator collator = Collator.getInstance();
|
||||
private static class TorrentNameComparator implements Comparator<Snark>, Serializable {
|
||||
|
||||
public int compare(Snark l, Snark r) {
|
||||
// put downloads and magnets first
|
||||
@ -1136,12 +1140,12 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
String rlc = rs.toLowerCase(Locale.US);
|
||||
if (rlc.startsWith("the ") || rlc.startsWith("the.") || rlc.startsWith("the_"))
|
||||
rs = rs.substring(4);
|
||||
return collator.compare(ls, rs);
|
||||
return Collator.getInstance().compare(ls, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private List<Snark> getSortedSnarks(HttpServletRequest req) {
|
||||
ArrayList<Snark> rv = new ArrayList(_manager.getTorrents());
|
||||
ArrayList<Snark> rv = new ArrayList<Snark>(_manager.getTorrents());
|
||||
Collections.sort(rv, new TorrentNameComparator());
|
||||
return rv;
|
||||
}
|
||||
@ -1311,20 +1315,16 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
|
||||
// (i) icon column
|
||||
out.write("<td>");
|
||||
if (isValid && meta.getAnnounce() != null) {
|
||||
// Link to local details page - note that trailing slash on a single-file torrent
|
||||
// gets us to the details page instead of the file.
|
||||
//StringBuilder buf = new StringBuilder(128);
|
||||
//buf.append("<a href=\"").append(snark.getBaseName())
|
||||
// .append("/\" title=\"").append(_("Torrent details"))
|
||||
// .append("\"><img alt=\"").append(_("Info")).append("\" border=\"0\" src=\"")
|
||||
// .append(_imgPath).append("details.png\"></a>");
|
||||
//out.write(buf.toString());
|
||||
|
||||
// Link to tracker details page
|
||||
String trackerLink = getTrackerLink(meta.getAnnounce(), snark.getInfoHash());
|
||||
if (trackerLink != null)
|
||||
out.write(trackerLink);
|
||||
if (isValid) {
|
||||
String announce = meta.getAnnounce();
|
||||
if (announce == null)
|
||||
announce = snark.getTrackerURL();
|
||||
if (announce != null) {
|
||||
// Link to tracker details page
|
||||
String trackerLink = getTrackerLink(announce, snark.getInfoHash());
|
||||
if (trackerLink != null)
|
||||
out.write(trackerLink);
|
||||
}
|
||||
}
|
||||
|
||||
String encodedBaseName = urlEncode(fullBasename);
|
||||
@ -1356,7 +1356,14 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
}
|
||||
|
||||
// Torrent name column
|
||||
out.write("</td><td class=\"snarkTorrentName\">");
|
||||
out.write("</td><td class=\"snarkTorrentName\"");
|
||||
if (isMultiFile) {
|
||||
// link on the whole td
|
||||
String jsec = encodedBaseName.replace("'", "\\'");
|
||||
out.write(" onclick=\"document.location='" + jsec + "/';\">");
|
||||
} else {
|
||||
out.write('>');
|
||||
}
|
||||
if (remaining == 0 || isMultiFile) {
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
buf.append("<a href=\"").append(encodedBaseName);
|
||||
@ -1480,7 +1487,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
continue;
|
||||
out.write("<tr class=\"" + rowClass + "\"><td></td>");
|
||||
out.write("<td colspan=\"4\" align=\"right\">");
|
||||
String ch = peer.toString().substring(0, 4);
|
||||
PeerID pid = peer.getPeerID();
|
||||
String ch = pid != null ? pid.toString().substring(0, 4) : "????";
|
||||
String client;
|
||||
if ("AwMD".equals(ch))
|
||||
client = _("I2PSnark");
|
||||
@ -1489,15 +1497,15 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
else if ("TTMt".equals(ch))
|
||||
client = "I2P-BT";
|
||||
else if ("LUFa".equals(ch))
|
||||
client = "Azureus";
|
||||
client = "Vuze" + getAzVersion(pid.getID());
|
||||
else if ("CwsL".equals(ch))
|
||||
client = "I2PSnarkXL";
|
||||
else if ("ZV".equals(ch.substring(2,4)) || "VUZP".equals(ch))
|
||||
client = "Robert";
|
||||
client = "Robert" + getRobtVersion(pid.getID());
|
||||
else if (ch.startsWith("LV")) // LVCS 1.0.2?; LVRS 1.0.4
|
||||
client = "Transmission";
|
||||
client = "Transmission" + getAzVersion(pid.getID());
|
||||
else if ("LUtU".equals(ch))
|
||||
client = "KTorrent";
|
||||
client = "KTorrent" + getAzVersion(pid.getID());
|
||||
else
|
||||
client = _("Unknown") + " (" + ch + ')';
|
||||
out.write(client + " <tt>" + peer.toString().substring(5, 9)+ "</tt>");
|
||||
@ -1571,6 +1579,50 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get version from bytes 3-6
|
||||
* @return " w.x.y.z" or ""
|
||||
* @since 0.9.14
|
||||
*/
|
||||
private static String getAzVersion(byte[] id) {
|
||||
if (id[7] != '-')
|
||||
return "";
|
||||
StringBuilder buf = new StringBuilder(16);
|
||||
buf.append(' ');
|
||||
for (int i = 3; i <= 6; i++) {
|
||||
int val = id[i] - '0';
|
||||
if (val < 0)
|
||||
return "";
|
||||
if (val > 9)
|
||||
val = id[i] - 'A';
|
||||
if (i != 6 || val != 0) {
|
||||
if (i != 3)
|
||||
buf.append('.');
|
||||
buf.append(val);
|
||||
}
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get version from bytes 3-5
|
||||
* @return " w.x.y" or ""
|
||||
* @since 0.9.14
|
||||
*/
|
||||
private static String getRobtVersion(byte[] id) {
|
||||
StringBuilder buf = new StringBuilder(8);
|
||||
buf.append(' ');
|
||||
for (int i = 3; i <= 5; i++) {
|
||||
int val = id[i];
|
||||
if (val < 0)
|
||||
return "";
|
||||
if (i != 3)
|
||||
buf.append('.');
|
||||
buf.append(val);
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/** @since 0.8.2 */
|
||||
private static String thinsp(boolean disable) {
|
||||
@ -1583,7 +1635,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
* Sort by completeness (seeds first), then by ID
|
||||
* @since 0.8.1
|
||||
*/
|
||||
private static class PeerComparator implements Comparator<Peer> {
|
||||
private static class PeerComparator implements Comparator<Peer>, Serializable {
|
||||
|
||||
public int compare(Peer l, Peer r) {
|
||||
int diff = r.completed() - l.completed(); // reverse
|
||||
if (diff != 0)
|
||||
@ -1645,18 +1698,19 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
private String getShortTrackerLink(String announce, byte[] infohash) {
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
String trackerLinkUrl = getTrackerLinkUrl(announce, infohash);
|
||||
if (trackerLinkUrl != null)
|
||||
buf.append(trackerLinkUrl);
|
||||
if (announce.startsWith("http://"))
|
||||
announce = announce.substring(7);
|
||||
int slsh = announce.indexOf('/');
|
||||
if (slsh > 0)
|
||||
announce = announce.substring(0, slsh);
|
||||
if (trackerLinkUrl != null)
|
||||
buf.append(trackerLinkUrl);
|
||||
else
|
||||
buf.append("<a href=\"http://").append(announce).append("/\">");
|
||||
if (announce.length() > 67)
|
||||
announce = announce.substring(0, 40) + "…" + announce.substring(announce.length() - 8);
|
||||
buf.append(announce);
|
||||
if (trackerLinkUrl != null)
|
||||
buf.append("</a>");
|
||||
buf.append("</a>");
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
@ -1802,7 +1856,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
out.write("\" >" +
|
||||
|
||||
"<tr><td>");
|
||||
out.write(_("Auto start"));
|
||||
out.write(_("Auto start torrents"));
|
||||
out.write(": <td><input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" "
|
||||
+ (autoStart ? "checked " : "")
|
||||
+ "title=\"");
|
||||
@ -1916,7 +1970,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
//out.write("port: <input type=\"text\" name=\"eepPort\" value=\""
|
||||
// + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n");
|
||||
|
||||
Map<String, String> options = new TreeMap(_manager.util().getI2CPOptions());
|
||||
Map<String, String> options = new TreeMap<String, String>(_manager.util().getI2CPOptions());
|
||||
out.write("<tr><td>");
|
||||
out.write(_("Inbound Settings"));
|
||||
out.write(":<td>");
|
||||
@ -2007,12 +2061,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (privateTrackers.contains(t.announceURL)) {
|
||||
buf.append(" checked=\"checked\"");
|
||||
} else {
|
||||
for (int i = 1; i < SnarkManager.DEFAULT_TRACKERS.length; i += 2) {
|
||||
if (SnarkManager.DEFAULT_TRACKERS[i].contains(t.announceURL)) {
|
||||
buf.append(" disabled=\"disabled\"");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (SnarkManager.DEFAULT_TRACKER_ANNOUNCES.contains(t.announceURL))
|
||||
buf.append(" disabled=\"disabled\"");
|
||||
}
|
||||
buf.append(">" +
|
||||
"</td><td>").append(urlify(announceURL, 35))
|
||||
@ -2170,15 +2220,14 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
* directories first
|
||||
* @since 0.9.6
|
||||
*/
|
||||
private static class ListingComparator implements Comparator<File> {
|
||||
private final Comparator collator = Collator.getInstance();
|
||||
private static class ListingComparator implements Comparator<File>, Serializable {
|
||||
|
||||
public int compare(File l, File r) {
|
||||
if (l.isDirectory() && !r.isDirectory())
|
||||
return -1;
|
||||
if (r.isDirectory() && !l.isDirectory())
|
||||
return 1;
|
||||
return collator.compare(l.getName(), r.getName());
|
||||
return Collator.getInstance().compare(l.getName(), r.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@ -2212,7 +2261,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
* @return String of HTML or null if postParams != null
|
||||
* @since 0.7.14
|
||||
*/
|
||||
private String getListHTML(File r, String base, boolean parent, Map postParams)
|
||||
private String getListHTML(File r, String base, boolean parent, Map<String, String[]> postParams)
|
||||
throws IOException
|
||||
{
|
||||
File[] ls = null;
|
||||
@ -2280,10 +2329,14 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
.append(fullPath)
|
||||
.append("</a></td></tr>\n");
|
||||
|
||||
String announce = null;
|
||||
MetaInfo meta = snark.getMetaInfo();
|
||||
if (meta != null) {
|
||||
String announce = meta.getAnnounce();
|
||||
announce = meta.getAnnounce();
|
||||
if (announce == null)
|
||||
announce = snark.getTrackerURL();
|
||||
if (announce != null) {
|
||||
announce = DataHelper.stripHTML(announce);
|
||||
buf.append("<tr><td>");
|
||||
String trackerLink = getTrackerLink(announce, snark.getInfoHash());
|
||||
if (trackerLink != null)
|
||||
@ -2306,7 +2359,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
buf.append(' ');
|
||||
else
|
||||
more = true;
|
||||
buf.append(getShortTrackerLink(s, snark.getInfoHash()));
|
||||
buf.append(getShortTrackerLink(DataHelper.stripHTML(s), snark.getInfoHash()));
|
||||
}
|
||||
buf.append("] ");
|
||||
}
|
||||
@ -2349,11 +2402,20 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
String hex = I2PSnarkUtil.toHex(snark.getInfoHash());
|
||||
if (meta == null || !meta.isPrivate()) {
|
||||
buf.append("<tr><td><a href=\"")
|
||||
.append(MagnetURI.MAGNET_FULL).append(hex).append("\">")
|
||||
.append(MagnetURI.MAGNET_FULL).append(hex);
|
||||
if (announce != null)
|
||||
buf.append("&tr=").append(announce);
|
||||
buf.append("\">")
|
||||
.append(toImg("magnet", _("Magnet link")))
|
||||
.append("</a> <b>Magnet:</b> <a href=\"")
|
||||
.append(MagnetURI.MAGNET_FULL).append(hex).append("\">")
|
||||
.append(MagnetURI.MAGNET_FULL).append(hex).append("</a>")
|
||||
.append(MagnetURI.MAGNET_FULL).append(hex);
|
||||
if (announce != null)
|
||||
buf.append("&tr=").append(announce);
|
||||
buf.append("\">")
|
||||
.append(MagnetURI.MAGNET_FULL).append(hex);
|
||||
if (announce != null)
|
||||
buf.append("&tr=").append(announce);
|
||||
buf.append("</a>")
|
||||
.append("</td></tr>\n");
|
||||
} else {
|
||||
buf.append("<tr><td>")
|
||||
@ -2388,7 +2450,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
.append(":</b> ")
|
||||
.append(formatSize(needed));
|
||||
if (meta != null) {
|
||||
List files = meta.getFiles();
|
||||
List<List<String>> files = meta.getFiles();
|
||||
int fileCount = files != null ? files.size() : 1;
|
||||
buf.append(" <img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" > <b>")
|
||||
.append(_("Files"))
|
||||
@ -2515,6 +2577,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
String path=addPaths(base,encoded);
|
||||
if (item.isDirectory() && !path.endsWith("/"))
|
||||
path=addPaths(path,"/");
|
||||
path = urlEncode(path);
|
||||
String icon = toIcon(item);
|
||||
|
||||
buf.append("<TD class=\"snarkFileIcon\">");
|
||||
@ -2535,7 +2598,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
buf.append("</TD><TD class=\"snarkFileName\">");
|
||||
if (complete)
|
||||
buf.append("<a href=\"").append(path).append("\">");
|
||||
buf.append(item.getName());
|
||||
buf.append(item.getName().replace("&", "&"));
|
||||
if (complete)
|
||||
buf.append("</a>");
|
||||
buf.append("</TD><TD ALIGN=right class=\"snarkFileSize\">");
|
||||
@ -2608,7 +2671,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
mime.equals("text/x-sfv") ||
|
||||
mime.equals("application/rtf") ||
|
||||
mime.equals("application/epub+zip") ||
|
||||
mime.equals("application/x-mobipocket-ebook"))
|
||||
mime.equals("application/x-mobipocket-ebook") ||
|
||||
plc.endsWith(".azw4"))
|
||||
icon = "page";
|
||||
else if (mime.equals("application/java-archive") ||
|
||||
plc.endsWith(".deb"))
|
||||
@ -2648,17 +2712,16 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
}
|
||||
|
||||
/** @since 0.8.1 */
|
||||
private void savePriorities(Snark snark, Map postParams) {
|
||||
private void savePriorities(Snark snark, Map<String, String[]> postParams) {
|
||||
Storage storage = snark.getStorage();
|
||||
if (storage == null)
|
||||
return;
|
||||
Set<Map.Entry> entries = postParams.entrySet();
|
||||
for (Map.Entry entry : entries) {
|
||||
String key = (String)entry.getKey();
|
||||
for (Map.Entry<String, String[]> entry : postParams.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
if (key.startsWith("pri.")) {
|
||||
try {
|
||||
String file = key.substring(4);
|
||||
String val = ((String[])entry.getValue())[0]; // jetty arrays
|
||||
String val = entry.getValue()[0]; // jetty arrays
|
||||
int pri = Integer.parseInt(val);
|
||||
storage.setPriority(file, pri);
|
||||
//System.err.println("Priority now " + pri + " for " + file);
|
||||
|
@ -73,7 +73,7 @@ public class InclusiveByteRange
|
||||
* @param size Size of the resource.
|
||||
* @return List of satisfiable ranges
|
||||
*/
|
||||
public static List<InclusiveByteRange> satisfiableRanges(Enumeration headers, long size)
|
||||
public static List<InclusiveByteRange> satisfiableRanges(Enumeration<?> headers, long size)
|
||||
{
|
||||
List<InclusiveByteRange> satRanges = null;
|
||||
|
||||
@ -128,7 +128,7 @@ public class InclusiveByteRange
|
||||
if (first < size)
|
||||
{
|
||||
if (satRanges == null)
|
||||
satRanges = new ArrayList(4);
|
||||
satRanges = new ArrayList<InclusiveByteRange>(4);
|
||||
InclusiveByteRange range = new InclusiveByteRange(first,last);
|
||||
satRanges.add(range);
|
||||
}
|
||||
|
@ -21,8 +21,6 @@ import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/**
|
||||
@ -48,7 +46,7 @@ class MimeTypes
|
||||
private final Map<String, String> _mimeMap;
|
||||
|
||||
public MimeTypes() {
|
||||
_mimeMap = new ConcurrentHashMap();
|
||||
_mimeMap = new ConcurrentHashMap<String, String>();
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
@ -5,13 +5,18 @@ import java.io.File;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.util.FileUtil;
|
||||
|
||||
import org.eclipse.jetty.server.Server;
|
||||
//import org.eclipse.jetty.server.Server;
|
||||
|
||||
/**
|
||||
* @deprecated does not work
|
||||
*/
|
||||
public class RunStandalone {
|
||||
/****
|
||||
static {
|
||||
System.setProperty("org.mortbay.http.Version.paranoid", "true");
|
||||
System.setProperty("org.mortbay.xml.XmlParser.NotValidating", "true");
|
||||
}
|
||||
****/
|
||||
|
||||
private RunStandalone(String args[]) {}
|
||||
|
||||
@ -21,6 +26,8 @@ public class RunStandalone {
|
||||
}
|
||||
|
||||
public void start() {
|
||||
throw new RuntimeException("unsupported");
|
||||
/****
|
||||
File workDir = new File(I2PAppContext.getGlobalContext().getTempDir(), "jetty-work");
|
||||
boolean workDirRemoved = FileUtil.rmdir(workDir, false);
|
||||
if (!workDirRemoved)
|
||||
@ -29,8 +36,6 @@ public class RunStandalone {
|
||||
if (!workDirCreated)
|
||||
System.err.println("ERROR: Unable to create Jetty temporary work directory");
|
||||
|
||||
throw new RuntimeException("unsupported");
|
||||
/****
|
||||
try {
|
||||
_server = new Server("jetty-i2psnark.xml");
|
||||
// just blow up NPE if we don't have a context
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# ducki2p <ducki2p@gmail.com>, 2011
|
||||
# foo <foo@bar>, 2009
|
||||
@ -10,409 +10,410 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-11-19 22:52+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
|
||||
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"ar/)\n"
|
||||
"Language: ar\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/projects/p/I2P/language/ar/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
"Language: ar\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr "تم قفل النفق"
|
||||
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:42
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr "تم تغببر مجموع حد الرفع الى {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:508
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr "اقل حد الرفع الى {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr "حولت سرعة الرفع الى {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:522
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "اقل سرعة رفع هي{0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:534
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr "تغير تأخير البداية الى {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:563
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:578
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:583
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:638
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr "سيتم تفعيل التغيير بعد اعادة التشغيل"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:642
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr "فك الاتصال"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:650
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr " تغيرت الاعدادات الى {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:655
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr "فشل في الاتصال بالاعدادات الجديدة، سيتم الرجوع الى الاعدادات القديمة"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr "فشل في اعادة الاتصال بالاعدادات القديمة!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr "اتصال بوجهة جديدة"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:668
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr "اعادة التشغيل \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:684
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr "تشغيل عند البداية"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:693
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr "الغاء التشغيل عند البداية"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr "تفعيل open trackers - يجب اعادة تشغيل التورنت لتفعيل التغيير."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:701
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr "الغاء تفعيل open trackers - يجب اعادة تشغيل التورنت لتفعيل التغيير."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
msgid "Disabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:712
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:719
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr "{0} تم تحميل التيمة ارجع الى صفحة للمشاهدة i2psnark."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:729
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr "لم تتغير الاعدادات"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:761
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr "تغيير open trackers - يجب اعادة تشغيل التورنت لتفعيل التغيير."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:771
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:817
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr "فشل في حفظ الاعدادات {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:895
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr "جاري الاتصال بشبكة I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:898
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr "فشل في الاتصال ب I2P - تخقق من اعدادات I2CP !"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:907
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr "خطأ: فشل في اضافة التورنت {0}"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:929
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr "فشل في فتح \"{0}\""
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:948
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr "تورنت بهذه المعلومات مشغل: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:952
|
||||
#, java-format
|
||||
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:956
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:961
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:983
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr "تورنت في \"{0}\"غير صحيح"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:990
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:988
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr "خطأ - لا توجد ذاكرة كافية، لا يمكن انشاء تورنت {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr "تم اضافة وتشغيل التورنت: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr "تمت اضافة: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr "يحمل {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr "اضافة {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr "فشل في نسخ التورنت الى {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr "ملفات كثيرة في \"{0}\" ({1}) تم حذف"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr "ملف التورنت \"{0}\" لا يمكنه الانتهاء ب \".torrent\", سيتم حذفه!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr "ﻻ أجزاء في \"{0}\", حذف!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr "الأجزاء كبيرة في \"{0}\" ({1}B), حذف."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr "حدود {0}B"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr "تورنت أكبر من {0}B غير مدعومة سيحذف \"{1}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr "خطأ: ﻻيمكن حذف التورنت {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr "تورنت متوقف: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr "تورنت محذوف: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr "اضف تورنت في {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr "انتهى التحميل: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr "بداية التورنت {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr "فشل في اضافة I2P!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
|
||||
msgid "Opening the I2P tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr "فتح النفق واطلاق جميع التورنت"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr "توقيف جميع التورنت و قفل النفق I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:237
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr ""
|
||||
@ -708,8 +709,7 @@ msgstr "تم انشاء تورنت لـ \"{0}\""
|
||||
msgid ""
|
||||
"Many I2P trackers require you to register new torrents before seeding - "
|
||||
"please do so before starting \"{0}\""
|
||||
msgstr ""
|
||||
"العديد من trackers يطلبون تسجيل التورنت قبل مشاركتها، قم بذلك قبل البداية {0}"
|
||||
msgstr "العديد من trackers يطلبون تسجيل التورنت قبل مشاركتها، قم بذلك قبل البداية {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
|
||||
#, java-format
|
||||
@ -750,7 +750,8 @@ msgstr ""
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr ""
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
@ -871,13 +872,11 @@ msgstr "حذف التورنت من القائمة، حذف ملف .torrent"
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
#. Then the remaining single quote must be escaped
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
|
||||
#, fuzzy, java-format
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
|
||||
"not be deleted) ?"
|
||||
msgstr ""
|
||||
"هل أنت متأكد من حذف الملف \\''{0}.تورنت\\'' (سيتم خذف ايضا الملفات التي تم "
|
||||
"تحميلها) ?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
|
||||
msgid "Remove"
|
||||
@ -945,8 +944,8 @@ msgstr "من عنوان"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
@ -966,7 +965,8 @@ msgstr "سيتم القاف التورنت عند حذف الملف torrent."
|
||||
msgid "Create Torrent"
|
||||
msgstr "أنشئ تورنت"
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr "البيانات المشاركة"
|
||||
@ -1075,8 +1075,8 @@ msgstr "استعمال open trackers ايضا"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
@ -1267,6 +1267,3 @@ msgstr "تجاوز"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
|
||||
msgid "Save priorities"
|
||||
msgstr "حفظ الأولويات"
|
||||
|
||||
#~ msgid "Unable to add {0}"
|
||||
#~ msgstr "فشل في اضافة {0}"
|
||||
|
@ -2,418 +2,416 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-11-19 22:52+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
|
||||
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/I2P/language/cs/)\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:42
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr "Celkový limit sdílečů změněn na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:508
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr "Nejmenší celkový limit sdílečů je {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr "Horní BW limit změněn na {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:522
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "Nejmenší horní limit přenosové rychlist je {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:534
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr "Prodleva při startu změněna na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr "Doba aktualizace stavu (refresh time) změněna na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr "Aktualizace stavu vypnuta"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:563
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:578
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:583
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:638
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr "Změny I2CP a tunelu se projeví až po zastavení všech torrentů"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:642
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr "Nastavení (options) I2CP změněno na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr "Odpojuji se od starého I2CP cíle"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:650
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr "Nastavení (settings) I2CP změněno na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:655
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr "Nemůžu se připojit s novým nastavením I2CP, vracím se k předhozímu."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr "Nemohu se opětovně připojit ani s předchozím nastavením!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr "Opětovně připojeno k novému I2CP cíli"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:668
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr "I2CP listener restartován pro \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr "Nové soubory budou veřejně přístupné"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:684
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr "Nové soubory nebudou veřejně přístupné"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr "Automatické spuštění zapnuto"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:693
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr "Automatické spuštění vypnuto"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr "Zapnuto automatické spuštění"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:701
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
"Otevřené trackery vypnuty - aby se změna projevila je nutné restartovat "
|
||||
"všechny torrenty"
|
||||
msgstr "Otevřené trackery vypnuty - aby se změna projevila je nutné restartovat všechny torrenty"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
msgid "Disabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:712
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:719
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr "Téma {0} bylo nahráno, přejděte prosím na hlavní stránku i2snark"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:729
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr "Nastavení nebylo změněno."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:761
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
"Seznam otevřených trackerů změněn - aby se změna projevila je nutné "
|
||||
"restartovat všechny torrenty"
|
||||
msgstr "Seznam otevřených trackerů změněn - aby se změna projevila je nutné restartovat všechny torrenty"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:771
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:817
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr "Nemůžu uložit soubor s nastavením do souboru {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:895
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr "Připojuji se k I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:898
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr ""
|
||||
"Při připojování k I2P nastala chyba, zkontrolujte prosím nastavení I2CP!"
|
||||
msgstr "Při připojování k I2P nastala chyba, zkontrolujte prosím nastavení I2CP!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:907
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr "Chyba: nepodařilo se přidat torrent {0}"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:929
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr "Nejde otevřít \"{0}\""
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:948
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr "Torrent s tímto infohašišem již běží: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:952
|
||||
#, java-format
|
||||
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:956
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:961
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:983
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr "Torrent v \"{0}\" je chybný"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:990
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:988
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr "CHYBA - nedostatek paměti, nemohu vytvořit torrent z {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr "Torrent přidán a spuštěn: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr "Torrent přidán: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr "Získávám {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr "Přídávám {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr "Chyba: nepodařilo se zkopírovat soubor torrentu do {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr "V \"{0}\" ({1}) je příliš mnoho souborů, mažu je!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr "Jméno souboru torrentu \"{0}\" nemůže končit na \".torrent\", mažu ho!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr "\"{0}\" neobsahuje žádné části, mažu to!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr "Příliš mnoho částí v \"{0}\", maximum je {1}, mažu to!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
|
||||
msgid "Opening the I2P tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:237
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr ""
|
||||
@ -741,7 +739,8 @@ msgstr ""
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr ""
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
@ -931,8 +930,8 @@ msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
@ -952,7 +951,8 @@ msgstr ""
|
||||
msgid "Create Torrent"
|
||||
msgstr ""
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr ""
|
||||
@ -1061,8 +1061,8 @@ msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -2,433 +2,417 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# omgitsadalek <mihalymokus76@gmail.com>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-11-19 22:57+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
|
||||
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
|
||||
"Language-Team: Hungarian (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"hu/)\n"
|
||||
"Language: hu\n"
|
||||
"Language-Team: Hungarian (http://www.transifex.com/projects/p/I2P/language/hu/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: hu\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr "I2P alagút lezárva."
|
||||
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:42
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr "Mágnes"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr "Teljes feltöltők korlátja megváltoztatva a következőre: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:508
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr "Teljes feltöltők minimum korlátja a következő: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr ""
|
||||
"Feltöltési sávszélesség korlátja megváltoztatva a következőre: {0} KBps"
|
||||
msgstr "Feltöltési sávszélesség korlátja megváltoztatva a következőre: {0} KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:522
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "A minimum feltöltési sávszélesség korlátja {0} KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:534
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr "Késleltetés indításkor megváltoztatva a következőre: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr "Frissítési idő a következőre változott: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr "Frissítés kikapcsolva"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:563
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:578
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:583
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:638
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr ""
|
||||
"Az I2CP-re és alagutakra vonatkozó változtatások az összes torrent "
|
||||
"leállítása után lépnek érvénybe"
|
||||
msgstr "Az I2CP-re és alagutakra vonatkozó változtatások az összes torrent leállítása után lépnek érvénybe"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:642
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr "I2CP opciók a következőre lettek változtatva: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr "Lekapcsolódás a régi I2CP célállomásról"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:650
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr "I2CP beállítások a következőre változtak: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:655
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr ""
|
||||
"Sikertelen kapcsolódás az új beállításokat használva, visszatérés a régi "
|
||||
"I2CP beállításokhoz"
|
||||
msgstr "Sikertelen kapcsolódás az új beállításokat használva, visszatérés a régi I2CP beállításokhoz"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr "Sikertelen újrakapcsolódás a régi beállításokat használva!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr "Újracsatlakozva az új I2CP célállomásra"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:668
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr "I2CP figyelő újraindítva a következőhöz: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr "Az új fájlok nyilvánosan olvashatók lesznek"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:684
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr "Az új fájlok nyilvánosan nem lesznek olvashatók"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr "Automatikus indítás engedélyezve"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:693
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr "Automatikus indítás kikapcsolva"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
"Nyílt követők (tracker) engedélyezve - az érvénybe lépéshez a torrent "
|
||||
"újraindítása szükséges."
|
||||
msgstr "Nyílt követők (tracker) engedélyezve - az érvénybe lépéshez a torrent újraindítása szükséges."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:701
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
"Nyílt követők (tracker) kikapcsolva - az érvénybe lépéshez a torrent "
|
||||
"újraindítása szükséges."
|
||||
msgstr "Nyílt követők (tracker) kikapcsolva - az érvénybe lépéshez a torrent újraindítása szükséges."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
msgstr "DHT engedélyezve."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
msgid "Disabled DHT."
|
||||
msgstr "DHT letiltva."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:712
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:719
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr "{0} téma betöltve, megtekintéséhez térj vissza az i2psnark főoldalára."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:729
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr "Beállítások nem lettek megváltoztatva."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:761
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
"Nyílt Követők (tracker) listája megváltozott - az érvénybe lépéshez a "
|
||||
"torrent újraindítása szükséges."
|
||||
msgstr "Nyílt Követők (tracker) listája megváltozott - az érvénybe lépéshez a torrent újraindítása szükséges."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:771
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
"Megváltozott a privát tracker lista - csak az újonnan létrehozott "
|
||||
"torrentekre vonatkozik."
|
||||
msgstr "Megváltozott a privát tracker lista - csak az újonnan létrehozott torrentekre vonatkozik."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:817
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr "Nem sikerült a beállítások mentése a következőre: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:895
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr "Kapcsolódás az I2P-hez"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:898
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr "Hiba az I2P-hez való csatlakozáskor - ellenőrizd az I2CP beállításait!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:907
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr "Hiba: a következő torrent hozzáadása sikertelen: {0}"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:929
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr "\"{0}\" megnyitása sikertelen"
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:948
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr "A torrent már fut ezzel az infó hash-el: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:952
|
||||
#, java-format
|
||||
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
|
||||
msgstr ""
|
||||
"HIBA - Nincsenek I2P követők (trackerek) a következő privát torrentben: "
|
||||
"\"{0}\""
|
||||
msgstr "HIBA - Nincsenek I2P követők (trackerek) a következő privát torrentben: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:956
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:961
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:983
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr "Érvénytelen torrent a következőben: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:990
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:988
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr ""
|
||||
"HIBA - nincs több memória, torrent létrehozása sikertelen a következőből: {0}"
|
||||
msgstr "HIBA - nincs több memória, torrent létrehozása sikertelen a következőből: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr "Torrent hozzáadva és elindítva: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr "Torrent hozzáadva: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr "Leszedés: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr "{0} Hozzáadása"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr "Futó letöltés: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr "Nem sikerült a torrent fájl másolása a következőre: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr "Túl sok fájl a következőben: \"{0}\" ({1}), törlésre kerül!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr "Torrent fájl \"{0}\" nem végződhet így: \".torrent\", törlésre kerül!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr "Nincsenek részek a következőben: \"{0}\", törlésre kerül!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr "Túl sok rész a következőben: \"{0}\", a határ {1}, törlésre kerül!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr "A részek túl nagyok a következőben: \"{0}\" ({1}B), törlésre kerül."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr "A határ {0}B"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr "\"{0}\" torrent nem tartalmaz adatot, törlésre kerül!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr ""
|
||||
"Nincsenek támogatva torrentek, melyek nagyobbak, mint {0}B, \"{1}\" törlésre "
|
||||
"kerül"
|
||||
msgstr "Nincsenek támogatva torrentek, melyek nagyobbak, mint {0}B, \"{1}\" törlésre kerül"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr "Hiba: a következő torrent eltávolítása sikertelen: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr "Torrent leállítva: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr "Torrent eltávolítva: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr "Torrentek hozzáadása a következőben: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr "Feltöltési sebesség korlát {0} KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr "A letöltés befejeződött: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr "Metainformáció letöltve a következőhöz: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr "{0} torrent indítása"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr "Hiba a következő torrenten: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr "Sikertelen csatlakozás az I2P-hez!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
|
||||
msgid "Opening the I2P tunnel"
|
||||
msgstr "Az I2P alagút megnyitása"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr "Az I2P alagút megnyitás, minden torrent indítás alatt."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr "Az összes torrent leállítás és az I2P alagút lezárás alatt."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:237
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr "Frissítés"
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr ""
|
||||
@ -712,10 +696,7 @@ msgstr "Torrent létrehozva a következőnek: \"{0}\""
|
||||
msgid ""
|
||||
"Many I2P trackers require you to register new torrents before seeding - "
|
||||
"please do so before starting \"{0}\""
|
||||
msgstr ""
|
||||
"Sok I2P követő (tracker) megköveteli az új torrentek regisztrációját "
|
||||
"táplálás (seed) előtt - kérlek, regisztrálj, mielőtt elindítod a "
|
||||
"következőt: \"{0}\""
|
||||
msgstr "Sok I2P követő (tracker) megköveteli az új torrentek regisztrációját táplálás (seed) előtt - kérlek, regisztrálj, mielőtt elindítod a következőt: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
|
||||
#, java-format
|
||||
@ -756,7 +737,8 @@ msgstr "Követő (tracker) hozzáadása"
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr "Adj meg érvényes követő (tracker) nevet és URL címeket"
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
@ -873,13 +855,11 @@ msgstr "Torrent eltávolítása az aktív listáról, a .torrent fájl törlés
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
#. Then the remaining single quote must be escaped
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
|
||||
#, fuzzy, java-format
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
|
||||
"not be deleted) ?"
|
||||
msgstr ""
|
||||
"Biztos, hogy törölni akarod a következő fájlt: \\''{0}.torrent\\'' (a "
|
||||
"letöltött adat nem kerül törlésre) ?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
|
||||
msgid "Remove"
|
||||
@ -897,9 +877,7 @@ msgstr ".torrent fájl törlése a hozzá tartozó adatfájlokkal együtt"
|
||||
msgid ""
|
||||
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
|
||||
"data?"
|
||||
msgstr ""
|
||||
"Biztos, hogy törlöd a következő torrentet és az összes letöltött adatot: "
|
||||
"\\''{0}\\'' ?"
|
||||
msgstr "Biztos, hogy törlöd a következő torrentet és az összes letöltött adatot: \\''{0}\\'' ?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1467
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
|
||||
@ -949,11 +927,9 @@ msgstr "URL címről"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
msgstr ""
|
||||
"Add meg a torrent fájl letöltési URL-jét (csak I2P), mágnes linket, maggot "
|
||||
"linket vagy infó hash-t"
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr "Add meg a torrent fájl letöltési URL-jét (csak I2P), mágnes linket, maggot linket vagy infó hash-t"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
msgid "Add torrent"
|
||||
@ -972,7 +948,8 @@ msgstr "A .torrent fájl eltávolításával meg fog állni."
|
||||
msgid "Create Torrent"
|
||||
msgstr "Torrent létrehozása"
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr "Adat táplálásra (seed)"
|
||||
@ -1081,11 +1058,9 @@ msgstr "Nyílt követőket (tracker) is használjon"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
msgstr ""
|
||||
"Ha be van jelölve, bejelenti a torrenteket a nyílt követőkre (tracker) és "
|
||||
"torrent fájlban feltüntetett követőre is"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr "Ha be van jelölve, bejelenti a torrenteket a nyílt követőkre (tracker) és torrent fájlban feltüntetett követőre is"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
msgid "Enable DHT"
|
||||
@ -1267,6 +1242,3 @@ msgstr "Kihagy"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
|
||||
msgid "Save priorities"
|
||||
msgstr "Tulajdonságok mentése"
|
||||
|
||||
#~ msgid "Unable to add {0}"
|
||||
#~ msgstr "{0} hozzáadása sikertelen"
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# ducki2p <ducki2p@gmail.com>, 2011
|
||||
# foo <foo@bar>, 2009
|
||||
@ -10,413 +10,410 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-11-19 23:00+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
|
||||
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/projects/p/I2P/language/nl/)\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr "I2P tunnel gesloten."
|
||||
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:42
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr "Totale uploaders limiet gewijzigd in {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:508
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr "Minimum totale uploaders limiet is {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr "Up bandbreedte limiet gewijzigd in {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:522
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "Minimum up bandbreedte limiet is {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:534
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr "Opstartvertraging gewijzigd in {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:563
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:578
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:583
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:638
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr ""
|
||||
"I2CP en tunnel wijzigingen hebben pas effect na het stoppen van alle torrents"
|
||||
msgstr "I2CP en tunnel wijzigingen hebben pas effect na het stoppen van alle torrents"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:642
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr "Oude I2CP destination wordt afgesloten"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:650
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr "I2CP instellingen gewijzigd in {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:655
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr ""
|
||||
"Kan geen connectie maken met de nieuwe instellingen, we keren terug naar "
|
||||
"oude I2CP instellingen"
|
||||
msgstr "Kan geen connectie maken met de nieuwe instellingen, we keren terug naar oude I2CP instellingen"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr "Kan niet opnieuw verbinden met de oude instellingen!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr "Opnieuw verbonden met de nieuwe I2CP destination"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:668
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr "I2CP listener herstart voor \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:684
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr "Autostart ingeschakeld"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:693
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr "Autostart uitgeschakeld"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr "Open Trackers ingeschakeld - torrent herstart nodig."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:701
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr "Open Trackers uitgeschakeld - torrent herstart nodig."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
msgid "Disabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:712
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:719
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr ""
|
||||
"{0} thema geladen, ga naar de hoofd i2psnark pagina om deze te bekijken."
|
||||
msgstr "{0} thema geladen, ga naar de hoofd i2psnark pagina om deze te bekijken."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:729
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr "Configuratie ongewijzigd."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:761
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr "Open Tracker lijst gewijzigd - torrent herstart nodig."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:771
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:817
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr "Kan de configuratie niet opslaan in {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:895
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr "Verbinden met I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:898
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr "Fout bij verbinden met I2P - controlleer je I2CP instellingen!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:907
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr "Fout: Kan de torrent {0} niet toevoegen"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:929
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr "Kan \"{0}\" niet openen"
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:948
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr "Torrent met deze info hash is al actief: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:952
|
||||
#, java-format
|
||||
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:956
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:961
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:983
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr "Torrent in \"{0}\" is ongeldig"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:990
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:988
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr "ERROR - Geen geheugen meer, kan geen torrent maken van {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr "Torrent toegevoegd en gestart: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr "Torrent toegevoegd: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr "Downloaden {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr "Toevoegen van {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr "Kan het torrent bestand niet kopieren naar {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr "Te veel bestanden in \"{0}\" ({1}), wordt verwijderd!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr ""
|
||||
"Torrent bestand \"{0}\" kan niet eindigen in \".torrent\", wordt verwijderd!"
|
||||
msgstr "Torrent bestand \"{0}\" kan niet eindigen in \".torrent\", wordt verwijderd!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr "Geen stukken in \"{0}\", wordt verwijderd!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr "Te veel stukken in \"{0}\", limiet is {1}, wordt verwijderd!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr "Stukken zijn te groot in \"{0}\" ({1}B), wordt verwijderd."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr "Limiet is {0}B"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr ""
|
||||
"Torrents groter dan {0}B worden nog niet ondersteund, verwijder \"{1}\""
|
||||
msgstr "Torrents groter dan {0}B worden nog niet ondersteund, verwijder \"{1}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr "Fout: Kan de torrent {0} niet verwijderen"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr "Torrent gestopt: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr "Torrent verwijderd: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr "Toevoegen van torrents in {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr "Download gereed: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr "Metainfo ontvangen voor {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr "Starten met torrent {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr "Kan niet verbinden met I2P!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
|
||||
msgid "Opening the I2P tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr "Openen van de I2P tunnel en starten van alle torrents."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr "Stoppen van alle torrents en sluiten van I2P tunnel."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:237
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr ""
|
||||
@ -700,9 +697,7 @@ msgstr "Torrent gemaakt voor \"{0}\""
|
||||
msgid ""
|
||||
"Many I2P trackers require you to register new torrents before seeding - "
|
||||
"please do so before starting \"{0}\""
|
||||
msgstr ""
|
||||
"Veel I2P trackers vereisen dat je de nieuwe torrent registreert voor het "
|
||||
"seeden - doe dit voordat je \"{0}\" start"
|
||||
msgstr "Veel I2P trackers vereisen dat je de nieuwe torrent registreert voor het seeden - doe dit voordat je \"{0}\" start"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
|
||||
#, java-format
|
||||
@ -716,8 +711,7 @@ msgstr "Kan geen torrent maken voor niet-bestaande data: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:986
|
||||
msgid "Error creating torrent - you must enter a file or directory"
|
||||
msgstr ""
|
||||
"Fout bij het maken van de torrent - je moet een bestand of directory invullen"
|
||||
msgstr "Fout bij het maken van de torrent - je moet een bestand of directory invullen"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2031
|
||||
@ -744,7 +738,8 @@ msgstr ""
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr ""
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
@ -855,21 +850,17 @@ msgstr "Start"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1439
|
||||
msgid "Remove the torrent from the active list, deleting the .torrent file"
|
||||
msgstr ""
|
||||
"Verwijder de torrent van de actieve lijst, het .torrent bestand wordt "
|
||||
"verwijderd"
|
||||
msgstr "Verwijder de torrent van de actieve lijst, het .torrent bestand wordt verwijderd"
|
||||
|
||||
#. Can't figure out how to escape double quotes inside the onclick string.
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
#. Then the remaining single quote must be escaped
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
|
||||
#, fuzzy, java-format
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
|
||||
"not be deleted) ?"
|
||||
msgstr ""
|
||||
"Weet je zeker dat je het bestand \\''{0}.torrent\\'' wilt verwijderen "
|
||||
"(gedownloade data zal niet worden verwijderd) ?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
|
||||
msgid "Remove"
|
||||
@ -887,9 +878,7 @@ msgstr "Verwijder het .torrent bestand en de gerelateerde data bestand(en)"
|
||||
msgid ""
|
||||
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
|
||||
"data?"
|
||||
msgstr ""
|
||||
"Weet je zeker dat je de torrent \\''{0}\\'' en alle gedownloade data wilt "
|
||||
"verwijderen?"
|
||||
msgstr "Weet je zeker dat je de torrent \\''{0}\\'' en alle gedownloade data wilt verwijderen?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1467
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
|
||||
@ -939,8 +928,8 @@ msgstr "Van URL"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
@ -960,15 +949,15 @@ msgstr "Verwijderen van een .torrent zorgt dat deze stopt."
|
||||
msgid "Create Torrent"
|
||||
msgstr "Creëer Torrent"
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr "Data om te seeden"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729
|
||||
msgid "File or directory to seed (must be within the specified path)"
|
||||
msgstr ""
|
||||
"Bestand of directory om te seeden (moet binnen het gespecificeerde pad zijn)"
|
||||
msgstr "Bestand of directory om te seeden (moet binnen het gespecificeerde pad zijn)"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
|
||||
@ -1070,11 +1059,9 @@ msgstr "Gebruik ook open trackers"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
msgstr ""
|
||||
"Indien aangevinkt, kondig torrents ook aan bij de tracker uit het torrent "
|
||||
"bestand"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr "Indien aangevinkt, kondig torrents ook aan bij de tracker uit het torrent bestand"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
msgid "Enable DHT"
|
||||
@ -1256,6 +1243,3 @@ msgstr "Overslaan"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
|
||||
msgid "Save priorities"
|
||||
msgstr "Prioriteiten opslaan"
|
||||
|
||||
#~ msgid "Unable to add {0}"
|
||||
#~ msgstr "Kan {0} niet toevoegen"
|
||||
|
@ -2,433 +2,422 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# PolishAnon <b790979@klzlk.com>, 2011
|
||||
# Warton <businesshehe@yahoo.com>, 2012
|
||||
# foo <foo@bar>, 2009
|
||||
# polacco <polacco@i2pmail.org>, 2012
|
||||
# sebx, 2014
|
||||
# Smert <Smert@safe-mail.net>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-11-19 23:01+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
|
||||
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"pl/)\n"
|
||||
"Language: pl\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2014-01-01 12:32+0000\n"
|
||||
"Last-Translator: sebx\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/projects/p/I2P/language/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
"Language: pl\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr "Zamknięto tunel I2P."
|
||||
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:42
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr "Magnet"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr "Ograniczenie liczby uploaderów zmieniono do {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:508
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr "Minimalny całkowity limit uploadera: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr "Ograniczenie pasma WY zmieniono na: {0} KB/s"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:522
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "Minimalne pasmo WY to: {0} KB/s"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:534
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr "Opóźnienia startu zmieniono na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr "Czas odświerzania zmieniony na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr "Odświeżanie wyłączone"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:563
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Rozmiar strony zmieniony do {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr "Katalog danych musi być pełna ścieżką"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
msgid "Data directory does not exist"
|
||||
msgstr "Katalog danych nie istnieje"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
msgid "Not a directory"
|
||||
msgstr "To nie jest katalog"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:578
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
msgstr "Nieczytelne"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:583
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Katalog danych zmieniony do {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:638
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr ""
|
||||
"Zmiany dotyczące I2CP i tuneli będą wprowadzone po zatrzymaniu wszystkich "
|
||||
"torrentów."
|
||||
msgstr "Zmiany dotyczące I2CP i tuneli będą wprowadzone po zatrzymaniu wszystkich torrentów."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:642
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr "Opcje I2CP zmienione na {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr "Rozłączanie starych celów I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:650
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr "Ustawienia I2CP zmienione do: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:655
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr ""
|
||||
"Nie można połączyć się z nowymi ustawieniami, powrót do starych ustawień I2CP"
|
||||
msgstr "Nie można połączyć się z nowymi ustawieniami, powrót do starych ustawień I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr "Nie można się połączyć ze starymi ustawieniami!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr "Ponowne podłączanie do nowych celów I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:668
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr "Nasłuch I2CP zrestartowany dla \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr "Nowe pliki będą publicznie dostępne"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:684
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr "Nowe pliki nie będą publicznie dostępne"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr "Włącz automatycznie uruchamianie"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:693
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr "Wyłącz automatycznie uruchamianie"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr "Włączono otwarte trackery - wymagane ponowne uruchomienie torrenta."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:701
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr "Wyłączono otwarte trackery - wymagane ponowne uruchomienie torrenta."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
msgstr "DHT włączone."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
msgid "Disabled DHT."
|
||||
msgstr "DHT wyłączone."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:712
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
msgstr "Zmiana DHT wymaga zamknięcia tunelu i jego ponownego otwarcia"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:719
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr "{0} temat załadowany, powrót do strony głównej i2psnark by zobaczyć."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:729
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr "Ustawienia niezmienione."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:761
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
"Zmieniła się lista otwartych trackerów - wymagane ponowne uruchomienie "
|
||||
"torrenta."
|
||||
msgstr "Zmieniła się lista otwartych trackerów - wymagane ponowne uruchomienie torrenta."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:771
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
"Prywatna lista trackerów została zmieniona - dotyczy tylko nowo utworzonych "
|
||||
"torrentów. "
|
||||
msgstr "Prywatna lista trackerów została zmieniona - dotyczy tylko nowo utworzonych torrentów. "
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:817
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr "Nie można zapisać konfiguracji do {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:895
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr "Łączenie z I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:898
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr "Nie można się połączyć z I2P, sprawdź swoje ustawienia I2CP!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:907
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr "Błąd: Nie można dodać torrenta {0}"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:929
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr "Nie można otworzyć \"{0}\""
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:948
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr "Torrent o tym hashu jest już uruchomiony: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:952
|
||||
#, java-format
|
||||
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
|
||||
msgstr "BŁĄD – brak trackerów w prywatnym torrencie \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:956
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
msgstr ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr "Uwaga - Nie ma trackerów I2P w \"{0}\", zostanie to zameldowane tylko do otwartych I2P trackerów i DHT."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
"Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery "
|
||||
"są wyłączone, w odniesieniu do DHT tylko."
|
||||
msgstr "Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery są wyłączone, w odniesieniu do DHT tylko."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:961
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
msgstr ""
|
||||
"Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery "
|
||||
"są wyłączone, należy włączyć otwarte trackery lub DHT przed rozpoczęciem "
|
||||
"torrenta. "
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr "Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery są wyłączone, należy włączyć otwarte trackery lub DHT przed rozpoczęciem torrenta. "
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:983
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr "Torrent w \"{0}\" jest niepoprawny"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:990
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:988
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr "BŁĄD - Brak pamięci, nie można utworzyć pliku torrent z {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr "Torrent dodany i uruchomiony: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr "Torrent dodany: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr "Pobieranie: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
msgstr ""
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr "Otwarte trackery są wyłączone i nie mamy żadnych DHT peerów. Pobranie z {0} może się nie udać dopóki nie uruchomisz innego torrenta, włączysz otwarte trackery, lub włączysz DHT."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr "Dodawanie {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr "Pobieranie już zostało uruchomione: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr "Nie udało się skopiować pliku torrent do {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr "Za dużo plików w \"{0}\" ({1}), usuwanie go!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr "Torrent \"{0}\" nie może się kończyć w \".torrent\", usuwanie go!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr "W torrencie \"{0}\" nie ma piece'ów, usuwanie go!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr "Za dużo piece''ów w \"{0}\" (limit to {1}), usuwanie go!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr "Za duże piece''y w torrencie \"{0}\" ({1}B), usuwanie go."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr "Granica to {0}B"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr "cTorrent \"{0}\" nie zawiera danych, usuwanie!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr "Torrenty większe niż {0}B nie są jeszcze wspierane, usunięcie \"{1}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr "Błąd: nie można usunąć torrenta {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr "Torrent zatrzymany: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr "Torrent usunięty: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr "Dodawanie torrentów w {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr "limit transferu połczeń wychodzcych to {0} KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr "Pobieranie ukończone: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr "Metainfo otrzymane dla {0} "
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr "Uruchamianie torrenta: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr "Błąd w torrencie {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr "Nie można podłączyć się do I2P!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
|
||||
msgid "Opening the I2P tunnel"
|
||||
msgstr "Otwieranie tunelu I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr "Otwieranie tunelu I2P i uruchamianie wszystkich torrentów."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr "Zatrzymywanie wszystkich torrentów i zamykanie tunelu I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr "Zamknięcie tunelu I2P po powiadomieniu trackerów."
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:237
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
"Brak prawidłowych trackerów dla {0} – włączyć otwarte trackery lub DHT?"
|
||||
msgstr "Brak prawidłowych trackerów dla {0} – włączyć otwarte trackery lub DHT?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr "Aktualizacja"
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr "Aktualizacja z {0}"
|
||||
@ -557,7 +546,7 @@ msgstr "Prędkość pobierania"
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:477
|
||||
msgid "RX Rate"
|
||||
msgstr ""
|
||||
msgstr "Ocena RX"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:483
|
||||
msgid "Up Rate"
|
||||
@ -566,7 +555,7 @@ msgstr "Prędkość wysyłania"
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:486
|
||||
msgid "TX Rate"
|
||||
msgstr ""
|
||||
msgstr "Ocena TX"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:501
|
||||
msgid "Stop all torrents and the I2P tunnel"
|
||||
@ -578,7 +567,7 @@ msgstr "Zatrzymaj wszystkie"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:515
|
||||
msgid "Start all stopped torrents"
|
||||
msgstr ""
|
||||
msgstr "Uruchom wszystkie zatrzymane torrenty"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:517
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:531
|
||||
@ -623,41 +612,40 @@ msgstr[2] "{0} peerów DHT"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
|
||||
msgid "First"
|
||||
msgstr ""
|
||||
msgstr "Pierwszy"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
|
||||
msgid "First page"
|
||||
msgstr ""
|
||||
msgstr "Pierwsza strona"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
|
||||
msgid "Prev"
|
||||
msgstr ""
|
||||
msgstr "Poprzedni"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
|
||||
msgid "Previous page"
|
||||
msgstr ""
|
||||
msgstr "Poprzednia strona"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Następny"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
|
||||
msgid "Next page"
|
||||
msgstr ""
|
||||
msgstr "Następna strona"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
|
||||
msgid "Last"
|
||||
msgstr ""
|
||||
msgstr "Ostatnia"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
|
||||
msgid "Last page"
|
||||
msgstr ""
|
||||
msgstr "Ostatnia strona"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:750
|
||||
#, java-format
|
||||
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
|
||||
msgstr ""
|
||||
"Nieprawidłowy URL: musi zaczynać się od \"http://\", \"{0}\" lub \"{1}\""
|
||||
msgstr "Nieprawidłowy URL: musi zaczynać się od \"http://\", \"{0}\" lub \"{1}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:793
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823
|
||||
@ -700,11 +688,11 @@ msgstr "Usunięto katalog: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:942
|
||||
msgid "Error - Cannot include alternate trackers without a primary tracker"
|
||||
msgstr ""
|
||||
msgstr "Błąd - Nie można dodać alternatywnych trackerów bez głównego trackera"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:955
|
||||
msgid "Error - Cannot mix private and public trackers in a torrent"
|
||||
msgstr ""
|
||||
msgstr "Błąd - Nie można mieszać prywatnych i publicznych trackerów w torrencie"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:975
|
||||
#, java-format
|
||||
@ -716,9 +704,7 @@ msgstr "Utworzono torrent dla \"{0}\""
|
||||
msgid ""
|
||||
"Many I2P trackers require you to register new torrents before seeding - "
|
||||
"please do so before starting \"{0}\""
|
||||
msgstr ""
|
||||
"Wiele trackerów w I2P wymaga zarejestrowania torrenta przed seedowaniem - "
|
||||
"proszę, zrób tak przed uruchomieniem \"{0}\""
|
||||
msgstr "Wiele trackerów w I2P wymaga zarejestrowania torrenta przed seedowaniem - proszę, zrób tak przed uruchomieniem \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
|
||||
#, java-format
|
||||
@ -759,7 +745,8 @@ msgstr "Dodaj tracker"
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr "Podaj prawidłową nazwę trackera i URL"
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
@ -877,13 +864,11 @@ msgstr "Usuń torrent z aktywnej listy, usuwając plik .torrent"
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
#. Then the remaining single quote must be escaped
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
|
||||
#, fuzzy, java-format
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
|
||||
"not be deleted) ?"
|
||||
msgstr ""
|
||||
"Czy na pewno chcesz usunąć plik \\''{0}.torrent\\''? (pobrane dane nie "
|
||||
"zostaną usunięte)"
|
||||
msgstr "Czy jesteś pewnien, że chcesz usunąć plik \\''{0}\\'' (pobrane dane nie będą usunięte) ?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
|
||||
msgid "Remove"
|
||||
@ -951,11 +936,9 @@ msgstr "Z adresu URL"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
msgstr ""
|
||||
"Wpisz adres URL pliku torrent (I2P tylko), Magnet link, link maggot, lub "
|
||||
"info hash"
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr "Wpisz adres URL pliku torrent (I2P tylko), Magnet link, link maggot, lub info hash"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
msgid "Add torrent"
|
||||
@ -974,15 +957,15 @@ msgstr "Usunięcie pliku .torrent spowoduje jego zatrzymanie."
|
||||
msgid "Create Torrent"
|
||||
msgstr "Utwórz torrent"
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr "Dane do seedowania"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729
|
||||
msgid "File or directory to seed (must be within the specified path)"
|
||||
msgstr ""
|
||||
"Plik lub katalog do seedowania (musi się znajdować wewnątrz podanej ścieżki)"
|
||||
msgstr "Plik lub katalog do seedowania (musi się znajdować wewnątrz podanej ścieżki)"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
|
||||
@ -991,11 +974,11 @@ msgstr "Trackery"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
msgstr "Główne"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1735
|
||||
msgid "Alternates"
|
||||
msgstr ""
|
||||
msgstr "Alternatywne"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738
|
||||
msgid "Create torrent"
|
||||
@ -1003,7 +986,7 @@ msgstr "Utwórz torrent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
msgstr "brak"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1789
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2046
|
||||
@ -1020,8 +1003,7 @@ msgstr "Pliki dostępne dla wszystkich"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1801
|
||||
msgid "If checked, other users may access the downloaded files"
|
||||
msgstr ""
|
||||
"Jeśli zaznaczone, inni użytkownicy mogą mieć dostęp do pobranych plików"
|
||||
msgstr "Jeśli zaznaczone, inni użytkownicy mogą mieć dostęp do pobranych plików"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1805
|
||||
msgid "Auto start"
|
||||
@ -1053,11 +1035,11 @@ msgstr "minuty"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
|
||||
msgid "Page size"
|
||||
msgstr ""
|
||||
msgstr "Rozmiar strony"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853
|
||||
msgid "torrents"
|
||||
msgstr ""
|
||||
msgstr "torrenty"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1877
|
||||
msgid "Total uploader limit"
|
||||
@ -1085,11 +1067,9 @@ msgstr "Używaj również otwartych trackerów"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
msgstr ""
|
||||
"Jeśli zaznaczone, zgłaszaj torrenty do otwartych trackerów, jak również do "
|
||||
"trackerów podanych w pliku torrent"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr "Jeśli zaznaczone, zgłaszaj torrenty do otwartych trackerów, jak również do trackerów podanych w pliku torrent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
msgid "Enable DHT"
|
||||
@ -1176,23 +1156,23 @@ msgstr "Plik torrent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2291
|
||||
msgid "Primary Tracker"
|
||||
msgstr ""
|
||||
msgstr "Główne Trackery"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2300
|
||||
msgid "Tracker List"
|
||||
msgstr ""
|
||||
msgstr "Lista Trackerów"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2324
|
||||
msgid "Comment"
|
||||
msgstr ""
|
||||
msgstr "Komentarz"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2333
|
||||
msgid "Created"
|
||||
msgstr ""
|
||||
msgstr "Utworzony"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2343
|
||||
msgid "Created By"
|
||||
msgstr ""
|
||||
msgstr "Utworzony przez"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2353
|
||||
msgid "Magnet link"
|
||||
@ -1273,6 +1253,3 @@ msgstr "Pomiń"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
|
||||
msgid "Save priorities"
|
||||
msgstr "Zapisz priorytety"
|
||||
|
||||
#~ msgid "Unable to add {0}"
|
||||
#~ msgstr "Nie można dodać {0}"
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,23 +2,21 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-12-01 20:03+0000\n"
|
||||
"PO-Revision-Date: 2013-11-27 18:49+0000\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2013-12-05 15:04+0000\n"
|
||||
"Last-Translator: polearnik <polearnik@mail.ru>\n"
|
||||
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"ro/)\n"
|
||||
"Language: ro\n"
|
||||
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/ro/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
||||
"2:1));\n"
|
||||
"Language: ro\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
@ -30,127 +28,127 @@ msgstr "Tunel I2P închis."
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr ""
|
||||
msgstr "Magnet"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Limita totala de incarcare schimbat la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr ""
|
||||
msgstr "Limita totala minimă de incarcare este {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr ""
|
||||
msgstr "Limita de incarcare BW schimbat la {0} Kbps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr ""
|
||||
msgstr "Limita de lățime de bandă minima la incarcarea este {0} Kbps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Întârziere de pornire schimbat la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Actualizarea timpului schimbat la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr ""
|
||||
msgstr "Refresh dezactivat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Schimbat dimensiunea paginii la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
msgstr "Dosarul de data de lucru trebuie să fie o cale absolută"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
msgstr "Dosarul de date nu există"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
msgstr "Nu e un dosar"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
msgstr "necitibil"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Dosarul de date s-a schimbat la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr ""
|
||||
msgstr "I2CP și tunel modificările vor intra în vigoare după oprirea tuturor torrentele"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Opțiuni I2CP schimbat la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr ""
|
||||
msgstr "Deconectarea destinației vechi I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr ""
|
||||
msgstr "Opțiuni I2CP schimbat la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr ""
|
||||
msgstr "Imposibil de a se conecta cu noile setări, revenirea la vechile setări I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr ""
|
||||
msgstr "Nu pot să se reconectez cu setările vechi!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr ""
|
||||
msgstr "Reconectat la destinație noua I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr ""
|
||||
msgstr "I2CP ascultător repornit pentru \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr ""
|
||||
msgstr "Fișiere noi vor putea fi citite public"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr ""
|
||||
msgstr "Fișiere noi nu vor putea fi citite public"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr ""
|
||||
msgstr "Activeaza autopornirea"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr ""
|
||||
msgstr "Dezactivează autopornirea"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
msgstr "Trackere deschise activat - repornirea torrentui este necesara să aibă efect."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
msgstr "Trackere deschise dezactivat - repornirea torrentui este necesara să aibă efect."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
@ -162,51 +160,52 @@ msgstr "DHT dezactivat."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
msgstr "Schimbare DHT necesită oprirea tunel și redeschiderea lui"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr ""
|
||||
msgstr "{0} temă încărcata, a reveni la pagina principală i2psnark pentru a vizualiza."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr ""
|
||||
msgstr "Configuraţia neschimbată"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
msgstr "Trackere deschise schimbat - repornirea torrentui este necesara să aibă efect."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
msgstr "Lista trackerilor private schimbat - afectează doar nou-create torrente."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr ""
|
||||
msgstr "Imposibil de a salva configurarea {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr ""
|
||||
msgstr "Conectarea la I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr ""
|
||||
msgstr "Eroare la conectarea la I2P - verificați setările I2CP!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr ""
|
||||
msgstr "Eroare: Nu sa putut adăuga torentul {0}"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr ""
|
||||
msgstr "Nu se poate deschide \"{0}\"."
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
@ -223,23 +222,24 @@ msgstr "EROARE - Nu sunt trackere I2P in torrent privat \"{0}\""
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
msgstr ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr "Avertisment - Nu sunt trackere I2P în \"{0}\", va anunța numai la I2P trackers deschise și DHT ."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
msgstr "Avertisment - Nu sunt trackere I2P în \"{0}\", și trackere deschise sunt dezactivate, se va anunța numai prin DHT."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
msgstr ""
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr "Avertisment - Nu sunt trackere I2P în \"{0}\", și DHT și trackere deschise sunt dezactivate, ar trebui să permiteti trackere deschise sau DHT înainte de a începe torrent."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
@ -272,8 +272,9 @@ msgstr "Preluarea {0}"
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
msgstr ""
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr "Trackere deschise sunt dezactivate și nu avem colegii DHT. Descarcarea din{0} nu poate reuși până când veți începe un alt torrent, permite trackere deschise, sau permite DHT."
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
@ -283,7 +284,7 @@ msgstr "Adăugarea {0}"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr ""
|
||||
msgstr "Descarcarea deja rulează: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
@ -325,14 +326,12 @@ msgstr "Limita este de {0} B"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr ""
|
||||
msgstr "Torrent \"{0}\" nu dispune de date, șterge-o!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr ""
|
||||
"Torrents mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\"Torrents "
|
||||
"mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\""
|
||||
msgstr "Torrents mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\"Torrents mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
@ -358,7 +357,7 @@ msgstr "Adăugarea torrente în {0}"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr ""
|
||||
msgstr "Limita de lățime de bandă la incarcarea este {0} Kbps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
@ -379,7 +378,7 @@ msgstr "Pornirea torrent {0}"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr ""
|
||||
msgstr "Eroare pe torrent {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
@ -400,52 +399,52 @@ msgstr "Oprirea tuturor torrentelor și inchiderea tunelului I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr ""
|
||||
msgstr "Închiderea tunelului I2P după notificarea trackere."
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
msgstr "Nu sunt trackere valabile pentru {0} - permite opentrackers sau DHT?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
msgstr "Actualizare"
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr ""
|
||||
msgstr "Actualizarea din {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:75
|
||||
#, java-format
|
||||
msgid "Download torrent file from {0}"
|
||||
msgstr ""
|
||||
msgstr "Descărca fișierul torrent de la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:97
|
||||
#, java-format
|
||||
msgid "Torrent was not retrieved from {0}"
|
||||
msgstr ""
|
||||
msgstr "Torrent nu a fost preluat de la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:150
|
||||
#, java-format
|
||||
msgid "Torrent fetched from {0}"
|
||||
msgstr ""
|
||||
msgstr "Torrent preluat de la {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:171
|
||||
#, java-format
|
||||
msgid "Torrent already running: {0}"
|
||||
msgstr ""
|
||||
msgstr "Torrent deja rulează: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:173
|
||||
#, java-format
|
||||
msgid "Torrent already in the queue: {0}"
|
||||
msgstr ""
|
||||
msgstr "Torrent deja în coada de așteptare: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:181
|
||||
#, java-format
|
||||
msgid "Torrent at {0} was not valid"
|
||||
msgstr ""
|
||||
msgstr "Torrent la {0} nu a fost valid"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254
|
||||
msgid "I2PSnark - Anonymous BitTorrent Client"
|
||||
@ -453,7 +452,7 @@ msgstr "I2PSnark - BitTorrent Client Anonim"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:267
|
||||
msgid "Router is down"
|
||||
msgstr ""
|
||||
msgstr "Router-ul este deactivat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
|
||||
msgid "Torrents"
|
||||
@ -481,7 +480,7 @@ msgstr "Faceți clic pe \"Adauga torrent\" pentru a aduce torrent"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:352
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:353
|
||||
msgid "clear messages"
|
||||
msgstr ""
|
||||
msgstr "stergerea mesajelor"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
|
||||
@ -541,7 +540,7 @@ msgstr "Rata de descarcare "
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:477
|
||||
msgid "RX Rate"
|
||||
msgstr ""
|
||||
msgstr "RX Rate"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:483
|
||||
msgid "Up Rate"
|
||||
@ -550,7 +549,7 @@ msgstr "Rata de incarcare "
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:486
|
||||
msgid "TX Rate"
|
||||
msgstr ""
|
||||
msgstr "TX Rate"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:501
|
||||
msgid "Stop all torrents and the I2P tunnel"
|
||||
@ -562,7 +561,7 @@ msgstr "Oprește toate"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:515
|
||||
msgid "Start all stopped torrents"
|
||||
msgstr ""
|
||||
msgstr "Începeți toate torrentele oprite"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:517
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:531
|
||||
@ -593,7 +592,7 @@ msgstr[2] "{0} torrentу"
|
||||
#, java-format
|
||||
msgid "1 connected peer"
|
||||
msgid_plural "{0} connected peers"
|
||||
msgstr[0] "{0} utilizator conectat"
|
||||
msgstr[0] "{0} utilizator conectat "
|
||||
msgstr[1] "{0} utilizatori conectati"
|
||||
msgstr[2] "{0} utilizatori conectati"
|
||||
|
||||
@ -601,41 +600,41 @@ msgstr[2] "{0} utilizatori conectati"
|
||||
#, java-format
|
||||
msgid "1 DHT peer"
|
||||
msgid_plural "{0} DHT peers"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "1 partener DHT"
|
||||
msgstr[1] "{0} parteneri DHT"
|
||||
msgstr[2] "{0} parteneri DHT"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
|
||||
msgid "First"
|
||||
msgstr ""
|
||||
msgstr "Primul"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
|
||||
msgid "First page"
|
||||
msgstr ""
|
||||
msgstr "P&rima pagină"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
|
||||
msgid "Prev"
|
||||
msgstr ""
|
||||
msgstr "Prev"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
|
||||
msgid "Previous page"
|
||||
msgstr ""
|
||||
msgstr "Pagina anterioară"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Următorul"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
|
||||
msgid "Next page"
|
||||
msgstr ""
|
||||
msgstr "Pagina următoare"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
|
||||
msgid "Last"
|
||||
msgstr ""
|
||||
msgstr "Ultimul"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
|
||||
msgid "Last page"
|
||||
msgstr ""
|
||||
msgstr "Ultima pagină"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:750
|
||||
#, java-format
|
||||
@ -657,7 +656,7 @@ msgstr "Fișier torrent șters: {0}"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:821
|
||||
#, java-format
|
||||
msgid "Download deleted: {0}"
|
||||
msgstr ""
|
||||
msgstr "Descarcă șterse: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:835
|
||||
#, java-format
|
||||
@ -674,20 +673,20 @@ msgstr "Fișier de date nu a putut fi șters: {0}"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:872
|
||||
#, java-format
|
||||
msgid "Directory could not be deleted: {0}"
|
||||
msgstr ""
|
||||
msgstr "Dosarul nu a putut fi sters {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:870
|
||||
#, java-format
|
||||
msgid "Directory deleted: {0}"
|
||||
msgstr ""
|
||||
msgstr "Directorii șterse: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:942
|
||||
msgid "Error - Cannot include alternate trackers without a primary tracker"
|
||||
msgstr ""
|
||||
msgstr "Eroare - Nu pot conține trackere alternative fără un tracker primar"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:955
|
||||
msgid "Error - Cannot mix private and public trackers in a torrent"
|
||||
msgstr ""
|
||||
msgstr "Eroare - Nu se poate amesteca trackere publice și private într-un torent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:975
|
||||
#, java-format
|
||||
@ -699,38 +698,35 @@ msgstr "Torrent creat pentru \"{0}\""
|
||||
msgid ""
|
||||
"Many I2P trackers require you to register new torrents before seeding - "
|
||||
"please do so before starting \"{0}\""
|
||||
msgstr ""
|
||||
"Multe trackere I2P cer să vă înregistrați torrentele noi înainte de seedat - "
|
||||
"vă rugăm să faceți acest lucru înainte de a începe \"{0}\""
|
||||
msgstr "Multe trackere I2P cer să vă înregistrați torrentele noi înainte de seedat - vă rugăm să faceți acest lucru înainte de a începe \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
|
||||
#, java-format
|
||||
msgid "Error creating a torrent for \"{0}\""
|
||||
msgstr ""
|
||||
msgstr "Eroare la crearea unui torrent pentru \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:983
|
||||
#, java-format
|
||||
msgid "Cannot create a torrent for the nonexistent data: {0}"
|
||||
msgstr ""
|
||||
msgstr "Nu se poate crea un torrent pentru datele inexistente: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:986
|
||||
msgid "Error creating torrent - you must enter a file or directory"
|
||||
msgstr ""
|
||||
"Eroare la crearea torrent - trebuie să introduceți un fișier sau director"
|
||||
msgstr "Eroare la crearea torrent - trebuie să introduceți un fișier sau director"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2031
|
||||
msgid "Delete selected"
|
||||
msgstr ""
|
||||
msgstr "Șterge pe cel ales"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2032
|
||||
msgid "Save tracker configuration"
|
||||
msgstr ""
|
||||
msgstr "Salvați configurația tracker"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1034
|
||||
msgid "Removed"
|
||||
msgstr ""
|
||||
msgstr "Șters"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1063
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2030
|
||||
@ -743,25 +739,26 @@ msgstr "Adaugă tracker"
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr "Introduceți numele tracker valid și URL-uri"
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
msgstr ""
|
||||
msgstr "Restabileşte implicitele"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1094
|
||||
msgid "Restored default trackers"
|
||||
msgstr ""
|
||||
msgstr "Trackers implicite restaurate"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1215
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1216
|
||||
msgid "Checking"
|
||||
msgstr ""
|
||||
msgstr "Se verifică"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1218
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1219
|
||||
msgid "Allocating"
|
||||
msgstr ""
|
||||
msgstr "Alocare"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240
|
||||
@ -780,12 +777,12 @@ msgid "1 peer"
|
||||
msgid_plural "{0} peers"
|
||||
msgstr[0] "1 partener"
|
||||
msgstr[1] "{0} parteneri"
|
||||
msgstr[2] "{0} parteneri "
|
||||
msgstr[2] "{0} parteneri"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1243
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
|
||||
msgid "Starting"
|
||||
msgstr ""
|
||||
msgstr "Începere"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1252
|
||||
msgid "Seeding"
|
||||
@ -855,8 +852,7 @@ msgstr "Start"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1439
|
||||
msgid "Remove the torrent from the active list, deleting the .torrent file"
|
||||
msgstr ""
|
||||
"Scoateți torrent din lista torentelor activi, ștergem fișierul torrent."
|
||||
msgstr "Scoateți torrent din lista torentelor activi, ștergem fișierul torrent."
|
||||
|
||||
#. Can't figure out how to escape double quotes inside the onclick string.
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
@ -866,9 +862,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
|
||||
"not be deleted) ?"
|
||||
msgstr ""
|
||||
"Sigur doriți să ștergeți dosarul \\'' {0} \\'' (datele descărcate nu vor fi "
|
||||
"șterse)?"
|
||||
msgstr "Sigur doriți să ștergeți dosarul \\'' {0} \\'' (datele descărcate nu vor fi șterse)?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
|
||||
msgid "Remove"
|
||||
@ -886,8 +880,7 @@ msgstr "Ștergeți fișierul torrent. Și fișier(e) de date asociat(e)"
|
||||
msgid ""
|
||||
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
|
||||
"data?"
|
||||
msgstr ""
|
||||
"Sigur doriți să ștergeți torrent \\'' {0} \\'' și toate datele descărcate?"
|
||||
msgstr "Sigur doriți să ștergeți torrent \\'' {0} \\'' și toate datele descărcate?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1467
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
|
||||
@ -937,9 +930,9 @@ msgstr "Din URL"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
msgstr ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr "Introduceți URL-ul de descarcare fișierilor torrent (I2P numai), link-ul magnet, maggot-link, sau info hash"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
msgid "Add torrent"
|
||||
@ -958,7 +951,8 @@ msgstr "Stergerea .torrent va face ca acesta să se oprească."
|
||||
msgid "Create Torrent"
|
||||
msgstr "Creează un torent"
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr "Date pentru seedare"
|
||||
@ -970,15 +964,15 @@ msgstr "Fișier sau director de seedare (trebuie să fie în calea specificată)
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
|
||||
msgid "Trackers"
|
||||
msgstr ""
|
||||
msgstr "Trackere"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
msgstr "Primar"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1735
|
||||
msgid "Alternates"
|
||||
msgstr ""
|
||||
msgstr "Alternativă"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738
|
||||
msgid "Create torrent"
|
||||
@ -986,7 +980,7 @@ msgstr "Creează un torent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
msgstr "nici unul"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1789
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2046
|
||||
@ -999,11 +993,11 @@ msgstr "Dosar cu date"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1797
|
||||
msgid "Files readable by all"
|
||||
msgstr ""
|
||||
msgstr "Fișiere lizibile de către toți"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1801
|
||||
msgid "If checked, other users may access the downloaded files"
|
||||
msgstr ""
|
||||
msgstr "Dacă este bifată, utilizatorii pot accesa fișierele descărcate"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1805
|
||||
msgid "Auto start"
|
||||
@ -1019,11 +1013,11 @@ msgstr "Teme"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1826
|
||||
msgid "Refresh time"
|
||||
msgstr ""
|
||||
msgstr "Timp de reîmprospătare"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
msgstr "Niciodată"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1845
|
||||
msgid "Startup delay"
|
||||
@ -1035,11 +1029,11 @@ msgstr "minute"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
|
||||
msgid "Page size"
|
||||
msgstr ""
|
||||
msgstr "Mărimea paginii"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853
|
||||
msgid "torrents"
|
||||
msgstr ""
|
||||
msgstr "Torente"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1877
|
||||
msgid "Total uploader limit"
|
||||
@ -1067,19 +1061,17 @@ msgstr "Utilizați trackere deschise, de asemenea,"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
msgstr ""
|
||||
"Dacă este bifată, anunta torrente pentru a urmări trackere deschise , precum "
|
||||
"și trackere listate în fișierul torrent"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr "Dacă este bifată, anunta torrente pentru a urmări trackere deschise , precum și trackere listate în fișierul torrent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
msgid "Enable DHT"
|
||||
msgstr ""
|
||||
msgstr "Activează DHT"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1905
|
||||
msgid "If checked, use DHT"
|
||||
msgstr ""
|
||||
msgstr "Dacă este bifată, utilizați DHT"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1921
|
||||
msgid "Inbound Settings"
|
||||
@ -1091,19 +1083,19 @@ msgstr "Setări de ieșire"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1935
|
||||
msgid "I2CP host"
|
||||
msgstr ""
|
||||
msgstr "Portul I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1940
|
||||
msgid "I2CP port"
|
||||
msgstr ""
|
||||
msgstr "Portul I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1955
|
||||
msgid "I2CP options"
|
||||
msgstr ""
|
||||
msgstr "Opțiuni I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1960
|
||||
msgid "Save configuration"
|
||||
msgstr ""
|
||||
msgstr "Salvare configurări"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1980
|
||||
msgid "Name"
|
||||
@ -1111,7 +1103,7 @@ msgstr "Nume"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1982
|
||||
msgid "Website URL"
|
||||
msgstr ""
|
||||
msgstr "URL website"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1984
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2530
|
||||
@ -1120,11 +1112,11 @@ msgstr "Deschis"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1986
|
||||
msgid "Private"
|
||||
msgstr ""
|
||||
msgstr "Privat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
|
||||
msgid "Announce URL"
|
||||
msgstr ""
|
||||
msgstr "URL de anuntare"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2022
|
||||
msgid "Add"
|
||||
@ -1133,125 +1125,125 @@ msgstr "Adaugă"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2062
|
||||
#, java-format
|
||||
msgid "Invalid magnet URL {0}"
|
||||
msgstr ""
|
||||
msgstr "URL-ul magnet invalid {0}"
|
||||
|
||||
#. * dummies for translation
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2070
|
||||
#, java-format
|
||||
msgid "1 hop"
|
||||
msgid_plural "{0} hops"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "1 hop"
|
||||
msgstr[1] "{0} hop-uri"
|
||||
msgstr[2] "{0} hop-uri"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2071
|
||||
#, java-format
|
||||
msgid "1 tunnel"
|
||||
msgid_plural "{0} tunnels"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "1 tunel"
|
||||
msgstr[1] "{0} tunele"
|
||||
msgstr[2] "{0} tunele"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2278
|
||||
msgid "Torrent file"
|
||||
msgstr ""
|
||||
msgstr "Fișier torent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2291
|
||||
msgid "Primary Tracker"
|
||||
msgstr ""
|
||||
msgstr "Tracker primar"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2300
|
||||
msgid "Tracker List"
|
||||
msgstr ""
|
||||
msgstr "Lista Tracker"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2324
|
||||
msgid "Comment"
|
||||
msgstr ""
|
||||
msgstr "Comentariu"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2333
|
||||
msgid "Created"
|
||||
msgstr ""
|
||||
msgstr "Creat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2343
|
||||
msgid "Created By"
|
||||
msgstr ""
|
||||
msgstr "Creat de"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2353
|
||||
msgid "Magnet link"
|
||||
msgstr ""
|
||||
msgstr "Legătură Magnet"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2360
|
||||
msgid "Private torrent"
|
||||
msgstr ""
|
||||
msgstr "Torrent privat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2370
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2434
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2436
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
msgstr "Dimensiune"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2377
|
||||
msgid "Completion"
|
||||
msgstr ""
|
||||
msgstr "Completare"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2387
|
||||
msgid "Remaining"
|
||||
msgstr ""
|
||||
msgstr "Rămas"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2394
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
msgstr "Fișiere"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2399
|
||||
msgid "Pieces"
|
||||
msgstr ""
|
||||
msgstr "Piese:"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2403
|
||||
msgid "Piece size"
|
||||
msgstr ""
|
||||
msgstr "Dimensiune piesei"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2426
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2430
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
msgstr "Dosar"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2447
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2449
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
msgstr "Prioritate"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2455
|
||||
msgid "Up to higher level directory"
|
||||
msgstr ""
|
||||
msgstr "Spre dosarul de nivel superior"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2485
|
||||
msgid "Torrent not found?"
|
||||
msgstr ""
|
||||
msgstr "Torrent nu a fost găsit?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2493
|
||||
msgid "File not found in torrent?"
|
||||
msgstr ""
|
||||
msgstr "Fișierul nu a fost găsit în torrent?"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2506
|
||||
msgid "complete"
|
||||
msgstr ""
|
||||
msgstr "încheiat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2507
|
||||
msgid "remaining"
|
||||
msgstr ""
|
||||
msgstr "Rămas"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2556
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
msgstr "Ridicat"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2561
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2566
|
||||
msgid "Skip"
|
||||
msgstr ""
|
||||
msgstr "Omitere"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
|
||||
msgid "Save priorities"
|
||||
msgstr ""
|
||||
msgstr "Salvați priorități"
|
||||
|
File diff suppressed because it is too large
Load Diff
1250
apps/i2psnark/locale/messages_sk.po
Normal file
1250
apps/i2psnark/locale/messages_sk.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -2,415 +2,417 @@
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# dich_tran <tran.nathan@gmail.com>, 2011
|
||||
# dich_tran <thnhan@gmail.com>, 2011
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-11-19 23:06+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
|
||||
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
|
||||
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
|
||||
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
|
||||
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/I2P/language/"
|
||||
"vi/)\n"
|
||||
"Language: vi\n"
|
||||
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/I2P/language/vi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: vi\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/IdleChecker.java:69
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr "Đường hầm I2P đóng lại."
|
||||
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:42
|
||||
#: ../java/src/org/klomp/snark/MagnetURI.java:52
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
|
||||
msgid "Magnet"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:504
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:508
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:518
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr "Giới hạn băng thông lên đổi thành {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:522
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:520
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "Tối thiểu băng thông lên là {0}KBps"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:534
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:532
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:543
|
||||
#, java-format
|
||||
msgid "Refresh time changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:545
|
||||
msgid "Refresh disabled"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:563
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:561
|
||||
#, java-format
|
||||
msgid "Page size changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
msgid "Data directory must be an absolute path"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:572
|
||||
msgid "Data directory does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:574
|
||||
msgid "Not a directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:578
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:576
|
||||
msgid "Unreadable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:583
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:581
|
||||
#, java-format
|
||||
msgid "Data directory changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:638
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:636
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:642
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:640
|
||||
#, java-format
|
||||
msgid "I2CP options changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:646
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:650
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:648
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:655
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:653
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:657
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:659
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:668
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:666
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:680
|
||||
msgid "New files will be publicly readable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:684
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:682
|
||||
msgid "New files will not be publicly readable"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:689
|
||||
msgid "Enabled autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:693
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:691
|
||||
msgid "Disabled autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:697
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:701
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:699
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:706
|
||||
msgid "Enabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:708
|
||||
msgid "Disabled DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:712
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:710
|
||||
msgid "DHT change requires tunnel shutdown and reopen"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:719
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:717
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:729
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:727
|
||||
msgid "Configuration unchanged."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:761
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:759
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:771
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:769
|
||||
msgid "Private tracker list changed - affects newly created torrents only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:817
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:815
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:895
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:893
|
||||
msgid "Connecting to I2P"
|
||||
msgstr "Nối kết vào I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:898
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:896
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:907
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:905
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:929
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:927
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:948
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo
|
||||
#. instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:946
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:952
|
||||
#, java-format
|
||||
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:956
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:954
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
|
||||
"DHT only."
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
|
||||
" DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:957
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
|
||||
"announce to DHT only."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:961
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:959
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
|
||||
"disabled, you should enable open trackers or DHT before starting the torrent."
|
||||
"disabled, you should enable open trackers or DHT before starting the "
|
||||
"torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:983
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:990
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:988
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
|
||||
"succeed until you start another torrent, enable open trackers, or enable DHT."
|
||||
"succeed until you start another torrent, enable open trackers, or enable "
|
||||
"DHT."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
|
||||
#, java-format
|
||||
msgid "Download already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
|
||||
#, java-format
|
||||
msgid "Torrent \"{0}\" has no data, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
|
||||
#, java-format
|
||||
msgid "Up bandwidth limit is {0} KBps"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
|
||||
#, java-format
|
||||
msgid "Error on torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
|
||||
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
|
||||
msgid "Opening the I2P tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
|
||||
msgid "Closing I2P tunnel after notifying trackers."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:237
|
||||
#: ../java/src/org/klomp/snark/TrackerClient.java:234
|
||||
#, java-format
|
||||
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
|
||||
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
|
||||
#, java-format
|
||||
msgid "Updating from {0}"
|
||||
msgstr ""
|
||||
@ -732,7 +734,8 @@ msgstr ""
|
||||
msgid "Enter valid tracker name and URLs"
|
||||
msgstr ""
|
||||
|
||||
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#. "<input type=\"reset\" class=\"cancel\"
|
||||
#. value=\"").append(_("Cancel")).append("\">\n" +
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
|
||||
msgid "Restore defaults"
|
||||
@ -920,8 +923,8 @@ msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
|
||||
msgid ""
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
|
||||
"info hash"
|
||||
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
|
||||
" info hash"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
|
||||
@ -941,7 +944,8 @@ msgstr ""
|
||||
msgid "Create Torrent"
|
||||
msgstr ""
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
|
||||
#. value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
|
||||
msgid "Data to seed"
|
||||
msgstr ""
|
||||
@ -1050,8 +1054,8 @@ msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
|
||||
msgid ""
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed "
|
||||
"in the torrent file"
|
||||
"If checked, announce torrents to open trackers as well as the tracker listed"
|
||||
" in the torrent file"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
|
||||
|
@ -4,6 +4,15 @@
|
||||
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
|
||||
|
||||
<web-app>
|
||||
<filter>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>org.klomp.snark.web.I2PSnarkServlet</servlet-name>
|
||||
<servlet-class>org.klomp.snark.web.I2PSnarkServlet</servlet-class>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user