mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-04 20:34:17 +02:00
Compare commits
847 Commits
v1.8.3
...
v2.0.2-rc2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c9bc42b69 | ||
|
|
d09de79491 | ||
|
|
24a801dfd3 | ||
|
|
af79bc9211 | ||
|
|
a3904f4d32 | ||
|
|
b7c927f349 | ||
|
|
64718fe567 | ||
|
|
79f14e0933 | ||
|
|
3ad8c692a4 | ||
|
|
546cab3f62 | ||
|
|
83edb7fb8a | ||
|
|
0c59c85127 | ||
|
|
d6098c39dc | ||
|
|
af721118cd | ||
|
|
0d5f2b5d31 | ||
|
|
1790a128aa | ||
|
|
87fa1794a1 | ||
|
|
4df828d0b0 | ||
|
|
4d1d6dff3b | ||
|
|
81e30cd8d2 | ||
|
|
983671c8cb | ||
|
|
eb6b254dc5 | ||
|
|
745cf55abb | ||
|
|
e1c634d000 | ||
|
|
49a3a3ba7b | ||
|
|
9982211ced | ||
|
|
10f59bf3ad | ||
|
|
7487d02a70 | ||
|
|
c39f6c3fae | ||
|
|
f4365dcca0 | ||
|
|
fd75d5c679 | ||
|
|
014a53f990 | ||
|
|
da76ba6c64 | ||
|
|
afeb9e07e2 | ||
|
|
f22535e18a | ||
|
|
0f4e88eeaa | ||
|
|
70476c332a | ||
|
|
79145ff9fd | ||
|
|
a0eb4b9c85 | ||
|
|
f6631443a1 | ||
|
|
87ad4dd264 | ||
|
|
bb289f63f1 | ||
|
|
67a71ff10f | ||
|
|
6b1bfb4474 | ||
|
|
8158984ad6 | ||
|
|
7b61bcfe10 | ||
|
|
3cbd63a77a | ||
|
|
62eeed5201 | ||
|
|
9558822a7c | ||
|
|
7bf31e56ab | ||
|
|
d8c5e58fa1 | ||
|
|
d0c2ce276a | ||
|
|
9e813c7dcf | ||
|
|
440687af21 | ||
|
|
77a9b28e14 | ||
|
|
f84654c9b3 | ||
|
|
641dece89a | ||
|
|
2c9d418423 | ||
|
|
a897a1805e | ||
|
|
fe88b48fb1 | ||
|
|
574c699382 | ||
|
|
7b97b96115 | ||
|
|
e7e0e5b57f | ||
|
|
b72e2b146d | ||
|
|
a1421ff74f | ||
|
|
57f10c0c8e | ||
|
|
1f5834b74a | ||
|
|
836d7e1e5d | ||
|
|
48df009cea | ||
|
|
6343417def | ||
|
|
8c02034838 | ||
|
|
290cc58a63 | ||
|
|
5274b2485f | ||
|
|
fc95e47790 | ||
|
|
caaf8c841e | ||
|
|
6816cdd1c3 | ||
|
|
5f857a49b8 | ||
|
|
70ab7f04b3 | ||
|
|
c1045af500 | ||
|
|
c5c1a7a1c3 | ||
|
|
4144d4672f | ||
|
|
9cfa63eed8 | ||
|
|
68ed64e11d | ||
|
|
043655bd7a | ||
|
|
c71058980a | ||
|
|
68947525a0 | ||
|
|
38eaf241fa | ||
|
|
8f8bf98ca6 | ||
|
|
ef0ab93e05 | ||
|
|
95e370b70c | ||
|
|
5f06e3f738 | ||
|
|
3ba4e38693 | ||
|
|
c09b4e1477 | ||
|
|
ca95276298 | ||
|
|
5caf1ffb17 | ||
|
|
c2431f2c3b | ||
|
|
15e4d9e317 | ||
|
|
ef607e29de | ||
|
|
25d1defd73 | ||
|
|
abfd97949d | ||
|
|
5347a991cf | ||
|
|
f1a9e669b4 | ||
|
|
2d4bb31beb | ||
|
|
57e9f96836 | ||
|
|
5a791ec11e | ||
|
|
9dc9a7eac4 | ||
|
|
e695144cd8 | ||
|
|
cb6522e735 | ||
|
|
78a3453953 | ||
|
|
a08cb3846c | ||
|
|
d0aef138c3 | ||
|
|
6930cd6687 | ||
|
|
7bafc92df3 | ||
|
|
223a162a8b | ||
|
|
1f6efab318 | ||
|
|
7128b0122e | ||
|
|
ba542cacb8 | ||
|
|
2f20c15824 | ||
|
|
6058b507c8 | ||
|
|
0d55562869 | ||
|
|
c2fd708ce9 | ||
|
|
1aff9bca95 | ||
|
|
d76f76f429 | ||
|
|
1de4d96ab1 | ||
|
|
78ed4866ce | ||
|
|
d061a4b434 | ||
|
|
429f8229b3 | ||
|
|
eb154de2a1 | ||
|
|
8c2b5af7f0 | ||
|
|
9004fd6d11 | ||
|
|
5f660bf080 | ||
|
|
1f55598010 | ||
|
|
9eec45f9c4 | ||
|
|
cf7726353a | ||
|
|
93e1ad088c | ||
|
|
13b6b3989a | ||
|
|
2a8aa8a108 | ||
|
|
b490be2267 | ||
|
|
593ad20e69 | ||
|
|
bae552f386 | ||
|
|
16d6418d10 | ||
|
|
995b42d0fc | ||
|
|
c0f8ff1030 | ||
|
|
8e2b9c6f12 | ||
|
|
7d191763b5 | ||
|
|
144a1a1922 | ||
|
|
be3529ebcb | ||
|
|
e00cc4ed5b | ||
|
|
613736aa41 | ||
|
|
b83c723e3f | ||
|
|
6b222c3db7 | ||
|
|
088c0d471a | ||
|
|
5e657aadee | ||
|
|
98e6d61d1b | ||
|
|
df534753b1 | ||
|
|
02c077e3f8 | ||
|
|
ba2145032e | ||
|
|
bff9d646f7 | ||
|
|
8495d097bb | ||
|
|
66f340734c | ||
|
|
794f071561 | ||
|
|
c6794afc3a | ||
|
|
8920ba3de2 | ||
|
|
14c55083f3 | ||
|
|
c832a9eee5 | ||
|
|
699acc99e4 | ||
|
|
90338499d3 | ||
|
|
641f56664e | ||
|
|
419deff861 | ||
|
|
69f8dd896f | ||
|
|
e49a8a9ffe | ||
|
|
b6e0802203 | ||
|
|
e03fe8bcbf | ||
|
|
7bfbc21770 | ||
|
|
d853b4f083 | ||
|
|
d8939184db | ||
|
|
e54253d845 | ||
|
|
141d43a1ee | ||
|
|
0fac72f3b3 | ||
|
|
cc4bc2e47a | ||
|
|
0fa4353841 | ||
|
|
58ea498a62 | ||
|
|
688aaadb60 | ||
|
|
f77ae28ed1 | ||
|
|
0d08bbec74 | ||
|
|
ebee6f0bc2 | ||
|
|
db8f9586cb | ||
|
|
35318ea9b5 | ||
|
|
7aeb27d5ee | ||
|
|
322288bf6c | ||
|
|
6b7bfc75a8 | ||
|
|
abe96135ff | ||
|
|
8bf2db27dd | ||
|
|
c48c5b9286 | ||
|
|
d503221b2e | ||
|
|
b3a462d452 | ||
|
|
916f522010 | ||
|
|
967b533e37 | ||
|
|
9172a5fc4c | ||
|
|
17e9b65cad | ||
|
|
a976f75783 | ||
|
|
3ebc422bb5 | ||
|
|
9f765c940e | ||
|
|
1a0d0c0a31 | ||
|
|
ce769cb1ef | ||
|
|
8fb4adf40d | ||
|
|
03954b5918 | ||
|
|
ab4fa905fc | ||
|
|
530552820d | ||
|
|
cb1bcdc8e0 | ||
|
|
1f43c47861 | ||
|
|
5414c65442 | ||
|
|
f38deb44fb | ||
|
|
937526b881 | ||
|
|
7ba97d88d5 | ||
|
|
64b211f5db | ||
|
|
32c636a471 | ||
|
|
2d421a8275 | ||
|
|
ed28a21cb0 | ||
|
|
3db0db451e | ||
|
|
035e57cf37 | ||
|
|
07ca0be3c5 | ||
|
|
e71cca128d | ||
|
|
fe49255bff | ||
|
|
20f4ec6b67 | ||
|
|
92f6134ed3 | ||
|
|
a0f9b834b6 | ||
|
|
2ad57ee8ab | ||
|
|
6c5328e4ca | ||
|
|
6cf1caeaf3 | ||
|
|
ce233105b6 | ||
|
|
30033cdd7d | ||
|
|
18f54ad758 | ||
|
|
4eadaeafc9 | ||
|
|
3414b58b99 | ||
|
|
14d1919139 | ||
|
|
7aae5e494a | ||
|
|
0711a2fc12 | ||
|
|
577eb1f609 | ||
|
|
92fc902e0c | ||
|
|
791c550a8e | ||
|
|
344d3565f8 | ||
|
|
73785d0473 | ||
|
|
b155503fa2 | ||
|
|
2c011dcae6 | ||
|
|
0e0af1da07 | ||
|
|
a7d0f0cdd4 | ||
|
|
488d57d81c | ||
|
|
38aa4cf304 | ||
|
|
0638f99b79 | ||
|
|
da93f37067 | ||
|
|
9a0fba5f5e | ||
|
|
bd39543542 | ||
|
|
49949084fb | ||
|
|
b584f37906 | ||
|
|
70f3b91a1e | ||
|
|
15545168d4 | ||
|
|
2d797c9408 | ||
|
|
8d5ffccaf1 | ||
|
|
855947751e | ||
|
|
9dd9a9a524 | ||
|
|
554e5b8f73 | ||
|
|
f368c0e379 | ||
|
|
f0e6864639 | ||
|
|
6c57d71ca4 | ||
|
|
64bd6b204b | ||
|
|
7ca8040788 | ||
|
|
c98ee987cd | ||
|
|
bd16ad4783 | ||
|
|
6aea40534e | ||
|
|
309e0c5902 | ||
|
|
7317e9af61 | ||
|
|
bfb637e64d | ||
|
|
e54bbcd15f | ||
|
|
149d6c32c1 | ||
|
|
0da6184f84 | ||
|
|
0ca3df917e | ||
|
|
12fe59e3ce | ||
|
|
3bfb8f6906 | ||
|
|
7527ee0cd3 | ||
|
|
080ec49fae | ||
|
|
fe92186ce0 | ||
|
|
ab52c8bcd7 | ||
|
|
485dde8fb5 | ||
|
|
1ad80878b2 | ||
|
|
81c19232a5 | ||
|
|
fd83ee64af | ||
|
|
dcfa6b97e3 | ||
|
|
593016718d | ||
|
|
2dbe822972 | ||
|
|
38b8508f15 | ||
|
|
76ce5adbf0 | ||
|
|
9f27cc1fac | ||
|
|
2a14c121db | ||
|
|
01855302a0 | ||
|
|
5c9b865cec | ||
|
|
5f832b5b39 | ||
|
|
b75b5a5a0c | ||
|
|
f32c8d0570 | ||
|
|
b49e9e8f30 | ||
|
|
bf20a0d2f8 | ||
|
|
6fcb48a0c7 | ||
|
|
5685aa7ff0 | ||
|
|
3238d61ef6 | ||
|
|
299faae830 | ||
|
|
6b003f96f5 | ||
|
|
1fe82ac70c | ||
|
|
7786f1f9a9 | ||
|
|
28c732af33 | ||
|
|
5429ab4a85 | ||
|
|
ace847d177 | ||
|
|
dc44ebf41b | ||
|
|
aa6c09d942 | ||
|
|
00c56aab02 | ||
|
|
a9acb185a0 | ||
|
|
3267c15aff | ||
|
|
f25df3311c | ||
|
|
9c63740d26 | ||
|
|
379beb268f | ||
|
|
5bd631e8e7 | ||
|
|
fe42c1a818 | ||
|
|
6152ce4187 | ||
|
|
3b59960fb3 | ||
|
|
bd71fdc388 | ||
|
|
6110a99afc | ||
|
|
0dd20ccf3b | ||
|
|
9698324c4e | ||
|
|
9dcce01e54 | ||
|
|
e0cf5c3920 | ||
|
|
3ab49143e1 | ||
|
|
cfb16a6eef | ||
|
|
fad9a3056c | ||
|
|
0176ffd25d | ||
|
|
385c3882a7 | ||
|
|
85f5424a13 | ||
|
|
3c82f66219 | ||
|
|
9bbf9b86b7 | ||
|
|
3ce210f298 | ||
|
|
f74053f8ed | ||
|
|
854bfb870d | ||
|
|
a6d70c9c63 | ||
|
|
c2c924931b | ||
|
|
6b4a9d9cd9 | ||
|
|
55e55b0806 | ||
|
|
4441d3b342 | ||
|
|
147c59c6d8 | ||
|
|
f36b95d6b0 | ||
|
|
0ca5f4a382 | ||
|
|
60863b14bb | ||
|
|
06515d4e96 | ||
|
|
b967359a74 | ||
|
|
ae7b2509a5 | ||
|
|
8b52a121bb | ||
|
|
df625f0d49 | ||
|
|
68cff5cd10 | ||
|
|
b906c70a86 | ||
|
|
2a4396fbdb | ||
|
|
9ecd892a48 | ||
|
|
c7353fc382 | ||
|
|
b8b4e2c094 | ||
|
|
ee75d37983 | ||
|
|
ecf545a0b9 | ||
|
|
aade9111d4 | ||
|
|
7c52e925b9 | ||
|
|
b5edc635a1 | ||
|
|
6a20ea5e73 | ||
|
|
cad2d639af | ||
|
|
5657d4ec1b | ||
|
|
4b9352f291 | ||
|
|
2d49f4c844 | ||
|
|
71c9e4da16 | ||
|
|
50195ce4be | ||
|
|
47a8fbb07e | ||
|
|
3501f66a0f | ||
|
|
049d49eba8 | ||
|
|
593aa003d6 | ||
|
|
29d7903c22 | ||
|
|
1feb74981e | ||
|
|
2cf29352b8 | ||
|
|
ce5be89a18 | ||
|
|
7202bbcf5d | ||
|
|
aee20e0ed3 | ||
|
|
72b2c52e15 | ||
|
|
7985c0d7f1 | ||
|
|
12fbca48b8 | ||
|
|
a9858d4ed2 | ||
|
|
499e13377d | ||
|
|
6e32c2c14e | ||
|
|
26cb737bb1 | ||
|
|
8ec4d0f19b | ||
|
|
dc299b0bf9 | ||
|
|
952c249039 | ||
|
|
0e3262b181 | ||
|
|
ba896eabfb | ||
|
|
646890abb3 | ||
|
|
cad33de824 | ||
|
|
9a9cefbcc5 | ||
|
|
38da1b7de1 | ||
|
|
157f59d44a | ||
|
|
b470d0f7b8 | ||
|
|
c73a97a17c | ||
|
|
f6cd2c79d5 | ||
|
|
a7b0f7b42e | ||
|
|
ad9ef0493e | ||
|
|
46964b1b87 | ||
|
|
8216727553 | ||
|
|
864bf33f10 | ||
|
|
514372db6b | ||
|
|
45a6436b6d | ||
|
|
db8b919099 | ||
|
|
18efb21157 | ||
|
|
89ebad895d | ||
|
|
cd19ee5020 | ||
|
|
7da4a081d3 | ||
|
|
32d0d0b33d | ||
|
|
61e4c3db3a | ||
|
|
0c9de83a79 | ||
|
|
f15236acb7 | ||
|
|
51a4190192 | ||
|
|
dcf7e8a631 | ||
|
|
48624fe033 | ||
|
|
78b63c34cb | ||
|
|
26d137cac6 | ||
|
|
d51bd94447 | ||
|
|
f66ebb2f1e | ||
|
|
b8d21bdd51 | ||
|
|
a501bf5b83 | ||
|
|
cdb556e404 | ||
|
|
e21ddfedcb | ||
|
|
2a22cec442 | ||
|
|
579e24be10 | ||
|
|
1e72ea45dd | ||
|
|
0a93dc5e63 | ||
|
|
eafc45d83c | ||
|
|
79d895ed9e | ||
|
|
fd5330b469 | ||
|
|
817a165da7 | ||
|
|
0c5528806d | ||
|
|
6992631c4c | ||
|
|
7fc7925d17 | ||
|
|
f01b7bb5db | ||
|
|
48dac23b0f | ||
|
|
7f8e9a0e70 | ||
|
|
527fd1ac47 | ||
|
|
795922e2a0 | ||
|
|
6d3f607396 | ||
|
|
3b261bc612 | ||
|
|
07ddf18b3b | ||
|
|
0642e63246 | ||
|
|
dccaba98af | ||
|
|
cbbc5af834 | ||
|
|
b012fae144 | ||
|
|
ed51358478 | ||
|
|
6d522a1467 | ||
|
|
73209717ec | ||
|
|
c85ace11dd | ||
|
|
b07ab14c31 | ||
|
|
c95bbe27e7 | ||
|
|
d9c52f6316 | ||
|
|
ec86d1a151 | ||
|
|
22013eb528 | ||
|
|
6c8ff7c61a | ||
|
|
4016e0863f | ||
|
|
3b510969a2 | ||
|
|
28ab3666d3 | ||
|
|
ff6c11f126 | ||
|
|
45b598cacb | ||
|
|
0ccaae9a22 | ||
|
|
6f498aea3b | ||
|
|
a2f9ba47fb | ||
|
|
fea997c84a | ||
|
|
316427c801 | ||
|
|
c34641f4f7 | ||
|
|
21f7cea609 | ||
|
|
59a7ae56d4 | ||
|
|
a58cb049b2 | ||
|
|
a6f493ff94 | ||
|
|
afed400ac6 | ||
|
|
89b8555aa7 | ||
|
|
320cc1c7dd | ||
|
|
0a08a51a41 | ||
|
|
b22e284191 | ||
|
|
adc239c9d0 | ||
|
|
681466213f | ||
|
|
cb4bfd8060 | ||
|
|
a9dfcdd463 | ||
|
|
b9edc64982 | ||
|
|
d00aa3da84 | ||
|
|
fa6dc8dbb7 | ||
|
|
7a8a8ceedc | ||
|
|
5d9e752c71 | ||
|
|
44870fae9f | ||
|
|
92513207eb | ||
|
|
2cebd8bc2e | ||
|
|
9acc9d2d44 | ||
|
|
2124098f84 | ||
|
|
944564258c | ||
|
|
0a6aa88d72 | ||
|
|
bc542a4b80 | ||
|
|
59f93b77c3 | ||
|
|
7e79a78901 | ||
|
|
2f2ae09190 | ||
|
|
b59fc39d13 | ||
|
|
d284b48db4 | ||
|
|
724c0c2953 | ||
|
|
770ca77673 | ||
|
|
bdf5029d47 | ||
|
|
d53eaf8fd6 | ||
|
|
2bcfb734b0 | ||
|
|
50bf0ee85e | ||
|
|
951c9812f1 | ||
|
|
4ad9b7d72d | ||
|
|
3d55191573 | ||
|
|
55e1f8a060 | ||
|
|
031d35de03 | ||
|
|
c72b6fb8e6 | ||
|
|
a5528b7cd4 | ||
|
|
cfe5150037 | ||
|
|
1aa17cdb69 | ||
|
|
ddf7419aca | ||
|
|
27e0f9d132 | ||
|
|
7195e40ffa | ||
|
|
3ba6e20f66 | ||
|
|
711ae1d347 | ||
|
|
a4336092f6 | ||
|
|
3a5f66e976 | ||
|
|
9461e4ccd1 | ||
|
|
7b8dc9777e | ||
|
|
e11f59af32 | ||
|
|
b0aedef4b0 | ||
|
|
da87a47eaf | ||
|
|
c940762b7c | ||
|
|
7aa2b50828 | ||
|
|
e0abbc0b83 | ||
|
|
65a3847a35 | ||
|
|
3344249297 | ||
|
|
b686a3dbdb | ||
|
|
454e9d9906 | ||
|
|
908881cbf7 | ||
|
|
2ac8646320 | ||
|
|
7edb57e46c | ||
|
|
3b0f76f853 | ||
|
|
89df528090 | ||
|
|
92dc3047d0 | ||
|
|
371fc0ffa2 | ||
|
|
cdb88d621c | ||
|
|
b485e8f97f | ||
|
|
ab23368764 | ||
|
|
6030b4416d | ||
|
|
cd64d3ae2c | ||
|
|
aabad22cef | ||
|
|
247771fbba | ||
|
|
e5568b5d13 | ||
|
|
4dbe0693df | ||
|
|
a8fb94f51b | ||
|
|
c052f6d4c9 | ||
|
|
7f893aa676 | ||
|
|
45180a024d | ||
|
|
992d375e90 | ||
|
|
644486871b | ||
|
|
08fcf650eb | ||
|
|
e28fab0c61 | ||
|
|
7f628e6f7e | ||
|
|
a076a170ee | ||
|
|
ccc91a52a8 | ||
|
|
4cb78999d2 | ||
|
|
1a69e2ae8d | ||
|
|
c7ba7c8e9f | ||
|
|
8bb1a49aaf | ||
|
|
b8077d2f5b | ||
|
|
02a5a8ea3b | ||
|
|
56954c6482 | ||
|
|
bb1b1ab7e3 | ||
|
|
d303df7fa0 | ||
|
|
a280007dc2 | ||
|
|
d9b44b3a69 | ||
|
|
5214189eb2 | ||
|
|
3aed7fc0be | ||
|
|
2e04eba74b | ||
|
|
2cce8065ab | ||
|
|
8183c37dfe | ||
|
|
201d397391 | ||
|
|
f98af43d31 | ||
|
|
b9b5e1cf33 | ||
|
|
2b391396c6 | ||
|
|
5caff8cc93 | ||
|
|
599ee90500 | ||
|
|
e74801fd3d | ||
|
|
2f0a404116 | ||
|
|
472eed7f20 | ||
|
|
7d2bb261dc | ||
|
|
68668e25bd | ||
|
|
e2cb6e8086 | ||
|
|
d1bfc7a636 | ||
|
|
41111541c5 | ||
|
|
f87d0139e1 | ||
|
|
ceddbe248e | ||
|
|
ef1f2d2b79 | ||
|
|
9c9ff886c9 | ||
|
|
ed0fb76cd7 | ||
|
|
263fa5882b | ||
|
|
ae69ff032b | ||
|
|
1a58e6606c | ||
|
|
e390c22f96 | ||
|
|
7053f76d1e | ||
|
|
030d1e636b | ||
|
|
9ad79cfc52 | ||
|
|
76903fb55a | ||
|
|
0b8163fae1 | ||
|
|
0fb43dbc3a | ||
|
|
0610d3ea8d | ||
|
|
ba613a152a | ||
|
|
7e6804fda8 | ||
|
|
a1b6571d53 | ||
|
|
1d8c919645 | ||
|
|
2db7ab5c46 | ||
|
|
5ff733cfb7 | ||
|
|
bf183f425d | ||
|
|
1b31f45435 | ||
|
|
4420d52919 | ||
|
|
e88ce41f4f | ||
|
|
2d08e02dda | ||
|
|
8aeb3cc8d2 | ||
|
|
2fa00168cf | ||
|
|
a61a780c2a | ||
|
|
575ca50aac | ||
|
|
4a541a9ab4 | ||
|
|
ec5894ef7a | ||
|
|
c4bc1da171 | ||
|
|
66e8aaeabc | ||
|
|
eff4daa00b | ||
|
|
0735aa1fbd | ||
|
|
076f8ea105 | ||
|
|
ef1e6add4f | ||
|
|
ec3fc50e0e | ||
|
|
360a0eeee1 | ||
|
|
7a324ff25b | ||
|
|
389faa4bcb | ||
|
|
23ccaa2821 | ||
|
|
51c10de672 | ||
|
|
84fdc8c6c0 | ||
|
|
516509b4ed | ||
|
|
236951d9b3 | ||
|
|
e7d7646151 | ||
|
|
7757886ebc | ||
|
|
61a1a0bb2d | ||
|
|
77941b5ba7 | ||
|
|
10aaf18129 | ||
|
|
f4c816f378 | ||
|
|
7332afa171 | ||
|
|
db87d2a18e | ||
|
|
d7555cc14e | ||
|
|
29fecb029e | ||
|
|
13a15a6256 | ||
|
|
494f08de8c | ||
|
|
678b6affa2 | ||
|
|
1fa5fa91a8 | ||
|
|
fc99070b54 | ||
|
|
4d21800a05 | ||
|
|
e3278c8312 | ||
|
|
eca3d48510 | ||
|
|
c56cb2235c | ||
|
|
18efc5eb65 | ||
|
|
9797782682 | ||
|
|
121577340a | ||
|
|
0320627263 | ||
|
|
bb85db6cc5 | ||
|
|
dd5ddf2166 | ||
|
|
85938ab1f1 | ||
|
|
79cc902673 | ||
|
|
214bc6b29b | ||
|
|
84bae92264 | ||
|
|
191d66fc6f | ||
|
|
e111e11dab | ||
|
|
c98bcc8e9e | ||
|
|
a4f519eaeb | ||
|
|
db38bf4a0c | ||
|
|
c11358219a | ||
|
|
28d6d0dc1e | ||
|
|
5f44218727 | ||
|
|
977b1464b5 | ||
|
|
52f64358c7 | ||
|
|
d902a37dfd | ||
|
|
0cfc518c33 | ||
|
|
f8cbed34c2 | ||
|
|
2e177590a6 | ||
|
|
7f0735a955 | ||
|
|
ce0a0e3f0d | ||
|
|
6e337ad242 | ||
|
|
02f6dbba46 | ||
|
|
bfcfdeec64 | ||
|
|
758a820b0c | ||
|
|
e321280eae | ||
|
|
3c8409ee69 | ||
|
|
a3c543a627 | ||
|
|
8bcd0261dc | ||
|
|
fa0faee8ba | ||
|
|
bea8896012 | ||
|
|
1dabdc7df1 | ||
|
|
11c8415cd6 | ||
|
|
bc0f1f131f | ||
|
|
81c10da8dc | ||
|
|
6ca3723480 | ||
|
|
2296f6a4a5 | ||
|
|
53f2468430 | ||
|
|
cc3543dbd2 | ||
|
|
05ed126bfd | ||
|
|
5ab20e64bf | ||
|
|
e9e11d251f | ||
|
|
139b28b471 | ||
|
|
16786eed54 | ||
|
|
e135d4cccf | ||
|
|
c8cb604c18 | ||
|
|
5b65bbf8e5 | ||
|
|
449aa275d4 | ||
|
|
9fd45761a8 | ||
|
|
67f7892958 | ||
|
|
6df7551bdd | ||
|
|
5dcb276376 | ||
|
|
1b9d82679c | ||
|
|
95c04e59fe | ||
|
|
03eb11b927 | ||
|
|
bacf6166c1 | ||
|
|
02ffbf8989 | ||
|
|
89376e14d6 | ||
|
|
e32bd5a59f | ||
|
|
12f760535d | ||
|
|
e1f94cea4f | ||
|
|
fc23e810fd | ||
|
|
e587c8e2dc | ||
|
|
984434c728 | ||
|
|
7880f4da94 | ||
|
|
524aa507e6 | ||
|
|
28a66cb393 | ||
|
|
507206367f | ||
|
|
9e17ddffae | ||
|
|
a621223cc8 | ||
|
|
d0f81f466e | ||
|
|
7bb2834d8b | ||
|
|
10d9e53159 | ||
|
|
2c67692958 | ||
|
|
5cb10bf6a1 | ||
|
|
54a42e401b | ||
|
|
6b27d2e703 | ||
|
|
abaf2138cf | ||
|
|
265b4415c3 | ||
|
|
f8b52ffdd3 | ||
|
|
63294f0702 | ||
|
|
330b352001 | ||
|
|
051ac5e290 | ||
|
|
f4b82a9892 | ||
|
|
d7fa03cf2e | ||
|
|
af94e8943d | ||
|
|
a0e3858a7c | ||
|
|
08184d07cf | ||
|
|
ac0e08cc91 | ||
|
|
2a45ebde33 | ||
|
|
299fa2dee6 | ||
|
|
de9770f52a | ||
|
|
389c4f8ef9 | ||
|
|
3a7bd3f95c | ||
|
|
1136b969b2 | ||
|
|
716b0c68da | ||
|
|
1edd46b995 | ||
|
|
00a075b0d8 | ||
|
|
3b34d5b54e | ||
|
|
0f51de20c4 | ||
|
|
ea39e457f5 | ||
|
|
b54f2b3b31 | ||
|
|
a36df4aa4b | ||
|
|
f2004da867 | ||
|
|
7ea1baaf2d | ||
|
|
77a28a81eb | ||
|
|
24f751d981 | ||
|
|
8d93af21a1 | ||
|
|
7c0c7da9bf | ||
|
|
027365aaa6 | ||
|
|
58867baf33 | ||
|
|
f315423811 | ||
|
|
79f7ea0965 | ||
|
|
f3bdfef9cf | ||
|
|
bfba6f752c | ||
|
|
018cc54a94 | ||
|
|
e02f1a222e | ||
|
|
e4694a6db8 | ||
|
|
e5ad1b27b4 | ||
|
|
92e259c276 | ||
|
|
f81918173b | ||
|
|
4006bcdaed | ||
|
|
3e4886725a | ||
|
|
f688bda759 | ||
|
|
ac855858de | ||
|
|
ae17f58b80 | ||
|
|
23dc464ea2 | ||
|
|
04382c467b | ||
|
|
be1b39067d | ||
|
|
ddfb7f3b7a | ||
|
|
27159104a9 | ||
|
|
a13a974e2d | ||
|
|
f184d66ea2 | ||
|
|
11927d625d | ||
|
|
abfdc574d4 | ||
|
|
d64373c610 | ||
|
|
28306e5dfb | ||
|
|
89bb58ac30 | ||
|
|
3cc2e1a968 | ||
|
|
8390b0b930 | ||
|
|
dbddabfcd7 | ||
|
|
0d30e01e98 | ||
|
|
68bf22f469 | ||
|
|
96ecdb866d | ||
|
|
7d68c628db | ||
|
|
509b83e73e | ||
|
|
0f33e266ce | ||
|
|
d1e46056ae | ||
|
|
cf5100a20b | ||
|
|
ffbf2fb6ce | ||
|
|
2e4e031795 | ||
|
|
12d7484b85 | ||
|
|
a932eac832 | ||
|
|
2da3bfb96f | ||
|
|
5dffd11755 | ||
|
|
afdd01488f | ||
|
|
f3cb5f8a9d | ||
|
|
85ff245aef | ||
|
|
71e8910e02 | ||
|
|
426d2338d9 | ||
|
|
dfd9d8725c | ||
|
|
d55d8c0152 | ||
|
|
9d7cf6b852 | ||
|
|
1f327d683a | ||
|
|
1d3100848e | ||
|
|
e9ea895a01 | ||
|
|
9351c5eefa | ||
|
|
8dd374fc2b | ||
|
|
457f9b587d | ||
|
|
40cdbda312 | ||
|
|
bd8b7cdff2 | ||
|
|
4e56b0d266 | ||
|
|
19479fdf6b | ||
|
|
fba9020950 | ||
|
|
ae57bf28c6 | ||
|
|
6375d0b284 | ||
|
|
4b212f905f | ||
|
|
1aaa9db34e | ||
|
|
cd20208fdc | ||
|
|
a786511769 |
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -3,7 +3,7 @@
|
|||||||
url = https://github.com/owncloud/documentation
|
url = https://github.com/owncloud/documentation
|
||||||
[submodule "src/3rdparty/qtmacgoodies"]
|
[submodule "src/3rdparty/qtmacgoodies"]
|
||||||
path = src/3rdparty/qtmacgoodies
|
path = src/3rdparty/qtmacgoodies
|
||||||
url = git://github.com/shadone/qtmacgoodies.git
|
url = git://github.com/guruz/qtmacgoodies.git
|
||||||
[submodule "binary"]
|
[submodule "binary"]
|
||||||
path = binary
|
path = binary
|
||||||
url = git://github.com/owncloud/owncloud-client-binary.git
|
url = git://github.com/owncloud/owncloud-client-binary.git
|
||||||
|
|||||||
31
.travis.yml
Normal file
31
.travis.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
language: cpp
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- coverity_scan
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/owncloud-client.list"
|
||||||
|
- sudo sh -c "echo 'deb-src http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/owncloud-client.list"
|
||||||
|
- wget http://download.opensuse.org/repositories/isv:ownCloud:desktop/xUbuntu_12.04/Release.key
|
||||||
|
- sudo apt-key add - < Release.key
|
||||||
|
- sudo apt-get update
|
||||||
|
- sudo apt-get build-dep owncloud-client
|
||||||
|
- checkout=$(git show-ref --head --hash head)
|
||||||
|
- cd ../
|
||||||
|
- wget https://scan.coverity.com/download/linux-64 --post-data "token=$token&project=owncloud%2Fmirall" -O coverity_tool.tgz
|
||||||
|
- mkdir coverity
|
||||||
|
- tar -xvf coverity_tool.tgz -C coverity --strip-components=1
|
||||||
|
- export PATH=$PATH:$PWD/coverity/bin/
|
||||||
|
- cd $TRAVIS_BUILD_DIR
|
||||||
|
|
||||||
|
install:
|
||||||
|
- cd ../
|
||||||
|
- mkdir client-build
|
||||||
|
- cd client-build
|
||||||
|
- cmake -DCMAKE_BUILD_TYPE="Debug" $TRAVIS_BUILD_DIR
|
||||||
|
- cov-build --dir cov-int make
|
||||||
|
- tar czvf client.tgz cov-int
|
||||||
|
- curl --form token=$token --form email=lukas@statuscode.ch --form file=@$PWD/client.tgz --form version="$checkout" --form description="$checkout" https://scan.coverity.com/builds?project=owncloud%2Fmirall
|
||||||
|
|
||||||
|
# Hack to stop processing
|
||||||
|
script: true
|
||||||
@@ -32,7 +32,7 @@ include(Warnings)
|
|||||||
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
|
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
|
||||||
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/")
|
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/")
|
||||||
|
|
||||||
# disable the crashrepoter if libcrashreporter-qt is not available or we're building for ARM
|
# disable the crashreporter if libcrashreporter-qt is not available or we're building for ARM
|
||||||
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/libcrashreporter-qt/CMakeLists.txt")
|
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/libcrashreporter-qt/CMakeLists.txt")
|
||||||
set( WITH_CRASHREPORTER OFF )
|
set( WITH_CRASHREPORTER OFF )
|
||||||
endif()
|
endif()
|
||||||
@@ -74,6 +74,10 @@ message(STATUS "GIT_SHA1 ${GIT_SHA1}")
|
|||||||
|
|
||||||
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
|
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
|
||||||
set(DATADIR ${DATA_INSTALL_DIR})
|
set(DATADIR ${DATA_INSTALL_DIR})
|
||||||
|
if(WIN32)
|
||||||
|
set(DATADIR "share")
|
||||||
|
endif(WIN32)
|
||||||
|
set(SHAREDIR ${DATADIR})
|
||||||
|
|
||||||
#####
|
#####
|
||||||
## handle BUILD_OWNCLOUD_OSX_BUNDLE
|
## handle BUILD_OWNCLOUD_OSX_BUNDLE
|
||||||
@@ -110,14 +114,18 @@ endif()
|
|||||||
# this option creates only libocsync and libowncloudsync
|
# this option creates only libocsync and libowncloudsync
|
||||||
option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF)
|
option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF)
|
||||||
|
|
||||||
# When this option is enabled, 5xx errors are not added to the clacklist
|
# When this option is enabled, 5xx errors are not added to the blacklist
|
||||||
# Normaly you don't want to enable this option because if a particular file
|
# Normally you don't want to enable this option because if a particular file
|
||||||
# trigger a bug on the server, you want the file to be blacklisted.
|
# triggers a bug on the server, you want the file to be blacklisted.
|
||||||
option(OWNCLOUD_5XX_NO_BLACKLIST "OWNCLOUD_5XX_NO_BLACKLIST" OFF)
|
option(OWNCLOUD_5XX_NO_BLACKLIST "OWNCLOUD_5XX_NO_BLACKLIST" OFF)
|
||||||
if(OWNCLOUD_5XX_NO_BLACKLIST)
|
if(OWNCLOUD_5XX_NO_BLACKLIST)
|
||||||
add_definitions(-DOWNCLOUD_5XX_NO_BLACKLIST=1)
|
add_definitions(-DOWNCLOUD_5XX_NO_BLACKLIST=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" )
|
||||||
|
endif()
|
||||||
|
|
||||||
#### find libs
|
#### find libs
|
||||||
#find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtXml QtNetwork QtTest QtWebkit REQUIRED )
|
#find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtXml QtNetwork QtTest QtWebkit REQUIRED )
|
||||||
#if( UNIX AND NOT APPLE ) # Fdo notifications
|
#if( UNIX AND NOT APPLE ) # Fdo notifications
|
||||||
@@ -130,14 +138,14 @@ if(HAVE_QT5)
|
|||||||
message(STATUS "Using Qt ${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}.x")
|
message(STATUS "Using Qt ${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}.x")
|
||||||
if (${Qt5Core_VERSION_MAJOR} EQUAL "5")
|
if (${Qt5Core_VERSION_MAJOR} EQUAL "5")
|
||||||
if (${Qt5Core_VERSION_MINOR} EQUAL "4" OR ${Qt5Core_VERSION_MINOR} GREATER 4)
|
if (${Qt5Core_VERSION_MINOR} EQUAL "4" OR ${Qt5Core_VERSION_MINOR} GREATER 4)
|
||||||
message(STATUS "We would not require Neon in this setup, compile without!")
|
message(STATUS "We do not require Neon in this setup, compile without!")
|
||||||
set(USE_NEON FALSE)
|
set(USE_NEON FALSE)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Still requiring Neon with this Qt version :-( Qt 5.4 is better!")
|
message(STATUS "If possible compile me with Qt 5.4 or higher.")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "If possible compile me with Qt 5.4 which is much faster/better.")
|
message(STATUS "If possible compile me with Qt 5.4 or higher.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (USE_NEON)
|
if (USE_NEON)
|
||||||
@@ -194,6 +202,7 @@ add_subdirectory(src)
|
|||||||
if(NOT BUILD_LIBRARIES_ONLY)
|
if(NOT BUILD_LIBRARIES_ONLY)
|
||||||
add_subdirectory(shell_integration)
|
add_subdirectory(shell_integration)
|
||||||
add_subdirectory(doc)
|
add_subdirectory(doc)
|
||||||
|
add_subdirectory(doc/dev)
|
||||||
add_subdirectory(admin)
|
add_subdirectory(admin)
|
||||||
endif(NOT BUILD_LIBRARIES_ONLY)
|
endif(NOT BUILD_LIBRARIES_ONLY)
|
||||||
|
|
||||||
@@ -205,6 +214,7 @@ endif(UNIT_TESTING)
|
|||||||
|
|
||||||
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||||
install(FILES sync-exclude.lst DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/)
|
install(FILES sync-exclude.lst DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/)
|
||||||
|
configure_file(sync-exclude.lst bin/${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/sync-exclude.lst COPYONLY)
|
||||||
else()
|
else()
|
||||||
install( FILES sync-exclude.lst DESTINATION ${SYSCONFDIR}/${APPLICATION_SHORTNAME} )
|
install( FILES sync-exclude.lst DESTINATION ${SYSCONFDIR}/${APPLICATION_SHORTNAME} )
|
||||||
configure_file(sync-exclude.lst bin/sync-exclude.lst COPYONLY)
|
configure_file(sync-exclude.lst bin/sync-exclude.lst COPYONLY)
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ We are also available on [IRC][irc].
|
|||||||
|
|
||||||
### Bug Reporting Guidelines
|
### Bug Reporting Guidelines
|
||||||
* __Important__: Report the issue using our [template][template], it includes all the
|
* __Important__: Report the issue using our [template][template], it includes all the
|
||||||
informations we need to track down the issue.
|
information we need to track down the issue.
|
||||||
|
* __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker
|
||||||
* This repository is *only* for issues within the ownCloud desktop client.
|
* This repository is *only* for issues within the ownCloud desktop client.
|
||||||
Issues in other compontents should be reported in their own repositores:
|
Issues in other components should be reported in their own repositores:
|
||||||
- [ownCloud server](https://github.com/owncloud/core/issues)
|
- [ownCloud server](https://github.com/owncloud/core/issues)
|
||||||
- [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar,
|
- [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar,
|
||||||
Contacts...)
|
Contacts...)
|
||||||
@@ -35,7 +36,7 @@ Before we're able to merge your code to ownCloud Desktop Client, you need to sig
|
|||||||
our [Contributor Agreement][agreement].
|
our [Contributor Agreement][agreement].
|
||||||
|
|
||||||
Please read the [Desktop Client Manual][desktopman] and the [Developer
|
Please read the [Desktop Client Manual][desktopman] and the [Developer
|
||||||
Manuals][devmanual] to get useful infos like how to create your first
|
Manuals][devmanual] to get useful info like how to create your first
|
||||||
application or how to test the ownCloud code with phpunit.
|
application or how to test the ownCloud code with phpunit.
|
||||||
|
|
||||||
[agreement]: http://owncloud.org/about/contributor-agreement/
|
[agreement]: http://owncloud.org/about/contributor-agreement/
|
||||||
|
|||||||
82
ChangeLog
82
ChangeLog
@@ -1,13 +1,91 @@
|
|||||||
ChangeLog
|
ChangeLog
|
||||||
=========
|
=========
|
||||||
|
version 2.0.2 (release 2015-10-xx)
|
||||||
|
* csync_file_stat_s: Save a bit of memory
|
||||||
|
* Shibboleth: Add our base user agent to WebKit
|
||||||
|
* SelectiveSync: Increase folder list timeout to 60
|
||||||
|
* Propagation: Try another sync on 423 Locked #3387
|
||||||
|
* Propagation: Make 423 Locked a soft error #3387
|
||||||
|
* Propagation: Reset upload blacklist if a chunk suceeds
|
||||||
|
* Application: Fix crash on early shutdown #3898
|
||||||
|
* Linux: Don't show settings dialog always when launched twice #3273 #3771 #3485
|
||||||
|
* win32 vio: Add the OPEN_REPARSE_POINTS flag to the CreateFileW call. #3813
|
||||||
|
* AccountSettings: only expand root elements on single click.
|
||||||
|
* AccountSettings: Do not allow to expand the folder list when disconnected.
|
||||||
|
* Use application SHORT name for the name of the MacOSX pkg file (ownBrander).
|
||||||
|
* FolderMan: Fix for removing a syncing folder #3843
|
||||||
|
* ConnectionMethodDialog: Don't be insecure on close #3863
|
||||||
|
* Updater: Ensure folders are not removed #3747
|
||||||
|
* Folder settings: Ensure path is cleaned #3811
|
||||||
|
* Propagator: Simplify sub job finished counting #3844
|
||||||
|
* Share dialog: Hide settings dialog before showing #3783
|
||||||
|
* UI: Only expand 1 level in folder list #3585
|
||||||
|
* UI: Allow folder expanding from button click #3585
|
||||||
|
* UI: Expand folder treeview on single click #3585
|
||||||
|
* GUI: Change tray menu order #3657
|
||||||
|
* GUI: Replace term "sign in" with "Log in" and friends.
|
||||||
|
* SetupPage: Fix crash caused by uninitialized Account object.
|
||||||
|
* Use a themable WebDAV path all over.
|
||||||
|
* Units: Back to the "usual" mix units (JEDEC standard).
|
||||||
|
* csync io: Full UNC path support on Win #3748
|
||||||
|
* Tray: Don't use the tray workaround with the KDE theme #3706, #3765
|
||||||
|
* ShareDialog: Fix folder display #3659
|
||||||
|
* AccountSettings: Restore from legacy only once #3565
|
||||||
|
* SSL Certificate Error Dialog: show account name #3729
|
||||||
|
* Tray notification: Don't show a message about modified folder #3613
|
||||||
|
* PropagateLocalRemove: remove entries from the DB even if there was an error.
|
||||||
|
* Settings UI improvements (eg. #3713, #3721, #3619 and others)
|
||||||
|
* Folder: Do not create the sync folder if it does not exist #3692
|
||||||
|
* Shell integratioon: don't show share menu item for top level folders
|
||||||
|
* Tray: Hide while modifying menus #3656 #3672
|
||||||
|
* AddFolder: Improve remote path selection error handling #3573
|
||||||
|
* csync_update: Use excluded_traversal() to improve performance #3638
|
||||||
|
* csync_excluded: Add fast _traversal() function #3638
|
||||||
|
* csync_exclude: Speed up siginificantly #3638
|
||||||
|
* AccountSettings: Adjust quota info design #3644 #3651
|
||||||
|
* Adjust buttons on remove folder/account questions #3654
|
||||||
|
|
||||||
|
version 2.0.1 (release 2015-09-01)
|
||||||
|
* AccountWizard: fix when the theme specify a override URL (#3699)
|
||||||
|
|
||||||
|
version 2.0.0 (release 2015-08-25)
|
||||||
|
* Add support for multiple accounts (#3084)
|
||||||
|
* Do not sync down new big folders from server without users consent (#3148)
|
||||||
|
* Integrate Selective Sync into the default UI
|
||||||
|
* OS X: Support native finder integration for 10.10 Yosemite (#2340)
|
||||||
|
* Fix situation where client would not reconnect after timeout (#2321)
|
||||||
|
* Use SI units for the file sizes
|
||||||
|
* Improve progress reporting during sync (better estimations, show all files, show all bandwidth)
|
||||||
|
* Windows: Support paths >255 characters (#57) by using Windows API instead of POSIX API
|
||||||
|
* Windows, OS X: Allow to not sync hidden files (#2086)
|
||||||
|
* OS X: Show file name in UI if file has invalid UTF-8 in file name
|
||||||
|
* Sharing: Make use of Capability API (#3439)
|
||||||
|
* Sharing: Do not allow sharing the root folder (#3495)
|
||||||
|
* Sharing: Show thumbnail
|
||||||
|
* Client Updater: Check for updates periodically, not only once per run (#3044)
|
||||||
|
* Windows: Remove misleading option to remove sync data (#3461)
|
||||||
|
* Windows: Do not provoke AD account locking if password changes (#2186)
|
||||||
|
* Windows: Fix installer when installing unprivileged (#2616, #2568)
|
||||||
|
* Quota: Only refresh from server when UI is shown
|
||||||
|
* SSL Button: Show more information
|
||||||
|
* owncloudcmd: Fix --httpproxy (#3465)
|
||||||
|
* System proxy: Ask user for credentials if needed
|
||||||
|
* Several fixes and performance improvements in the sync engine
|
||||||
|
* Network: Try to use SSL session tickets/identifiers. Check the SSL button to see if they are used.
|
||||||
|
* Bandwidth Throttling: Provide automatic limit setting for downloads (#3084)
|
||||||
|
* Systray: Workaround for issue with Qt 5.5.0 #3656
|
||||||
|
|
||||||
|
version 1.8.4 (release 2015-07-13)
|
||||||
|
* Release to ship a security release of openSSL. No source changes of the ownCloud Client code.
|
||||||
|
|
||||||
version 1.8.3 (release 2015-06-23)
|
version 1.8.3 (release 2015-06-23)
|
||||||
* Fix a bug in the Windows Installer that could crash explorer (#3320)
|
* Fix a bug in the Windows Installer that could crash explorer (#3320)
|
||||||
* Reduce 'Connection closed' errors (#3318, #3313, #3298)
|
* Reduce 'Connection closed' errors (#3318, #3313, #3298)
|
||||||
* Ignores: Force a remote discovery after ignore list change (#3172)
|
* Ignores: Force a remote discovery after ignore list change (#3172)
|
||||||
* Shibboleth: Avoid crash by letting the webview use its own QNAM (#3359)
|
* Shibboleth: Avoid crash by letting the webview use its own QNAM (#3359)
|
||||||
|
* System Ignores: Removed *.tmp from system ignore again. If a user
|
||||||
|
wants to ignore *.tmp, it needs to be added to the user ignore list.
|
||||||
|
|
||||||
ChangeLog
|
|
||||||
=========
|
|
||||||
version 1.8.2 (release 2015-06-08)
|
version 1.8.2 (release 2015-06-08)
|
||||||
* Improve reporting of server error messages (#3220)
|
* Improve reporting of server error messages (#3220)
|
||||||
* Discovery: Ignore folders with any 503 (#3113)
|
* Discovery: Ignore folders with any 503 (#3113)
|
||||||
|
|||||||
@@ -14,5 +14,5 @@ set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-back
|
|||||||
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
||||||
|
|
||||||
option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
||||||
set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE string "URL for crash repoter" )
|
set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE string "URL for crash reporter" )
|
||||||
set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ set( CPACK_PACKAGE_VERSION ${MIRALL_VERSION_FULL}${MIRALL_VERSION_SUFFIX} )
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
set( CPACK_GENERATOR "DragNDrop" )
|
set( CPACK_GENERATOR "DragNDrop" )
|
||||||
set( CPACK_SOURCE_GENERATOR "")
|
set( CPACK_SOURCE_GENERATOR "")
|
||||||
set( CPACK_PACKAGE_FILE_NAME ${APPLICATION_NAME}-${CPACK_PACKAGE_VERSION} )
|
set( CPACK_PACKAGE_FILE_NAME ${APPLICATION_SHORTNAME}-${CPACK_PACKAGE_VERSION} )
|
||||||
set( CPACK_PACKAGE_ICON ${CMAKE_BINARY_DIR}/src/gui/ownCloud.icns)
|
set( CPACK_PACKAGE_ICON ${CMAKE_BINARY_DIR}/src/gui/ownCloud.icns)
|
||||||
|
|
||||||
set( CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/admin/osx/DS_Store.in")
|
set( CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/admin/osx/DS_Store.in")
|
||||||
# set( CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/admin/osx/DMGBackground.png" )
|
# set( CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/admin/osx/DMGBackground.png" )
|
||||||
|
|
||||||
set( CPACK_DMG_FORMAT "UDBZ" )
|
set( CPACK_DMG_FORMAT "UDBZ" )
|
||||||
set( CPACK_DMG_VOLUME_NAME "${APPLICATION_NAME}")
|
set( CPACK_DMG_VOLUME_NAME "${APPLICATION_SHORTNAME}")
|
||||||
|
|
||||||
# did not work with cmake 2.8.7, so we override MacOSXBundleInfo.plist.in
|
# did not work with cmake 2.8.7, so we override MacOSXBundleInfo.plist.in
|
||||||
#set( CPACK_BUNDLE_PLIST ${CMAKE_SOURCE_DIR}/admin/osx/Info.plist )
|
#set( CPACK_BUNDLE_PLIST ${CMAKE_SOURCE_DIR}/admin/osx/Info.plist )
|
||||||
@@ -48,8 +48,8 @@ if(WIN32)
|
|||||||
set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md" ) # File used as a description of a project /path/to/project/ReadMe.txt
|
set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md" ) # File used as a description of a project /path/to/project/ReadMe.txt
|
||||||
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "${APPLICATION_NAME} Syncing Client" ) # Description summary of a project
|
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "${APPLICATION_NAME} Syncing Client" ) # Description summary of a project
|
||||||
# CPACK_PACKAGE_EXECUTABLES List of pairs of executables and labels. Used by the NSIS generator to create Start Menu shortcuts. ccmake;CMake
|
# CPACK_PACKAGE_EXECUTABLES List of pairs of executables and labels. Used by the NSIS generator to create Start Menu shortcuts. ccmake;CMake
|
||||||
set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_NAME} ) # Installation directory on the target system -> C:\Program Files\fellody
|
set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_SHORTNAME} ) # Installation directory on the target system -> C:\Program Files\fellody
|
||||||
set( CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${APPLICATION_NAME} ) # Registry key used when installing this project CMake 2.5.0
|
set( CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${APPLICATION_SHORTNAME} ) # Registry key used when installing this project CMake 2.5.0
|
||||||
set( CPACK_PACKAGE_NAME ${APPLICATION_NAME} ) # Package name, defaults to the project name
|
set( CPACK_PACKAGE_NAME ${APPLICATION_NAME} ) # Package name, defaults to the project name
|
||||||
set( CPACK_PACKAGE_VENDOR "http://${APPLICATION_DOMAIN}" ) # Package vendor name
|
set( CPACK_PACKAGE_VENDOR "http://${APPLICATION_DOMAIN}" ) # Package vendor name
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -1,5 +1,11 @@
|
|||||||
# ownCloud Desktop Client
|
# ownCloud Desktop Client
|
||||||
|
|
||||||
|
| Job | State |
|
||||||
|
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| client-build-matrix | [](https://ci.owncloud.org/job/client-build-matrix-linux/) |
|
||||||
|
| client-test-matrix-linux-no-build | [](https://ci.owncloud.org/job/client-test-matrix-linux-no-build/) |
|
||||||
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
The ownCloud Desktop Client is a tool to synchronize files from ownCloud Server
|
The ownCloud Desktop Client is a tool to synchronize files from ownCloud Server
|
||||||
@@ -13,7 +19,7 @@ with your computer.
|
|||||||
|
|
||||||
### Source code
|
### Source code
|
||||||
|
|
||||||
Tehe ownCloud Desktop Client is developed in Git. Since Git makes it easy to
|
The ownCloud Desktop Client is developed in Git. Since Git makes it easy to
|
||||||
fork and improve the source code and to adapt it to your need, many copies
|
fork and improve the source code and to adapt it to your need, many copies
|
||||||
can be found on the Internet, in particular on GitHub. However, the
|
can be found on the Internet, in particular on GitHub. However, the
|
||||||
authoritative repository maintained by the developers is located at
|
authoritative repository maintained by the developers is located at
|
||||||
@@ -21,7 +27,7 @@ https://github.com/owncloud/client.
|
|||||||
|
|
||||||
## Building the source code
|
## Building the source code
|
||||||
|
|
||||||
[Building the Client](http://doc.owncloud.org/desktop/1.7/building.html)
|
[Building the Client](http://doc.owncloud.org/desktop/2.0/building.html)
|
||||||
in the ownCloud Desktop Client manual.
|
in the ownCloud Desktop Client manual.
|
||||||
|
|
||||||
## Maintainers and Contributors
|
## Maintainers and Contributors
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 1 )
|
set( MIRALL_VERSION_MAJOR 2 )
|
||||||
set( MIRALL_VERSION_MINOR 8 )
|
set( MIRALL_VERSION_MINOR 0 )
|
||||||
set( MIRALL_VERSION_PATCH 3 )
|
set( MIRALL_VERSION_PATCH 2 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
set( MIRALL_VERSION_SUFFIX "") #e.g. beta1, beta2, rc1
|
set( MIRALL_VERSION_SUFFIX "rc2") #e.g. beta1, beta2, rc1
|
||||||
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|
||||||
if( NOT DEFINED MIRALL_VERSION_BUILD )
|
if( NOT DEFINED MIRALL_VERSION_BUILD )
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ endif()
|
|||||||
configure_file(create_mac_pkg.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/create_mac.sh)
|
configure_file(create_mac_pkg.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/create_mac.sh)
|
||||||
configure_file(macosx.pkgproj ${CMAKE_CURRENT_BINARY_DIR}/macosx.pkgproj)
|
configure_file(macosx.pkgproj ${CMAKE_CURRENT_BINARY_DIR}/macosx.pkgproj)
|
||||||
configure_file(pre_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh)
|
configure_file(pre_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh)
|
||||||
|
configure_file(post_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/post_install.sh)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ identity="$3"
|
|||||||
prjfile=$build_path/admin/osx/macosx.pkgproj
|
prjfile=$build_path/admin/osx/macosx.pkgproj
|
||||||
|
|
||||||
# The name of the installer package
|
# The name of the installer package
|
||||||
installer="@APPLICATION_NAME@-@MIRALL_VERSION_FULL@@MIRALL_VERSION_SUFFIX@"
|
installer="@APPLICATION_SHORTNAME@-@MIRALL_VERSION_FULL@@MIRALL_VERSION_SUFFIX@"
|
||||||
installer_file="$installer.pkg"
|
installer_file="$installer.pkg"
|
||||||
installer_file_tar="$installer.pkg.tar"
|
installer_file_tar="$installer.pkg.tar"
|
||||||
installer_file_tar_bz2="$installer.pkg.tar.bz2"
|
installer_file_tar_bz2="$installer.pkg.tar.bz2"
|
||||||
|
|||||||
@@ -472,7 +472,12 @@
|
|||||||
<key>PACKAGE_SCRIPTS</key>
|
<key>PACKAGE_SCRIPTS</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>POSTINSTALL_PATH</key>
|
<key>POSTINSTALL_PATH</key>
|
||||||
<dict/>
|
<dict>
|
||||||
|
<key>PATH</key>
|
||||||
|
<string>@CMAKE_CURRENT_BINARY_DIR@/post_install.sh</string>
|
||||||
|
<key>PATH_TYPE</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</dict>
|
||||||
<key>PREINSTALL_PATH</key>
|
<key>PREINSTALL_PATH</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>PATH</key>
|
<key>PATH</key>
|
||||||
@@ -1016,11 +1021,11 @@
|
|||||||
<key>CONCLUSION_ACTION</key>
|
<key>CONCLUSION_ACTION</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>IDENTIFIER</key>
|
<key>IDENTIFIER</key>
|
||||||
<string>com.owncCloud.finderPlugin</string>
|
<string>com.ownCloud.finderPlugin</string>
|
||||||
<key>LOCATION</key>
|
<key>LOCATION</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NAME</key>
|
<key>NAME</key>
|
||||||
<string>Finder Plugin</string>
|
<string>Legacy Finder Plugin (OS X 10.9 or older)</string>
|
||||||
<key>OVERWRITE_PERMISSIONS</key>
|
<key>OVERWRITE_PERMISSIONS</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>VERSION</key>
|
<key>VERSION</key>
|
||||||
|
|||||||
19
admin/osx/post_install.sh.cmake
Normal file
19
admin/osx/post_install.sh.cmake
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
osascript << EOF
|
||||||
|
tell application "Finder"
|
||||||
|
activate
|
||||||
|
select the last Finder window
|
||||||
|
reveal POSIX file "/Applications/@APPLICATION_EXECUTABLE@.app"
|
||||||
|
end tell
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Always enable the new 10.10 finder plugin if available
|
||||||
|
if [ -x "$(command -v pluginkit)" ]; then
|
||||||
|
# add it to DB. This happens automatically too but we try to push it a bit harder for issue #3463
|
||||||
|
pluginkit -a "/Applications/@APPLICATION_EXECUTABLE@.app/Contents/PlugIns/FinderSyncExt.appex/"
|
||||||
|
# enable it
|
||||||
|
pluginkit -e use -i @APPLICATION_REV_DOMAIN@.FinderSyncExt
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -1,12 +1,18 @@
|
|||||||
#!/bin/sh -xe
|
#!/bin/sh -xe
|
||||||
|
|
||||||
[ "$#" -lt 2 ] && echo "Usage: sign_app.sh <app> <identity>" && exit
|
[ "$#" -lt 2 ] && echo "Usage: sign_app.sh <app> <identity> <team_identifier>" && exit
|
||||||
|
|
||||||
src_app="$1"
|
src_app="$1"
|
||||||
identity="$2"
|
identity="$2"
|
||||||
|
team_identifier="$3"
|
||||||
|
|
||||||
codesign -s "$identity" --force --verbose=4 --deep "$src_app"
|
codesign -s "$identity" --force --preserve-metadata=entitlements --verbose=4 --deep "$src_app"
|
||||||
|
|
||||||
# Verify the signature
|
# Verify the signature
|
||||||
spctl -a -t exec -vv $src_app
|
spctl -a -t exec -vv $src_app
|
||||||
codesign -dv $src_app
|
codesign -dv $src_app
|
||||||
|
|
||||||
|
# Validate that the key used for signing the binary matches the expected TeamIdentifier
|
||||||
|
# needed to pass the SocketApi through the sandbox
|
||||||
|
codesign -dv $src_app 2>&1 | grep "TeamIdentifier=$team_identifier"
|
||||||
|
exit $?
|
||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Ez desinstalatu"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Dagoeneko Instalatuta"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Dagoeneko Instalatuta"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Hautatu nola nahi duzun ${APPLICATION_NAME} instalatzea."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Hautatu nola nahi duzun ${APPLICATION_NAME} instalatzea."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME}ren bertsio berriago bat instalatuta dago! Ez da aholkatzen bertsio zaharrago bat instalatzea. Benetan bertsio zaharrago hau instalatu nahi baduzu, hobe da lehenengo bertsio berria desinstalatzea. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
|
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME}ren bertsio berriago bat instalatuta dago! Ez da aholkatzen bertsio zaharrago bat instalatzea. Benetan bertsio zaharrago hau instalatu nahi baduzu, hobe da lehenengo bertsio berria desinstalatzea. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} dagoeneko instalatuta dago.\nHautatu zer operazio egin nahi duzu eta klikatu Hurrengoa jarraitzeko."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Gehitu/Berrinstalatu osagaiak"
|
StrCpy $PageReinstall_SAME_Field_2 "Gehitu/Berrinstalatu osagaiak"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalatu ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalatu ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalatu ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalatu ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} ezinbestekoak."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} lasterbidea."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} lasterbidea."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME}rako mahaigaineko lasterbidea."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME}rako mahaigaineko lasterbidea."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME}erako Abiarazle Bizkorreko Lasterbidea."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME}erako Abiarazle Bizkorreko Lasterbidea."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Ezabatu ${APPLICATION_NAME}en datuen karpeta zure ordenagailutik."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "${APPLICATION_NAME}en datuen karpeta ezabatu nahi duzu?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Utzi markatu gabe datuen karpeta uzteko edo markatu datuen karpeta ezabatzeko."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Bai, ezabtu datu karpeta hau."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Desinstalatzailea idazten"
|
StrCpy $UNINSTALLER_FILE_Detail "Desinstalatzailea idazten"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Instalatzaileko Erregistroko Giltzak idazten"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Instalatzaileko Erregistroko Giltzak idazten"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Bukatuta"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Bukatuta"
|
||||||
@@ -43,4 +38,6 @@ StrCpy $INIT_INSTALLER_RUNNING "Instalatzailea dagoeneko martxan da."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Desinstalatzaile honek administratzaile baimenak behar ditu, saiatu berriro"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Desinstalatzaile honek administratzaile baimenak behar ditu, saiatu berriro"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Desinstalatzailea dagoeneko martxan da."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Desinstalatzailea dagoeneko martxan da."
|
||||||
StrCpy $SectionGroup_Shortcuts "Lasterbideak"
|
StrCpy $SectionGroup_Shortcuts "Lasterbideak"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "No instal·lar"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ja instal·lat"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ja instal·lat"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Trieu la manera com voleu instal·lar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Trieu la manera com voleu instal·lar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Una versió més recent de ${APPLICATION_NAME} ja està instal.lada!! No es recomana instal.lar una versió més antiga. Si realment voleu instal.lar una versió més antiga, és millor primer desinstal.lar la versió actual. Seleccioni l'operació que desitjeu realitzar i feu clic a Següent per a continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Una versió més recent de ${APPLICATION_NAME} ja està instal.lada!! No es recomana instal.lar una versió més antiga. Si realment voleu instal.lar una versió més antiga, és millor primer desinstal.lar la versió actual. Seleccioni l'operació que desitjeu realitzar i feu clic a Següent per a continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ja està instal.lat.↩\nSeleccioneu l'operació que desitjeu realitzar i feu clic a Següent per continuar."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Afegir/Reinstal.lar components"
|
StrCpy $PageReinstall_SAME_Field_2 "Afegir/Reinstal.lar components"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstal.lar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstal.lar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstal.lar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstal.lar ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} essencial."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Drecera ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Drecera ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Drecera a l'escrptori per ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Drecera a l'escrptori per ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Drecera d'inici ràpid per ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Drecera d'inici ràpid per ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Esborra la carpeta de dades de ${APPLICATION_NAME} del vostre equip."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Voleu esborrar la carpeta de dades de ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Deixeu-ho sense marcar per mantenir la carpeta de dades per un ús posterior o marqueu-ho per esborrar la carpeta de dades."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Sí, esborra la carpeta de dades."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Escrivint el desinstal·lador"
|
StrCpy $UNINSTALLER_FILE_Detail "Escrivint el desinstal·lador"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Escrivint les claus del registre de l'instal·lador"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Escrivint les claus del registre de l'instal·lador"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Acabat"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Acabat"
|
||||||
@@ -44,3 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "L'instal·lador ja s'està executant."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Aquest desinstal·lador requereix accés d'administrador, intenteu-ho de nou."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Aquest desinstal·lador requereix accés d'administrador, intenteu-ho de nou."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
|
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
|
||||||
StrCpy $SectionGroup_Shortcuts "Dreceres"
|
StrCpy $SectionGroup_Shortcuts "Dreceres"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -1,46 +1,43 @@
|
|||||||
# Auto-generated - do not modify
|
# Auto-generated - do not modify
|
||||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Zobrazit poznámky k vydání"
|
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Zobrazit pozn mky k vyd n¡"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Nalezen proces(y) ${APPLICATION_EXECUTABLE}, které je nutné ukončit .$\nPřejete si, aby je instalátor za vás ukončil?"
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Nalezen proces(y) ${APPLICATION_EXECUTABLE}, kter‚ je nutn‚ ukonŸit .$\nPýejete si, aby je instal tor za v s ukonŸil?"
|
||||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Ukončuji procesy ${APPLICATION_EXECUTABLE}."
|
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "UkonŸuji procesy ${APPLICATION_EXECUTABLE}."
|
||||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Proces k ukončení nebyl nalezen! "
|
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Proces k ukonŸen¡ nebyl nalezen! "
|
||||||
StrCpy $PageReinstall_NEW_Field_1 "Starší verze ${APPLICATION_NAME} je nainstalována na tomto systému. Doporučuje se předem tuto verzi odinstalovat. Zvolte operaci, kterou chcete uskutečnit, a klikněte na tlačítko Další pro pokračování."
|
StrCpy $PageReinstall_NEW_Field_1 "Starç¡ verze ${APPLICATION_NAME} je nainstalov na na tomto syst‚mu. DoporuŸuje se pýedem tuto verzi odinstalovat. Zvolte operaci, kterou chcete uskuteŸnit, a kliknØte na tlaŸ¡tko Dalç¡ pro pokraŸov n¡."
|
||||||
StrCpy $PageReinstall_NEW_Field_2 "Odinstalovat před instalací"
|
StrCpy $PageReinstall_NEW_Field_2 "Odinstalovat pýed instalac¡"
|
||||||
StrCpy $PageReinstall_NEW_Field_3 "Neodinstalovávat"
|
StrCpy $PageReinstall_NEW_Field_3 "Neodinstalov vat"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Již nainstalováno"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ji§ nainstalov no"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Zvolte, jak chcete ${APPLICATION_NAME} nainstalovat."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Zvolte, jak chcete ${APPLICATION_NAME} nainstalovat."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Novější verze aplikace ${APPLICATION_NAME} je již nainstalována. Instalace starší verze se nedoporučuje. Pokud opravdu chcete tuto starší verzi nainstalovat, je lepší nejprve odinstalovat současnou verzi. Zvolte požadovanou operaci a klikněte na Další pro pokračování."
|
StrCpy $PageReinstall_OLD_Field_1 "NovØjç¡ verze aplikace ${APPLICATION_NAME} je ji§ nainstalov na. Instalace starç¡ verze se nedoporuŸuje. Pokud opravdu chcete tuto starç¡ verzi nainstalovat, je lepç¡ nejprve odinstalovat souŸasnou verzi. Zvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je již nainstalována.\nZvolte požadovanou operaci a klikněte na Další pro pokračování."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je ji§ nainstalov na.$\n$\nZvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Přidat či znovu instalovat komponenty"
|
StrCpy $PageReinstall_SAME_Field_2 "Pýidat Ÿi znovu instalovat komponenty"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstalovat ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odinstalovat ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstalovat ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstalovat ${APPLICATION_NAME}"
|
||||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vyberte možnost údržby k provedení."
|
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vyberte mo§nost £dr§by k proveden¡."
|
||||||
StrCpy $SEC_APPLICATION_DETAILS "Instalují se náležitosti ${APPLICATION_NAME}."
|
StrCpy $SEC_APPLICATION_DETAILS "Instaluj¡ se n le§itosti ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrace do průzkumníka Windows"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integrace do pr…zkumn¡ka Windows"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalace integrace do průzkumníka Windows"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalace integrace do pr…zkumn¡ka Windows"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Zástupce v Nabídce Start"
|
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Z stupce v Nab¡dce Start"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Přidávám zástupce pro ${APPLICATION_NAME} do Nabídky Start."
|
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Pýid v m z stupce pro ${APPLICATION_NAME} do Nab¡dky Start."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Zástupce na ploše"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Z stupce na ploçe"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Vytvářím zástupce na ploše"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Vytv ý¡m z stupce na ploçe"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Zástupce v panelu rychlého spuštění"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Z stupce v panelu rychl‚ho spuçtØn¡"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Vytvářím zástupce v panelu rychlého spuštění"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Vytv ý¡m z stupce v panelu rychl‚ho spuçtØn¡"
|
||||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Náležitosti ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "N le§itosti ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Zástupce ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Z stupce ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Zástupce na ploše pro ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Z stupce na ploçe pro ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Zástupce rychlého spuštění pro ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Z stupce rychl‚ho spuçtØn¡ pro ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Odstraňte složku s daty aplikace ${APPLICATION_NAME} z tohoto počítače."
|
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Chcete smazat složku s daty ${APPLICATION_NAME}?"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Ponechejte nezaškrtnuté, pokud chcete složku s daty ponechat pro pozdější využití, nebo zaškrtněte, pokud chcete složku smazat."
|
StrCpy $UNINSTALLER_FINISHED_Detail "DokonŸeno"
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Ano, smazat tuto složku s daty."
|
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na ve slo§ce '$INSTDIR'.$\n$\nChcete pokraŸovat (nedoporuŸuje se)?"
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstalátor"
|
StrCpy $UNINSTALL_ABORT "Odinstalace zruçena u§ivatelem"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instalátor do registrů"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Z stupce rychl‚ho spuçtØn¡ (nen¡ k dispozici)"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokončeno"
|
StrCpy $INIT_NO_DESKTOP "Z stupce na ploçe (pýep¡çe existuj¡c¡)"
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezdá se, že ${APPLICATION_NAME} je nainstalována ve složce '$INSTDIR'.\nChcete pokračovat (nedoporučuje se)?"
|
StrCpy $UAC_ERROR_ELEVATE "Nelze zvìçit, chyba:"
|
||||||
StrCpy $UNINSTALL_ABORT "Odinstalace zrušena uživatelem"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Tento instal tor vy§aduje spr vcovsk opr vnØn¡, opakujte znovu"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Zástupce rychlého spuštění (není k dispozici)"
|
StrCpy $INIT_INSTALLER_RUNNING "Instal tor je ji§ spuçtØn."
|
||||||
StrCpy $INIT_NO_DESKTOP "Zástupce na ploše (přepíše existující)"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinstal tor vy§aduje spr vcovsk opr vnØn¡, opakujte znovu"
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Nelze zvýšit, chyba:"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Slu§ba pýihl çen¡ nebا¡, ukonŸuji!"
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Tento instalátor vyžaduje správcovská oprávnění, opakujte znovu"
|
StrCpy $INIT_UNINSTALLER_RUNNING "Odinstal tor je ji§ spuçtØn."
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Instalátor je již spuštěn."
|
StrCpy $SectionGroup_Shortcuts "Z stupci"
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinstalátor vyžaduje správcovská oprávnění, opakujte znovu"
|
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinstalátor je již spuštěn."
|
|
||||||
StrCpy $SectionGroup_Shortcuts "Zástupci"
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Niet de-installeren"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Al geïnstalleerd"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Al geïnstalleerd"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Kies hoe u ${APPLICATION_NAME} wilt installeren."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Kies hoe u ${APPLICATION_NAME} wilt installeren."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Er is al een recentere versie van ${APPLICATION_NAME} geïnstalleerd! Installeren van een oudere versie wordt niet aangeraden. Als u echt de oudere versie wilt installeren, adviseren we de huidige versie eerst te verwijderen. Kies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
|
StrCpy $PageReinstall_OLD_Field_1 "Er is al een recentere versie van ${APPLICATION_NAME} geïnstalleerd! Installeren van een oudere versie wordt niet aangeraden. Als u echt de oudere versie wilt installeren, adviseren we de huidige versie eerst te verwijderen. Kies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.\nKies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.$\n$\nKies de actie die u uit wil voeren en druk op Verder om door te gaan."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Toevoegen/herinstalleren componenten"
|
StrCpy $PageReinstall_SAME_Field_2 "Toevoegen/herinstalleren componenten"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "De-installeer ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "De-installeer ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "De-installeer ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "De-installeer ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} basis."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} snelkoppeling."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} snelkoppeling."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Werkblad snelkoppeling voor ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Werkblad snelkoppeling voor ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Snelstart snelkoppeling voor ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Snelstart snelkoppeling voor ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Verwijder ${APPLICATION_NAME}'s data map van uw computer."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Wilt u de ${APPLICATION_NAME}'s data map verwijderen?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Niet aankruisen om de datamap te bewaren, wel aankruisen om de datamap te verwijderen."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Ja, verwijder deze data map."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Wegschrijven Uninstaller"
|
StrCpy $UNINSTALLER_FILE_Detail "Wegschrijven Uninstaller"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Wegschrijven installer Registersleutels"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Wegschrijven installer Registersleutels"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Klaar"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Klaar"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Kan niet verhogen, fout:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dit installatieprogramma vereist beheerdersrechten. Probeer het opnieuw"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dit installatieprogramma vereist beheerdersrechten. Probeer het opnieuw"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "De Installer is al gestart."
|
StrCpy $INIT_INSTALLER_RUNNING "De Installer is al gestart."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Deze uninstaller vereist Beheerderstoegang, probeer opnieuw"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Deze uninstaller vereist Beheerderstoegang, probeer opnieuw"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "De aanmeldprocedure is niet actief; er wordt afgebroken!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "De uninstaller is al gestart."
|
StrCpy $INIT_UNINSTALLER_RUNNING "De uninstaller is al gestart."
|
||||||
StrCpy $SectionGroup_Shortcuts "Snelkoppelingen"
|
StrCpy $SectionGroup_Shortcuts "Snelkoppelingen"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Do not uninstall"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Already Installed"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Already Installed"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choose how you want to install ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choose how you want to install ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Add/Reinstall components"
|
StrCpy $PageReinstall_SAME_Field_2 "Add/Reinstall components"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Uninstall ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Uninstall ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Uninstall ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Uninstall ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} essentials."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} shortcut."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} shortcut."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop shortcut for ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop shortcut for ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Quick Launch shortcut for ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Quick Launch shortcut for ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Remove ${APPLICATION_NAME}'s data folder from your computer."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Do you want to delete ${APPLICATION_NAME}'s data folder?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Leave unchecked to keep the data folder for later use or check to delete the data folder."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Yes, delete this data folder."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Writing Uninstaller"
|
StrCpy $UNINSTALLER_FILE_Detail "Writing Uninstaller"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Writing Installer Registry Keys"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Writing Installer Registry Keys"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Finished"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Finished"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "This installer requires admin access, try again"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "This installer requires admin access, try again"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "The installer is already running."
|
StrCpy $INIT_INSTALLER_RUNNING "The installer is already running."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "This uninstaller requires admin access, try again"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "This uninstaller requires admin access, try again"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "The uninstaller is already running."
|
StrCpy $INIT_UNINSTALLER_RUNNING "The uninstaller is already running."
|
||||||
StrCpy $SectionGroup_Shortcuts "Shortcuts"
|
StrCpy $SectionGroup_Shortcuts "Shortcuts"
|
||||||
|
|||||||
@@ -9,38 +9,35 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Juba paigaldatud"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Juba paigaldatud"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vali, kuidas sa soovid paigaldada ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vali, kuidas sa soovid paigaldada ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
|
StrCpy $PageReinstall_OLD_Field_1 "Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on juba paigaldatud.\nVali tehtav toiming ning kliki Jätka."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Lisa/Taaspaigalda komponente"
|
StrCpy $PageReinstall_SAME_Field_2 "Lisa/Taaspaigalda komponente"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalli ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalli ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalli ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalli ${APPLICATION_NAME}"
|
||||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vali hooldustegevus, mida sa soovid sooritada."
|
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Vali hooldustegevus, mida sa soovid sooritada."
|
||||||
StrCpy $SEC_APPLICATION_DETAILS "Paigaldan ${APPLICATION_NAME} põhiosa."
|
StrCpy $SEC_APPLICATION_DETAILS "Paigaldan ${APPLICATION_NAME} põhiosa."
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menüü Programmide viit"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integreerimine Windows Exploreriga"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Lisan ${APPLICATION_NAME} viida Start menüüsse."
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Paigalda Windows Exploreriga integreerimine"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menüü programmide otsetee"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Lisan ${APPLICATION_NAME} otsetee Start menüüsse."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Töölaua otsetee"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Töölaua otsetee"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Töölaua otseteede loomine"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Töölaua otseteede loomine"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Kiirvaliku nupp"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Kiirvaliku otsetee"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Kiirvaliku nupu loomine"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Kiirvaliku otsetee loomine"
|
||||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} põhiosa."
|
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} põhiosa."
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} otsetee."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} otsetee."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Töölaua viit rakendusele ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Töölaua otsetee rakendusele ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Kiirvaliku viit rakendusele ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Kiirvaliku otsetee rakendusele ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Eemalda arvutist rakenduse ${APPLICATION_NAME} andmete kataloog."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Kas soovid kustutada ${APPLICATION_NAME} andmete kataloogi?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Jäta märkimata säilitamaks andmete kataloog hilisemaks kasutuseks või märgi andmete kataloogi kustutamiseks."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Jah, kustuta andmete kaust."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Desinstallija kirjutamine"
|
StrCpy $UNINSTALLER_FILE_Detail "Desinstallija kirjutamine"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjutan paigaldaja registri võtmeid"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjutan paigaldaja registri võtmeid"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Lõpetatud"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Lõpetatud"
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "Ei leia, et ${APPLICATION_NAME} oleks paigaldatud kataloogi '$INSTDIR'.$\n$\nJätkata sellele vaatamata (pole soovitav)?"
|
StrCpy $UNINSTALL_MESSAGEBOX "Ei leia, et ${APPLICATION_NAME} oleks paigaldatud kataloogi '$INSTDIR'.$\n$\nJätkata sellele vaatamata (pole soovitav)?"
|
||||||
StrCpy $UNINSTALL_ABORT "Desinstallimine on kasutaja poolt katkestatud"
|
StrCpy $UNINSTALL_ABORT "Desinstallimine on kasutaja poolt katkestatud"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Kiirvaliku viit (N/A)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Kiirvaliku otsetee (N/A)"
|
||||||
StrCpy $INIT_NO_DESKTOP "Ikoon töölaual (kirjutab olemasoleva üle)"
|
StrCpy $INIT_NO_DESKTOP "Ikoon töölaual (kirjutab olemasoleva üle)"
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Ei suuda ülendada õigusi, viga: "
|
StrCpy $UAC_ERROR_ELEVATE "Ei suuda ülendada õigusi, viga: "
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "See paigaldaja vajab admini ligipääsu, proovi uuesti"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "See paigaldaja vajab admini ligipääsu, proovi uuesti"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Paigaldaja on juba käimas."
|
StrCpy $INIT_INSTALLER_RUNNING "Paigaldaja on juba käimas."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "See desinstallija vajab admini ligipääsu, proovi uuesti"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "See desinstallija vajab admini ligipääsu, proovi uuesti"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Sisselogimisteenus ei tööta, katkestamine!"
|
||||||
StrCpy $SectionGroup_Shortcuts "Viidad"
|
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
StrCpy $SectionGroup_Shortcuts "Otseteed"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
|||||||
@@ -1,46 +1,43 @@
|
|||||||
# Auto-generated - do not modify
|
# Auto-generated - do not modify
|
||||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "نمایش پادداشت های انتشار نسخه"
|
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "نمایش پادداشت های انتشار نسخه"
|
||||||
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "${APPLICATION_EXECUTABLE} پردازش (ها) که باید متوقف شوند را پیدا کرد. $\nآیا میخواهیم برنامه نصاب این پردازشها را برای شما متوقف کند ؟"
|
||||||
|
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "حذف پردازشهای ${APPLICATION_EXECUTABLE}."
|
||||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "پردازش برای از بین بردن یافت نشد!"
|
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "پردازش برای از بین بردن یافت نشد!"
|
||||||
|
StrCpy $PageReinstall_NEW_Field_1 "نسخهی قدیمی از برنامه ${APPLICATION_NAME} بر روی سیستم شما نصب شده است، پیشنهاد میشود نسخهی فعلی را قبل از نصب حذف کنید. عملیات مورد نظر را انتخاب کنید و برای ادامه روی دکمه Next کلیک کنید."
|
||||||
|
StrCpy $PageReinstall_NEW_Field_2 "عمل حذف را قبل از نصب انجام دهید"
|
||||||
StrCpy $PageReinstall_NEW_Field_3 "حذف نکن"
|
StrCpy $PageReinstall_NEW_Field_3 "حذف نکن"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "از قبل نصب شده است"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "از قبل نصب شده است"
|
||||||
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "نحوهی نصب ${APPLICATION_NAME} را انتخاب کنید."
|
||||||
|
StrCpy $PageReinstall_OLD_Field_1 "نسخه جدیدتری از برنامه ${APPLICATION_NAME} بر روی سیستم شما نصب شده است، نصب نسخهی قدیمیتر پیشنهاد نمیشود. درصورتیکه میخواهید نسخهی قدیمی را نصب کنید، حذف نسخهی کنونی قبل از اجرای نصب جدید پیشنهاد میشود. عملیات مورد نظر را انتخاب و بر روی دکمهی Next کلیک کنید."
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "نسخه ${VERSION} از ${APPLICATION_NAME} هماکنون نصب شده است.$↩$\nعملیات مورد نظر را انتخاب و بر روی دکمه Next کلیک کنید."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "افزودن/نصب مجدد اجزا"
|
StrCpy $PageReinstall_SAME_Field_2 "افزودن/نصب مجدد اجزا"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_3 "حذف ${APPLICATION_NAME}"
|
||||||
|
StrCpy $UNINSTALLER_APPDATA_TITLE "حذف ${APPLICATION_NAME}"
|
||||||
|
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "گزینه نگهداری را به منظور اجرا انتخاب کنید."
|
||||||
|
StrCpy $SEC_APPLICATION_DETAILS "نصب ضروریات ${APPLICATION_NAME}"
|
||||||
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "یکپارچهسازی با Windows Explorer"
|
||||||
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "نصب یکپارچهساز با Windows Explorer"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "بازکردن میانبر منو برنامه"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "افزودن میانبر ${APPLICATION_NAME} به استارت منو ."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "میانبر دسکتاپ"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "میانبر دسکتاپ"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "ایجاد میانبر دسکتاپ"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "ایجاد میانبر دسکتاپ"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "میانبر بازکردن سریع"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "میانبر بازکردن سریع"
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "بله، این پوشه داده را حذف کن."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "ایجاد میانبر اجرای سریع"
|
||||||
|
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "ملزومات ${APPLICATION_NAME}"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "میانبر ${APPLICATION_NAME} "
|
||||||
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "میانبر دسکتاپ برای ${APPLICATION_NAME} ."
|
||||||
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "میانبر اجرای سریع برای ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "نوشتن حذف کننده"
|
StrCpy $UNINSTALLER_FILE_Detail "نوشتن حذف کننده"
|
||||||
|
StrCpy $UNINSTALLER_REGISTRY_Detail "در حال نوشتن کلید های رجیستری نصاب"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "اتمام"
|
StrCpy $UNINSTALLER_FINISHED_Detail "اتمام"
|
||||||
|
StrCpy $UNINSTALL_MESSAGEBOX "به نظر نمی رسد نرم افزار ${APPLICATION_NAME} در '$INSTDIR'.$\n$\nنصب شده باشد.\nآیا می خواهید ادامه دهید ( توصیه نشده است ) ؟"
|
||||||
|
StrCpy $UNINSTALL_ABORT "عمل حذف توسط کاربر متوقف شد"
|
||||||
|
StrCpy $INIT_NO_QUICK_LAUNCH "میانبر بازکردن سریع ( N/A )"
|
||||||
|
StrCpy $INIT_NO_DESKTOP "میانبر دسکتاپ (رونویسی وجود دارد)"
|
||||||
|
StrCpy $UAC_ERROR_ELEVATE "مشکل در بالااوردن ، خطا : "
|
||||||
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "برای نصب، دسترسی مدیر سیستم نیاز است، مجددا تلاش کنید"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "نصاب از قبل در حال اجراست."
|
StrCpy $INIT_INSTALLER_RUNNING "نصاب از قبل در حال اجراست."
|
||||||
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "حذف برنامه نیاز به دسترسی مدیر دارد ، لطفا دوباره سعی کنید"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "سرویس ورود اجرا نیست، درحال لغو نصب!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "حذف کننده از قبل در حال اجراست."
|
StrCpy $INIT_UNINSTALLER_RUNNING "حذف کننده از قبل در حال اجراست."
|
||||||
StrCpy $SectionGroup_Shortcuts "میانبرها"
|
StrCpy $SectionGroup_Shortcuts "میانبرها"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
|
||||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Killing ${APPLICATION_EXECUTABLE} processes."
|
|
||||||
StrCpy $PageReinstall_NEW_Field_1 "An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_NEW_Field_2 "Uninstall before installing"
|
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choose how you want to install ${APPLICATION_NAME}."
|
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Uninstall ${APPLICATION_NAME}"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Uninstall ${APPLICATION_NAME}"
|
|
||||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Choose the maintenance option to perform."
|
|
||||||
StrCpy $SEC_APPLICATION_DETAILS "Installing ${APPLICATION_NAME} essentials."
|
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menu Program Shortcut"
|
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Adding shortcut for ${APPLICATION_NAME} to the Start Menu."
|
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creating Quick Launch Shortcut"
|
|
||||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} essentials."
|
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} shortcut."
|
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop shortcut for ${APPLICATION_NAME}."
|
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Quick Launch shortcut for ${APPLICATION_NAME}."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Remove ${APPLICATION_NAME}'s data folder from your computer."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Do you want to delete ${APPLICATION_NAME}'s data folder?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Leave unchecked to keep the data folder for later use or check to delete the data folder."
|
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Writing Installer Registry Keys"
|
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
|
|
||||||
StrCpy $UNINSTALL_ABORT "Uninstall aborted by user"
|
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Quick Launch Shortcut (N/A)"
|
|
||||||
StrCpy $INIT_NO_DESKTOP "Desktop Shortcut (overwrites existing)"
|
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "This installer requires admin access, try again"
|
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "This uninstaller requires admin access, try again"
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Asennettu jo"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Asennettu jo"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Valitse miten ${APPLICATION_NAME} asennetaan."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Valitse miten ${APPLICATION_NAME} asennetaan."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Uudempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu! Vanhan version asennus ei ole suositeltavaa. Jos todella haluat asentaa vanhemman version, kannattaa poistaa nykyisen version asennus ensin. Valitse minkä toimenpiteen haluat suorittaa ja paina Seuraava jatkaaksesi."
|
StrCpy $PageReinstall_OLD_Field_1 "Uudempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu! Vanhan version asennus ei ole suositeltavaa. Jos todella haluat asentaa vanhemman version, kannattaa poistaa nykyisen version asennus ensin. Valitse minkä toimenpiteen haluat suorittaa ja paina Seuraava jatkaaksesi."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on jo asennettu.\nValitse suoritettava toimenpide ja napsauta Seuraava jatkaaksesi."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on jo asennettu.$\n$\nValitse haluamasi toiminto ja napsauta Seuraava jatkaaksesi."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Lisää/uudelleenasenna komponentteja"
|
StrCpy $PageReinstall_SAME_Field_2 "Lisää/uudelleenasenna komponentteja"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Poista ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Poista ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Poista ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Poista ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} v
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}-pikakuvake."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}-pikakuvake."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Sovelluksen ${APPLICATION_NAME} työpyötäpikakuvake."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Sovelluksen ${APPLICATION_NAME} työpyötäpikakuvake."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Pikakäynnistyksen pikakuvake sovellukselle ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Pikakäynnistyksen pikakuvake sovellukselle ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Poista ${APPLICATION_NAME}-datakansio tietokoneelta."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Haluatko varmasti poistaa ${APPLICATION_NAME}-datakansion?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Jätä valinta ruksimatta säilyttääksesti datakansion myöhempää käyttöä varten tai täytä ruksi jos haluat poistaa datakansion ja siinä olevat tiedostot."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Kyllä, poista tämä datakansio."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Kirjoitetaan poisto-ohjelmaa"
|
StrCpy $UNINSTALLER_FILE_Detail "Kirjoitetaan poisto-ohjelmaa"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjoitetaan asennusohjelman rekisteriavaimia"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjoitetaan asennusohjelman rekisteriavaimia"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Valmis"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Valmis"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Kohottaminen ei onnistu, virhe:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Tämä asennusohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Tämä asennusohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Asennusohjelma on jo käynnissä."
|
StrCpy $INIT_INSTALLER_RUNNING "Asennusohjelma on jo käynnissä."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tämä poisto-ohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tämä poisto-ohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Kirjautumispalvelu ei ole käynnissä, perutaan!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Poisto-ohjelma on jo käynnissä."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Poisto-ohjelma on jo käynnissä."
|
||||||
StrCpy $SectionGroup_Shortcuts "Pikakuvakkeet"
|
StrCpy $SectionGroup_Shortcuts "Pikakuvakkeet"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Ne pas désinstaller"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Déjà installé"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Déjà installé"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choisissez comment installer ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choisissez comment installer ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Une version plus récente de ${APPLICATION_NAME} est déjà installée ! Il n'est pas recommandé d'installer une version plus ancienne. Si vous voulez vraiment installer cette version plus ancienne, il est préférable de d'abord désinstaller la version courante. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
|
StrCpy $PageReinstall_OLD_Field_1 "Une version plus récente de ${APPLICATION_NAME} est déjà installée ! Il n'est pas recommandé d'installer une version plus ancienne. Si vous voulez vraiment installer cette version plus ancienne, il est préférable de d'abord désinstaller la version courante. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} est déjà installé.\nSélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} est déjà installé.$\n$\nSélectionnez l'opération que vous souhaitez effectuer et cliquez sur Suivant pour continuer."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Ajouter/Réinstaller des composants"
|
StrCpy $PageReinstall_SAME_Field_2 "Ajouter/Réinstaller des composants"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Désinstaller ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Désinstaller ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Désinstaller ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Désinstaller ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Essentiels de ${APPLICATION_NAME}."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Raccourci de ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Raccourci de ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Raccourci Bureau de ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Raccourci Bureau de ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Raccourci de lancement rapide de ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Raccourci de lancement rapide de ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Supprimer de cet ordinateur le dossier de données de ${APPLICATION_NAME}."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Voulez-vous supprimer le dossier de données de ${APPLICATION_NAME} ?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Laisser non-coché pour garder le dossier de données pour un usage ultérieur. Cocher pour supprimer le dossier de données."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Oui, supprimer ce dossier de données."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Écriture du désinstallateur"
|
StrCpy $UNINSTALLER_FILE_Detail "Écriture du désinstallateur"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Écriture des clefs de registre du désinstallateur"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Écriture des clefs de registre du désinstallateur"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminé"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Terminé"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Échec d'élévation, erreur :"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Cet installateur requiert les droits administrateur, essayez à nouveau"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Cet installateur requiert les droits administrateur, essayez à nouveau"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Une installation est déjà en cours."
|
StrCpy $INIT_INSTALLER_RUNNING "Une installation est déjà en cours."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ce désinstallateur requiert les droits administrateur, essayez à nouveau"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ce désinstallateur requiert les droits administrateur, essayez à nouveau"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Service de logon non lancé ! Abandon."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Une désinstallation est déjà en cours."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Une désinstallation est déjà en cours."
|
||||||
StrCpy $SectionGroup_Shortcuts "Raccourcis"
|
StrCpy $SectionGroup_Shortcuts "Raccourcis"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Non desinstalar"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Xa instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Xa instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolla como quere instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolla como quere instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} xa está instalado.\nSeleccione a operación que que quere realizar e prema en Seguinte para continuar."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Engadir/reinstalar compoñentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Engadir/reinstalar compoñentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esenciais."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso directo ao ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso directo ao ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso directo no escritorio para "
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso directo no escritorio para "
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Acceso de inicio rápido para ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Acceso de inicio rápido para ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Retirar o cartafol de datos do ${APPLICATION_NAME} do seu computador."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Confirma que quere eliminar o cartafol de datos do ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Deixeo sen marcar para manter o cartafol de datos para o seu uso posterior ou marqueo para eliminar o cartafol de datos."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Si, eliminar este cartafol de datos."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Escribindo o desinstalador"
|
StrCpy $UNINSTALLER_FILE_Detail "Escribindo o desinstalador"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribindo o instalador nas chaves do rexistro"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribindo o instalador nas chaves do rexistro"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Rematado"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Rematado"
|
||||||
@@ -42,5 +37,7 @@ StrCpy $UAC_ERROR_ELEVATE "Non foi pos
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador require acceso de administrador, ténteo de novo"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador require acceso de administrador, ténteo de novo"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador xa está en execución."
|
StrCpy $INIT_INSTALLER_RUNNING "O instalador xa está en execución."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de administrador, ténteo de novo"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de administrador, ténteo de novo"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "O servizo de acceso non está en execución, cancelando!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
||||||
StrCpy $SectionGroup_Shortcuts "Atallos"
|
StrCpy $SectionGroup_Shortcuts "Atallos"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Nicht entfernen"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Bereits installiert"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Bereits installiert"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
|
StrCpy $PageReinstall_OLD_Field_1 "Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ist bereits installiert.\nWählen Sie eine Vorgehensweise und klicken Sie auf $\"Weiter$\"."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Komponenten hinzufügen"
|
StrCpy $PageReinstall_SAME_Field_2 "Komponenten hinzufügen"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} entfernen"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} entfernen"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} entfernen"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} entfernen"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} Basis."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} Verknüfung."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} Verknüfung."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop-Verknüpfung für ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop-Verknüpfung für ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Schnellstart-Verknüpfung für ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Schnellstart-Verknüpfung für ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Entferne Datenordner ${APPLICATION_NAME} von der Maschine."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Wollen sie den ${APPLICATION_NAME} Datenordner entfernen?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Abwählen, um den Datenordner für spätere Verwendung zu behalten."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Ja, Datenordner löschen."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Schreibe Uninstaller"
|
StrCpy $UNINSTALLER_FILE_Detail "Schreibe Uninstaller"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Schreibe Registrierungseinträge"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Schreibe Registrierungseinträge"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Abgeschlossen"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Abgeschlossen"
|
||||||
@@ -44,3 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Das Installationsprogramm wird bereits ausgef
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Das Deinstallationsprogramm erfordert Administrator-Rechte. Bitte erneut versuchen."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Das Deinstallationsprogramm erfordert Administrator-Rechte. Bitte erneut versuchen."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
||||||
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτήν την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
StrCpy $PageReinstall_OLD_Field_1 "Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτήν την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.\n\nΕπιλέξτε τη διαδικασία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
StrCpy $PageReinstall_SAME_Field_1 "Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.$\n$\nΕπιλέξτε τη λειτουργία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Προσθήκη/ Επανεγκατάσταση συνιστωσών"
|
StrCpy $PageReinstall_SAME_Field_2 "Προσθήκη/ Επανεγκατάσταση συνιστωσών"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Απεγκατάσταση ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Απεγκατάσταση ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Συντόμευση ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Συντόμευση ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Συντόμευση επιφάνειας εργασίας της ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Συντόμευση επιφάνειας εργασίας της ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Συντόμευση Ταχείας Εκκίνησης της ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Συντόμευση Ταχείας Εκκίνησης της ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Αφαίρεση του φακέλου δεδομένων της ${APPLICATION_NAME} από τον υπολογιστή σας."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Θέλετε να αφαιρέσετε τον φάκελο δεδομένων της ${APPLICATION_NAME};"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Αφήστε κενό για να διατηρήσετε τον φάκελο δεδομένων για μελλοντική χρήση ή επιλέξτε για να διγράψετε το φάκελο δεδομένων."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Ναι, διαγραφή αυτού του φακέλου δεδομένων."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Εγγραφή Εφαρμογής Απεγκατάστασης"
|
StrCpy $UNINSTALLER_FILE_Detail "Εγγραφή Εφαρμογής Απεγκατάστασης"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ολοκληρώθηκε"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Ολοκληρώθηκε"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή εγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή εγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Η εφαρμογή εγκατάστασης λειτουργεί ήδη."
|
StrCpy $INIT_INSTALLER_RUNNING "Η εφαρμογή εγκατάστασης λειτουργεί ήδη."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή απεγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή απεγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Η υπηρεσία σύνδεσης δεν εκτελείται, ακύρωση!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Η εφαρμογή απεγκατάστασης λειτουργεί ήδη."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Η εφαρμογή απεγκατάστασης λειτουργεί ήδη."
|
||||||
StrCpy $SectionGroup_Shortcuts "Συντομεύσεις"
|
StrCpy $SectionGroup_Shortcuts "Συντομεύσεις"
|
||||||
|
|||||||
@@ -1,46 +1,43 @@
|
|||||||
# Auto-generated - do not modify
|
# Auto-generated - do not modify
|
||||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Kiadási jegyzetek megtekintése"
|
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Kiadási jegyzetek megtekintése"
|
||||||
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "A következő folyamatot(okat) meg kell állítani ${APPLICATION_EXECUTABLE}.$\nSzeretné ha a telepítő program megállítani ezeket a folyamatokat?"
|
||||||
|
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Folyamat ${APPLICATION_EXECUTABLE} kilövése."
|
||||||
|
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Kilövésre szánt folyamat nem található."
|
||||||
|
StrCpy $PageReinstall_NEW_Field_1 "Az ${APPLICATION_NAME} alkalmazás egy régebbi verziója telepítva van a rendszeren. Ajánlott a régi alkalmazás eltávolítása mielőtt a legfrissebb verziót telepítané. Válassza ki milyen műveletet szeretne végrehajtani, és nyomja meg a $\"Következő$\" gombot a folytatáshoz."
|
||||||
StrCpy $PageReinstall_NEW_Field_2 "Eltávolítás telepítés előtt"
|
StrCpy $PageReinstall_NEW_Field_2 "Eltávolítás telepítés előtt"
|
||||||
StrCpy $PageReinstall_NEW_Field_3 "Ne távolítsa el"
|
StrCpy $PageReinstall_NEW_Field_3 "Ne távolítsa el"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Már telepítve"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Már telepítve"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Válaszd ki, hogy szeretnéd telepíteni a következő alkalmazást ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Válaszd ki, hogy szeretnéd telepíteni a következő alkalmazást ${APPLICATION_NAME}."
|
||||||
|
StrCpy $PageReinstall_OLD_Field_1 "Az ${APPLICATION_NAME} alklamazás egy újabb verziója már megtalálható a rendszeren. Nem ajánlott egy régebbi verzió telepítése. Ha valóban szeretné a régebbi verziót telepíteni, akkor ajánlott a jelenleg telepített verzió eltávolítása. Válassza ki milyen műveletet szeretne végrehajtani, és nyomja meg a $\"Következő$\" gombot a folytatáshoz."
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "Az ${APPLICATION_NAME} alkalmazás ${VERSION} verziója már telepítve van.$↩$\nKérjük válaszd ki milyen műveletet szeretnél végrehajtani, és nyomd meg a „Következő” gombot."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Komponens hozzáadása/újratelepítése"
|
StrCpy $PageReinstall_SAME_Field_2 "Komponens hozzáadása/újratelepítése"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} eltávolítása"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} eltávolítása"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} eltávolítása"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} eltávolítása"
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Igen, törölje ezt az adatkönyvtárat."
|
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Kérem válassza ki milyen karbantartási műveletet szeretne elvégezni?"
|
||||||
|
StrCpy $SEC_APPLICATION_DETAILS "Az ${APPLICATION_NAME} alkalmazás lényeges komponenseinek telepítése."
|
||||||
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Windows Explorer Integráció"
|
||||||
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Windows Explorer Integráció Telepítése"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menü Parancsikonok"
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "A ${APPLICATION_NAME} parancsikon hozzáadása a Start Menühöz"
|
||||||
|
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Asztali Parancsikon"
|
||||||
|
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Asztali Parancsikon Létrehozása"
|
||||||
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Gyorsindítás Eszköztár Parancsikon"
|
||||||
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Gyorsindítás Eszköztár Parancsikon Létrehozása"
|
||||||
|
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} lényeges komponensek."
|
||||||
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} parancsikon"
|
||||||
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Asztali parancsikon a ${APPLICATION_NAME} alkalmazásnak."
|
||||||
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Gyorsindítás eszköztár parancsikon a ${APPLICATION_NAME} alkalmazásnak."
|
||||||
|
StrCpy $UNINSTALLER_FILE_Detail "Program Eltávolító Írása"
|
||||||
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Telepítési registry kulcsok írása"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Befejezve"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Befejezve"
|
||||||
|
StrCpy $UNINSTALL_MESSAGEBOX "Nem sikerült az ${APPLICATION_NAME} alkalmazás telepítése a '$INSTDIR' könyvtárba.$\n$\nSzeretné mindenképpen folytatni (nem ajánlott)?"
|
||||||
StrCpy $UNINSTALL_ABORT "Az eltávolítást egy felhasználó megszakította"
|
StrCpy $UNINSTALL_ABORT "Az eltávolítást egy felhasználó megszakította"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Gyorsindító Hivatkozás (N/A)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Gyorsindító Hivatkozás (N/A)"
|
||||||
StrCpy $INIT_NO_DESKTOP "Asztali Hivatkozás (felülírja a meglévőt)"
|
StrCpy $INIT_NO_DESKTOP "Asztali Hivatkozás (felülírja a meglévőt)"
|
||||||
|
StrCpy $UAC_ERROR_ELEVATE "Nem sikerült felemelni, hiba:"
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "A telepítő futtatásához adminisztrátori hozzáférés szükséges, próbáld újra."
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "A telepítő futtatásához adminisztrátori hozzáférés szükséges, próbáld újra."
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "A telepítő már fut."
|
StrCpy $INIT_INSTALLER_RUNNING "A telepítő már fut."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Az eltávolító futtatásához adminisztrátori hozzáférés szükséges, próbáld újra."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Az eltávolító futtatásához adminisztrátori hozzáférés szükséges, próbáld újra."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "A bejelentkező szolgáltatás nem fut, megszakítás!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Az eltávolító már fut."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Az eltávolító már fut."
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
StrCpy $SectionGroup_Shortcuts "Parancsikonok"
|
||||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Killing ${APPLICATION_EXECUTABLE} processes."
|
|
||||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Process to kill not found!"
|
|
||||||
StrCpy $PageReinstall_NEW_Field_1 "An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Choose the maintenance option to perform."
|
|
||||||
StrCpy $SEC_APPLICATION_DETAILS "Installing ${APPLICATION_NAME} essentials."
|
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Start Menu Program Shortcut"
|
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Adding shortcut for ${APPLICATION_NAME} to the Start Menu."
|
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Desktop Shortcut"
|
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Creating Desktop Shortcuts"
|
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Quick Launch Shortcut"
|
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creating Quick Launch Shortcut"
|
|
||||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} essentials."
|
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} shortcut."
|
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Desktop shortcut for ${APPLICATION_NAME}."
|
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Quick Launch shortcut for ${APPLICATION_NAME}."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Remove ${APPLICATION_NAME}'s data folder from your computer."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Do you want to delete ${APPLICATION_NAME}'s data folder?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Leave unchecked to keep the data folder for later use or check to delete the data folder."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Writing Uninstaller"
|
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Writing Installer Registry Keys"
|
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
|
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
|
||||||
StrCpy $SectionGroup_Shortcuts "Shortcuts"
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Non disinstallare"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Già installato"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Già installato"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Scegli come desideri installare ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Scegli come desideri installare ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
|
StrCpy $PageReinstall_OLD_Field_1 "Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} è già installato.\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} è già installato.$\n$\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare.."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Aggiungi/Reinstalla i componenti"
|
StrCpy $PageReinstall_SAME_Field_2 "Aggiungi/Reinstalla i componenti"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Disinstalla ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Disinstalla ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Disinstalla ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Disinstalla ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Oggetti fondamentali di ${APPLICATIO
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Scorciatoia di ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Scorciatoia di ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Scorciatoia del desktop per ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Scorciatoia del desktop per ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Scorciatoia per ${APPLICATION_NAME} dell'avvio veloce."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Scorciatoia per ${APPLICATION_NAME} dell'avvio veloce."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Rimuovi la cartella dei dati di ${APPLICATION_NAME} dal tuo computer."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Vuoi eliminare la cartella dei dati di ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Lasciala smarcata per conservare la cartella dei dati per usi futuri o marcala per eliminarla."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Sì, elimina questa cartella di dati."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Creazione del programma di disinstallazione"
|
StrCpy $UNINSTALLER_FILE_Detail "Creazione del programma di disinstallazione"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Scrittura delle chiavi di registro del programma di installazione"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Scrittura delle chiavi di registro del programma di installazione"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Completato"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Completato"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Impossibile elevare, errore:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Il programma di installazione necessita delle credenziali di amministrazione, riprova"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Il programma di installazione necessita delle credenziali di amministrazione, riprova"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Il programma di installazione è già in esecuzione."
|
StrCpy $INIT_INSTALLER_RUNNING "Il programma di installazione è già in esecuzione."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Il programma di disinstallazione necessita delle credenziali di amministrazione, riprova"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Il programma di disinstallazione necessita delle credenziali di amministrazione, riprova"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Il servizio di accesso non è in esecuzione, interruzione in corso!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Il programma di disinstallazione è già in esecuzione."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Il programma di disinstallazione è già in esecuzione."
|
||||||
StrCpy $SectionGroup_Shortcuts "Scorciatoie"
|
StrCpy $SectionGroup_Shortcuts "Scorciatoie"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Auto-generated - do not modify
|
# Auto-generated - do not modify
|
||||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "リリースノートを表示"
|
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "リリースノートを表示"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "${APPLICATION_EXECUTABLE} のプロセスを終了する必要があります。\nインストーラーがそのプロセスを停止してもよろしいですか?"
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "${APPLICATION_EXECUTABLE} のプロセスを終了する必要があります。$\nインストーラーがそのプロセスを停止してもよろしいですか?"
|
||||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} プロセスを停止しています。"
|
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} プロセスを停止しています。"
|
||||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "終了するプロセスがありません"
|
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "終了するプロセスがありません"
|
||||||
StrCpy $PageReinstall_NEW_Field_1 "システムに ${APPLICATION_NAME} の旧バージョンがインストールされています。\n旧バージョンをアンインストールし、最新バージョンをインストールするのをお勧めします。\nオペレーションを選択し、次へをクリックする。"
|
StrCpy $PageReinstall_NEW_Field_1 "システムに ${APPLICATION_NAME} の旧バージョンがインストールされています。\n旧バージョンをアンインストールし、最新バージョンをインストールするのをお勧めします。\nオペレーションを選択し、次へをクリックする。"
|
||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。\nオペレーションを選択し、次へをクリックする。"
|
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。\nオペレーションを選択し、次へをクリックする。"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} はすでにインストールされています。\n実行するオペレーションを選択し、次へをクリックする"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} は、${VERSION} が既にインストールされています。$\n$\n実行したい操作を選択し、次へをクリックする。"
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME}
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} のショートカット"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} のショートカット"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} のデスクトップショートカット"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} のデスクトップショートカット"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} のクイック起動ショートカット"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} のクイック起動ショートカット"
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "${APPLICATION_NAME} のデータフォルダーを削除する"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "${APPLICATION_NAME} のデータフォルダーを削除しますか?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "データフォルダーを削除する場合、チェックボックスをオンにする。\nまたは、データフォルダーを保存する場合、チェックボックスをオフにする。"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "はい。データフォルダーを削除します。"
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "アンインストーラーを書き込み"
|
StrCpy $UNINSTALLER_FILE_Detail "アンインストーラーを書き込み"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "インストーラーのレジストリキーの書き込み"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "インストーラーのレジストリキーの書き込み"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "終了"
|
StrCpy $UNINSTALLER_FINISHED_Detail "終了"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "このインストーラーは、管理者権限が必要です。インストールを再試行してください。"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "このインストーラーは、管理者権限が必要です。インストールを再試行してください。"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "インストーラーは、すでに起動しています。"
|
StrCpy $INIT_INSTALLER_RUNNING "インストーラーは、すでに起動しています。"
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "このアンインストーラーは、管理者権限が必要です。アンインストールを再試行してください。"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "このアンインストーラーは、管理者権限が必要です。アンインストールを再試行してください。"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "ログオンサービスが動いていません。中止します。"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "アンインストーラーは、すでに起動しています。"
|
StrCpy $INIT_UNINSTALLER_RUNNING "アンインストーラーは、すでに起動しています。"
|
||||||
StrCpy $SectionGroup_Shortcuts "ショートカット"
|
StrCpy $SectionGroup_Shortcuts "ショートカット"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Ikke avinstaller"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Allerede installert"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Allerede installert"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Velg hvordan du vil installere ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Velg hvordan du vil installere ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
StrCpy $PageReinstall_OLD_Field_1 "En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} er allerede installert.\nVelg hva du vil gjøre og klikk Neste for å fortsette."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} er installert allerede.$\n$\nVelg hva du ønsker å gjøre og klikk Neste for å fortsette."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Legg til/installer komponenter på nytt"
|
StrCpy $PageReinstall_SAME_Field_2 "Legg til/installer komponenter på nytt"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Avinstaller ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Avinstaller ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstaller ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstaller ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} grunnleggende."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}-snarvei."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}-snarvei."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrivebordssnarvei for ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrivebordssnarvei for ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Hurtigstart-snarvei for ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Hurtigstart-snarvei for ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Fjern ${APPLICATION_NAME} sin datamappe fra datamaskinen."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Ønsker du å slette ${APPLICATION_NAME} sin datamappe?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Ikke kryss av dersom du vil beholde datamappen for senere bruk. Kryss av for å slette mappen."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Ja, slett denne datamappen."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Skriver Avinstallasjonsprogram."
|
StrCpy $UNINSTALLER_FILE_Detail "Skriver Avinstallasjonsprogram."
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Skriver registernøkler for installasjonsprogrammet"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Skriver registernøkler for installasjonsprogrammet"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ferdig"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Ferdig"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Klarte ikke
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dette installasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dette installasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Påloggingstjenesten kjører ikke, avbryter!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
||||||
StrCpy $SectionGroup_Shortcuts "Snarveier"
|
StrCpy $SectionGroup_Shortcuts "Snarveier"
|
||||||
|
|||||||
@@ -1,46 +1,43 @@
|
|||||||
# Auto-generated - do not modify
|
# Auto-generated - do not modify
|
||||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Pokaż informacje o wydaniu"
|
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Poka¿ informacje o wydaniu"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Proces ${APPLICATION_EXECUTABLE} musi zostać zatrzymany $\nCzy chcesz aby instalator zatrzymał je dla ciebie?"
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Proces ${APPLICATION_EXECUTABLE} musi zostaæ zatrzymany $\nCzy chcesz aby instalator zatrzyma³ je dla ciebie?"
|
||||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Zamykam proces ${APPLICATION_EXECUTABLE}."
|
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Zamykam proces ${APPLICATION_EXECUTABLE}."
|
||||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Nie znaleziono procesu!"
|
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Nie znaleziono procesu!"
|
||||||
StrCpy $PageReinstall_NEW_Field_1 "W Twoim systemie jest zainstalowana starsza wersja ${APPLICATION_NAME}. Zalecane jest jej usunięcie przed dalszą instalacją. Wybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
|
StrCpy $PageReinstall_NEW_Field_1 "W Twoim systemie jest zainstalowana starsza wersja ${APPLICATION_NAME}. Zalecane jest jej usuniêcie przed dalsz¹ instalacj¹. Wybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
|
||||||
StrCpy $PageReinstall_NEW_Field_2 "Odinstaluj przed instalacja"
|
StrCpy $PageReinstall_NEW_Field_2 "Odinstaluj przed instalacja"
|
||||||
StrCpy $PageReinstall_NEW_Field_3 "Nie usuwaj "
|
StrCpy $PageReinstall_NEW_Field_3 "Nie usuwaj "
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Już zainstalowane"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ju¿ zainstalowane"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wybierz jak chcesz zainstalować ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wybierz jak chcesz zainstalowaæ ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeśli naprawdę chcesz zainstalować starszą wersję lepiej najpierw odinstalować obecną aplikację. Wybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
|
StrCpy $PageReinstall_OLD_Field_1 "Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeœli naprawdê chcesz zainstalowaæ starsz¹ wersjê lepiej najpierw odinstalowaæ obecn¹ aplikacjê. Wybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} jest już zainstalowany.\nWybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Doda/Przeinstaluj komponenty"
|
StrCpy $PageReinstall_SAME_Field_2 "Doda/Przeinstaluj komponenty"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstaluj ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odinstaluj ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstaluj ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstaluj ${APPLICATION_NAME}"
|
||||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wybierz sposób utrzymywania."
|
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wybierz sposób utrzymywania."
|
||||||
StrCpy $SEC_APPLICATION_DETAILS "Instaluje niezbędne pliki ${APPLICATION_NAME}."
|
StrCpy $SEC_APPLICATION_DETAILS "Instaluje niezbêdne pliki ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "integracja z Eksploratorem Windows"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "integracja z Eksploratorem Windows"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalowanie Integracji z Eksploratorem Windows"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalowanie Integracji z Eksploratorem Windows"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Skrót w Menu Start"
|
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Skrót w Menu Start"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Dodaję skrót ${APPLICATION_NAME} w Menu Start."
|
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Dodajê skrót ${APPLICATION_NAME} w Menu Start."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Skrót na Pulpicie"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Skrót na Pulpicie"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Utworzy skrót na Pulpicie"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Utworzy skrót na Pulpicie"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Skrót na Pasku Zadań"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Skrót na Pasku Zadañ"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Tworzę skrót na Pasku Zadań"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Tworzê skrót na Pasku Zadañ"
|
||||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Niezbędne pliki ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Niezbêdne pliki ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Skrót ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Skrót ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrót ${APPLICATION_NAME} na pulpicie."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrót ${APPLICATION_NAME} na pulpicie."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Skrót ${APPLICATION_NAME} na Pasku Zadań."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Skrót ${APPLICATION_NAME} na Pasku Zadañ."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Usuń folder z danymi ${APPLICATION_NAME} z komputera."
|
StrCpy $UNINSTALLER_FILE_Detail "Tworzê dezinstalator"
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Czy chcesz usunąć folder z danymi ${APPLICATION_NAME}?"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Tworzê wpisy w rejestrze"
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Zostaw niezaznaczone aby zachować folder z danymi lub zaznacz aby go usunąć."
|
StrCpy $UNINSTALLER_FINISHED_Detail "Zakoñczony"
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Tak, usuń folder z danymi."
|
StrCpy $UNINSTALL_MESSAGEBOX "Nie wygl¹da na to ¿e ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuowaæ mimo tego (nie zalecane)?"
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Tworzę dezinstalator"
|
StrCpy $UNINSTALL_ABORT "Dezinstalacja przerwana przez u¿ytkownika"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Tworzę wpisy w rejestrze"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Skrót na Pasku Zadañ (NIE DOTYCZY)"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Zakończony"
|
StrCpy $INIT_NO_DESKTOP "Skróty na pulpicie (nadpisuje obecne)"
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "Nie wygląda na to że ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuować mimo tego (nie zalecane)?"
|
StrCpy $UAC_ERROR_ELEVATE "Niemo¿noœæ podniesienia, b³¹d:"
|
||||||
StrCpy $UNINSTALL_ABORT "Dezinstalacja przerwana przez użytkownika"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Ten instalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Skrót na Pasku Zadań (NIE DOTYCZY)"
|
StrCpy $INIT_INSTALLER_RUNNING "Instalator ju¿ jest uruchomiony."
|
||||||
StrCpy $INIT_NO_DESKTOP "Skróty na pulpicie (nadpisuje obecne)"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Niemożność podniesienia, błąd:"
|
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator ju¿ jest uruchomiony."
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Ten instalator potrzebuje uprawnień administratora, spróbuj ponownie"
|
StrCpy $SectionGroup_Shortcuts "Skróty"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Instalator już jest uruchomiony."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnień administratora, spróbuj ponownie"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator już jest uruchomiony."
|
|
||||||
StrCpy $SectionGroup_Shortcuts "Skróty"
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Não desinstale"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como pretende instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como pretende instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalado.\nSelecione a operação que deseja fazer, e clique Seguinte para continuar."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalada.\nSelecione a operação que deseja realizar e clique em 'Seguinte' para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/Reinstalar Componentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/Reinstalar Componentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "O essencial de ${APPLICATION_NAME}."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Atalho de ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Atalho de ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho no ambiente de trabalho de ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho no ambiente de trabalho de ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho de início rápido de ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho de início rápido de ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Remover a pasta de dados de ${APPLICATION_NAME} do seu computador."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Deseja remover a pasta de dados de ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Não assinale para manter a pasta de dados para uso mais tarde, ou assinale para apagar a pasta de dados."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Sim, remover esta pasta."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "A escrever o Desinstalador"
|
StrCpy $UNINSTALLER_FILE_Detail "A escrever o Desinstalador"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "A escrever chaves de registo do instalador"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "A escrever chaves de registo do instalador"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Incapaz de elevar, erro:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador precisa de permissões de administrador, tente novamente"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador precisa de permissões de administrador, tente novamente"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador já está em execução."
|
StrCpy $INIT_INSTALLER_RUNNING "O instalador já está em execução."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador requer permissões de administrador, tente novamente"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador requer permissões de administrador, tente novamente"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "O serviço do início de sessão não está em execução, a abortar!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador já está em execução."
|
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador já está em execução."
|
||||||
StrCpy $SectionGroup_Shortcuts "Atalhos"
|
StrCpy $SectionGroup_Shortcuts "Atalhos"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "N
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já Instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já Instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como você deseja instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como você deseja instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A versão mais recente do ${APPLICATION_NAME} já está instalado! Não é recomendado que você instale uma versão mais antiga. Se você realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "A versão mais recente do ${APPLICATION_NAME} já está instalado! Não é recomendado que você instale uma versão mais antiga. Se você realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${version} já está instalado. \nSelecione a operação que deseja executar e clique em Avançar para continuar."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalado.$\n$\nSelecione a operação que você quer realizar e clique Próximo para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/reinstalar componentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/reinstalar componentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esseciais."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} atalho."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} atalho."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho Desktop para ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho Desktop para ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho Rápido para ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho Rápido para ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Remover ${APPLICATION_NAME} pasta de dados de seu computador."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Você quer apagar ${APPLICATION_NAME} 's pasta de dados?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Deixe desmarcada para manter a pasta de dados para uso posterior ou cheque para excluir a pasta de dados."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Sim, excluir essa pasta de dados."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Gravando Desinstalador"
|
StrCpy $UNINSTALLER_FILE_Detail "Gravando Desinstalador"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Gravando Chaves de Registro do Inslalador"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Gravando Chaves de Registro do Inslalador"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Finalizado"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Finalizado"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Incapaz de elevar, erro:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este programa de instalação requer acesso de administrador, tente novamente"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este programa de instalação requer acesso de administrador, tente novamente"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador já está em execução."
|
StrCpy $INIT_INSTALLER_RUNNING "O instalador já está em execução."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador requer acesso de administrador, tente novamente"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador requer acesso de administrador, tente novamente"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "O serviço de logon não está sendo executado, abortando!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador já está em execução."
|
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador já está em execução."
|
||||||
StrCpy $SectionGroup_Shortcuts "Atalhos"
|
StrCpy $SectionGroup_Shortcuts "Atalhos"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Не устанавливать"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Уже установлено"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Уже установлено"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Выберите, как вы хотите установить ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Выберите, как вы хотите установить ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите установить эту старую версию, то сначала лучше удалить текущую версию. Выберите желаемое действие и нажмите Далее для продолжения."
|
StrCpy $PageReinstall_OLD_Field_1 "Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите установить эту старую версию, то сначала лучше удалить текущую версию. Выберите желаемое действие и нажмите Далее для продолжения."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} уже установлена.\nВыберите желаемое действие и нажмите Далее для продолжения."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} уже установлен.$\n$\nУкажите действие и нажмите Далее для продолжения."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Добавить/Переустановить компоненты"
|
StrCpy $PageReinstall_SAME_Field_2 "Добавить/Переустановить компоненты"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Удалить ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Удалить ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Удалить ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Удалить ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Базовые компоненты
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Ярлык приложения ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Ярлык приложения ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Ярлык на рабочем столе для ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Ярлык на рабочем столе для ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Ярлык в меню быстрого запуска для ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Ярлык в меню быстрого запуска для ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Удалить каталог данных ${APPLICATION_NAME} с вашего компьютера."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Вы действительно хотите удалить каталог с данными ${APPLICATION_NAME} ?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Оставьте неактивным для сохранения каталога с данными для последующего использования или отметьте для удаления."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Да, удалить этот каталог с данными."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Сохранение деинсталлятора"
|
StrCpy $UNINSTALLER_FILE_Detail "Сохранение деинсталлятора"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Запись ключей реестра установщика"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Запись ключей реестра установщика"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Невозможно повысить привиле
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Этому установщику требуются права администратора, попробуйте ещё раз"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Этому установщику требуются права администратора, попробуйте ещё раз"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Установщик уже запущен."
|
StrCpy $INIT_INSTALLER_RUNNING "Установщик уже запущен."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Этому деинсталлятору требуются права администратора, попробуйте ещё раз"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Этому деинсталлятору требуются права администратора, попробуйте ещё раз"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Служба входа в систему не запущена, прерывание!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Программа удаления уже выполняется."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Программа удаления уже выполняется."
|
||||||
StrCpy $SectionGroup_Shortcuts "Ярлыки"
|
StrCpy $SectionGroup_Shortcuts "Ярлыки"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "不要卸载"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "已经安装"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "已经安装"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "选择如何安装${APPLICATION_NAME}。"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "选择如何安装${APPLICATION_NAME}。"
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "较新版本的 ${APPLICATION_NAME} 已经安装!安装较旧版本的程序是不推荐的。如果您希望继续安装较旧版本,建议先卸载较新版本。选择您想要执行的操作并点击下一步以继续。"
|
StrCpy $PageReinstall_OLD_Field_1 "较新版本的 ${APPLICATION_NAME} 已经安装!安装较旧版本的程序是不推荐的。如果您希望继续安装较旧版本,建议先卸载较新版本。选择您想要执行的操作并点击下一步以继续。"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} 已经安装。\n请选择想要执行的操作并点击下一步。"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} 已经安装。$\n$\n请选择想要执行的操作并点击下一步。"
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "增加/重装组件"
|
StrCpy $PageReinstall_SAME_Field_2 "增加/重装组件"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "卸载${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "卸载${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "卸载${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "卸载${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME}基本组件。"
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}快捷方式。"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME}快捷方式。"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME}桌面快捷方式。"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME}桌面快捷方式。"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME}快速启动栏快捷方式。"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME}快速启动栏快捷方式。"
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "从电脑中移除 ${APPLICATION_NAME} 数据文件夹。"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "移除 ${APPLICATION_NAME} 数据文件夹?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "选择以删除数据文件夹,不选择以保留数据文件夹内容供后续使用。"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "删除数据文件。"
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "覆盖卸载器"
|
StrCpy $UNINSTALLER_FILE_Detail "覆盖卸载器"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "正在写入注册表"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "正在写入注册表"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "完成"
|
StrCpy $UNINSTALLER_FINISHED_Detail "完成"
|
||||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "安装程序已经运行。"
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "卸载程序需要管理员权限,请重试"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "卸载程序需要管理员权限,请重试"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "卸载程序已经运行。"
|
StrCpy $INIT_UNINSTALLER_RUNNING "卸载程序已经运行。"
|
||||||
StrCpy $SectionGroup_Shortcuts "快捷方式"
|
StrCpy $SectionGroup_Shortcuts "快捷方式"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Neodin
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Už je nainštalovaný"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Už je nainštalovaný"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vyberte si, ako chcete nainštalova<76> ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vyberte si, ako chcete nainštalova<76> ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúèam vám nainštalova<76> staršiu verziu. Ak naozaj chcete nainštalova<76> túto staršiu verziu, je lepšie najprv odinštalova<76> aktuálnu verziu. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
StrCpy $PageReinstall_OLD_Field_1 "Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúèam vám nainštalova<76> staršiu verziu. Ak naozaj chcete nainštalova<76> túto staršiu verziu, je lepšie najprv odinštalova<76> aktuálnu verziu. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je už nainštalovaná.\nVyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Prida<EFBFBD>/Preinštalova<76> komponenty"
|
StrCpy $PageReinstall_SAME_Field_2 "Prida<EFBFBD>/Preinštalova<76> komponenty"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "N
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} zástupca."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} zástupca."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Zástupca na ploche pre ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Zástupca na ploche pre ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Zástupca na paneli úloh pre ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Zástupca na paneli úloh pre ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Zmaza<EFBFBD> dátový prieèinok ${APPLICATION_NAME}'s z vášho poèítaèa."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Naozaj chcete zmaza<7A> prieèinok s dátami ${APPLICATION_NAME}'s ?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Ponechajte nezaškrtnuté, ak chcete prieèinok s dátami ponecha<68> na neskoršie použitie, alebo zaškrtnite, ak chcete prieèinok zmaza<7A>."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Áno, zmaza<7A> tento prieèinok."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisujem odinštalátor"
|
StrCpy $UNINSTALLER_FILE_Detail "Zapisujem odinštalátor"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisujem inštalaèné k¾úèe do registra"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisujem inštalaèné k¾úèe do registra"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokonèené"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Dokonèené"
|
||||||
@@ -44,3 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "In
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinštalátor vyžaduje admin prístup, skúste to znova"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinštalátor vyžaduje admin prístup, skúste to znova"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
||||||
StrCpy $SectionGroup_Shortcuts "Zástupcovia"
|
StrCpy $SectionGroup_Shortcuts "Zástupcovia"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Ne odstrani namestitve"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Program je že nameščen"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Program je že nameščen"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Izberite način namestitve programa ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Izberite način namestitve programa ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
StrCpy $PageReinstall_OLD_Field_1 "Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "Program ${APPLICATION_NAME} ${VERSION} je že nameščen. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Dodaj/Ponovno namesti programe"
|
StrCpy $PageReinstall_SAME_Field_2 "Dodaj/Ponovno namesti programe"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odstrani ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odstrani ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odstrani ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odstrani ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Knji
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Bližnjica programa ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Bližnjica programa ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Bližnjica namizja za program ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Bližnjica namizja za program ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Bližnjica za hiter dostop za program ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Bližnjica za hiter dostop za program ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Odstrani podatkovno mapo programa ${APPLICATION_NAME}."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Ali želite izbrisati podatkovno mapo programa ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Pustite možnost neoznačeno za kasnejšo rabo podatkov v mapi, ali pa možnost izberite in jo izbrišite."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Da, izbriši podatkovno mapo."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisovanje programa za odstranjevanje namestitve"
|
StrCpy $UNINSTALLER_FILE_Detail "Zapisovanje programa za odstranjevanje namestitve"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Poteka zapisovanje namestilnika v register"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Poteka zapisovanje namestilnika v register"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Končano"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Končano"
|
||||||
@@ -44,3 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Namestilnik je
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Program za odstranjevanje namestitve zahteva skrbniška dovoljenja."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Program za odstranjevanje namestitve zahteva skrbniška dovoljenja."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
||||||
StrCpy $SectionGroup_Shortcuts "Bližnjice"
|
StrCpy $SectionGroup_Shortcuts "Bližnjice"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ StrCpy $PageReinstall_NEW_Field_2 "Desinstalar antes de instalar"
|
|||||||
StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
|
StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ya está instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ya está instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Elija cómo quiere instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Elija cómo quiere instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Next para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Siguiente para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ya está instalada.\nSeleccione la operación que desea realizar y pulse Next para continuar."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ya está instalado.$\n$\nSeleccione la operación que desea realizar y haga click en Siguiente para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Añadir/Reinstalar componentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Añadir/Reinstalar componentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
@@ -27,14 +27,10 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esencial."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso Directo de ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso Directo de ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso Directo de Escritorio para ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso Directo de Escritorio para ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Lanzador Rápido de Accesos Director para ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Lanzador Rápido de Accesos Director para ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Elimine la carpeta de datos de ${APPLICATION_NAME} del computador."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "¿Desea eliminar la carpeta de datos de ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Déjelo sin marcar para mantener la carpeta de datos para uso posterior o márquelo para eliminar la carpeta de datos."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Sí, elimine esta carpeta de datos."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo desinstalador"
|
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo desinstalador"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribiendo claves en el registro del instalador"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribiendo claves en el registro del instalador"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No Recomendado)"
|
StrCpy $UNINSTALL_MESSAGEBOX "Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No recomendado)"
|
||||||
StrCpy $UNINSTALL_ABORT "Desinstalación cancelada por el usuario"
|
StrCpy $UNINSTALL_ABORT "Desinstalación cancelada por el usuario"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Atajo de inicio rápido (N/A)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Atajo de inicio rápido (N/A)"
|
||||||
StrCpy $INIT_NO_DESKTOP "Atajo de escritorio (sobreescribe el existente)"
|
StrCpy $INIT_NO_DESKTOP "Atajo de escritorio (sobreescribe el existente)"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "No se ha podido elevar, error:"
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "El instalador requiere acceso administrativo, inténtelo de nuevo"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "El instalador requiere acceso administrativo, inténtelo de nuevo"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "El instalador ya se encuentra en ejecución"
|
StrCpy $INIT_INSTALLER_RUNNING "El instalador ya se encuentra en ejecución"
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "El desinstalador requiere acceso administrativo, inténtelo de nuevo"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "El desinstalador requiere acceso administrativo, inténtelo de nuevo"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Servicio Inicio de sesión no se está ejecutando, abortando!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstalador ya se encuentra en ejecución."
|
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstalador ya se encuentra en ejecución."
|
||||||
StrCpy $SectionGroup_Shortcuts "Accesos directos"
|
StrCpy $SectionGroup_Shortcuts "Accesos directos"
|
||||||
|
|||||||
@@ -19,10 +19,6 @@ StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Acceso directo en Escritorio"
|
|||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Creando Accesos Directos en Escritorio"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Creando Accesos Directos en Escritorio"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso directo de ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso directo de ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso Directo al Escritorio para ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso Directo al Escritorio para ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Quitar la carpeta de datos ${APPLICATION_NAME} de la computadora."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Desea borrar la carpeta de datos de ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Dejar des-tildado para mantener la carpeta de datos para posterior uso o tildar para borrar la carpeta de datos."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Si, eliminar esta carpeta de datos."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo Des-Instalador."
|
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo Des-Instalador."
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribiendo claves de Registro del Instalador"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribiendo claves de Registro del Instalador"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||||
@@ -34,7 +30,7 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este des-instalador requiere acceso admin
|
|||||||
StrCpy $INIT_UNINSTALLER_RUNNING "El des-instalador ya esta corriendo"
|
StrCpy $INIT_UNINSTALLER_RUNNING "El des-instalador ya esta corriendo"
|
||||||
StrCpy $SectionGroup_Shortcuts "Accesos Directos"
|
StrCpy $SectionGroup_Shortcuts "Accesos Directos"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Quick Launch Shortcut"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Quick Launch Shortcut"
|
||||||
@@ -44,3 +40,4 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Quick Launch shortcut for ${APPLICA
|
|||||||
StrCpy $UNINSTALL_MESSAGEBOX "It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
|
StrCpy $UNINSTALL_MESSAGEBOX "It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Quick Launch Shortcut (N/A)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Quick Launch Shortcut (N/A)"
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Avinstallera inte"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Redan installerad"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Redan installerad"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Välj hur du vill installera ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Välj hur du vill installera ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
StrCpy $PageReinstall_OLD_Field_1 "En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} är redan installerad.\nVälj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Lägg till/Ominstallera komponenter"
|
StrCpy $PageReinstall_SAME_Field_2 "Lägg till/Ominstallera komponenter"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Avinstallera ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Avinstallera ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstallera ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstallera ${APPLICATION_NAME}"
|
||||||
@@ -25,10 +24,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} väsentligheter.
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} genväg."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} genväg."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrivbordsgenväg för ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Skrivbordsgenväg för ${APPLICATION_NAME}."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Snabbstartsgenväg för ${APPLICATION_NAME}."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Snabbstartsgenväg för ${APPLICATION_NAME}."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Tag bort ${APPLICATION_NAME}s data mapp från din dator."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Vill du radera ${APPLICATION_NAME}s data mapp?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Lämna omarkerad för att behålla data mappen för senare användning eller markera för att radera data mappen.."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Ja, radera denna data mappen."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Skriver avinstallationsprogram"
|
StrCpy $UNINSTALLER_FILE_Detail "Skriver avinstallationsprogram"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Skriver installationsprogrammets registernycklar"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Skriver installationsprogrammets registernycklar"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Klar"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Klar"
|
||||||
@@ -42,5 +37,7 @@ StrCpy $INIT_INSTALLER_RUNNING "Installationsprogrammet körs redan."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Detta avinstallationsprogram kräver administratörsrättigheter, försök igen"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Detta avinstallationsprogram kräver administratörsrättigheter, försök igen"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
||||||
StrCpy $SectionGroup_Shortcuts "Genvägar"
|
StrCpy $SectionGroup_Shortcuts "Genvägar"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "อย่าถอนการติดตั
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "ติดตั้งแล้ว"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "ติดตั้งแล้ว"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "เลือกวิธีที่คุณต้องการติดตั้ง ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "เลือกวิธีที่คุณต้องการติดตั้ง ${APPLICATION_NAME}"
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "รุ่นใหม่ของ ${APPLICATION_NAME} ถูกติดตั้งแล้ว! เราไม่แนะนำให้คุณติดตั้งรุ่นเก่า ถ้าคุณอยากจะติดตั้งรุ่นเก่าก็สามารถสอนการติดตั้งได้"
|
StrCpy $PageReinstall_OLD_Field_1 "รุ่นใหม่ของ ${APPLICATION_NAME} ถูกติดตั้งแล้ว! เราไม่แนะนำให้คุณติดตั้งรุ่นเก่า ถ้าคุณอยากจะติดตั้งรุ่นเก่าก็สามารถสอนการติดตั้งได้"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ได้ถูกติดตั้งแล้ว เลือกการดำเนินการที่คุณต้องการที่จะดำเนินการและคลิกถัดไปเพื่อดำเนินการต่อ"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ถูกติดตั้งไปแล้ว$ $\nเลือกดำเนินงานที่คุณต้องการและคลิกถัดไปเพื่อดำเนินการต่อ"
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "ส่วนประกอบ เพิ่ม/ติดตั้งใหม่ "
|
StrCpy $PageReinstall_SAME_Field_2 "ส่วนประกอบ เพิ่ม/ติดตั้งใหม่ "
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} ที่จำ
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "ทางลัด ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "ทางลัด ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "ทางลัดบนเดสก์ทอปสำหรับ ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "ทางลัดบนเดสก์ทอปสำหรับ ${APPLICATION_NAME}"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "ทางลัดเร่งด่วนสำหรับ ${APPLICATION_NAME}"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "ทางลัดเร่งด่วนสำหรับ ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "ลบ ${APPLICATION_NAME} ของโฟลเดอร์ข้อมูลจากคอมพิวเตอร์ของคุณ"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "คุณต้องการลบ ${APPLICATION_NAME} ของโฟลเดอร์ข้อมูล?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "ปล่อยให้ตรวจสอบสำหรับใช้โฟลเดอร์ข้อมูลในภายหลังหรือตรวจสอบเพื่อลบโฟลเดอร์ข้อมูล"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "ใช่ลบโฟลเดอร์ข้อมูลนี้"
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "กำลังถอนการติดตั้ง"
|
StrCpy $UNINSTALLER_FILE_Detail "กำลังถอนการติดตั้ง"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "กำลังติดตั้งรหัสรีจิสทรี"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "กำลังติดตั้งรหัสรีจิสทรี"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "เสร็จสิ้น"
|
StrCpy $UNINSTALLER_FINISHED_Detail "เสร็จสิ้น"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "ไม่สามารถที่จะยกร
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "การติดตั้งนี้จะต้องมีการเข้าถึงผู้ดูแลระบบ กรุณาลองอีกครั้ง"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "การติดตั้งนี้จะต้องมีการเข้าถึงผู้ดูแลระบบ กรุณาลองอีกครั้ง"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "กำลังทำการติดตั้ง"
|
StrCpy $INIT_INSTALLER_RUNNING "กำลังทำการติดตั้ง"
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "การถอนการติดตั้งนี้จะต้องมีการเข้าถึงส่วนผู้ดูแลระบบ กรุณาลองอีกครั้ง"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "การถอนการติดตั้งนี้จะต้องมีการเข้าถึงส่วนผู้ดูแลระบบ กรุณาลองอีกครั้ง"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "บริการเข้าสู่ระบบไม่ทำงาน กำลังยกเลิก!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "กำลังทำการถอนการติดตั้ง"
|
StrCpy $INIT_UNINSTALLER_RUNNING "กำลังทำการถอนการติดตั้ง"
|
||||||
StrCpy $SectionGroup_Shortcuts "ทางลัด"
|
StrCpy $SectionGroup_Shortcuts "ทางลัด"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Kald
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Zaten Yüklü"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Zaten Yüklü"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} uygulamasýný nasýl yüklemek istediðinizi seçin."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} uygulamasýný nasýl yüklemek istediðinizi seçin."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} uygulamasýnýn daha yeni sürümü zaten yüklü! Daha eski bir sürümünü yüklemeniz önerilmez. Gerçekten bu eski sürümü yüklemek isterseniz, ilk olarak geçerli sürümü kaldýrmanýz tavsiye edilir. Yapmak istediðiniz iþlemi seçin ve devam etmek üzere Ýleri týklayýn."
|
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} uygulamasýnýn daha yeni sürümü zaten yüklü! Daha eski bir sürümünü yüklemeniz önerilmez. Gerçekten bu eski sürümü yüklemek isterseniz, ilk olarak geçerli sürümü kaldýrmanýz tavsiye edilir. Yapmak istediðiniz iþlemi seçin ve devam etmek üzere Ýleri týklayýn."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} zaten yüklü.\n\nYapmak istediğiniz işlemi seçin ve devam etmek için İleri tıklayın."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} zaten yüklü.$\n$\nYapmak istediðiniz iþlemi seçin ve devam etmek için Ýleri týklayýn."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Bileþenleri ekle/yeniden yükle"
|
StrCpy $PageReinstall_SAME_Field_2 "Bileþenleri ekle/yeniden yükle"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasýný kaldýr"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasýný kaldýr"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasýný kaldýr"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasýný kaldýr"
|
||||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} gereklilikleri."
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} kýsayolu."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} kýsayolu."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} için masaüstü kýsayolu."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "${APPLICATION_NAME} için masaüstü kýsayolu."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} için Hýzlý Baþlat kýsayolu."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME} için Hýzlý Baþlat kýsayolu."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Bilgisayarınızdan ${APPLICATION_NAME} veri klasörünü kaldırır."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "${APPLICATION_NAME} veri klasörünü silmek istiyor musunuz?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Veri klasörünün daha sonraki kullanımı için saklamak üzere işaretini kaldırın veya silmek için işaretleyin."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Evet bu veri klasörünü sil."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Kaldýrýcý Yazýlýyor"
|
StrCpy $UNINSTALLER_FILE_Detail "Kaldýrýcý Yazýlýyor"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Yükleyici Kayýt Anahtarlarý Yazýlýyor"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Yükleyici Kayýt Anahtarlarý Yazýlýyor"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Tamamlandý"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Tamamlandý"
|
||||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Y
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Bu yükleyici yönetici eriþimi gerektiriyor, yeniden deneyin"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Bu yükleyici yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Yükleyici zaten çalýþýyor."
|
StrCpy $INIT_INSTALLER_RUNNING "Yükleyici zaten çalýþýyor."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldýrýcý yönetici eriþimi gerektiriyor, yeniden deneyin"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldýrýcý yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Oturum açýlacak sunucu çalýþmadýðýndan iptal ediliyor!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldýrýcý zaten çalýþýyor."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldýrýcý zaten çalýþýyor."
|
||||||
StrCpy $SectionGroup_Shortcuts "Kýsayollar"
|
StrCpy $SectionGroup_Shortcuts "Kýsayollar"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Не видаляти"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Установлено"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Установлено"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Оберіть, як ви хочете установити ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Оберіть, як ви хочете установити ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Знайдено новішу версію ${APPLICATION_NAME}! Ми не рекомендуємо встановлювати стару версію. Якщо ви все ж бажаєте встановити цю версію, спочатку видаліть поточну версію. Оберіть подальшу дію та натисніть $\"Далі$\"."
|
StrCpy $PageReinstall_OLD_Field_1 "Знайдено новішу версію ${APPLICATION_NAME}! Ми не рекомендуємо встановлювати стару версію. Якщо ви все ж бажаєте встановити цю версію, спочатку видаліть поточну версію. Оберіть подальшу дію та натисніть $\"Далі$\"."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} вже встановлено.↩\nОберіть подальшу дію та натисніть $\"Далі$\"."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Додати/Перевстановити компоненти"
|
StrCpy $PageReinstall_SAME_Field_2 "Додати/Перевстановити компоненти"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Видалити ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Видалити ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Видалити ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Видалити ${APPLICATION_NAME}"
|
||||||
@@ -27,10 +26,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} залежнос
|
|||||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} ярлик."
|
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} ярлик."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Ярлик ${APPLICATION_NAME} на Робочому столі."
|
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Ярлик ${APPLICATION_NAME} на Робочому столі."
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Ярлик ${APPLICATION_NAME} на панелі швидкого запуску."
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Ярлик ${APPLICATION_NAME} на панелі швидкого запуску."
|
||||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Видалити теку даних ${APPLICATION_NAME} з вашого комп'ютера."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Ви дійсно бажаєте видалити теку даних ${APPLICATION_NAME}?"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Залиште неактивним, для збереження теки з даними програми, для подальшого використання."
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Так, видалити теку даних."
|
|
||||||
StrCpy $UNINSTALLER_FILE_Detail "Збереження Програми видалення"
|
StrCpy $UNINSTALLER_FILE_Detail "Збереження Програми видалення"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Запис ключів реєстру"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Запис ключів реєстру"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
||||||
@@ -44,3 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Установка вже запущена."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Для видалення потрібні права адміністратора, спробуйте ще раз"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Для видалення потрібні права адміністратора, спробуйте ще раз"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Програма видалення вже запущено."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Програма видалення вже запущено."
|
||||||
StrCpy $SectionGroup_Shortcuts "Ярлики"
|
StrCpy $SectionGroup_Shortcuts "Ярлики"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash -x
|
||||||
L10NDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
|
L10NDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
|
||||||
SCRIPTDIR="$L10NDIR/bin"
|
SCRIPTDIR="$L10NDIR/bin"
|
||||||
PODIR="$L10NDIR/pofiles"
|
PODIR="$L10NDIR/pofiles"
|
||||||
@@ -45,5 +45,7 @@ iconv -t CP932 -o Japanese.nsh Japanese.nsh
|
|||||||
iconv -t CP1250 -o Slovak.nsh Slovak.nsh
|
iconv -t CP1250 -o Slovak.nsh Slovak.nsh
|
||||||
iconv -t CP1254 -o Turkish.nsh Turkish.nsh
|
iconv -t CP1254 -o Turkish.nsh Turkish.nsh
|
||||||
iconv -t CP1252 -o Norwegian.nsh Norwegian.nsh
|
iconv -t CP1252 -o Norwegian.nsh Norwegian.nsh
|
||||||
|
iconv -t CP1250 -o Polish.nsh Polish.nsh
|
||||||
|
iconv -t CP852 -o Czech.nsh Czech.nsh
|
||||||
|
#iconv -t CP852 -o Slovak.nsh Slovak.nsh
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,6 @@ Var OPTION_SECTION_SC_APPLICATION_Desc
|
|||||||
Var OPTION_SECTION_SC_START_MENU_Desc
|
Var OPTION_SECTION_SC_START_MENU_Desc
|
||||||
Var OPTION_SECTION_SC_DESKTOP_Desc
|
Var OPTION_SECTION_SC_DESKTOP_Desc
|
||||||
Var OPTION_SECTION_SC_QUICK_LAUNCH_Desc
|
Var OPTION_SECTION_SC_QUICK_LAUNCH_Desc
|
||||||
Var UNINSTALLER_APPDATA_SUBTITLE
|
|
||||||
Var UNINSTALLER_APPDATA_LABEL_1
|
|
||||||
Var UNINSTALLER_APPDATA_LABEL_2
|
|
||||||
Var UNINSTALLER_APPDATA_CHECKBOX
|
|
||||||
Var UNINSTALLER_FILE_Detail
|
Var UNINSTALLER_FILE_Detail
|
||||||
Var UNINSTALLER_REGISTRY_Detail
|
Var UNINSTALLER_REGISTRY_Detail
|
||||||
Var UNINSTALLER_FINISHED_Detail
|
Var UNINSTALLER_FINISHED_Detail
|
||||||
@@ -42,5 +38,6 @@ Var UAC_ERROR_ELEVATE
|
|||||||
Var UAC_INSTALLER_REQUIRE_ADMIN
|
Var UAC_INSTALLER_REQUIRE_ADMIN
|
||||||
Var INIT_INSTALLER_RUNNING
|
Var INIT_INSTALLER_RUNNING
|
||||||
Var UAC_UNINSTALLER_REQUIRE_ADMIN
|
Var UAC_UNINSTALLER_REQUIRE_ADMIN
|
||||||
|
Var UAC_ERROR_LOGON_SERVICE
|
||||||
Var INIT_UNINSTALLER_RUNNING
|
Var INIT_UNINSTALLER_RUNNING
|
||||||
Var SectionGroup_Shortcuts
|
Var SectionGroup_Shortcuts
|
||||||
|
|||||||
@@ -65,9 +65,9 @@ msgstr "A newer version of ${APPLICATION_NAME} is already installed! It is not r
|
|||||||
|
|
||||||
#. PageReinstall_SAME_Field_1
|
#. PageReinstall_SAME_Field_1
|
||||||
msgid ""
|
msgid ""
|
||||||
"${APPLICATION_NAME} ${VERSION} is already installed.\r\n"
|
"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\n"
|
||||||
"Select the operation you want to perform and click Next to continue."
|
"Select the operation you want to perform and click Next to continue."
|
||||||
msgstr "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
msgstr "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
|
||||||
#. PageReinstall_SAME_Field_2
|
#. PageReinstall_SAME_Field_2
|
||||||
msgid "Add/Reinstall components"
|
msgid "Add/Reinstall components"
|
||||||
@@ -133,24 +133,6 @@ msgstr "Desktop shortcut for ${APPLICATION_NAME}."
|
|||||||
msgid "Quick Launch shortcut for ${APPLICATION_NAME}."
|
msgid "Quick Launch shortcut for ${APPLICATION_NAME}."
|
||||||
msgstr "Quick Launch shortcut for ${APPLICATION_NAME}."
|
msgstr "Quick Launch shortcut for ${APPLICATION_NAME}."
|
||||||
|
|
||||||
#. UNINSTALLER_APPDATA_SUBTITLE
|
|
||||||
msgid "Remove ${APPLICATION_NAME}'s data folder from your computer."
|
|
||||||
msgstr "Remove ${APPLICATION_NAME}'s data folder from your computer."
|
|
||||||
|
|
||||||
#. UNINSTALLER_APPDATA_LABEL_1
|
|
||||||
msgid "Do you want to delete ${APPLICATION_NAME}'s data folder?"
|
|
||||||
msgstr "Do you want to delete ${APPLICATION_NAME}'s data folder?"
|
|
||||||
|
|
||||||
#. UNINSTALLER_APPDATA_LABEL_2
|
|
||||||
msgid ""
|
|
||||||
"Leave unchecked to keep the data folder for later use or check to delete the"
|
|
||||||
" data folder."
|
|
||||||
msgstr "Leave unchecked to keep the data folder for later use or check to delete the data folder."
|
|
||||||
|
|
||||||
#. UNINSTALLER_APPDATA_CHECKBOX
|
|
||||||
msgid "Yes, delete this data folder."
|
|
||||||
msgstr "Yes, delete this data folder."
|
|
||||||
|
|
||||||
#. UNINSTALLER_FILE_Detail
|
#. UNINSTALLER_FILE_Detail
|
||||||
msgid "Writing Uninstaller"
|
msgid "Writing Uninstaller"
|
||||||
msgstr "Writing Uninstaller"
|
msgstr "Writing Uninstaller"
|
||||||
@@ -198,6 +180,10 @@ msgstr "The installer is already running."
|
|||||||
msgid "This uninstaller requires admin access, try again"
|
msgid "This uninstaller requires admin access, try again"
|
||||||
msgstr "This uninstaller requires admin access, try again"
|
msgstr "This uninstaller requires admin access, try again"
|
||||||
|
|
||||||
|
#. UAC_ERROR_LOGON_SERVICE
|
||||||
|
msgid "Logon service is not running, aborting!"
|
||||||
|
msgstr "Logon service is not running, aborting!"
|
||||||
|
|
||||||
#. INIT_UNINSTALLER_RUNNING
|
#. INIT_UNINSTALLER_RUNNING
|
||||||
msgid "The uninstaller is already running."
|
msgid "The uninstaller is already running."
|
||||||
msgstr "The uninstaller is already running."
|
msgstr "The uninstaller is already running."
|
||||||
|
|||||||
5
binary.rej
Normal file
5
binary.rej
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
--- binary
|
||||||
|
+++ binary
|
||||||
|
@@ -1 +1 @@
|
||||||
|
-Subproject commit 1fb9ddfa9a9a1b4dbc447eee10dbed89172d968a
|
||||||
|
+Subproject commit 01d73965dc8b862d1b2310d3ef801c297b697ec7
|
||||||
@@ -10,8 +10,11 @@
|
|||||||
<file>resources/warning.png</file>
|
<file>resources/warning.png</file>
|
||||||
<file>resources/warning@2x.png</file>
|
<file>resources/warning@2x.png</file>
|
||||||
<file>resources/settings.png</file>
|
<file>resources/settings.png</file>
|
||||||
|
<file>resources/settings@2x.png</file>
|
||||||
<file>resources/activity.png</file>
|
<file>resources/activity.png</file>
|
||||||
|
<file>resources/activity@2x.png</file>
|
||||||
<file>resources/network.png</file>
|
<file>resources/network.png</file>
|
||||||
|
<file>resources/network@2x.png</file>
|
||||||
<file>resources/lock-http.png</file>
|
<file>resources/lock-http.png</file>
|
||||||
<file>resources/lock-http@2x.png</file>
|
<file>resources/lock-http@2x.png</file>
|
||||||
<file>resources/lock-https.png</file>
|
<file>resources/lock-https.png</file>
|
||||||
|
|||||||
@@ -20,4 +20,15 @@ function (ADD_CMOCKA_TEST _testName _testSource)
|
|||||||
add_executable(${_testName} ${_testSource})
|
add_executable(${_testName} ${_testSource})
|
||||||
target_link_libraries(${_testName} ${ARGN})
|
target_link_libraries(${_testName} ${ARGN})
|
||||||
add_test(${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName})
|
add_test(${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName})
|
||||||
|
|
||||||
|
if(UNIT_TESTING)
|
||||||
|
INSTALL(
|
||||||
|
TARGETS
|
||||||
|
${_testName}
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
)
|
||||||
|
endif(UNIT_TESTING)
|
||||||
|
|
||||||
endfunction (ADD_CMOCKA_TEST)
|
endfunction (ADD_CMOCKA_TEST)
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ else(UNIX AND NOT WIN32)
|
|||||||
endif (UNIX AND NOT WIN32)
|
endif (UNIX AND NOT WIN32)
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
# Use secure functions by defaualt and suppress warnings about
|
# Use secure functions by default and suppress warnings about
|
||||||
#"deprecated" functions
|
#"deprecated" functions
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
|
||||||
|
|||||||
@@ -4,20 +4,27 @@
|
|||||||
|
|
||||||
# This module defines
|
# This module defines
|
||||||
# INOTIFY_INCLUDE_DIR, where to find inotify.h, etc.
|
# INOTIFY_INCLUDE_DIR, where to find inotify.h, etc.
|
||||||
|
# INOTIFY_LIBRARY_DIR, the directory holding the inotify library.
|
||||||
# INOTIFY_FOUND, If false, do not try to use inotify.
|
# INOTIFY_FOUND, If false, do not try to use inotify.
|
||||||
# also defined, but not for general use are
|
# also defined, but not for general use are
|
||||||
# INOTIFY_LIBRARY, where to find the inotify library.
|
# INOTIFY_LIBRARY, where to find the inotify library.
|
||||||
|
|
||||||
find_path(INOTIFY_INCLUDE_DIR sys/inotify.h
|
find_path(INOTIFY_INCLUDE_DIR sys/inotify.h
|
||||||
HINTS /usr/include/${CMAKE_LIBRARY_ARCHITECTURE})
|
PATH_SUFFIXES inotify)
|
||||||
mark_as_advanced(INOTIFY_INCLUDE_DIR)
|
mark_as_advanced(INOTIFY_INCLUDE_DIR)
|
||||||
|
|
||||||
|
find_library(INOTIFY_LIBRARY inotify PATH_SUFFIXES lib/inotify)
|
||||||
|
|
||||||
|
get_filename_component(INOTIFY_LIBRARY_DIR ${INOTIFY_LIBRARY} PATH)
|
||||||
|
mark_as_advanced(INOTIFY_LIBRARY_DIR)
|
||||||
|
|
||||||
# all listed variables are TRUE
|
# all listed variables are TRUE
|
||||||
# handle the QUIETLY and REQUIRED arguments and set INOTIFY_FOUND to TRUE if
|
# handle the QUIETLY and REQUIRED arguments and set INOTIFY_FOUND to TRUE if
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(INOTIFY DEFAULT_MSG INOTIFY_INCLUDE_DIR)
|
find_package_handle_standard_args(INOTIFY DEFAULT_MSG INOTIFY_INCLUDE_DIR INOTIFY_LIBRARY_DIR)
|
||||||
|
|
||||||
IF(INOTIFY_FOUND)
|
IF(INOTIFY_FOUND)
|
||||||
SET(INotify_INCLUDE_DIRS ${INOTIFY_INCLUDE_DIR})
|
SET(INotify_INCLUDE_DIRS ${INOTIFY_INCLUDE_DIR})
|
||||||
|
SET(INotify_LIBRARY_DIRS ${INOTIFY_LIBRARY_DIR})
|
||||||
ENDIF(INOTIFY_FOUND)
|
ENDIF(INOTIFY_FOUND)
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>@MIRALL_VERSION_STRING@</string>
|
<string>@MIRALL_VERSION_STRING@</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>(C) 2014 @APPLICATION_VENDOR@</string>
|
<string>(C) 2014-2015 @APPLICATION_VENDOR@</string>
|
||||||
<key>SUShowReleaseNotes</key>
|
<key>SUShowReleaseNotes</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSMinimumBundleVersion</key>
|
<key>LSMinimumBundleVersion</key>
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
|||||||
; Include some required header files.
|
; Include some required header files.
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
!include LogicLib.nsh ;Used by APPDATA uninstaller.
|
!include LogicLib.nsh ;Used by APPDATA uninstaller.
|
||||||
!include nsDialogs.nsh ;Used by APPDATA uninstaller.
|
|
||||||
!include MUI2.nsh ;Used by APPDATA uninstaller.
|
!include MUI2.nsh ;Used by APPDATA uninstaller.
|
||||||
!include InstallOptions.nsh ;Required by MUI2 to support old MUI_INSTALLOPTIONS.
|
!include InstallOptions.nsh ;Required by MUI2 to support old MUI_INSTALLOPTIONS.
|
||||||
!include Memento.nsh ;Remember user selections.
|
!include Memento.nsh ;Remember user selections.
|
||||||
@@ -97,6 +96,7 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
|||||||
!include WordFunc.nsh ;Used by VersionCompare macro function.
|
!include WordFunc.nsh ;Used by VersionCompare macro function.
|
||||||
!include FileFunc.nsh ;Used to read out parameters
|
!include FileFunc.nsh ;Used to read out parameters
|
||||||
!include UAC.nsh ;Used by the UAC elevation to install as user or admin.
|
!include UAC.nsh ;Used by the UAC elevation to install as user or admin.
|
||||||
|
!include nsProcess.nsh ;Used to kill the running process
|
||||||
!include Library.nsh ;Used by the COM registration for shell extensions
|
!include Library.nsh ;Used by the COM registration for shell extensions
|
||||||
!include x64.nsh ;Used to determine the right arch for the shell extensions
|
!include x64.nsh ;Used to determine the right arch for the shell extensions
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
|||||||
!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"
|
!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; Modern User Interface (MUI) defintions and setup.
|
; Modern User Interface (MUI) definitions and setup.
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
!define MUI_ABORTWARNING
|
!define MUI_ABORTWARNING
|
||||||
!define MUI_ICON ${NSI_PATH}\installer.ico
|
!define MUI_ICON ${NSI_PATH}\installer.ico
|
||||||
@@ -145,7 +145,6 @@ Page custom PageReinstall PageLeaveReinstall
|
|||||||
!insertmacro MUI_PAGE_FINISH
|
!insertmacro MUI_PAGE_FINISH
|
||||||
!endif
|
!endif
|
||||||
!insertmacro MUI_UNPAGE_CONFIRM
|
!insertmacro MUI_UNPAGE_CONFIRM
|
||||||
UninstPage custom un.UnPageUserAppData un.UnPageUserAppDataLeave
|
|
||||||
!insertmacro MUI_UNPAGE_INSTFILES
|
!insertmacro MUI_UNPAGE_INSTFILES
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
@@ -177,7 +176,7 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"
|
|||||||
StrCmp $LANGUAGE ${LANG_GREEK} Greek 0
|
StrCmp $LANGUAGE ${LANG_GREEK} Greek 0
|
||||||
StrCmp $LANGUAGE ${LANG_BASQUE} Basque 0
|
StrCmp $LANGUAGE ${LANG_BASQUE} Basque 0
|
||||||
StrCmp $LANGUAGE ${LANG_GALICIAN} Galician 0
|
StrCmp $LANGUAGE ${LANG_GALICIAN} Galician 0
|
||||||
StrCmp $LANGUAGE ${LANG_SLOVAC} Slovak 0
|
StrCmp $LANGUAGE ${LANG_POLISH} Polish 0
|
||||||
StrCmp $LANGUAGE ${LANG_TURKISH} Turkish 0
|
StrCmp $LANGUAGE ${LANG_TURKISH} Turkish 0
|
||||||
StrCmp $LANGUAGE ${LANG_NORWEGIAN} Norwegian 0
|
StrCmp $LANGUAGE ${LANG_NORWEGIAN} Norwegian 0
|
||||||
StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
|
StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
|
||||||
@@ -214,8 +213,8 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"
|
|||||||
Galician:
|
Galician:
|
||||||
!include "${source_path}/admin/win/nsi/l10n\Galician.nsh"
|
!include "${source_path}/admin/win/nsi/l10n\Galician.nsh"
|
||||||
Goto EndLanguageCmp
|
Goto EndLanguageCmp
|
||||||
Slovak:
|
Polish:
|
||||||
!include "${source_path}/admin/win/nsi/l10n\Slovak.nsh"
|
!include "${source_path}/admin/win/nsi/l10n\Polish.nsh"
|
||||||
Goto EndLanguageCmp
|
Goto EndLanguageCmp
|
||||||
Turkish:
|
Turkish:
|
||||||
!include "${source_path}/admin/win/nsi/l10n\Turkish.nsh"
|
!include "${source_path}/admin/win/nsi/l10n\Turkish.nsh"
|
||||||
@@ -247,11 +246,7 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
Function LaunchApplication
|
Function LaunchApplication
|
||||||
${UAC.CallFunctionAsUser} LaunchApplicationAsUser
|
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\${APPLICATION_EXECUTABLE}" "" "" ""
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function LaunchApplicationAsUser
|
|
||||||
Exec "$INSTDIR\${APPLICATION_EXECUTABLE}"
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -261,8 +256,8 @@ FunctionEnd
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
!macro CheckForProcess processName gotoWhenFound gotoWhenNotFound
|
!macro CheckForProcess processName gotoWhenFound gotoWhenNotFound
|
||||||
Processes::FindProcess ${processName}
|
${nsProcess::FindProcess} ${processName} $R0
|
||||||
StrCmp $R0 "0" ${gotoWhenNotFound} ${gotoWhenFound}
|
StrCmp $R0 0 ${gotoWhenFound} ${gotoWhenNotFound}
|
||||||
!macroend
|
!macroend
|
||||||
|
|
||||||
!macro ConfirmEndProcess processName
|
!macro ConfirmEndProcess processName
|
||||||
@@ -271,7 +266,7 @@ FunctionEnd
|
|||||||
/SD IDYES IDYES process_${processName}_kill IDNO process_${processName}_ended
|
/SD IDYES IDYES process_${processName}_kill IDNO process_${processName}_ended
|
||||||
process_${processName}_kill:
|
process_${processName}_kill:
|
||||||
DetailPrint $ConfirmEndProcess_KILLING_PROCESSES_TEXT
|
DetailPrint $ConfirmEndProcess_KILLING_PROCESSES_TEXT
|
||||||
Processes::KillProcess ${processName}
|
${nsProcess::KillProcess} ${processName} $R0
|
||||||
Sleep 1500
|
Sleep 1500
|
||||||
StrCmp $R0 "1" process_${processName}_ended
|
StrCmp $R0 "1" process_${processName}_ended
|
||||||
DetailPrint $ConfirmEndProcess_KILL_NOT_FOUND_TEXT
|
DetailPrint $ConfirmEndProcess_KILL_NOT_FOUND_TEXT
|
||||||
@@ -366,7 +361,6 @@ Function PageLeaveReinstall
|
|||||||
RMDir $INSTDIR
|
RMDir $INSTDIR
|
||||||
no_remove_uninstaller:
|
no_remove_uninstaller:
|
||||||
StrCmp $R0 "2" 0 +3
|
StrCmp $R0 "2" 0 +3
|
||||||
UAC::Unload
|
|
||||||
Quit
|
Quit
|
||||||
BringToFront
|
BringToFront
|
||||||
reinst_done:
|
reinst_done:
|
||||||
@@ -562,7 +556,7 @@ Section -post
|
|||||||
DetailPrint $UNINSTALLER_REGISTRY_Detail
|
DetailPrint $UNINSTALLER_REGISTRY_Detail
|
||||||
SetDetailsPrint listonly
|
SetDetailsPrint listonly
|
||||||
|
|
||||||
;Version numbers used to detect existing installation version for comparisson.
|
;Version numbers used to detect existing installation version for comparison.
|
||||||
WriteRegStr HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "" $INSTDIR
|
WriteRegStr HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "" $INSTDIR
|
||||||
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
|
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
|
||||||
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}"
|
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}"
|
||||||
@@ -594,40 +588,6 @@ SectionEnd
|
|||||||
# #
|
# #
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
Var UnPageUserAppDataDialog
|
|
||||||
Var UnPageUserAppDataCheckbox
|
|
||||||
Var UnPageUserAppDataCheckbox_State
|
|
||||||
Var UnPageUserAppDataEditBox
|
|
||||||
|
|
||||||
Function un.UnPageUserAppData
|
|
||||||
!insertmacro MUI_HEADER_TEXT $UNINSTALLER_APPDATA_TITLE $UNINSTALLER_APPDATA_SUBTITLE
|
|
||||||
nsDialogs::Create /NOUNLOAD 1018
|
|
||||||
Pop $UnPageUserAppDataDialog
|
|
||||||
|
|
||||||
${If} $UnPageUserAppDataDialog == error
|
|
||||||
Abort
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
${NSD_CreateLabel} 0 0 100% 12u $UNINSTALLER_APPDATA_LABEL_1
|
|
||||||
Pop $0
|
|
||||||
|
|
||||||
${NSD_CreateText} 0 13u 100% 12u "$LOCALAPPDATA\${APPLICATION_NAME}"
|
|
||||||
Pop $UnPageUserAppDataEditBox
|
|
||||||
SendMessage $UnPageUserAppDataEditBox ${EM_SETREADONLY} 1 0
|
|
||||||
|
|
||||||
${NSD_CreateLabel} 0 46u 100% 24u $UNINSTALLER_APPDATA_LABEL_2
|
|
||||||
Pop $0
|
|
||||||
|
|
||||||
${NSD_CreateCheckbox} 0 71u 100% 8u $UNINSTALLER_APPDATA_CHECKBOX
|
|
||||||
Pop $UnPageUserAppDataCheckbox
|
|
||||||
|
|
||||||
nsDialogs::Show
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function un.UnPageUserAppDataLeave
|
|
||||||
${NSD_GetState} $UnPageUserAppDataCheckbox $UnPageUserAppDataCheckbox_State
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function un.EnsureOwncloudShutdown
|
Function un.EnsureOwncloudShutdown
|
||||||
!insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
|
!insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
@@ -705,11 +665,6 @@ Section Uninstall
|
|||||||
;Remove all the Program Files.
|
;Remove all the Program Files.
|
||||||
RMDir /r $INSTDIR
|
RMDir /r $INSTDIR
|
||||||
|
|
||||||
;Uninstall User Data if option is checked, otherwise skip.
|
|
||||||
${If} $UnPageUserAppDataCheckbox_State == ${BST_CHECKED}
|
|
||||||
RMDir /r "$LOCALAPPDATA\${APPLICATION_NAME}"
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
DeleteRegKey ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}"
|
DeleteRegKey ${MEMENTO_REGISTRY_ROOT} "${MEMENTO_REGISTRY_KEY}"
|
||||||
|
|
||||||
SetDetailsPrint textonly
|
SetDetailsPrint textonly
|
||||||
@@ -764,25 +719,27 @@ Function .onInit
|
|||||||
|
|
||||||
${MementoSectionRestore}
|
${MementoSectionRestore}
|
||||||
|
|
||||||
UAC_Elevate:
|
UAC_TryAgain:
|
||||||
UAC::RunElevated
|
!insertmacro UAC_RunElevated
|
||||||
StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
|
${Switch} $0
|
||||||
StrCmp 0 $0 0 UAC_Err ; Error?
|
${Case} 0
|
||||||
StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
|
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
|
||||||
Quit
|
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
|
||||||
|
${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
|
||||||
UAC_Err:
|
MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
|
||||||
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
${EndIf}
|
||||||
Abort
|
;fall-through and die
|
||||||
|
${Case} 1223
|
||||||
UAC_ElevationAborted:
|
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN
|
||||||
Abort
|
Quit
|
||||||
|
${Case} 1062
|
||||||
UAC_Success:
|
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
|
||||||
StrCmp 1 $3 +4 ;Admin?
|
Quit
|
||||||
StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
|
${Default}
|
||||||
MessageBox MB_ICONSTOP $UAC_INSTALLER_REQUIRE_ADMIN
|
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
||||||
goto UAC_Elevate
|
Abort
|
||||||
|
Quit
|
||||||
|
${EndSwitch}
|
||||||
|
|
||||||
;Prevent multiple instances.
|
;Prevent multiple instances.
|
||||||
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Installer") i .r1 ?e'
|
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Installer") i .r1 ?e'
|
||||||
@@ -813,11 +770,9 @@ Function .onInstSuccess
|
|||||||
${AndIf} $InstallRunIfSilent == "yes"
|
${AndIf} $InstallRunIfSilent == "yes"
|
||||||
Call LaunchApplication
|
Call LaunchApplication
|
||||||
${EndIf}
|
${EndIf}
|
||||||
UAC::Unload ;Must call unload!
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function .onInstFailed
|
Function .onInstFailed
|
||||||
UAC::Unload ;Must call unload!
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -829,25 +784,27 @@ FunctionEnd
|
|||||||
Function un.onInit
|
Function un.onInit
|
||||||
Call un.SetLang
|
Call un.SetLang
|
||||||
|
|
||||||
UAC_Elevate:
|
UAC_TryAgain:
|
||||||
UAC::RunElevated
|
!insertmacro UAC_RunElevated
|
||||||
StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
|
${Switch} $0
|
||||||
StrCmp 0 $0 0 UAC_Err ; Error?
|
${Case} 0
|
||||||
StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
|
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
|
||||||
Quit
|
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
|
||||||
|
${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
|
||||||
UAC_Err:
|
MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
|
||||||
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
${EndIf}
|
||||||
Abort
|
;fall-through and die
|
||||||
|
${Case} 1223
|
||||||
UAC_ElevationAborted:
|
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN
|
||||||
Abort
|
Quit
|
||||||
|
${Case} 1062
|
||||||
UAC_Success:
|
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
|
||||||
StrCmp 1 $3 +4 ;Admin?
|
Quit
|
||||||
StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
|
${Default}
|
||||||
MessageBox MB_ICONSTOP $UAC_UNINSTALLER_REQUIRE_ADMIN
|
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
||||||
goto UAC_Elevate
|
Abort
|
||||||
|
Quit
|
||||||
|
${EndSwitch}
|
||||||
|
|
||||||
;Prevent multiple instances.
|
;Prevent multiple instances.
|
||||||
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Uninstaller") i .r1 ?e'
|
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Uninstaller") i .r1 ?e'
|
||||||
@@ -861,9 +818,7 @@ Function un.onInit
|
|||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function un.onUnInstSuccess
|
Function un.onUnInstSuccess
|
||||||
UAC::Unload ;Must call unload!
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function un.onUnInstFailed
|
Function un.onUnInstFailed
|
||||||
UAC::Unload ;Must call unload!
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ IF (DOXYGEN_FOUND)
|
|||||||
# we need latex for doxygen because of the formulas
|
# we need latex for doxygen because of the formulas
|
||||||
FIND_PACKAGE(LATEX)
|
FIND_PACKAGE(LATEX)
|
||||||
IF (NOT LATEX_COMPILER)
|
IF (NOT LATEX_COMPILER)
|
||||||
MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user inetraction on doxy run.")
|
MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user interaction on doxy run.")
|
||||||
ENDIF (NOT LATEX_COMPILER)
|
ENDIF (NOT LATEX_COMPILER)
|
||||||
IF (NOT MAKEINDEX_COMPILER)
|
IF (NOT MAKEINDEX_COMPILER)
|
||||||
MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
|
MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ project=gets.chomp
|
|||||||
|
|
||||||
printf("\n")
|
printf("\n")
|
||||||
|
|
||||||
print("Other projects to includes (e.g. \"owutil tinyxml\", leave emtpy to skip): ")
|
print("Other projects to include (e.g. \"owutil tinyxml\", leave emtpy to skip): ")
|
||||||
otherprojects=gets.chomp
|
otherprojects=gets.chomp
|
||||||
|
|
||||||
printf("\n")
|
printf("\n")
|
||||||
|
|
||||||
print("Defininitions (leave empty to skip): ")
|
print("Definitions (leave empty to skip): ")
|
||||||
definitions=gets.chomp
|
definitions=gets.chomp
|
||||||
|
|
||||||
cmakePublicIncDirName = project.upcase+"_PUBLIC_INCLUDE_DIRS"
|
cmakePublicIncDirName = project.upcase+"_PUBLIC_INCLUDE_DIRS"
|
||||||
|
|||||||
@@ -5,9 +5,8 @@
|
|||||||
#cmakedefine WITH_QTKEYCHAIN 1
|
#cmakedefine WITH_QTKEYCHAIN 1
|
||||||
#cmakedefine WITH_CRASHREPORTER
|
#cmakedefine WITH_CRASHREPORTER
|
||||||
#cmakedefine CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"
|
#cmakedefine CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"
|
||||||
|
#define SOCKETAPI_TEAM_IDENTIFIER_PREFIX "@SOCKETAPI_TEAM_IDENTIFIER_PREFIX@"
|
||||||
|
|
||||||
|
|
||||||
#cmakedefine GIT_SHA1 "@GIT_SHA1@"
|
|
||||||
#cmakedefine APPLICATION_DOMAIN @APPLICATION_DOMAIN@
|
#cmakedefine APPLICATION_DOMAIN @APPLICATION_DOMAIN@
|
||||||
#cmakedefine THEME_CLASS @THEME_CLASS@
|
#cmakedefine THEME_CLASS @THEME_CLASS@
|
||||||
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
||||||
@@ -22,7 +21,7 @@
|
|||||||
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
|
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
|
||||||
|
|
||||||
#cmakedefine SYSCONFDIR "@SYSCONFDIR@"
|
#cmakedefine SYSCONFDIR "@SYSCONFDIR@"
|
||||||
#cmakedefine DATADIR "@DATADIR@"
|
#cmakedefine SHAREDIR "@SHAREDIR@"
|
||||||
|
|
||||||
#ifndef NEON_WITH_LFS
|
#ifndef NEON_WITH_LFS
|
||||||
#cmakedefine NEON_WITH_LFS "@NEON_WITH_LFS@"
|
#cmakedefine NEON_WITH_LFS "@NEON_WITH_LFS@"
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ version 0.91.3 (released 2013-12-11, ownCloud Client 1.5.0rc1)
|
|||||||
version 0.91.2 (released 2013-12-10, ownCloud Client 1.5.0beta3)
|
version 0.91.2 (released 2013-12-10, ownCloud Client 1.5.0beta3)
|
||||||
* have translatable error message for indiv. file errors.
|
* have translatable error message for indiv. file errors.
|
||||||
* Use uint64_t for inode on win32 to fix a type glitch.
|
* Use uint64_t for inode on win32 to fix a type glitch.
|
||||||
* Add test that directrories are properly moved.
|
* Add test that directories are properly moved.
|
||||||
* Handle symlinks correctly.
|
* Handle symlinks correctly.
|
||||||
* Do not longer recurse into ignored directories in update
|
* No longer recurse into ignored directories in update
|
||||||
phase.
|
phase.
|
||||||
* Added proper symlink detection for win32 platform.
|
* Added proper symlink detection for win32 platform.
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ version 0.90.0 (released 2013-09-04, ownCloud Client 1.4.0)
|
|||||||
* Added c_rename function to csync std.
|
* Added c_rename function to csync std.
|
||||||
* Fix: Do renames of files before any puts.
|
* Fix: Do renames of files before any puts.
|
||||||
* Improved database integrity checks.
|
* Improved database integrity checks.
|
||||||
* Improvements of database writing efficiendy.
|
* Improvements of database writing efficiency.
|
||||||
* Fix: stat file on win32 even if its opened by application.
|
* Fix: stat file on win32 even if its opened by application.
|
||||||
* httpbf: configurable block size and threshold.
|
* httpbf: configurable block size and threshold.
|
||||||
* Many fixes found by a Coverity check.
|
* Many fixes found by a Coverity check.
|
||||||
@@ -159,7 +159,7 @@ version 0.70.0 and 0.70.1 were beta versions.
|
|||||||
|
|
||||||
version 0.60.2 (released 2012-11-26)
|
version 0.60.2 (released 2012-11-26)
|
||||||
* Migration to cross platform testing system cmocka.
|
* Migration to cross platform testing system cmocka.
|
||||||
* Fixed variuos minor things incl. potential mem leaks.
|
* Fixed various minor things incl. potential mem leaks.
|
||||||
* Clang fixes.
|
* Clang fixes.
|
||||||
* Moved journal database to sync directory.
|
* Moved journal database to sync directory.
|
||||||
* Fixed more csync->ocsync renaming issues.
|
* Fixed more csync->ocsync renaming issues.
|
||||||
@@ -247,7 +247,7 @@ version 0.50.0 (released 2013-08-01)
|
|||||||
* Added new logging framework (removed log4c dependency).
|
* Added new logging framework (removed log4c dependency).
|
||||||
* Added new config parser (removed iniparser dependency).
|
* Added new config parser (removed iniparser dependency).
|
||||||
* Added cmocka tests.
|
* Added cmocka tests.
|
||||||
* Added a way to exported file_tree_walk functions.
|
* Added a way to export file_tree_walk functions.
|
||||||
* Added capabilities for modules.
|
* Added capabilities for modules.
|
||||||
* Added possiblity to push information to the modules.
|
* Added possiblity to push information to the modules.
|
||||||
* Added iconv support to support various char sets.
|
* Added iconv support to support various char sets.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ sqlite3 is a runtime requirement. libsmbclient is needed for
|
|||||||
the smb plugin, libssh for the sftp plugin. libneon is required for the
|
the smb plugin, libssh for the sftp plugin. libneon is required for the
|
||||||
ownCloud plugin.
|
ownCloud plugin.
|
||||||
|
|
||||||
Note that these version numbers are version we know works correctly. If you
|
Note that these version numbers are versions we know work correctly. If you
|
||||||
build and run csync successfully with an older version, please let us know.
|
build and run csync successfully with an older version, please let us know.
|
||||||
|
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ CMake options using `cmakesetup` (Windows) or `ccmake` (GNU/Linux and MacOS X).
|
|||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
Befor installing you can run the tests if everything is working:
|
Before installing you can run the tests if everything is working:
|
||||||
|
|
||||||
make test
|
make test
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ CONTRIBUTIONS
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
If you want to contribute to the development of the software then please join
|
If you want to contribute to the development of the software then please join
|
||||||
the mailing list. Patches are accepted preferebly created with git and we are
|
the mailing list. Patches are accepted preferably created with git and we are
|
||||||
always glad to receive feedback or suggestions to the address
|
always glad to receive feedback or suggestions to the address
|
||||||
csync-devel@csync.org.
|
csync-devel@csync.org.
|
||||||
More information on the various mailing lists can be found at
|
More information on the various mailing lists can be found at
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#cmakedefine PACKAGE "${APPLICATION_NAME}"
|
#cmakedefine PACKAGE "${APPLICATION_NAME}"
|
||||||
#cmakedefine VERSION "${APPLICATION_VERSION}"
|
#cmakedefine VERSION "${APPLICATION_VERSION}"
|
||||||
#cmakedefine LOCALEDIR "${LOCALE_INSTALL_DIR}"
|
#cmakedefine LOCALEDIR "${LOCALE_INSTALL_DIR}"
|
||||||
#cmakedefine DATADIR "${DATADIR}"
|
|
||||||
#cmakedefine LIBDIR "${LIBDIR}"
|
#cmakedefine LIBDIR "${LIBDIR}"
|
||||||
#cmakedefine PLUGINDIR "${PLUGINDIR}"
|
#cmakedefine PLUGINDIR "${PLUGINDIR}"
|
||||||
#cmakedefine SYSCONFDIR "${SYSCONFDIR}"
|
#cmakedefine SYSCONFDIR "${SYSCONFDIR}"
|
||||||
|
|||||||
@@ -58,9 +58,19 @@ set(csync_SRCS
|
|||||||
|
|
||||||
vio/csync_vio.c
|
vio/csync_vio.c
|
||||||
vio/csync_vio_file_stat.c
|
vio/csync_vio_file_stat.c
|
||||||
vio/csync_vio_local.c
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
list(APPEND csync_SRCS
|
||||||
|
vio/csync_vio_local_win.c
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
list(APPEND csync_SRCS
|
||||||
|
vio/csync_vio_local_unix.c
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if(USE_NEON)
|
if(USE_NEON)
|
||||||
list(APPEND csync_SRCS
|
list(APPEND csync_SRCS
|
||||||
csync_owncloud.c
|
csync_owncloud.c
|
||||||
|
|||||||
@@ -124,6 +124,8 @@ int csync_create(CSYNC **csync, const char *local, const char *remote) {
|
|||||||
|
|
||||||
ctx->abort = false;
|
ctx->abort = false;
|
||||||
|
|
||||||
|
ctx->ignore_hidden_files = true;
|
||||||
|
|
||||||
*csync = ctx;
|
*csync = ctx;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -434,7 +436,8 @@ static int _csync_treewalk_visitor(void *obj, void *data) {
|
|||||||
trav.inode = cur->inode;
|
trav.inode = cur->inode;
|
||||||
|
|
||||||
trav.error_status = cur->error_status;
|
trav.error_status = cur->error_status;
|
||||||
trav.should_update_etag = cur->should_update_etag;
|
trav.should_update_metadata = cur->should_update_metadata;
|
||||||
|
trav.has_ignored_files = cur->has_ignored_files;
|
||||||
|
|
||||||
if( other_node ) {
|
if( other_node ) {
|
||||||
csync_file_stat_t *other_stat = (csync_file_stat_t*)other_node->data;
|
csync_file_stat_t *other_stat = (csync_file_stat_t*)other_node->data;
|
||||||
@@ -592,6 +595,7 @@ int csync_commit(CSYNC *ctx) {
|
|||||||
ctx->remote.read_from_db = 0;
|
ctx->remote.read_from_db = 0;
|
||||||
ctx->read_remote_from_db = true;
|
ctx->read_remote_from_db = true;
|
||||||
ctx->db_is_empty = false;
|
ctx->db_is_empty = false;
|
||||||
|
ctx->ignore_hidden_files = true; // do NOT sync hidden files by default.
|
||||||
|
|
||||||
|
|
||||||
/* Create new trees */
|
/* Create new trees */
|
||||||
|
|||||||
@@ -49,41 +49,37 @@ struct csync_client_certs_s {
|
|||||||
char *certificatePasswd;
|
char *certificatePasswd;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Instruction enum. In the file traversal structure, it describes
|
|
||||||
* the csync state of a file.
|
|
||||||
*/
|
|
||||||
enum csync_status_codes_e {
|
enum csync_status_codes_e {
|
||||||
CSYNC_STATUS_OK = 0,
|
CSYNC_STATUS_OK = 0,
|
||||||
|
|
||||||
CSYNC_STATUS_ERROR = 1024, /* don't use this code,
|
CSYNC_STATUS_ERROR = 1024, /* don't use this code,
|
||||||
*/
|
*/
|
||||||
CSYNC_STATUS_UNSUCCESSFUL,
|
CSYNC_STATUS_UNSUCCESSFUL, /* Unspecific problem happend */
|
||||||
CSYNC_STATUS_NO_LOCK, /* OBSOLETE does not happen anymore */
|
CSYNC_STATUS_NO_LOCK, /* OBSOLETE does not happen anymore */
|
||||||
CSYNC_STATUS_STATEDB_LOAD_ERROR,
|
CSYNC_STATUS_STATEDB_LOAD_ERROR, /* Statedb can not be loaded. */
|
||||||
CSYNC_STATUS_STATEDB_CORRUPTED,
|
CSYNC_STATUS_STATEDB_CORRUPTED, /* Statedb is corrupted */
|
||||||
CSYNC_STATUS_NO_MODULE,
|
CSYNC_STATUS_NO_MODULE, /* URL passed to csync does not start with owncloud:// or ownclouds:// */
|
||||||
CSYNC_STATUS_TIMESKEW, /* OBSOLETE */
|
CSYNC_STATUS_TIMESKEW, /* OBSOLETE */
|
||||||
CSYNC_STATUS_FILESYSTEM_UNKNOWN, /* UNUSED */
|
CSYNC_STATUS_FILESYSTEM_UNKNOWN, /* UNUSED */
|
||||||
CSYNC_STATUS_TREE_ERROR,
|
CSYNC_STATUS_TREE_ERROR, /* csync trees could not be created */
|
||||||
CSYNC_STATUS_MEMORY_ERROR,
|
CSYNC_STATUS_MEMORY_ERROR, /* not enough memory problem */
|
||||||
CSYNC_STATUS_PARAM_ERROR,
|
CSYNC_STATUS_PARAM_ERROR, /* parameter is zero where not expected */
|
||||||
CSYNC_STATUS_UPDATE_ERROR,
|
CSYNC_STATUS_UPDATE_ERROR, /* general update or discovery error */
|
||||||
CSYNC_STATUS_RECONCILE_ERROR,
|
CSYNC_STATUS_RECONCILE_ERROR, /* general reconcile error */
|
||||||
CSYNC_STATUS_PROPAGATE_ERROR, /* OBSOLETE */
|
CSYNC_STATUS_PROPAGATE_ERROR, /* OBSOLETE */
|
||||||
CSYNC_STATUS_REMOTE_ACCESS_ERROR, /* UNUSED */
|
CSYNC_STATUS_REMOTE_ACCESS_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_REMOTE_CREATE_ERROR, /* UNUSED */
|
CSYNC_STATUS_REMOTE_CREATE_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_REMOTE_STAT_ERROR, /* UNUSED */
|
CSYNC_STATUS_REMOTE_STAT_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_LOCAL_CREATE_ERROR, /* UNUSED */
|
CSYNC_STATUS_LOCAL_CREATE_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_LOCAL_STAT_ERROR, /* UNUSED */
|
CSYNC_STATUS_LOCAL_STAT_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_PROXY_ERROR, /* UNUSED */
|
CSYNC_STATUS_PROXY_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_LOOKUP_ERROR,
|
CSYNC_STATUS_LOOKUP_ERROR, /* Neon fails to find proxy. Almost OBSOLETE */
|
||||||
CSYNC_STATUS_SERVER_AUTH_ERROR,
|
CSYNC_STATUS_SERVER_AUTH_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_PROXY_AUTH_ERROR,
|
CSYNC_STATUS_PROXY_AUTH_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_CONNECT_ERROR,
|
CSYNC_STATUS_CONNECT_ERROR, /* neon driven connection failed */
|
||||||
CSYNC_STATUS_TIMEOUT,
|
CSYNC_STATUS_TIMEOUT, /* UNUSED */
|
||||||
CSYNC_STATUS_HTTP_ERROR,
|
CSYNC_STATUS_HTTP_ERROR, /* UNUSED */
|
||||||
CSYNC_STATUS_PERMISSION_DENIED,
|
CSYNC_STATUS_PERMISSION_DENIED, /* */
|
||||||
CSYNC_STATUS_NOT_FOUND,
|
CSYNC_STATUS_NOT_FOUND,
|
||||||
CSYNC_STATUS_FILE_EXISTS,
|
CSYNC_STATUS_FILE_EXISTS,
|
||||||
CSYNC_STATUS_OUT_OF_SPACE,
|
CSYNC_STATUS_OUT_OF_SPACE,
|
||||||
@@ -100,11 +96,13 @@ enum csync_status_codes_e {
|
|||||||
CSYNC_STATUS_ABORTED,
|
CSYNC_STATUS_ABORTED,
|
||||||
/* Codes for file individual status: */
|
/* Codes for file individual status: */
|
||||||
CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK,
|
CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK,
|
||||||
CSYNC_STATUS_INDIVIDUAL_IS_HARDLINK,
|
|
||||||
CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST,
|
CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST,
|
||||||
CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS,
|
CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS,
|
||||||
CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME,
|
CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME,
|
||||||
CYSNC_STATUS_FILE_LOCKED_OR_OPEN
|
CYSNC_STATUS_FILE_LOCKED_OR_OPEN,
|
||||||
|
CSYNC_STATUS_INDIVIDUAL_EXCLUDE_HIDDEN,
|
||||||
|
CSYNC_STATUS_INVALID_CHARACTERS,
|
||||||
|
CSYNC_STATUS_INDIVIDUAL_STAT_FAILED
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum csync_status_codes_e CSYNC_STATUS;
|
typedef enum csync_status_codes_e CSYNC_STATUS;
|
||||||
@@ -120,7 +118,10 @@ typedef enum csync_status_codes_e CSYNC_STATUS;
|
|||||||
#define CSYNC_STATUS_IS_ERR(x) (unlikely((x) >= CSYNC_STATUS_ERROR))
|
#define CSYNC_STATUS_IS_ERR(x) (unlikely((x) >= CSYNC_STATUS_ERROR))
|
||||||
#define CSYNC_STATUS_IS_EQUAL(x, y) ((x) == (y))
|
#define CSYNC_STATUS_IS_EQUAL(x, y) ((x) == (y))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instruction enum. In the file traversal structure, it describes
|
||||||
|
* the csync state of a file.
|
||||||
|
*/
|
||||||
enum csync_instructions_e {
|
enum csync_instructions_e {
|
||||||
CSYNC_INSTRUCTION_NONE = 0x00000000, /* Nothing to do (UPDATE|RECONCILE) */
|
CSYNC_INSTRUCTION_NONE = 0x00000000, /* Nothing to do (UPDATE|RECONCILE) */
|
||||||
CSYNC_INSTRUCTION_EVAL = 0x00000001, /* There was changed compared to the DB (UPDATE) */
|
CSYNC_INSTRUCTION_EVAL = 0x00000001, /* There was changed compared to the DB (UPDATE) */
|
||||||
@@ -143,7 +144,7 @@ enum csync_ftw_type_e {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define FILE_ID_BUF_SIZE 21
|
#define FILE_ID_BUF_SIZE 36
|
||||||
|
|
||||||
// currently specified at https://github.com/owncloud/core/issues/8322 are 9 to 10
|
// currently specified at https://github.com/owncloud/core/issues/8322 are 9 to 10
|
||||||
#define REMOTE_PERM_BUF_SIZE 15
|
#define REMOTE_PERM_BUF_SIZE 15
|
||||||
@@ -174,7 +175,7 @@ enum csync_vio_file_stat_fields_e {
|
|||||||
CSYNC_VIO_FILE_STAT_FIELDS_FLAGS = 1 << 2,
|
CSYNC_VIO_FILE_STAT_FIELDS_FLAGS = 1 << 2,
|
||||||
CSYNC_VIO_FILE_STAT_FIELDS_DEVICE = 1 << 3,
|
CSYNC_VIO_FILE_STAT_FIELDS_DEVICE = 1 << 3,
|
||||||
CSYNC_VIO_FILE_STAT_FIELDS_INODE = 1 << 4,
|
CSYNC_VIO_FILE_STAT_FIELDS_INODE = 1 << 4,
|
||||||
CSYNC_VIO_FILE_STAT_FIELDS_LINK_COUNT = 1 << 5,
|
// CSYNC_VIO_FILE_STAT_FIELDS_LINK_COUNT = 1 << 5,
|
||||||
CSYNC_VIO_FILE_STAT_FIELDS_SIZE = 1 << 6,
|
CSYNC_VIO_FILE_STAT_FIELDS_SIZE = 1 << 6,
|
||||||
// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_COUNT = 1 << 7, /* will be removed */
|
// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_COUNT = 1 << 7, /* will be removed */
|
||||||
// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_SIZE = 1 << 8, /* will be removed */
|
// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_SIZE = 1 << 8, /* will be removed */
|
||||||
@@ -213,12 +214,13 @@ struct csync_vio_file_stat_s {
|
|||||||
|
|
||||||
dev_t device;
|
dev_t device;
|
||||||
uint64_t inode;
|
uint64_t inode;
|
||||||
nlink_t nlink;
|
|
||||||
|
|
||||||
int fields; // actually enum csync_vio_file_stat_fields_e fields;
|
int fields; // actually enum csync_vio_file_stat_fields_e fields;
|
||||||
enum csync_vio_file_type_e type;
|
enum csync_vio_file_type_e type;
|
||||||
|
|
||||||
enum csync_vio_file_flags_e flags;
|
enum csync_vio_file_flags_e flags;
|
||||||
|
|
||||||
|
char *original_name; // only set if locale conversion fails
|
||||||
};
|
};
|
||||||
|
|
||||||
csync_vio_file_stat_t *csync_vio_file_stat_new(void);
|
csync_vio_file_stat_t *csync_vio_file_stat_new(void);
|
||||||
@@ -249,7 +251,10 @@ struct csync_tree_walk_file_s {
|
|||||||
enum csync_instructions_e instruction;
|
enum csync_instructions_e instruction;
|
||||||
|
|
||||||
/* For directories: If the etag has been updated and need to be writen on the db */
|
/* For directories: If the etag has been updated and need to be writen on the db */
|
||||||
int should_update_etag;
|
int should_update_metadata;
|
||||||
|
|
||||||
|
/* For directories: Does it have children that were ignored (hidden or ignore pattern) */
|
||||||
|
int has_ignored_files;
|
||||||
|
|
||||||
const char *rename_path;
|
const char *rename_path;
|
||||||
const char *etag;
|
const char *etag;
|
||||||
|
|||||||
@@ -44,24 +44,7 @@
|
|||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
int _csync_exclude_add(c_strlist_t **inList, const char *string) {
|
int _csync_exclude_add(c_strlist_t **inList, const char *string) {
|
||||||
c_strlist_t *list;
|
return c_strlist_add_grow(inList, string);
|
||||||
|
|
||||||
if (*inList == NULL) {
|
|
||||||
*inList = c_strlist_new(32);
|
|
||||||
if (*inList == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((*inList)->count == (*inList)->size) {
|
|
||||||
list = c_strlist_expand(*inList, 2 * (*inList)->size);
|
|
||||||
if (list == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*inList = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
return c_strlist_add(*inList, string);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
||||||
@@ -81,7 +64,7 @@ int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
|||||||
_fmode = _O_BINARY;
|
_fmode = _O_BINARY;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
w_fname = c_utf8_to_locale(fname);
|
w_fname = c_utf8_path_to_locale(fname);
|
||||||
if (w_fname == NULL) {
|
if (w_fname == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -186,208 +169,190 @@ bool csync_is_windows_reserved_word(const char* filename) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype) {
|
static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const char *path, int filetype, bool check_leading_dirs) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
const char *p = NULL;
|
const char *p = NULL;
|
||||||
char *bname = NULL;
|
const char *bname = NULL;
|
||||||
char *dname = NULL;
|
size_t blen = 0;
|
||||||
char *prev_dname = NULL;
|
char *conflict = NULL;
|
||||||
char *conflict = NULL;
|
int rc = -1;
|
||||||
int rc = -1;
|
CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED;
|
||||||
CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED;
|
CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED;
|
||||||
CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED;
|
|
||||||
|
|
||||||
for (p = path; *p; p++) {
|
for (p = path; *p; p++) {
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case '\\':
|
case '\\':
|
||||||
case ':':
|
case ':':
|
||||||
case '?':
|
case '?':
|
||||||
case '*':
|
case '*':
|
||||||
case '"':
|
case '"':
|
||||||
case '>':
|
case '>':
|
||||||
case '<':
|
case '<':
|
||||||
case '|':
|
case '|':
|
||||||
return CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
return CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* split up the path */
|
||||||
|
bname = strrchr(path, '/');
|
||||||
|
if (bname) {
|
||||||
|
bname += 1; // don't include the /
|
||||||
|
} else {
|
||||||
|
bname = path;
|
||||||
|
}
|
||||||
|
blen = strlen(bname);
|
||||||
|
|
||||||
|
rc = csync_fnmatch(".csync_journal.db*", bname, 0);
|
||||||
|
if (rc == 0) {
|
||||||
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* split up the path */
|
// check the strlen and ignore the file if its name is longer than 254 chars.
|
||||||
dname = c_dirname(path);
|
// whenever changing this also check createDownloadTmpFileName
|
||||||
bname = c_basename(path);
|
if (blen > 254) {
|
||||||
|
match = CSYNC_FILE_EXCLUDE_LONG_FILENAME;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (bname == NULL || dname == NULL) {
|
#ifdef _WIN32
|
||||||
match = CSYNC_NOT_EXCLUDED;
|
// Windows cannot sync files ending in spaces (#2176). It also cannot
|
||||||
SAFE_FREE(bname);
|
// distinguish files ending in '.' from files without an ending,
|
||||||
SAFE_FREE(dname);
|
// as '.' is a separator that is not stored internally, so let's
|
||||||
goto out;
|
// not allow to sync those to avoid file loss/ambiguities (#416)
|
||||||
}
|
if (blen > 1 && (bname[blen-1]== ' ' || bname[blen-1]== '.' )) {
|
||||||
|
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
rc = csync_fnmatch(".csync_journal.db*", bname, 0);
|
if (csync_is_windows_reserved_word(bname)) {
|
||||||
if (rc == 0) {
|
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check the strlen and ignore the file if its name is longer than 254 chars.
|
|
||||||
// whenever changing this also check createDownloadTmpFileName
|
|
||||||
if (strlen(bname) > 254) {
|
|
||||||
match = CSYNC_FILE_EXCLUDE_LONG_FILENAME;
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
// Windows cannot sync files ending in spaces (#2176). It also cannot
|
|
||||||
// distinguish files ending in '.' from files without an ending,
|
|
||||||
// as '.' is a separator that is not stored internally, so let's
|
|
||||||
// not allow to sync those to avoid file loss/ambiguities (#416)
|
|
||||||
size_t blen = strlen(bname);
|
|
||||||
if (blen > 1 && (bname[blen-1]== ' ' || bname[blen-1]== '.' )) {
|
|
||||||
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (csync_is_windows_reserved_word(bname)) {
|
rc = csync_fnmatch(".owncloudsync.log*", bname, 0);
|
||||||
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
if (rc == 0) {
|
||||||
SAFE_FREE(bname);
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
SAFE_FREE(dname);
|
goto out;
|
||||||
goto out;
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
rc = csync_fnmatch(".owncloudsync.log*", bname, 0);
|
/* Always ignore conflict files, not only via the exclude list */
|
||||||
if (rc == 0) {
|
rc = csync_fnmatch("*_conflict-*", bname, 0);
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
if (rc == 0) {
|
||||||
SAFE_FREE(bname);
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
SAFE_FREE(dname);
|
goto out;
|
||||||
goto out;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Always ignore conflict files, not only via the exclude list */
|
if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) {
|
||||||
rc = csync_fnmatch("*_conflict-*", bname, 0);
|
rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME"));
|
||||||
if (rc == 0) {
|
if (rc < 0) {
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
goto out;
|
||||||
SAFE_FREE(bname);
|
}
|
||||||
SAFE_FREE(dname);
|
rc = csync_fnmatch(conflict, path, 0);
|
||||||
goto out;
|
if (rc == 0) {
|
||||||
}
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
|
SAFE_FREE(conflict);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
SAFE_FREE(conflict);
|
||||||
|
}
|
||||||
|
|
||||||
if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) {
|
if( ! excludes ) {
|
||||||
rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME"));
|
goto out;
|
||||||
if (rc < 0) {
|
}
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
rc = csync_fnmatch(conflict, path, 0);
|
|
||||||
if (rc == 0) {
|
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
|
||||||
SAFE_FREE(conflict);
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
SAFE_FREE(conflict);
|
|
||||||
}
|
|
||||||
|
|
||||||
SAFE_FREE(bname);
|
/* Build a list of path components to check. */
|
||||||
SAFE_FREE(dname);
|
c_strlist_t *path_components = c_strlist_new(32);
|
||||||
|
char *path_split = strdup(path);
|
||||||
|
size_t len = strlen(path_split);
|
||||||
|
for (i = len; ; --i) {
|
||||||
|
// read backwards until a path separator is found
|
||||||
|
if (i != 0 && path_split[i-1] != '/') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if( ! excludes ) {
|
// check 'basename', i.e. for "/foo/bar/fi" we'd check 'fi', 'bar', 'foo'
|
||||||
goto out;
|
if (path_split[i] != 0) {
|
||||||
}
|
c_strlist_add_grow(&path_components, path_split + i);
|
||||||
|
}
|
||||||
|
|
||||||
/* Loop over all exclude patterns and evaluate the given path */
|
if (i == 0 || !check_leading_dirs) {
|
||||||
for (i = 0; match == CSYNC_NOT_EXCLUDED && i < excludes->count; i++) {
|
break;
|
||||||
bool match_dirs_only = false;
|
}
|
||||||
char *pattern_stored = c_strdup(excludes->vector[i]);
|
|
||||||
char* pattern = pattern_stored;
|
|
||||||
|
|
||||||
type = CSYNC_FILE_EXCLUDE_LIST;
|
// check 'dirname', i.e. for "/foo/bar/fi" we'd check '/foo/bar', '/foo'
|
||||||
if (strlen(pattern) < 1) {
|
path_split[i-1] = '\0';
|
||||||
SAFE_FREE(pattern_stored);
|
c_strlist_add_grow(&path_components, path_split);
|
||||||
continue;
|
}
|
||||||
}
|
SAFE_FREE(path_split);
|
||||||
/* Ecludes starting with ']' means it can be cleanup */
|
|
||||||
if (pattern[0] == ']') {
|
|
||||||
++pattern;
|
|
||||||
if (filetype == CSYNC_FTW_TYPE_FILE) {
|
|
||||||
type = CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Check if the pattern applies to pathes only. */
|
|
||||||
if (pattern[strlen(pattern)-1] == '/') {
|
|
||||||
match_dirs_only = true;
|
|
||||||
pattern[strlen(pattern)-1] = '\0'; /* Cut off the slash */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check if the pattern contains a / and if, compare to the whole path */
|
/* Loop over all exclude patterns and evaluate the given path */
|
||||||
if (strchr(pattern, '/')) {
|
for (i = 0; match == CSYNC_NOT_EXCLUDED && i < excludes->count; i++) {
|
||||||
rc = csync_fnmatch(pattern, path, FNM_PATHNAME);
|
bool match_dirs_only = false;
|
||||||
if( rc == 0 ) {
|
char *pattern_stored = c_strdup(excludes->vector[i]);
|
||||||
match = type;
|
char* pattern = pattern_stored;
|
||||||
}
|
|
||||||
/* if the pattern requires a dir, but path is not, its still not excluded. */
|
|
||||||
if (match_dirs_only && filetype != CSYNC_FTW_TYPE_DIR) {
|
|
||||||
match = CSYNC_NOT_EXCLUDED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if still not excluded, check each component of the path */
|
type = CSYNC_FILE_EXCLUDE_LIST;
|
||||||
if (match == CSYNC_NOT_EXCLUDED) {
|
if (strlen(pattern) < 1) {
|
||||||
int trailing_component = 1;
|
SAFE_FREE(pattern_stored);
|
||||||
dname = c_dirname(path);
|
continue;
|
||||||
bname = c_basename(path);
|
}
|
||||||
|
/* Excludes starting with ']' means it can be cleanup */
|
||||||
|
if (pattern[0] == ']') {
|
||||||
|
++pattern;
|
||||||
|
if (filetype == CSYNC_FTW_TYPE_FILE) {
|
||||||
|
type = CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Check if the pattern applies to pathes only. */
|
||||||
|
if (pattern[strlen(pattern)-1] == '/') {
|
||||||
|
match_dirs_only = true;
|
||||||
|
pattern[strlen(pattern)-1] = '\0'; /* Cut off the slash */
|
||||||
|
}
|
||||||
|
|
||||||
if (bname == NULL || dname == NULL) {
|
/* check if the pattern contains a / and if, compare to the whole path */
|
||||||
match = CSYNC_NOT_EXCLUDED;
|
if (strchr(pattern, '/')) {
|
||||||
SAFE_FREE(bname);
|
rc = csync_fnmatch(pattern, path, FNM_PATHNAME);
|
||||||
SAFE_FREE(dname);
|
if( rc == 0 ) {
|
||||||
SAFE_FREE(pattern_stored);
|
match = type;
|
||||||
goto out;
|
}
|
||||||
}
|
/* if the pattern requires a dir, but path is not, its still not excluded. */
|
||||||
|
if (match_dirs_only && filetype != CSYNC_FTW_TYPE_DIR) {
|
||||||
|
match = CSYNC_NOT_EXCLUDED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check each component of the path */
|
/* if still not excluded, check each component and leading directory of the path */
|
||||||
do {
|
if (match == CSYNC_NOT_EXCLUDED) {
|
||||||
/* Do not check the bname if its a file and the pattern matches dirs only. */
|
size_t j = 0;
|
||||||
if ( !(trailing_component == 1 /* it is the trailing component */
|
if (match_dirs_only && filetype == CSYNC_FTW_TYPE_FILE) {
|
||||||
&& match_dirs_only /* but only directories are matched by the pattern */
|
j = 1; // skip the first entry, which is bname
|
||||||
&& filetype == CSYNC_FTW_TYPE_FILE) ) {
|
}
|
||||||
/* Check the name component against the pattern */
|
for (; j < path_components->count; ++j) {
|
||||||
rc = csync_fnmatch(pattern, bname, 0);
|
rc = csync_fnmatch(pattern, path_components->vector[j], 0);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
match = type;
|
match = type;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
if (!(c_streq(dname, ".") || c_streq(dname, "/"))) {
|
}
|
||||||
rc = csync_fnmatch(pattern, dname, 0);
|
}
|
||||||
if (rc == 0) {
|
SAFE_FREE(pattern_stored);
|
||||||
match = type;
|
}
|
||||||
}
|
c_strlist_destroy(path_components);
|
||||||
}
|
|
||||||
trailing_component = 0;
|
|
||||||
prev_dname = dname;
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
bname = c_basename(prev_dname);
|
|
||||||
dname = c_dirname(prev_dname);
|
|
||||||
SAFE_FREE(prev_dname);
|
|
||||||
|
|
||||||
} while( match == CSYNC_NOT_EXCLUDED && !c_streq(dname, ".")
|
out:
|
||||||
&& !c_streq(dname, "/") );
|
|
||||||
}
|
|
||||||
SAFE_FREE(pattern_stored);
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return match;
|
||||||
out:
|
}
|
||||||
|
|
||||||
return match;
|
CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype) {
|
||||||
|
return _csync_excluded_common(excludes, path, filetype, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype) {
|
||||||
|
return _csync_excluded_common(excludes, path, filetype, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ enum csync_exclude_type_e {
|
|||||||
CSYNC_FILE_EXCLUDE_AND_REMOVE,
|
CSYNC_FILE_EXCLUDE_AND_REMOVE,
|
||||||
CSYNC_FILE_EXCLUDE_LIST,
|
CSYNC_FILE_EXCLUDE_LIST,
|
||||||
CSYNC_FILE_EXCLUDE_INVALID_CHAR,
|
CSYNC_FILE_EXCLUDE_INVALID_CHAR,
|
||||||
CSYNC_FILE_EXCLUDE_LONG_FILENAME
|
CSYNC_FILE_EXCLUDE_LONG_FILENAME,
|
||||||
|
CSYNC_FILE_EXCLUDE_HIDDEN,
|
||||||
|
CSYNC_FILE_EXCLUDE_STAT_FAILED
|
||||||
};
|
};
|
||||||
typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
|
typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
|
||||||
|
|
||||||
@@ -64,6 +66,11 @@ void csync_exclude_destroy(CSYNC *ctx);
|
|||||||
*
|
*
|
||||||
* This excludes also paths which can't be used without unix extensions.
|
* This excludes also paths which can't be used without unix extensions.
|
||||||
*
|
*
|
||||||
|
* The exclude list is checked against the full path, each component of
|
||||||
|
* the path and all leading directory strings, e.g.
|
||||||
|
* '/foo/bar/file' checks ('/foo/bar/file', 'foo', 'bar', 'file',
|
||||||
|
* '/foo/bar', '/foo').
|
||||||
|
*
|
||||||
* @param ctx The synchronizer context.
|
* @param ctx The synchronizer context.
|
||||||
* @param path The patch to check.
|
* @param path The patch to check.
|
||||||
*
|
*
|
||||||
@@ -71,6 +78,23 @@ void csync_exclude_destroy(CSYNC *ctx);
|
|||||||
*/
|
*/
|
||||||
CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype);
|
CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if the given path should be excluded in a traversal situation.
|
||||||
|
*
|
||||||
|
* It does only part of the work that csync_excluded does because it's assumed
|
||||||
|
* that all leading directories have been run through csync_excluded_traversal()
|
||||||
|
* before. This can be significantly faster.
|
||||||
|
*
|
||||||
|
* That means for '/foo/bar/file' only ('/foo/bar/file', 'file') is checked
|
||||||
|
* against the exclude patterns.
|
||||||
|
*
|
||||||
|
* @param ctx The synchronizer context.
|
||||||
|
* @param path The patch to check.
|
||||||
|
*
|
||||||
|
* @return 2 if excluded and needs cleanup, 1 if excluded, 0 if not.
|
||||||
|
*/
|
||||||
|
CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief csync_excluded_no_ctx
|
* @brief csync_excluded_no_ctx
|
||||||
* @param excludes
|
* @param excludes
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ int csync_fnmatch(__const char *__pattern, __const char *__name, int __flags) {
|
|||||||
|
|
||||||
(void) __flags;
|
(void) __flags;
|
||||||
|
|
||||||
name = c_utf8_to_locale(__name);
|
name = c_utf8_string_to_locale(__name);
|
||||||
pat = c_utf8_to_locale(__pattern);
|
pat = c_utf8_string_to_locale(__pattern);
|
||||||
|
|
||||||
match = PathMatchSpec(name, pat);
|
match = PathMatchSpecW(name, pat);
|
||||||
|
|
||||||
c_free_locale_string(pat);
|
c_free_locale_string(pat);
|
||||||
c_free_locale_string(name);
|
c_free_locale_string(name);
|
||||||
|
|||||||
@@ -90,6 +90,11 @@ struct csync_s {
|
|||||||
csync_update_callback update_callback;
|
csync_update_callback update_callback;
|
||||||
void *update_callback_userdata;
|
void *update_callback_userdata;
|
||||||
|
|
||||||
|
/* hooks for checking the white list (uses the update_callback_userdata) */
|
||||||
|
int (*checkSelectiveSyncBlackListHook)(void*, const char*);
|
||||||
|
int (*checkSelectiveSyncNewFolderHook)(void*, const char*);
|
||||||
|
|
||||||
|
|
||||||
csync_vio_opendir_hook remote_opendir_hook;
|
csync_vio_opendir_hook remote_opendir_hook;
|
||||||
csync_vio_readdir_hook remote_readdir_hook;
|
csync_vio_readdir_hook remote_readdir_hook;
|
||||||
csync_vio_closedir_hook remote_closedir_hook;
|
csync_vio_closedir_hook remote_closedir_hook;
|
||||||
@@ -163,11 +168,10 @@ struct csync_s {
|
|||||||
*/
|
*/
|
||||||
bool db_is_empty;
|
bool db_is_empty;
|
||||||
|
|
||||||
|
bool ignore_hidden_files;
|
||||||
|
|
||||||
struct csync_owncloud_ctx_s *owncloud_context;
|
struct csync_owncloud_ctx_s *owncloud_context;
|
||||||
|
|
||||||
/* hooks for checking the white list */
|
|
||||||
void *checkSelectiveSyncBlackListData;
|
|
||||||
int (*checkSelectiveSyncBlackListHook)(void*, const char*);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -181,11 +185,11 @@ struct csync_file_stat_s {
|
|||||||
size_t pathlen; /* u64 */
|
size_t pathlen; /* u64 */
|
||||||
uint64_t inode; /* u64 */
|
uint64_t inode; /* u64 */
|
||||||
mode_t mode; /* u32 */
|
mode_t mode; /* u32 */
|
||||||
int nlink; /* u32 */
|
unsigned int type : 4;
|
||||||
int type; /* u32 */
|
unsigned int child_modified : 1;
|
||||||
int child_modified;/*bool*/
|
unsigned int should_update_metadata : 1; /*specify that the etag, or the remote perm or fileid has
|
||||||
int should_update_etag; /*bool */
|
changed and need to be updated on the db even for INSTRUCTION_NONE */
|
||||||
int has_ignored_files; /*bool: specify that a directory, or child directory contains ignored files */
|
unsigned int has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */
|
||||||
|
|
||||||
char *destpath; /* for renames */
|
char *destpath; /* for renames */
|
||||||
const char *etag;
|
const char *etag;
|
||||||
|
|||||||
@@ -181,6 +181,12 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
|||||||
|
|
||||||
if(!other) {
|
if(!other) {
|
||||||
cur->instruction = CSYNC_INSTRUCTION_NEW;
|
cur->instruction = CSYNC_INSTRUCTION_NEW;
|
||||||
|
if (cur->type == CSYNC_FTW_TYPE_DIR) {
|
||||||
|
// For new directories we always want to update the etag once
|
||||||
|
// the directory has been propagated. Otherwise the directory
|
||||||
|
// could appear locally without being added to the database.
|
||||||
|
cur->should_update_metadata = true;
|
||||||
|
}
|
||||||
} else if (other->instruction == CSYNC_INSTRUCTION_NONE
|
} else if (other->instruction == CSYNC_INSTRUCTION_NONE
|
||||||
|| cur->type == CSYNC_FTW_TYPE_DIR) {
|
|| cur->type == CSYNC_FTW_TYPE_DIR) {
|
||||||
other->instruction = CSYNC_INSTRUCTION_RENAME;
|
other->instruction = CSYNC_INSTRUCTION_RENAME;
|
||||||
@@ -189,7 +195,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
|||||||
csync_vio_set_file_id( other->file_id, cur->file_id );
|
csync_vio_set_file_id( other->file_id, cur->file_id );
|
||||||
}
|
}
|
||||||
other->inode = cur->inode;
|
other->inode = cur->inode;
|
||||||
other->should_update_etag = true;
|
other->should_update_metadata = true;
|
||||||
cur->instruction = CSYNC_INSTRUCTION_NONE;
|
cur->instruction = CSYNC_INSTRUCTION_NONE;
|
||||||
} else if (other->instruction == CSYNC_INSTRUCTION_REMOVE) {
|
} else if (other->instruction == CSYNC_INSTRUCTION_REMOVE) {
|
||||||
other->instruction = CSYNC_INSTRUCTION_RENAME;
|
other->instruction = CSYNC_INSTRUCTION_RENAME;
|
||||||
@@ -199,7 +205,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
|||||||
csync_vio_set_file_id( other->file_id, cur->file_id );
|
csync_vio_set_file_id( other->file_id, cur->file_id );
|
||||||
}
|
}
|
||||||
other->inode = cur->inode;
|
other->inode = cur->inode;
|
||||||
other->should_update_etag = true;
|
other->should_update_metadata = true;
|
||||||
cur->instruction = CSYNC_INSTRUCTION_NONE;
|
cur->instruction = CSYNC_INSTRUCTION_NONE;
|
||||||
} else if (other->instruction == CSYNC_INSTRUCTION_NEW) {
|
} else if (other->instruction == CSYNC_INSTRUCTION_NEW) {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "OOOO=> NEW detected in other tree!");
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "OOOO=> NEW detected in other tree!");
|
||||||
@@ -262,9 +268,9 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
|||||||
|
|
||||||
/* update DB with new etag from remote */
|
/* update DB with new etag from remote */
|
||||||
if (ctx->current == LOCAL_REPLICA) {
|
if (ctx->current == LOCAL_REPLICA) {
|
||||||
other->should_update_etag = true;
|
other->should_update_metadata = true;
|
||||||
} else {
|
} else {
|
||||||
cur->should_update_etag = true;
|
cur->should_update_metadata = true;
|
||||||
}
|
}
|
||||||
} else if(ctx->current == REMOTE_REPLICA) {
|
} else if(ctx->current == REMOTE_REPLICA) {
|
||||||
cur->instruction = CSYNC_INSTRUCTION_CONFLICT;
|
cur->instruction = CSYNC_INSTRUCTION_CONFLICT;
|
||||||
@@ -292,20 +298,23 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
|||||||
|
|
||||||
//hide instruction NONE messages when log level is set to debug,
|
//hide instruction NONE messages when log level is set to debug,
|
||||||
//only show these messages on log level trace
|
//only show these messages on log level trace
|
||||||
|
const char *repo = ctx->current == REMOTE_REPLICA ? "server" : "client";
|
||||||
if(cur->instruction ==CSYNC_INSTRUCTION_NONE)
|
if(cur->instruction ==CSYNC_INSTRUCTION_NONE)
|
||||||
{
|
{
|
||||||
if(cur->type == CSYNC_FTW_TYPE_DIR)
|
if(cur->type == CSYNC_FTW_TYPE_DIR)
|
||||||
{
|
{
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
|
||||||
"%-20s dir: %s",
|
"%-20s %s dir: %s",
|
||||||
csync_instruction_str(cur->instruction),
|
csync_instruction_str(cur->instruction),
|
||||||
|
repo,
|
||||||
cur->path);
|
cur->path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
|
||||||
"%-20s file: %s",
|
"%-20s %s file: %s",
|
||||||
csync_instruction_str(cur->instruction),
|
csync_instruction_str(cur->instruction),
|
||||||
|
repo,
|
||||||
cur->path);
|
cur->path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -314,15 +323,17 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
|||||||
if(cur->type == CSYNC_FTW_TYPE_DIR)
|
if(cur->type == CSYNC_FTW_TYPE_DIR)
|
||||||
{
|
{
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
|
||||||
"%-20s dir: %s",
|
"%-20s %s dir: %s",
|
||||||
csync_instruction_str(cur->instruction),
|
csync_instruction_str(cur->instruction),
|
||||||
|
repo,
|
||||||
cur->path);
|
cur->path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
|
||||||
"%-20s file: %s",
|
"%-20s %s file: %s",
|
||||||
csync_instruction_str(cur->instruction),
|
csync_instruction_str(cur->instruction),
|
||||||
|
repo,
|
||||||
cur->path);
|
cur->path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -283,6 +283,9 @@ static int _csync_file_stat_from_metadata_table( csync_file_stat_t **st, sqlite3
|
|||||||
if(column_count > 12 && sqlite3_column_int64(stmt,12)) {
|
if(column_count > 12 && sqlite3_column_int64(stmt,12)) {
|
||||||
(*st)->size = sqlite3_column_int64(stmt, 12);
|
(*st)->size = sqlite3_column_int64(stmt, 12);
|
||||||
}
|
}
|
||||||
|
if(column_count > 13) {
|
||||||
|
(*st)->has_ignored_files = sqlite3_column_int(stmt, 13);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if( rc != SQLITE_DONE ) {
|
if( rc != SQLITE_DONE ) {
|
||||||
@@ -435,7 +438,7 @@ char *csync_statedb_get_etag( CSYNC *ctx, uint64_t jHash ) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BELOW_PATH_QUERY "SELECT phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize FROM metadata WHERE pathlen>? AND path LIKE(?)"
|
#define BELOW_PATH_QUERY "SELECT phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote FROM metadata WHERE pathlen>? AND path LIKE(?)"
|
||||||
|
|
||||||
int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
|
int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
|
||||||
int rc;
|
int rc;
|
||||||
@@ -485,12 +488,13 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
|
|||||||
/* Check for exclusion from the tree.
|
/* Check for exclusion from the tree.
|
||||||
* Note that this is only a safety net in case the ignore list changes
|
* Note that this is only a safety net in case the ignore list changes
|
||||||
* without a full remote discovery being triggered. */
|
* without a full remote discovery being triggered. */
|
||||||
CSYNC_EXCLUDE_TYPE excluded = csync_excluded(ctx, st->path, st->type);
|
CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx->excludes, st->path, st->type);
|
||||||
if (excluded != CSYNC_NOT_EXCLUDED) {
|
if (excluded != CSYNC_NOT_EXCLUDED) {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path, excluded);
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path, excluded);
|
||||||
|
|
||||||
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE
|
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE
|
||||||
|| excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
|| excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
||||||
|
SAFE_FREE(st);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -163,33 +163,35 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
|
|
||||||
len = strlen(path);
|
len = strlen(path);
|
||||||
|
|
||||||
/* This code should probably be in csync_exclude, but it does not have the fs parameter.
|
if (type == CSYNC_FTW_TYPE_SKIP) {
|
||||||
Keep it here for now and TODO also find out if we want this for Windows
|
excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED;
|
||||||
https://github.com/owncloud/mirall/issues/2086 */
|
} else {
|
||||||
if (fs->flags & CSYNC_VIO_FILE_FLAGS_HIDDEN) {
|
/* Check if file is excluded */
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", path);
|
excluded = csync_excluded_traversal(ctx->excludes, path, type);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if file is excluded */
|
if( excluded == CSYNC_NOT_EXCLUDED ) {
|
||||||
excluded = csync_excluded(ctx, path,type);
|
/* Even if it is not excluded by a pattern, maybe it is to be ignored
|
||||||
|
* because it's a hidden file that should not be synced.
|
||||||
if (excluded != CSYNC_NOT_EXCLUDED) {
|
* This code should probably be in csync_exclude, but it does not have the fs parameter.
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", path, excluded);
|
* Keep it here for now */
|
||||||
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) {
|
if (ctx->ignore_hidden_files && (fs->flags & CSYNC_VIO_FILE_FLAGS_HIDDEN)) {
|
||||||
return 1;
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", path);
|
||||||
}
|
excluded = CSYNC_FILE_EXCLUDE_HIDDEN;
|
||||||
if (excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
}
|
||||||
return 1;
|
} else {
|
||||||
}
|
/* File is ignored because it's matched by a user- or system exclude pattern. */
|
||||||
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", path, excluded);
|
||||||
if (ctx->current_fs) {
|
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) {
|
||||||
ctx->current_fs->has_ignored_files = true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if (excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->current == REMOTE_REPLICA && ctx->checkSelectiveSyncBlackListHook) {
|
if (ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncBlackListHook) {
|
||||||
if (ctx->checkSelectiveSyncBlackListHook(ctx->checkSelectiveSyncBlackListData, path)) {
|
if (ctx->callbacks.checkSelectiveSyncBlackListHook(ctx->callbacks.update_callback_userdata, path)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,20 +210,16 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
st->child_modified = 0;
|
st->child_modified = 0;
|
||||||
st->has_ignored_files = 0;
|
st->has_ignored_files = 0;
|
||||||
|
|
||||||
/* check hardlink count */
|
/* FIXME: Under which conditions are the following two ifs true and the code
|
||||||
|
* is executed? */
|
||||||
if (type == CSYNC_FTW_TYPE_FILE ) {
|
if (type == CSYNC_FTW_TYPE_FILE ) {
|
||||||
if( fs->nlink > 1) {
|
|
||||||
st->instruction = CSYNC_INSTRUCTION_IGNORE;
|
|
||||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_HARDLINK;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fs->mtime == 0) {
|
if (fs->mtime == 0) {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", path);
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", path);
|
||||||
|
|
||||||
tmp = csync_statedb_get_stat_by_hash(ctx, h);
|
tmp = csync_statedb_get_stat_by_hash(ctx, h);
|
||||||
if(_last_db_return_error(ctx)) {
|
if(_last_db_return_error(ctx)) {
|
||||||
SAFE_FREE(st);
|
SAFE_FREE(st);
|
||||||
|
SAFE_FREE(tmp);
|
||||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -241,17 +239,13 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ignore non statable files and other strange cases. */
|
|
||||||
if (type == CSYNC_FTW_TYPE_SKIP) {
|
|
||||||
st->instruction = CSYNC_INSTRUCTION_NONE;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
if (excluded > CSYNC_NOT_EXCLUDED || type == CSYNC_FTW_TYPE_SLINK) {
|
if (excluded > CSYNC_NOT_EXCLUDED || type == CSYNC_FTW_TYPE_SLINK) {
|
||||||
if( type == CSYNC_FTW_TYPE_SLINK ) {
|
|
||||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK; /* Symbolic links are ignored. */
|
|
||||||
}
|
|
||||||
st->instruction = CSYNC_INSTRUCTION_IGNORE;
|
st->instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||||
goto out;
|
if (ctx->current_fs) {
|
||||||
|
ctx->current_fs->has_ignored_files = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update detection: Check if a database entry exists.
|
/* Update detection: Check if a database entry exists.
|
||||||
@@ -272,10 +266,10 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
/* we have an update! */
|
/* we have an update! */
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Database entry found, compare: %" PRId64 " <-> %" PRId64
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Database entry found, compare: %" PRId64 " <-> %" PRId64
|
||||||
", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64
|
", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64
|
||||||
", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s",
|
", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s, ignore: %d",
|
||||||
((int64_t) fs->mtime), ((int64_t) tmp->modtime),
|
((int64_t) fs->mtime), ((int64_t) tmp->modtime),
|
||||||
fs->etag, tmp->etag, (uint64_t) fs->inode, (uint64_t) tmp->inode,
|
fs->etag, tmp->etag, (uint64_t) fs->inode, (uint64_t) tmp->inode,
|
||||||
(uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm, tmp->remotePerm );
|
(uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm, tmp->remotePerm, tmp->has_ignored_files );
|
||||||
if( !fs->etag) {
|
if( !fs->etag) {
|
||||||
st->instruction = CSYNC_INSTRUCTION_EVAL;
|
st->instruction = CSYNC_INSTRUCTION_EVAL;
|
||||||
goto out;
|
goto out;
|
||||||
@@ -318,7 +312,13 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
if (metadata_differ) {
|
if (metadata_differ) {
|
||||||
/* file id or permissions has changed. Which means we need to update them in the DB. */
|
/* file id or permissions has changed. Which means we need to update them in the DB. */
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", path);
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", path);
|
||||||
st->should_update_etag = true;
|
st->should_update_metadata = true;
|
||||||
|
}
|
||||||
|
/* If it was remembered in the db that the remote dir has ignored files, store
|
||||||
|
* that so that the reconciler can make advantage of.
|
||||||
|
*/
|
||||||
|
if( ctx->current == REMOTE_REPLICA ) {
|
||||||
|
st->has_ignored_files = tmp->has_ignored_files;
|
||||||
}
|
}
|
||||||
st->instruction = CSYNC_INSTRUCTION_NONE;
|
st->instruction = CSYNC_INSTRUCTION_NONE;
|
||||||
} else {
|
} else {
|
||||||
@@ -398,12 +398,20 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
} else {
|
} else {
|
||||||
/* file not found in statedb */
|
/* file not found in statedb */
|
||||||
st->instruction = CSYNC_INSTRUCTION_NEW;
|
st->instruction = CSYNC_INSTRUCTION_NEW;
|
||||||
|
|
||||||
|
if (fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) {
|
||||||
|
if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, path)) {
|
||||||
|
SAFE_FREE(st);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unable to open statedb" );
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unable to open statedb" );
|
||||||
|
SAFE_FREE(st);
|
||||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -412,13 +420,21 @@ out:
|
|||||||
|
|
||||||
/* Set the ignored error string. */
|
/* Set the ignored error string. */
|
||||||
if (st->instruction == CSYNC_INSTRUCTION_IGNORE) {
|
if (st->instruction == CSYNC_INSTRUCTION_IGNORE) {
|
||||||
if (excluded == CSYNC_FILE_EXCLUDE_LIST) {
|
if( type == CSYNC_FTW_TYPE_SLINK ) {
|
||||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST; /* File listed on ignore list. */
|
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK; /* Symbolic links are ignored. */
|
||||||
} else if (excluded == CSYNC_FILE_EXCLUDE_INVALID_CHAR) {
|
} else {
|
||||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS; /* File contains invalid characters. */
|
if (excluded == CSYNC_FILE_EXCLUDE_LIST) {
|
||||||
} else if (excluded == CSYNC_FILE_EXCLUDE_LONG_FILENAME) {
|
st->error_status = CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST; /* File listed on ignore list. */
|
||||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME; /* File name is too long. */
|
} else if (excluded == CSYNC_FILE_EXCLUDE_INVALID_CHAR) {
|
||||||
}
|
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS; /* File contains invalid characters. */
|
||||||
|
} else if (excluded == CSYNC_FILE_EXCLUDE_LONG_FILENAME) {
|
||||||
|
st->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME; /* File name is too long. */
|
||||||
|
} else if (excluded == CSYNC_FILE_EXCLUDE_HIDDEN ) {
|
||||||
|
st->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_HIDDEN;
|
||||||
|
} else if (excluded == CSYNC_FILE_EXCLUDE_STAT_FAILED) {
|
||||||
|
st->error_status = CSYNC_STATUS_INDIVIDUAL_STAT_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (st->instruction != CSYNC_INSTRUCTION_NONE && st->instruction != CSYNC_INSTRUCTION_IGNORE
|
if (st->instruction != CSYNC_INSTRUCTION_NONE && st->instruction != CSYNC_INSTRUCTION_IGNORE
|
||||||
&& type != CSYNC_FTW_TYPE_DIR) {
|
&& type != CSYNC_FTW_TYPE_DIR) {
|
||||||
@@ -431,7 +447,6 @@ out:
|
|||||||
st->mode = fs->mode;
|
st->mode = fs->mode;
|
||||||
st->size = fs->size;
|
st->size = fs->size;
|
||||||
st->modtime = fs->mtime;
|
st->modtime = fs->mtime;
|
||||||
st->nlink = fs->nlink;
|
|
||||||
st->type = type;
|
st->type = type;
|
||||||
st->etag = NULL;
|
st->etag = NULL;
|
||||||
if( fs->etag ) {
|
if( fs->etag ) {
|
||||||
@@ -615,7 +630,15 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
/* permission denied */
|
/* permission denied */
|
||||||
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_OPENDIR_ERROR);
|
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_OPENDIR_ERROR);
|
||||||
if (errno == EACCES) {
|
if (errno == EACCES) {
|
||||||
return 0;
|
if (ctx->current_fs) {
|
||||||
|
ctx->current_fs->instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||||
|
ctx->current_fs->error_status = CSYNC_STATUS_PERMISSION_DENIED;
|
||||||
|
/* If a directory has ignored files, put the flag on the parent directory as well */
|
||||||
|
if( previous_fs ) {
|
||||||
|
previous_fs->has_ignored_files = true;
|
||||||
|
}
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
} else if(errno == ENOENT) {
|
} else if(errno == ENOENT) {
|
||||||
asp = asprintf( &ctx->error_string, "%s", uri);
|
asp = asprintf( &ctx->error_string, "%s", uri);
|
||||||
if (asp < 0) {
|
if (asp < 0) {
|
||||||
@@ -637,6 +660,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
}
|
}
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
/* if current_fs is not defined here, better throw an error */
|
||||||
} else {
|
} else {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "opendir failed for %s - errno %d", uri, errno);
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "opendir failed for %s - errno %d", uri, errno);
|
||||||
}
|
}
|
||||||
@@ -649,6 +673,14 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
int flen;
|
int flen;
|
||||||
int flag;
|
int flag;
|
||||||
|
|
||||||
|
/* Conversion error */
|
||||||
|
if (dirent->name == NULL && dirent->original_name) {
|
||||||
|
ctx->status_code = CSYNC_STATUS_INVALID_CHARACTERS;
|
||||||
|
ctx->error_string = dirent->original_name; // take ownership
|
||||||
|
dirent->original_name = NULL;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
d_name = dirent->name;
|
d_name = dirent->name;
|
||||||
if (d_name == NULL) {
|
if (d_name == NULL) {
|
||||||
ctx->status_code = CSYNC_STATUS_READDIR_ERROR;
|
ctx->status_code = CSYNC_STATUS_READDIR_ERROR;
|
||||||
@@ -748,6 +780,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
|
|
||||||
if(_last_db_return_error(ctx)) {
|
if(_last_db_return_error(ctx)) {
|
||||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||||
|
SAFE_FREE(etag);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -796,7 +829,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
&& ctx->current_fs->instruction == CSYNC_INSTRUCTION_EVAL) {
|
&& ctx->current_fs->instruction == CSYNC_INSTRUCTION_EVAL) {
|
||||||
ctx->current_fs->instruction = CSYNC_INSTRUCTION_NONE;
|
ctx->current_fs->instruction = CSYNC_INSTRUCTION_NONE;
|
||||||
if (ctx->current == REMOTE_REPLICA) {
|
if (ctx->current == REMOTE_REPLICA) {
|
||||||
ctx->current_fs->should_update_etag = true;
|
ctx->current_fs->should_update_metadata = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -814,7 +847,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
if (flag == CSYNC_FTW_FLAG_DIR && ctx->current_fs
|
if (flag == CSYNC_FTW_FLAG_DIR && ctx->current_fs
|
||||||
&& (ctx->current_fs->instruction == CSYNC_INSTRUCTION_EVAL ||
|
&& (ctx->current_fs->instruction == CSYNC_INSTRUCTION_EVAL ||
|
||||||
ctx->current_fs->instruction == CSYNC_INSTRUCTION_NEW)) {
|
ctx->current_fs->instruction == CSYNC_INSTRUCTION_NEW)) {
|
||||||
ctx->current_fs->should_update_etag = true;
|
ctx->current_fs->should_update_metadata = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->current_fs = previous_fs;
|
ctx->current_fs = previous_fs;
|
||||||
|
|||||||
@@ -104,30 +104,6 @@ void csync_memstat_check(void) {
|
|||||||
m.size * 4, m.resident * 4, m.shared * 4);
|
m.size * 4, m.resident * 4, m.shared * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void csync_win32_set_file_hidden( const char *file, bool h ) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
const mbchar_t *fileName;
|
|
||||||
DWORD dwAttrs;
|
|
||||||
if( !file ) return;
|
|
||||||
|
|
||||||
fileName = c_utf8_to_locale( file );
|
|
||||||
dwAttrs = GetFileAttributesW(fileName);
|
|
||||||
|
|
||||||
if (dwAttrs != INVALID_FILE_ATTRIBUTES) {
|
|
||||||
if (h && !(dwAttrs & FILE_ATTRIBUTE_HIDDEN)) {
|
|
||||||
SetFileAttributesW(fileName, dwAttrs | FILE_ATTRIBUTE_HIDDEN );
|
|
||||||
} else if (!h && (dwAttrs & FILE_ATTRIBUTE_HIDDEN)) {
|
|
||||||
SetFileAttributesW(fileName, dwAttrs & ~FILE_ATTRIBUTE_HIDDEN );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
c_free_locale_string(fileName);
|
|
||||||
#else
|
|
||||||
(void) h;
|
|
||||||
(void) file;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool (*csync_file_locked_or_open_ext) (const char*) = 0; // filled in by library user
|
bool (*csync_file_locked_or_open_ext) (const char*) = 0; // filled in by library user
|
||||||
void set_csync_file_locked_or_open_ext(bool (*f) (const char*));
|
void set_csync_file_locked_or_open_ext(bool (*f) (const char*));
|
||||||
void set_csync_file_locked_or_open_ext(bool (*f) (const char*)) {
|
void set_csync_file_locked_or_open_ext(bool (*f) (const char*)) {
|
||||||
|
|||||||
@@ -30,7 +30,5 @@ const char *csync_instruction_str(enum csync_instructions_e instr);
|
|||||||
|
|
||||||
void csync_memstat_check(void);
|
void csync_memstat_check(void);
|
||||||
|
|
||||||
void csync_win32_set_file_hidden( const char *file, bool hidden );
|
|
||||||
|
|
||||||
bool csync_file_locked_or_open( const char *dir, const char *fname);
|
bool csync_file_locked_or_open( const char *dir, const char *fname);
|
||||||
#endif /* _CSYNC_UTIL_H */
|
#endif /* _CSYNC_UTIL_H */
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
#include "c_private.h"
|
#include "c_private.h"
|
||||||
#include "c_alloc.h"
|
#include "c_alloc.h"
|
||||||
#include "c_path.h"
|
#include "c_path.h"
|
||||||
|
#include "c_string.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dirname - parse directory component.
|
* dirname - parse directory component.
|
||||||
@@ -389,3 +390,62 @@ int c_parse_uri(const char *uri,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function takes a path and converts it to a UNC representation of the
|
||||||
|
* string. That means that it prepends a \\?\ (unless already UNC) and converts
|
||||||
|
* all slashes to backslashes.
|
||||||
|
*
|
||||||
|
* Note the following:
|
||||||
|
* - The string must be absolute.
|
||||||
|
* - it needs to contain a drive character to be a valid UNC
|
||||||
|
* - A conversion is only done if the path len is larger than 245. Otherwise
|
||||||
|
* the windows API functions work with the normal "unixoid" representation too.
|
||||||
|
*
|
||||||
|
* This function allocates memory that must be freed by the caller.
|
||||||
|
*/
|
||||||
|
const char *c_path_to_UNC(const char *str)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
char *longStr = NULL;
|
||||||
|
|
||||||
|
len = strlen(str);
|
||||||
|
longStr = c_malloc(len+5);
|
||||||
|
*longStr = '\0';
|
||||||
|
|
||||||
|
// prepend \\?\ and convert '/' => '\' to support long names
|
||||||
|
if( str[0] == '/' || str[0] == '\\' ) {
|
||||||
|
// Don't prepend if already UNC
|
||||||
|
if( !(len > 1 && (str[1] == '/' || str[1] == '\\')) ) {
|
||||||
|
strcpy( longStr, "\\\\?");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
strcpy( longStr, "\\\\?\\"); // prepend string by this four magic chars.
|
||||||
|
}
|
||||||
|
strncat( longStr, str, len );
|
||||||
|
|
||||||
|
/* replace all occurences of / with the windows native \ */
|
||||||
|
char *c = longStr;
|
||||||
|
for (; *c; ++c) {
|
||||||
|
if(*c == '/') {
|
||||||
|
*c = '\\';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return longStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
mbchar_t* c_utf8_path_to_locale(const char *str)
|
||||||
|
{
|
||||||
|
if( str == NULL ) {
|
||||||
|
return NULL;
|
||||||
|
} else {
|
||||||
|
#ifdef _WIN32
|
||||||
|
const char *unc_str = c_path_to_UNC(str);
|
||||||
|
mbchar_t *dst = c_utf8_string_to_locale(unc_str);
|
||||||
|
SAFE_FREE(unc_str);
|
||||||
|
return dst;
|
||||||
|
#else
|
||||||
|
return c_utf8_string_to_locale(str);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#define _C_PATH_H
|
#define _C_PATH_H
|
||||||
|
|
||||||
#include "c_macro.h"
|
#include "c_macro.h"
|
||||||
|
#include "c_private.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Parse directory component.
|
* @brief Parse directory component.
|
||||||
@@ -96,9 +97,9 @@ int c_parse_uri(const char *uri, char **scheme, char **user, char **passwd,
|
|||||||
* @param directory '\0' terminated path including the final '/'
|
* @param directory '\0' terminated path including the final '/'
|
||||||
*
|
*
|
||||||
* @param filename '\0' terminated string
|
* @param filename '\0' terminated string
|
||||||
*
|
*
|
||||||
* @param extension '\0' terminated string
|
* @param extension '\0' terminated string
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -107,6 +108,33 @@ typedef struct
|
|||||||
char * extension;
|
char * extension;
|
||||||
} C_PATHINFO;
|
} C_PATHINFO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief c_path_to_UNC converts a unixoid path to UNC format.
|
||||||
|
*
|
||||||
|
* It converts the '/' to '\' and prepends \\?\ to the path.
|
||||||
|
*
|
||||||
|
* A proper windows path has to have a drive letter, otherwise it is not
|
||||||
|
* valid UNC.
|
||||||
|
*
|
||||||
|
* @param str The path to convert
|
||||||
|
*
|
||||||
|
* @return a pointer to the converted string. Caller has to free it.
|
||||||
|
*/
|
||||||
|
const char *c_path_to_UNC(const char *str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief c_utf8_path_to_locale converts a unixoid path to the locale aware format
|
||||||
|
*
|
||||||
|
* On windows, it converts to UNC and multibyte.
|
||||||
|
* On Mac, it converts to the correct utf8 using iconv.
|
||||||
|
* On Linux, it returns utf8
|
||||||
|
*
|
||||||
|
* @param str The path to convert
|
||||||
|
*
|
||||||
|
* @return a pointer to the converted string. Caller has to free it using the
|
||||||
|
* function c_free_locale_string.
|
||||||
|
*/
|
||||||
|
mbchar_t* c_utf8_path_to_locale(const char *str);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* }@
|
* }@
|
||||||
|
|||||||
@@ -41,10 +41,18 @@
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define EDQUOT 0
|
#define EDQUOT 0
|
||||||
#define ENODATA 0
|
#define ENODATA 0
|
||||||
|
#ifndef S_IRGRP
|
||||||
#define S_IRGRP 0
|
#define S_IRGRP 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IROTH
|
||||||
#define S_IROTH 0
|
#define S_IROTH 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXGRP
|
||||||
#define S_IXGRP 0
|
#define S_IXGRP 0
|
||||||
|
#endif
|
||||||
|
#ifndef S_IXOTH
|
||||||
#define S_IXOTH 0
|
#define S_IXOTH 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#define S_IFSOCK 10000 /* dummy val on Win32 */
|
#define S_IFSOCK 10000 /* dummy val on Win32 */
|
||||||
#define S_IFLNK 10001 /* dummy val on Win32 */
|
#define S_IFLNK 10001 /* dummy val on Win32 */
|
||||||
@@ -102,7 +110,6 @@ typedef struct stat csync_stat_t;
|
|||||||
typedef wchar_t mbchar_t;
|
typedef wchar_t mbchar_t;
|
||||||
#define _topen _wopen
|
#define _topen _wopen
|
||||||
#define _tdirent _wdirent
|
#define _tdirent _wdirent
|
||||||
#define _TDIR _WDIR
|
|
||||||
#define _topendir _wopendir
|
#define _topendir _wopendir
|
||||||
#define _tclosedir _wclosedir
|
#define _tclosedir _wclosedir
|
||||||
#define _treaddir _wreaddir
|
#define _treaddir _wreaddir
|
||||||
@@ -118,11 +125,12 @@ typedef wchar_t mbchar_t;
|
|||||||
#define _tchmod _wchmod
|
#define _tchmod _wchmod
|
||||||
#define _trewinddir _wrewinddir
|
#define _trewinddir _wrewinddir
|
||||||
#define _tchown(X, Y, Z) 0 /* no chown on Win32 */
|
#define _tchown(X, Y, Z) 0 /* no chown on Win32 */
|
||||||
|
#define _tchdir _wchdir
|
||||||
|
#define _tgetcwd _wgetcwd
|
||||||
#else
|
#else
|
||||||
typedef char mbchar_t;
|
typedef char mbchar_t;
|
||||||
#define _tdirent dirent
|
#define _tdirent dirent
|
||||||
#define _topen open
|
#define _topen open
|
||||||
#define _TDIR DIR
|
|
||||||
#define _topendir opendir
|
#define _topendir opendir
|
||||||
#define _tclosedir closedir
|
#define _tclosedir closedir
|
||||||
#define _treaddir readdir
|
#define _treaddir readdir
|
||||||
@@ -138,6 +146,8 @@ typedef char mbchar_t;
|
|||||||
#define _tchmod chmod
|
#define _tchmod chmod
|
||||||
#define _trewinddir rewinddir
|
#define _trewinddir rewinddir
|
||||||
#define _tchown(X,Y,Z) chown(X,Y,Z)
|
#define _tchown(X,Y,Z) chown(X,Y,Z)
|
||||||
|
#define _tchdir chdir
|
||||||
|
#define _tgetcwd getcwd
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WITH_ICONV
|
#ifdef WITH_ICONV
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
#include "c_string.h"
|
#include "c_string.h"
|
||||||
|
#include "c_path.h"
|
||||||
#include "c_alloc.h"
|
#include "c_alloc.h"
|
||||||
#include "c_macro.h"
|
#include "c_macro.h"
|
||||||
|
|
||||||
@@ -214,6 +215,25 @@ int c_strlist_add(c_strlist_t *strlist, const char *string) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int c_strlist_add_grow(c_strlist_t **strlist, const char *string) {
|
||||||
|
if (*strlist == NULL) {
|
||||||
|
*strlist = c_strlist_new(32);
|
||||||
|
if (*strlist == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*strlist)->count == (*strlist)->size) {
|
||||||
|
c_strlist_t *list = c_strlist_expand(*strlist, 2 * (*strlist)->size);
|
||||||
|
if (list == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*strlist = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c_strlist_add(*strlist, string);
|
||||||
|
}
|
||||||
|
|
||||||
void c_strlist_clear(c_strlist_t *strlist) {
|
void c_strlist_clear(c_strlist_t *strlist) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
|
||||||
@@ -275,33 +295,33 @@ char* c_utf8_from_locale(const mbchar_t *wstr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Convert a an UTF8 string to multibyte */
|
/* Convert a an UTF8 string to multibyte */
|
||||||
mbchar_t* c_utf8_to_locale(const char *str)
|
mbchar_t* c_utf8_string_to_locale(const char *str)
|
||||||
{
|
{
|
||||||
mbchar_t *dst = NULL;
|
mbchar_t *dst = NULL;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
size_t len;
|
size_t len;
|
||||||
int size_needed;
|
int size_needed;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (str == NULL ) {
|
if (str == NULL ) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
size_needed = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);
|
size_needed = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);
|
||||||
if (size_needed > 0) {
|
if (size_needed > 0) {
|
||||||
int size_char = (size_needed + 1) * sizeof(mbchar_t);
|
int size_char = (size_needed + 1) * sizeof(mbchar_t);
|
||||||
dst = c_malloc(size_char);
|
dst = c_malloc(size_char);
|
||||||
memset((void*)dst, 0, size_char);
|
memset((void*)dst, 0, size_char);
|
||||||
MultiByteToWideChar(CP_UTF8, 0, str, -1, dst, size_needed);
|
MultiByteToWideChar(CP_UTF8, 0, str, -1, dst, size_needed);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#ifdef WITH_ICONV
|
#ifdef WITH_ICONV
|
||||||
dst = c_iconv(str, iconv_to_native);
|
dst = c_iconv(str, iconv_to_native);
|
||||||
#else
|
#else
|
||||||
dst = (_TCHAR*) str;
|
dst = (_TCHAR*) str;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,19 @@ c_strlist_t *c_strlist_expand(c_strlist_t *strlist, size_t size);
|
|||||||
*/
|
*/
|
||||||
int c_strlist_add(c_strlist_t *strlist, const char *string);
|
int c_strlist_add(c_strlist_t *strlist, const char *string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Add a string to the stringlist, growing it if necessary
|
||||||
|
*
|
||||||
|
* Duplicates the string and stores it in the stringlist.
|
||||||
|
* It also initializes the stringlist if it starts out as null.
|
||||||
|
*
|
||||||
|
* @param strlist Stringlist to add the string.
|
||||||
|
* @param string String to add.
|
||||||
|
*
|
||||||
|
* @return 0 on success, less than 0 and errno set if an error occured.
|
||||||
|
*/
|
||||||
|
int c_strlist_add_grow(c_strlist_t **strlist, const char *string);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Removes all strings from the list.
|
* @brief Removes all strings from the list.
|
||||||
*
|
*
|
||||||
@@ -163,12 +176,14 @@ void c_strlist_destroy(c_strlist_t *strlist);
|
|||||||
* Instead of using the standard file operations the multi platform aliases
|
* Instead of using the standard file operations the multi platform aliases
|
||||||
* defined in c_private.h have to be used instead.
|
* defined in c_private.h have to be used instead.
|
||||||
*
|
*
|
||||||
* To convert path names as input for the cross platform functions from the
|
* To convert strings as input for the cross platform functions from the
|
||||||
* internally used utf8 format, this function has to be used.
|
* internally used utf8 format, this function has to be used.
|
||||||
* The returned string has to be freed by c_free_locale_string(). On some
|
* The returned string has to be freed by c_free_locale_string(). On some
|
||||||
* platforms this method allocates memory and on others not but it has never
|
* platforms this method allocates memory and on others not but it has never
|
||||||
* sto be cared about.
|
* sto be cared about.
|
||||||
*
|
*
|
||||||
|
* If the string to convert is a path, consider using c_utf8_path_to_locale().
|
||||||
|
*
|
||||||
* @param str The utf8 string to convert.
|
* @param str The utf8 string to convert.
|
||||||
*
|
*
|
||||||
* @return The malloced converted multibyte string or NULL on error.
|
* @return The malloced converted multibyte string or NULL on error.
|
||||||
@@ -177,7 +192,7 @@ void c_strlist_destroy(c_strlist_t *strlist);
|
|||||||
* @see c_utf8_from_locale()
|
* @see c_utf8_from_locale()
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
mbchar_t* c_utf8_to_locale(const char *wstr);
|
mbchar_t* c_utf8_string_to_locale(const char *wstr);
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(WITH_ICONV)
|
#if defined(_WIN32) || defined(WITH_ICONV)
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
#include "c_private.h"
|
#include "c_private.h"
|
||||||
#include "c_string.h"
|
#include "c_string.h"
|
||||||
|
|
||||||
#include "c_string.h"
|
#include "c_path.h"
|
||||||
#include "c_time.h"
|
#include "c_time.h"
|
||||||
|
|
||||||
struct timespec c_tspecdiff(struct timespec time1, struct timespec time0) {
|
struct timespec c_tspecdiff(struct timespec time1, struct timespec time0) {
|
||||||
@@ -69,7 +69,7 @@ double c_secdiff(struct timespec clock1, struct timespec clock0) {
|
|||||||
|
|
||||||
#ifdef HAVE_UTIMES
|
#ifdef HAVE_UTIMES
|
||||||
int c_utimes(const char *uri, const struct timeval *times) {
|
int c_utimes(const char *uri, const struct timeval *times) {
|
||||||
mbchar_t *wuri = c_utf8_to_locale(uri);
|
mbchar_t *wuri = c_utf8_path_to_locale(uri);
|
||||||
int ret = utimes(wuri, times);
|
int ret = utimes(wuri, times);
|
||||||
c_free_locale_string(wuri);
|
c_free_locale_string(wuri);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -97,7 +97,7 @@ int c_utimes(const char *uri, const struct timeval *times) {
|
|||||||
FILETIME LastModificationTime;
|
FILETIME LastModificationTime;
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
|
|
||||||
mbchar_t *wuri = c_utf8_to_locale( uri );
|
mbchar_t *wuri = c_utf8_path_to_locale( uri );
|
||||||
|
|
||||||
if(times) {
|
if(times) {
|
||||||
UnixTimevalToFileTime(times[0], &LastAccessTime);
|
UnixTimevalToFileTime(times[0], &LastAccessTime);
|
||||||
|
|||||||
233
csync/src/vio/csync_vio_local_unix.c
Normal file
233
csync/src/vio/csync_vio_local_unix.c
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
/*
|
||||||
|
* libcsync -- a library to sync a directory with another
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
|
||||||
|
* Copyright (c) 2013- by Klaas Freitag <freitag@owncloud.com>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "c_private.h"
|
||||||
|
#include "c_lib.h"
|
||||||
|
#include "c_string.h"
|
||||||
|
#include "csync_util.h"
|
||||||
|
#include "csync_log.h"
|
||||||
|
#include "csync_vio.h"
|
||||||
|
|
||||||
|
#include "vio/csync_vio_local.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* directory functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct dhandle_s {
|
||||||
|
DIR *dh;
|
||||||
|
char *path;
|
||||||
|
} dhandle_t;
|
||||||
|
|
||||||
|
csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
||||||
|
dhandle_t *handle = NULL;
|
||||||
|
mbchar_t *dirname = NULL;
|
||||||
|
|
||||||
|
handle = c_malloc(sizeof(dhandle_t));
|
||||||
|
|
||||||
|
dirname = c_utf8_path_to_locale(name);
|
||||||
|
|
||||||
|
handle->dh = _topendir( dirname );
|
||||||
|
if (handle->dh == NULL) {
|
||||||
|
c_free_locale_string(dirname);
|
||||||
|
SAFE_FREE(handle);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
handle->path = c_strdup(name);
|
||||||
|
c_free_locale_string(dirname);
|
||||||
|
|
||||||
|
return (csync_vio_handle_t *) handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
int csync_vio_local_closedir(csync_vio_handle_t *dhandle) {
|
||||||
|
dhandle_t *handle = NULL;
|
||||||
|
int rc = -1;
|
||||||
|
|
||||||
|
if (dhandle == NULL) {
|
||||||
|
errno = EBADF;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
handle = (dhandle_t *) dhandle;
|
||||||
|
rc = _tclosedir(handle->dh);
|
||||||
|
|
||||||
|
SAFE_FREE(handle->path);
|
||||||
|
SAFE_FREE(handle);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
||||||
|
|
||||||
|
dhandle_t *handle = NULL;
|
||||||
|
csync_vio_file_stat_t *file_stat = NULL;
|
||||||
|
|
||||||
|
handle = (dhandle_t *) dhandle;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
file_stat = csync_vio_file_stat_new();
|
||||||
|
if (file_stat == NULL) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
||||||
|
|
||||||
|
struct _tdirent *dirent = NULL;
|
||||||
|
|
||||||
|
dirent = _treaddir(handle->dh);
|
||||||
|
if (dirent == NULL) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
file_stat->name = c_utf8_from_locale(dirent->d_name);
|
||||||
|
if (file_stat->name == NULL) {
|
||||||
|
//file_stat->original_name = c_strdup(dirent->d_name);
|
||||||
|
if (asprintf(&file_stat->original_name, "%s/%s", handle->path, dirent->d_name) < 0) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Invalid characters in file/directory name, please rename: \"%s\" (%s)",
|
||||||
|
dirent->d_name, handle->path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check for availability of d_type, see manpage. */
|
||||||
|
#if defined(_DIRENT_HAVE_D_TYPE) || defined(__APPLE__)
|
||||||
|
switch (dirent->d_type) {
|
||||||
|
case DT_FIFO:
|
||||||
|
case DT_SOCK:
|
||||||
|
case DT_CHR:
|
||||||
|
case DT_BLK:
|
||||||
|
break;
|
||||||
|
case DT_DIR:
|
||||||
|
case DT_REG:
|
||||||
|
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
||||||
|
if (dirent->d_type == DT_DIR) {
|
||||||
|
file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
|
||||||
|
} else {
|
||||||
|
file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DT_UNKNOWN:
|
||||||
|
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
||||||
|
file_stat->type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return file_stat;
|
||||||
|
|
||||||
|
err:
|
||||||
|
SAFE_FREE(file_stat);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
||||||
|
csync_stat_t sb;
|
||||||
|
|
||||||
|
mbchar_t *wuri = c_utf8_path_to_locale( uri );
|
||||||
|
|
||||||
|
if( _tstat(wuri, &sb) < 0) {
|
||||||
|
c_free_locale_string(wuri);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf->name = c_basename(uri);
|
||||||
|
|
||||||
|
if (buf->name == NULL) {
|
||||||
|
csync_vio_file_stat_destroy(buf);
|
||||||
|
c_free_locale_string(wuri);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
buf->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
||||||
|
|
||||||
|
switch(sb.st_mode & S_IFMT) {
|
||||||
|
case S_IFBLK:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE;
|
||||||
|
break;
|
||||||
|
case S_IFCHR:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE;
|
||||||
|
break;
|
||||||
|
case S_IFDIR:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
|
||||||
|
break;
|
||||||
|
case S_IFIFO:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_FIFO;
|
||||||
|
break;
|
||||||
|
case S_IFREG:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||||
|
break;
|
||||||
|
case S_IFLNK:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
|
||||||
|
break;
|
||||||
|
case S_IFSOCK:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
buf->type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
||||||
|
|
||||||
|
buf->mode = sb.st_mode;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MODE;
|
||||||
|
|
||||||
|
if (buf->type == CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK) {
|
||||||
|
/* FIXME: handle symlink */
|
||||||
|
buf->flags = CSYNC_VIO_FILE_FLAGS_SYMLINK;
|
||||||
|
} else {
|
||||||
|
buf->flags = CSYNC_VIO_FILE_FLAGS_NONE;
|
||||||
|
}
|
||||||
|
#ifdef __APPLE__
|
||||||
|
if (sb.st_flags & UF_HIDDEN) {
|
||||||
|
buf->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FLAGS;
|
||||||
|
|
||||||
|
buf->device = sb.st_dev;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DEVICE;
|
||||||
|
|
||||||
|
buf->inode = sb.st_ino;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_INODE;
|
||||||
|
|
||||||
|
buf->atime = sb.st_atime;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME;
|
||||||
|
|
||||||
|
buf->mtime = sb.st_mtime;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
|
||||||
|
|
||||||
|
buf->ctime = sb.st_ctime;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_CTIME;
|
||||||
|
|
||||||
|
buf->size = sb.st_size;
|
||||||
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
|
||||||
|
|
||||||
|
c_free_locale_string(wuri);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
* libcsync -- a library to sync a directory with another
|
* libcsync -- a library to sync a directory with another
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
|
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
|
||||||
|
* Copyright (c) 2013- by Klaas Freitag <freitag@owncloud.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -25,9 +26,7 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "c_private.h"
|
#include "c_private.h"
|
||||||
#include "c_lib.h"
|
#include "c_lib.h"
|
||||||
@@ -44,23 +43,49 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct dhandle_s {
|
typedef struct dhandle_s {
|
||||||
_TDIR *dh;
|
WIN32_FIND_DATA ffd;
|
||||||
|
HANDLE hFind;
|
||||||
|
int firstFind;
|
||||||
char *path;
|
char *path;
|
||||||
} dhandle_t;
|
} dhandle_t;
|
||||||
|
|
||||||
csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
||||||
dhandle_t *handle = NULL;
|
dhandle_t *handle = NULL;
|
||||||
mbchar_t *dirname = c_utf8_to_locale(name);
|
mbchar_t *dirname = NULL;
|
||||||
|
|
||||||
handle = c_malloc(sizeof(dhandle_t));
|
handle = c_malloc(sizeof(dhandle_t));
|
||||||
|
|
||||||
handle->dh = _topendir( dirname );
|
// the file wildcard has to be attached
|
||||||
if (handle->dh == NULL) {
|
int len_name = strlen(name);
|
||||||
c_free_locale_string(dirname);
|
if( len_name ) {
|
||||||
SAFE_FREE(handle);
|
char *h = NULL;
|
||||||
return NULL;
|
|
||||||
|
// alloc an enough large buffer to take the name + '/*' + the closing zero.
|
||||||
|
h = c_malloc(len_name+3);
|
||||||
|
strncpy( h, name, 1+len_name);
|
||||||
|
strncat(h, "/*", 2);
|
||||||
|
|
||||||
|
dirname = c_utf8_path_to_locale(h);
|
||||||
|
SAFE_FREE(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( dirname ) {
|
||||||
|
handle->hFind = FindFirstFile(dirname, &(handle->ffd));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dirname || handle->hFind == INVALID_HANDLE_VALUE) {
|
||||||
|
int retcode = GetLastError();
|
||||||
|
if( retcode == ERROR_FILE_NOT_FOUND ) {
|
||||||
|
errno = ENOENT;
|
||||||
|
} else {
|
||||||
|
errno = EACCES;
|
||||||
|
}
|
||||||
|
SAFE_FREE(handle);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
handle->firstFind = 1; // Set a flag that there first fileinfo is available.
|
||||||
|
|
||||||
handle->path = c_strdup(name);
|
handle->path = c_strdup(name);
|
||||||
c_free_locale_string(dirname);
|
c_free_locale_string(dirname);
|
||||||
|
|
||||||
@@ -77,7 +102,13 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handle = (dhandle_t *) dhandle;
|
handle = (dhandle_t *) dhandle;
|
||||||
rc = _tclosedir(handle->dh);
|
// FindClose returns non-zero on success
|
||||||
|
if( FindClose(handle->hFind) != 0 ) {
|
||||||
|
rc = 0;
|
||||||
|
} else {
|
||||||
|
// error case, set errno
|
||||||
|
errno = EBADF;
|
||||||
|
}
|
||||||
|
|
||||||
SAFE_FREE(handle->path);
|
SAFE_FREE(handle->path);
|
||||||
SAFE_FREE(handle);
|
SAFE_FREE(handle);
|
||||||
@@ -86,7 +117,6 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
||||||
struct _tdirent *dirent = NULL;
|
|
||||||
|
|
||||||
dhandle_t *handle = NULL;
|
dhandle_t *handle = NULL;
|
||||||
csync_vio_file_stat_t *file_stat = NULL;
|
csync_vio_file_stat_t *file_stat = NULL;
|
||||||
@@ -94,47 +124,35 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
|||||||
handle = (dhandle_t *) dhandle;
|
handle = (dhandle_t *) dhandle;
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
dirent = _treaddir(handle->dh);
|
|
||||||
if (dirent == NULL) {
|
|
||||||
if (errno) {
|
|
||||||
goto err;
|
|
||||||
} else {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
file_stat = csync_vio_file_stat_new();
|
file_stat = csync_vio_file_stat_new();
|
||||||
if (file_stat == NULL) {
|
if (file_stat == NULL) {
|
||||||
goto err;
|
errno = ENOMEM;
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_stat->name = c_utf8_from_locale(dirent->d_name);
|
|
||||||
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
||||||
|
|
||||||
/* Check for availability of d_type, see manpage. */
|
// the win32 functions get the first valid entry with the opendir
|
||||||
#ifdef _DIRENT_HAVE_D_TYPE
|
// thus we must not jump to next entry if it was the first find.
|
||||||
switch (dirent->d_type) {
|
if( handle->firstFind ) {
|
||||||
case DT_FIFO:
|
handle->firstFind = 0;
|
||||||
case DT_SOCK:
|
} else {
|
||||||
case DT_CHR:
|
if( FindNextFile(handle->hFind, &(handle->ffd)) == 0 ) {
|
||||||
case DT_BLK:
|
// might be error, check!
|
||||||
break;
|
int dwError = GetLastError();
|
||||||
case DT_DIR:
|
if (dwError != ERROR_NO_MORE_FILES) {
|
||||||
case DT_REG:
|
errno = EACCES; // no more files is fine. Otherwise EACCESS
|
||||||
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
}
|
||||||
if (dirent->d_type == DT_DIR) {
|
goto err;
|
||||||
file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
|
|
||||||
} else {
|
|
||||||
file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case DT_UNKNOWN:
|
|
||||||
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
|
||||||
file_stat->type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
#endif
|
file_stat->name = c_utf8_from_locale(handle->ffd.cFileName);
|
||||||
|
|
||||||
|
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
||||||
|
if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||||
|
file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
|
||||||
|
} else {
|
||||||
|
file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||||
|
}
|
||||||
|
|
||||||
return file_stat;
|
return file_stat;
|
||||||
|
|
||||||
@@ -144,8 +162,6 @@ err:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
static time_t FileTimeToUnixTime(FILETIME *filetime, DWORD *remainder)
|
static time_t FileTimeToUnixTime(FILETIME *filetime, DWORD *remainder)
|
||||||
{
|
{
|
||||||
long long int t = filetime->dwHighDateTime;
|
long long int t = filetime->dwHighDateTime;
|
||||||
@@ -170,10 +186,10 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|||||||
BY_HANDLE_FILE_INFORMATION fileInfo;
|
BY_HANDLE_FILE_INFORMATION fileInfo;
|
||||||
WIN32_FIND_DATAW FindFileData;
|
WIN32_FIND_DATAW FindFileData;
|
||||||
ULARGE_INTEGER FileIndex;
|
ULARGE_INTEGER FileIndex;
|
||||||
mbchar_t *wuri = c_utf8_to_locale( uri );
|
mbchar_t *wuri = c_utf8_path_to_locale( uri );
|
||||||
|
|
||||||
h = CreateFileW( wuri, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
h = CreateFileW( wuri, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
||||||
FILE_ATTRIBUTE_NORMAL+FILE_FLAG_BACKUP_SEMANTICS, NULL );
|
FILE_ATTRIBUTE_NORMAL+FILE_FLAG_BACKUP_SEMANTICS+FILE_FLAG_OPEN_REPARSE_POINT, NULL );
|
||||||
if( h == INVALID_HANDLE_VALUE ) {
|
if( h == INVALID_HANDLE_VALUE ) {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri );
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri );
|
||||||
errno = GetLastError();
|
errno = GetLastError();
|
||||||
@@ -218,7 +234,12 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|||||||
buf->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
buf->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||||
break;
|
break;
|
||||||
} while (0);
|
} while (0);
|
||||||
/* TODO Do we want to parse for CSYNC_VIO_FILE_FLAGS_HIDDEN ? */
|
|
||||||
|
/* Check for the hidden flag */
|
||||||
|
if( fileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) {
|
||||||
|
buf->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
|
||||||
|
}
|
||||||
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FLAGS;
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FLAGS;
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
||||||
|
|
||||||
@@ -257,98 +278,3 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|
||||||
csync_stat_t sb;
|
|
||||||
|
|
||||||
mbchar_t *wuri = c_utf8_to_locale( uri );
|
|
||||||
|
|
||||||
if( _tstat(wuri, &sb) < 0) {
|
|
||||||
c_free_locale_string(wuri);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf->name = c_basename(uri);
|
|
||||||
|
|
||||||
if (buf->name == NULL) {
|
|
||||||
csync_vio_file_stat_destroy(buf);
|
|
||||||
c_free_locale_string(wuri);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
buf->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
|
||||||
|
|
||||||
switch(sb.st_mode & S_IFMT) {
|
|
||||||
case S_IFBLK:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE;
|
|
||||||
break;
|
|
||||||
case S_IFCHR:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE;
|
|
||||||
break;
|
|
||||||
case S_IFDIR:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
|
|
||||||
break;
|
|
||||||
case S_IFIFO:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_FIFO;
|
|
||||||
break;
|
|
||||||
case S_IFREG:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
|
||||||
break;
|
|
||||||
case S_IFLNK:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
|
|
||||||
break;
|
|
||||||
case S_IFSOCK:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
buf->type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
|
||||||
|
|
||||||
buf->mode = sb.st_mode;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MODE;
|
|
||||||
|
|
||||||
if (buf->type == CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK) {
|
|
||||||
/* FIXME: handle symlink */
|
|
||||||
buf->flags = CSYNC_VIO_FILE_FLAGS_SYMLINK;
|
|
||||||
} else {
|
|
||||||
buf->flags = CSYNC_VIO_FILE_FLAGS_NONE;
|
|
||||||
}
|
|
||||||
#ifdef __APPLE__
|
|
||||||
if (sb.st_flags & UF_HIDDEN) {
|
|
||||||
buf->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FLAGS;
|
|
||||||
|
|
||||||
buf->device = sb.st_dev;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DEVICE;
|
|
||||||
|
|
||||||
buf->inode = sb.st_ino;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_INODE;
|
|
||||||
|
|
||||||
buf->atime = sb.st_atime;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME;
|
|
||||||
|
|
||||||
buf->mtime = sb.st_mtime;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
|
|
||||||
|
|
||||||
buf->ctime = sb.st_ctime;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_CTIME;
|
|
||||||
|
|
||||||
buf->nlink = sb.st_nlink;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_LINK_COUNT;
|
|
||||||
|
|
||||||
buf->size = sb.st_size;
|
|
||||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
|
|
||||||
|
|
||||||
c_free_locale_string(wuri);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -46,6 +46,7 @@ add_cmocka_test(check_csync_commit csync_tests/check_csync_commit.c ${TEST_TARGE
|
|||||||
# vio
|
# vio
|
||||||
add_cmocka_test(check_vio_file_stat vio_tests/check_vio_file_stat.c ${TEST_TARGET_LIBRARIES})
|
add_cmocka_test(check_vio_file_stat vio_tests/check_vio_file_stat.c ${TEST_TARGET_LIBRARIES})
|
||||||
add_cmocka_test(check_vio vio_tests/check_vio.c ${TEST_TARGET_LIBRARIES})
|
add_cmocka_test(check_vio vio_tests/check_vio.c ${TEST_TARGET_LIBRARIES})
|
||||||
|
add_cmocka_test(check_vio_ext vio_tests/check_vio_ext.c ${TEST_TARGET_LIBRARIES})
|
||||||
|
|
||||||
# sync
|
# sync
|
||||||
add_cmocka_test(check_csync_update csync_tests/check_csync_update.c ${TEST_TARGET_LIBRARIES})
|
add_cmocka_test(check_csync_update csync_tests/check_csync_update.c ${TEST_TARGET_LIBRARIES})
|
||||||
@@ -57,4 +58,7 @@ add_cmocka_test(check_encoding_functions encoding_tests/check_encoding.c ${TEST_
|
|||||||
set(TEST_HTTPBF_LIBRARIES ${TEST_TARGET_LIBRARIES} ${NEON_LIBRARIES})
|
set(TEST_HTTPBF_LIBRARIES ${TEST_TARGET_LIBRARIES} ${NEON_LIBRARIES})
|
||||||
add_cmocka_test(check_httpbf httpbf_tests/hbf_send_test.c ${TEST_HTTPBF_LIBRARIES} )
|
add_cmocka_test(check_httpbf httpbf_tests/hbf_send_test.c ${TEST_HTTPBF_LIBRARIES} )
|
||||||
|
|
||||||
|
if(UNIT_TESTING)
|
||||||
|
INSTALL( FILES "${CMOCKA_LIBRARIES}" DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif(UNIT_TESTING)
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "config_csync.h"
|
#include "config_csync.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "torture.h"
|
#include "torture.h"
|
||||||
|
|
||||||
@@ -89,6 +90,11 @@ static void check_csync_excluded(void **state)
|
|||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded(csync, "/", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
rc = csync_excluded(csync, "krawel_krawel", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded(csync, "krawel_krawel", CSYNC_FTW_TYPE_FILE);
|
||||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
rc = csync_excluded(csync, ".kde/share/config/kwin.eventsrc", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded(csync, ".kde/share/config/kwin.eventsrc", CSYNC_FTW_TYPE_FILE);
|
||||||
@@ -141,6 +147,56 @@ static void check_csync_excluded(void **state)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_csync_excluded_traversal(void **state)
|
||||||
|
{
|
||||||
|
CSYNC *csync = *state;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
_csync_exclude_add( &(csync->excludes), "/exclude" );
|
||||||
|
|
||||||
|
/* Check toplevel dir, the pattern only works for toplevel dir. */
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/exclude", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/foo/exclude", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
/* check for a file called exclude. Must still work */
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/exclude", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/foo/exclude", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
/* Add an exclude for directories only: excl/ */
|
||||||
|
_csync_exclude_add( &(csync->excludes), "excl/" );
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excl", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "meep/excl", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "meep/excl/file", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED); // because leading dirs aren't checked!
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excl", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
_csync_exclude_add(&csync->excludes, "/excludepath/withsubdir");
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir2", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir/foo", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED); // because leading dirs aren't checked!
|
||||||
|
}
|
||||||
|
|
||||||
static void check_csync_pathes(void **state)
|
static void check_csync_pathes(void **state)
|
||||||
{
|
{
|
||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
@@ -170,8 +226,25 @@ static void check_csync_pathes(void **state)
|
|||||||
rc = csync_excluded(csync, "meep/excl", CSYNC_FTW_TYPE_DIR);
|
rc = csync_excluded(csync, "meep/excl", CSYNC_FTW_TYPE_DIR);
|
||||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "meep/excl/file", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
rc = csync_excluded(csync, "/excl", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded(csync, "/excl", CSYNC_FTW_TYPE_FILE);
|
||||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
_csync_exclude_add(&csync->excludes, "/excludepath/withsubdir");
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir2", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir/foo", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_csync_is_windows_reserved_word() {
|
static void check_csync_is_windows_reserved_word() {
|
||||||
@@ -190,7 +263,51 @@ static void check_csync_is_windows_reserved_word() {
|
|||||||
assert_true(csync_is_windows_reserved_word("Z:"));
|
assert_true(csync_is_windows_reserved_word("Z:"));
|
||||||
assert_true(csync_is_windows_reserved_word("M:"));
|
assert_true(csync_is_windows_reserved_word("M:"));
|
||||||
assert_true(csync_is_windows_reserved_word("m:"));
|
assert_true(csync_is_windows_reserved_word("m:"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_csync_excluded_performance(void **state)
|
||||||
|
{
|
||||||
|
CSYNC *csync = *state;
|
||||||
|
|
||||||
|
const int N = 10000;
|
||||||
|
int totalRc = 0;
|
||||||
|
|
||||||
|
// Being able to use QElapsedTimer for measurement would be nice...
|
||||||
|
{
|
||||||
|
struct timeval before, after;
|
||||||
|
gettimeofday(&before, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
totalRc += csync_excluded(csync, "/this/is/quite/a/long/path/with/many/components", CSYNC_FTW_TYPE_DIR);
|
||||||
|
totalRc += csync_excluded(csync, "/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/29", CSYNC_FTW_TYPE_FILE);
|
||||||
|
}
|
||||||
|
assert_int_equal(totalRc, CSYNC_NOT_EXCLUDED); // mainly to avoid optimization
|
||||||
|
|
||||||
|
gettimeofday(&after, 0);
|
||||||
|
|
||||||
|
const double total = (after.tv_sec - before.tv_sec)
|
||||||
|
+ (after.tv_usec - before.tv_usec) / 1.0e6;
|
||||||
|
const double perCallMs = total / 2 / N * 1000;
|
||||||
|
printf("csync_excluded: %f ms per call\n", perCallMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
struct timeval before, after;
|
||||||
|
gettimeofday(&before, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
totalRc += csync_excluded_traversal(csync->excludes, "/this/is/quite/a/long/path/with/many/components", CSYNC_FTW_TYPE_DIR);
|
||||||
|
totalRc += csync_excluded_traversal(csync->excludes, "/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/29", CSYNC_FTW_TYPE_FILE);
|
||||||
|
}
|
||||||
|
assert_int_equal(totalRc, CSYNC_NOT_EXCLUDED); // mainly to avoid optimization
|
||||||
|
|
||||||
|
gettimeofday(&after, 0);
|
||||||
|
|
||||||
|
const double total = (after.tv_sec - before.tv_sec)
|
||||||
|
+ (after.tv_usec - before.tv_usec) / 1.0e6;
|
||||||
|
const double perCallMs = total / 2 / N * 1000;
|
||||||
|
printf("csync_excluded_traversal: %f ms per call\n", perCallMs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int torture_run_tests(void)
|
int torture_run_tests(void)
|
||||||
@@ -199,8 +316,10 @@ int torture_run_tests(void)
|
|||||||
unit_test_setup_teardown(check_csync_exclude_add, setup, teardown),
|
unit_test_setup_teardown(check_csync_exclude_add, setup, teardown),
|
||||||
unit_test_setup_teardown(check_csync_exclude_load, setup, teardown),
|
unit_test_setup_teardown(check_csync_exclude_load, setup, teardown),
|
||||||
unit_test_setup_teardown(check_csync_excluded, setup_init, teardown),
|
unit_test_setup_teardown(check_csync_excluded, setup_init, teardown),
|
||||||
|
unit_test_setup_teardown(check_csync_excluded_traversal, setup_init, teardown),
|
||||||
unit_test_setup_teardown(check_csync_pathes, setup_init, teardown),
|
unit_test_setup_teardown(check_csync_pathes, setup_init, teardown),
|
||||||
unit_test_setup_teardown(check_csync_is_windows_reserved_word, setup_init, teardown),
|
unit_test_setup_teardown(check_csync_is_windows_reserved_word, setup_init, teardown),
|
||||||
|
unit_test_setup_teardown(check_csync_excluded_performance, setup_init, teardown),
|
||||||
};
|
};
|
||||||
|
|
||||||
return run_tests(tests);
|
return run_tests(tests);
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ static void check_logging(void **state)
|
|||||||
int rc;
|
int rc;
|
||||||
csync_stat_t sb;
|
csync_stat_t sb;
|
||||||
mbchar_t *path;
|
mbchar_t *path;
|
||||||
path = c_utf8_to_locale("/tmp/check_csync1/cb_called");
|
path = c_utf8_path_to_locale("/tmp/check_csync1/cb_called");
|
||||||
|
|
||||||
(void) state; /* unused */
|
(void) state; /* unused */
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ static void check_csync_statedb_close(void **state)
|
|||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
csync_stat_t sb;
|
csync_stat_t sb;
|
||||||
time_t modtime;
|
time_t modtime;
|
||||||
mbchar_t *testdb = c_utf8_to_locale(TESTDB);
|
mbchar_t *testdb = c_utf8_path_to_locale(TESTDB);
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* statedb not written */
|
/* statedb not written */
|
||||||
|
|||||||
@@ -167,7 +167,6 @@ static void teardown_rm(void **state) {
|
|||||||
/* create a file stat, caller must free memory */
|
/* create a file stat, caller must free memory */
|
||||||
static csync_vio_file_stat_t* create_fstat(const char *name,
|
static csync_vio_file_stat_t* create_fstat(const char *name,
|
||||||
ino_t inode,
|
ino_t inode,
|
||||||
nlink_t nlink,
|
|
||||||
time_t mtime)
|
time_t mtime)
|
||||||
{
|
{
|
||||||
csync_vio_file_stat_t *fs = NULL;
|
csync_vio_file_stat_t *fs = NULL;
|
||||||
@@ -207,12 +206,6 @@ static csync_vio_file_stat_t* create_fstat(const char *name,
|
|||||||
fs->size = 157459;
|
fs->size = 157459;
|
||||||
fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
|
fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
|
||||||
|
|
||||||
if (nlink == 0) {
|
|
||||||
fs->nlink = 1;
|
|
||||||
} else {
|
|
||||||
fs->nlink = nlink;
|
|
||||||
}
|
|
||||||
fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_LINK_COUNT;
|
|
||||||
|
|
||||||
|
|
||||||
if (mtime == 0) {
|
if (mtime == 0) {
|
||||||
@@ -248,7 +241,7 @@ static void check_csync_detect_update(void **state)
|
|||||||
csync_vio_file_stat_t *fs;
|
csync_vio_file_stat_t *fs;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
fs = create_fstat("file.txt", 0, 1, 1217597845);
|
fs = create_fstat("file.txt", 0, 1217597845);
|
||||||
assert_non_null(fs);
|
assert_non_null(fs);
|
||||||
|
|
||||||
rc = _csync_detect_update(csync,
|
rc = _csync_detect_update(csync,
|
||||||
@@ -277,7 +270,7 @@ static void check_csync_detect_update_db_none(void **state)
|
|||||||
csync_vio_file_stat_t *fs;
|
csync_vio_file_stat_t *fs;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
fs = create_fstat("file.txt", 0, 1, 1217597845);
|
fs = create_fstat("file.txt", 0, 1217597845);
|
||||||
assert_non_null(fs);
|
assert_non_null(fs);
|
||||||
|
|
||||||
rc = _csync_detect_update(csync,
|
rc = _csync_detect_update(csync,
|
||||||
@@ -304,7 +297,7 @@ static void check_csync_detect_update_db_eval(void **state)
|
|||||||
csync_vio_file_stat_t *fs;
|
csync_vio_file_stat_t *fs;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
fs = create_fstat("file.txt", 0, 1, 42);
|
fs = create_fstat("file.txt", 0, 42);
|
||||||
assert_non_null(fs);
|
assert_non_null(fs);
|
||||||
|
|
||||||
rc = _csync_detect_update(csync,
|
rc = _csync_detect_update(csync,
|
||||||
@@ -332,7 +325,7 @@ static void check_csync_detect_update_db_rename(void **state)
|
|||||||
csync_vio_file_stat_t *fs;
|
csync_vio_file_stat_t *fs;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
fs = create_fstat("wurst.txt", 0, 1, 42);
|
fs = create_fstat("wurst.txt", 0, 42);
|
||||||
assert_non_null(fs);
|
assert_non_null(fs);
|
||||||
csync_set_statedb_exists(csync, 1);
|
csync_set_statedb_exists(csync, 1);
|
||||||
|
|
||||||
@@ -363,7 +356,7 @@ static void check_csync_detect_update_db_new(void **state)
|
|||||||
csync_vio_file_stat_t *fs;
|
csync_vio_file_stat_t *fs;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
fs = create_fstat("file.txt", 42000, 1, 0);
|
fs = create_fstat("file.txt", 42000, 0);
|
||||||
assert_non_null(fs);
|
assert_non_null(fs);
|
||||||
|
|
||||||
rc = _csync_detect_update(csync,
|
rc = _csync_detect_update(csync,
|
||||||
@@ -383,38 +376,13 @@ static void check_csync_detect_update_db_new(void **state)
|
|||||||
csync_vio_file_stat_destroy(fs);
|
csync_vio_file_stat_destroy(fs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_csync_detect_update_nlink(void **state)
|
|
||||||
{
|
|
||||||
CSYNC *csync = *state;
|
|
||||||
csync_file_stat_t *st;
|
|
||||||
csync_vio_file_stat_t *fs;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* create vio file stat with nlink greater than 1 */
|
|
||||||
fs = create_fstat("file.txt", 0, 7, 0);
|
|
||||||
assert_non_null(fs);
|
|
||||||
|
|
||||||
/* add it to local tree */
|
|
||||||
rc = _csync_detect_update(csync,
|
|
||||||
"/tmp/check_csync1/file.txt",
|
|
||||||
fs,
|
|
||||||
CSYNC_FTW_TYPE_FILE);
|
|
||||||
assert_int_equal(rc, 0);
|
|
||||||
|
|
||||||
/* the instruction should be set to ignore */
|
|
||||||
st = c_rbtree_node_data(csync->local.tree->root);
|
|
||||||
assert_int_equal(st->instruction, CSYNC_INSTRUCTION_IGNORE);
|
|
||||||
|
|
||||||
csync_vio_file_stat_destroy(fs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void check_csync_detect_update_null(void **state)
|
static void check_csync_detect_update_null(void **state)
|
||||||
{
|
{
|
||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
csync_vio_file_stat_t *fs;
|
csync_vio_file_stat_t *fs;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
fs = create_fstat("file.txt", 0, 1, 0);
|
fs = create_fstat("file.txt", 0, 0);
|
||||||
assert_non_null(fs);
|
assert_non_null(fs);
|
||||||
|
|
||||||
rc = _csync_detect_update(csync,
|
rc = _csync_detect_update(csync,
|
||||||
@@ -467,7 +435,6 @@ int torture_run_tests(void)
|
|||||||
unit_test_setup_teardown(check_csync_detect_update_db_eval, setup, teardown),
|
unit_test_setup_teardown(check_csync_detect_update_db_eval, setup, teardown),
|
||||||
unit_test_setup_teardown(check_csync_detect_update_db_rename, setup, teardown),
|
unit_test_setup_teardown(check_csync_detect_update_db_rename, setup, teardown),
|
||||||
unit_test_setup_teardown(check_csync_detect_update_db_new, setup, teardown_rm),
|
unit_test_setup_teardown(check_csync_detect_update_db_new, setup, teardown_rm),
|
||||||
unit_test_setup_teardown(check_csync_detect_update_nlink, setup, teardown_rm),
|
|
||||||
unit_test_setup_teardown(check_csync_detect_update_null, setup, teardown_rm),
|
unit_test_setup_teardown(check_csync_detect_update_null, setup, teardown_rm),
|
||||||
|
|
||||||
unit_test_setup_teardown(check_csync_ftw, setup_ftw, teardown_rm),
|
unit_test_setup_teardown(check_csync_ftw, setup_ftw, teardown_rm),
|
||||||
|
|||||||
@@ -18,13 +18,15 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
#include "torture.h"
|
#include "torture.h"
|
||||||
|
#include <stdio.h>
|
||||||
#include "c_string.h"
|
#include "c_string.h"
|
||||||
|
#include "c_path.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static void setup(void **state)
|
static void setup(void **state)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@@ -63,7 +65,7 @@ static void check_iconv_to_native_normalization(void **state)
|
|||||||
const char *exp_out = "\x48\xc3\xa4"; // UTF8
|
const char *exp_out = "\x48\xc3\xa4"; // UTF8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
out = c_utf8_to_locale(in);
|
out = c_utf8_path_to_locale(in);
|
||||||
assert_string_equal(out, exp_out);
|
assert_string_equal(out, exp_out);
|
||||||
|
|
||||||
c_free_locale_string(out);
|
c_free_locale_string(out);
|
||||||
@@ -125,8 +127,8 @@ static void check_to_multibyte(void **state)
|
|||||||
{
|
{
|
||||||
int rc = -1;
|
int rc = -1;
|
||||||
|
|
||||||
mbchar_t *mb_string = c_utf8_to_locale( TESTSTRING );
|
mbchar_t *mb_string = c_utf8_path_to_locale( TESTSTRING );
|
||||||
mbchar_t *mb_null = c_utf8_to_locale( NULL );
|
mbchar_t *mb_null = c_utf8_path_to_locale( NULL );
|
||||||
|
|
||||||
(void) state;
|
(void) state;
|
||||||
|
|
||||||
@@ -142,13 +144,78 @@ static void check_to_multibyte(void **state)
|
|||||||
c_free_locale_string(mb_null);
|
c_free_locale_string(mb_null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_long_win_path(void **state)
|
||||||
|
{
|
||||||
|
(void) state; /* unused */
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "C://DATA/FILES/MUSIC/MY_MUSIC.mp3"; // check a short path
|
||||||
|
const char *exp_path = "\\\\?\\C:\\\\DATA\\FILES\\MUSIC\\MY_MUSIC.mp3";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "\\\\foo\\bar/MY_MUSIC.mp3";
|
||||||
|
const char *exp_path = "\\\\foo\\bar\\MY_MUSIC.mp3";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "//foo\\bar/MY_MUSIC.mp3";
|
||||||
|
const char *exp_path = "\\\\foo\\bar\\MY_MUSIC.mp3";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "\\foo\\bar";
|
||||||
|
const char *exp_path = "\\\\?\\foo\\bar";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "/foo/bar";
|
||||||
|
const char *exp_path = "\\\\?\\foo\\bar";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *longPath = "D://alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/"
|
||||||
|
"elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/"
|
||||||
|
"jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/"
|
||||||
|
"olonglonglonglong/file.txt";
|
||||||
|
const char *longPathConv = "\\\\?\\D:\\\\alonglonglonglong\\blonglonglonglong\\clonglonglonglong\\dlonglonglonglong\\"
|
||||||
|
"elonglonglonglong\\flonglonglonglong\\glonglonglonglong\\hlonglonglonglong\\ilonglonglonglong\\"
|
||||||
|
"jlonglonglonglong\\klonglonglonglong\\llonglonglonglong\\mlonglonglonglong\\nlonglonglonglong\\"
|
||||||
|
"olonglonglonglong\\file.txt";
|
||||||
|
|
||||||
|
const char *new_long = c_path_to_UNC(longPath);
|
||||||
|
// printf( "XXXXXXXXXXXX %s %d\n", new_long, mem_reserved);
|
||||||
|
|
||||||
|
assert_string_equal(new_long, longPathConv);
|
||||||
|
|
||||||
|
// printf( "YYYYYYYYYYYY %ld\n", strlen(new_long));
|
||||||
|
assert_int_equal( strlen(new_long), 286);
|
||||||
|
SAFE_FREE(new_long);
|
||||||
|
}
|
||||||
|
|
||||||
int torture_run_tests(void)
|
int torture_run_tests(void)
|
||||||
{
|
{
|
||||||
const UnitTest tests[] = {
|
const UnitTest tests[] = {
|
||||||
|
unit_test_setup_teardown(check_long_win_path, setup, teardown),
|
||||||
unit_test_setup_teardown(check_to_multibyte, setup, teardown),
|
unit_test_setup_teardown(check_to_multibyte, setup, teardown),
|
||||||
unit_test_setup_teardown(check_iconv_ascii, setup, teardown),
|
unit_test_setup_teardown(check_iconv_ascii, setup, teardown),
|
||||||
unit_test_setup_teardown(check_iconv_to_native_normalization, setup, teardown),
|
unit_test_setup_teardown(check_iconv_to_native_normalization, setup, teardown),
|
||||||
unit_test_setup_teardown(check_iconv_from_native_normalization, setup, teardown),
|
unit_test_setup_teardown(check_iconv_from_native_normalization, setup, teardown),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return run_tests(tests);
|
return run_tests(tests);
|
||||||
|
|||||||
@@ -29,7 +29,16 @@ use ownCloud::Test;
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
print "Hello, this is t4, a tester for A) files that cannot be stated and B) excluded files\n";
|
sub getInode($)
|
||||||
|
{
|
||||||
|
my ($filename) = @_;
|
||||||
|
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||||
|
$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);
|
||||||
|
|
||||||
|
return $ino;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Hello, this is t4, a tester for A) files that cannot be stated and B) excluded files C) hard links\n";
|
||||||
# stat error occours on windsows when the file is busy for example
|
# stat error occours on windsows when the file is busy for example
|
||||||
|
|
||||||
initTesting();
|
initTesting();
|
||||||
@@ -167,6 +176,48 @@ assertLocalAndRemoteDir( '', 0 );
|
|||||||
assert(! -e localDir(). 'anotherdir' );
|
assert(! -e localDir(). 'anotherdir' );
|
||||||
|
|
||||||
|
|
||||||
|
printInfo("Test hardlinks\n");
|
||||||
|
#make a hard link
|
||||||
|
mkdir( localDir() . 'subdir' );
|
||||||
|
createLocalFile( localDir() .'subdir/original.data', 1568 );
|
||||||
|
system( "ln " . localDir() . 'subdir/original.data ' . localDir() . 'file.link');
|
||||||
|
csync();
|
||||||
|
assertLocalAndRemoteDir( '', 0 );
|
||||||
|
my $inode = getInode(localDir() . 'subdir/original.data');
|
||||||
|
my $inode2 = getInode(localDir() . 'file.link');
|
||||||
|
assert( $inode == $inode2, "Inode is not the same!");
|
||||||
|
|
||||||
|
|
||||||
|
printInfo("Modify hard link\n");
|
||||||
|
system( "echo 'another line' >> " . localDir() . 'file.link');
|
||||||
|
csync();
|
||||||
|
assertLocalAndRemoteDir( '', 0 );
|
||||||
|
my $inode1 = getInode(localDir() .'subdir/original.data');
|
||||||
|
$inode2 = getInode( localDir() .'file.link');
|
||||||
|
assert( $inode == $inode1, "Inode is not the same!");
|
||||||
|
assert( $inode == $inode2, "Inode is not the same!");
|
||||||
|
|
||||||
|
|
||||||
|
printInfo("Rename a hard link\n");
|
||||||
|
move( localDir() . 'subdir/original.data', localDir() . 'subdir/kernelcrash.txt' );
|
||||||
|
csync();
|
||||||
|
assertLocalAndRemoteDir( '', 0 );
|
||||||
|
$inode1 = getInode(localDir() .'subdir/kernelcrash.txt');
|
||||||
|
$inode2 = getInode(localDir() .'file.link');
|
||||||
|
assert( $inode == $inode1, "Inode is not the same!");
|
||||||
|
assert( $inode == $inode2, "Inode is not the same!");
|
||||||
|
|
||||||
|
printInfo("Modify a hard link on the server\n");
|
||||||
|
put_to_dir( '/tmp/kernelcrash.txt', 'subdir' );
|
||||||
|
csync();
|
||||||
|
assertLocalAndRemoteDir( '', 0 );
|
||||||
|
$inode1 = getInode(localDir() .'subdir/kernelcrash.txt');
|
||||||
|
$inode2 = getInode( localDir() .'file.link');
|
||||||
|
# only the first inode must change
|
||||||
|
print(" $inode $inode1 $inode2" );
|
||||||
|
assert( $inode != $inode1, "Inode did not change");
|
||||||
|
assert( $inode == $inode2, "Inode is not the same!");
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
# --
|
# --
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ static void setup(void **state)
|
|||||||
|
|
||||||
static void setup_dir(void **state) {
|
static void setup_dir(void **state) {
|
||||||
int rc;
|
int rc;
|
||||||
mbchar_t *dir = c_utf8_to_locale(CSYNC_TEST_DIR);
|
mbchar_t *dir = c_utf8_path_to_locale(CSYNC_TEST_DIR);
|
||||||
|
|
||||||
setup(state);
|
setup(state);
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ static void check_csync_vio_opendir_perm(void **state)
|
|||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
csync_vio_handle_t *dh;
|
csync_vio_handle_t *dh;
|
||||||
int rc;
|
int rc;
|
||||||
mbchar_t *dir = c_utf8_to_locale(CSYNC_TEST_DIR);
|
mbchar_t *dir = c_utf8_path_to_locale(CSYNC_TEST_DIR);
|
||||||
|
|
||||||
assert_non_null(dir);
|
assert_non_null(dir);
|
||||||
|
|
||||||
|
|||||||
474
csync/tests/vio_tests/check_vio_ext.c
Normal file
474
csync/tests/vio_tests/check_vio_ext.c
Normal file
@@ -0,0 +1,474 @@
|
|||||||
|
/*
|
||||||
|
* libcsync -- a library to sync a directory with another
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015-2013 by Klaas Freitag <freitag@owncloud.com>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "torture.h"
|
||||||
|
|
||||||
|
#include "csync_private.h"
|
||||||
|
#include "vio/csync_vio.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#define CSYNC_TEST_DIR "C:/tmp/csync_test"
|
||||||
|
#else
|
||||||
|
#define CSYNC_TEST_DIR "/tmp/csync_test"
|
||||||
|
#endif
|
||||||
|
#define MKDIR_MASK (S_IRWXU |S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
|
||||||
|
|
||||||
|
#define WD_BUFFER_SIZE 255
|
||||||
|
|
||||||
|
static mbchar_t wd_buffer[WD_BUFFER_SIZE];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CSYNC *csync;
|
||||||
|
char *result;
|
||||||
|
char *ignored_dir;
|
||||||
|
} statevar;
|
||||||
|
|
||||||
|
/* remove the complete test dir */
|
||||||
|
static int wipe_testdir()
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* The windows system call to rd bails out if the dir is not existing
|
||||||
|
* Check first.
|
||||||
|
*/
|
||||||
|
WIN32_FIND_DATA FindFileData;
|
||||||
|
|
||||||
|
mbchar_t *dir = c_utf8_path_to_locale(CSYNC_TEST_DIR);
|
||||||
|
HANDLE handle = FindFirstFile(dir, &FindFileData);
|
||||||
|
c_free_locale_string(dir);
|
||||||
|
int found = handle != INVALID_HANDLE_VALUE;
|
||||||
|
|
||||||
|
if(found) {
|
||||||
|
FindClose(handle);
|
||||||
|
rc = system("rd /s /q C:\\tmp\\csync_test");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
rc = system("rm -rf /tmp/csync_test/");
|
||||||
|
#endif
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setup_testenv(void **state) {
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = wipe_testdir();
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
mbchar_t *dir = c_utf8_path_to_locale(CSYNC_TEST_DIR);
|
||||||
|
|
||||||
|
rc = _tmkdir(dir, MKDIR_MASK);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
assert_non_null(_tgetcwd(wd_buffer, WD_BUFFER_SIZE));
|
||||||
|
|
||||||
|
rc = _tchdir(dir);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
c_free_locale_string(dir);
|
||||||
|
|
||||||
|
/* --- initialize csync */
|
||||||
|
statevar *mystate = malloc( sizeof(statevar) );
|
||||||
|
mystate->result = NULL;
|
||||||
|
|
||||||
|
rc = csync_create(&(mystate->csync), "/tmp/csync1", "/tmp/csync2");
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
mystate->csync->replica = LOCAL_REPLICA;
|
||||||
|
|
||||||
|
*state = mystate;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void output( const char *text )
|
||||||
|
{
|
||||||
|
mbchar_t *wtext = c_utf8_string_to_locale(text);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
wprintf(L"OOOO %ls (%ld)\n", wtext, strlen(text));
|
||||||
|
#else
|
||||||
|
printf("%s\n", wtext);
|
||||||
|
#endif
|
||||||
|
c_free_locale_string(wtext);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void teardown(void **state) {
|
||||||
|
statevar *sv = (statevar*) *state;
|
||||||
|
CSYNC *csync = sv->csync;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
output("================== Tearing down!\n");
|
||||||
|
|
||||||
|
rc = csync_destroy(csync);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
rc = _tchdir(wd_buffer);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
rc = wipe_testdir();
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
*state = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function takes a relative path, prepends it with the CSYNC_TEST_DIR
|
||||||
|
* and creates each sub directory.
|
||||||
|
*/
|
||||||
|
static void create_dirs( const char *path )
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
char *mypath = c_malloc( 2+strlen(CSYNC_TEST_DIR)+strlen(path));
|
||||||
|
*mypath = '\0';
|
||||||
|
strcat(mypath, CSYNC_TEST_DIR);
|
||||||
|
strcat(mypath, "/");
|
||||||
|
strcat(mypath, path);
|
||||||
|
|
||||||
|
char *p = mypath+strlen(CSYNC_TEST_DIR)+1; /* start behind the offset */
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
assert_non_null(path);
|
||||||
|
|
||||||
|
while( *(p+i) ) {
|
||||||
|
if( *(p+i) == '/' ) {
|
||||||
|
p[i] = '\0';
|
||||||
|
|
||||||
|
mbchar_t *mb_dir = c_utf8_path_to_locale(mypath);
|
||||||
|
/* wprintf(L"OOOO %ls (%ld)\n", mb_dir, strlen(mypath)); */
|
||||||
|
rc = _tmkdir(mb_dir, MKDIR_MASK);
|
||||||
|
c_free_locale_string(mb_dir);
|
||||||
|
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
p[i] = '/';
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
SAFE_FREE(mypath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function uses the vio_opendir, vio_readdir and vio_closedir functions
|
||||||
|
* to traverse a file tree that was created before by the create_dir function.
|
||||||
|
*
|
||||||
|
* It appends a listing to the result member of the incoming struct in *state
|
||||||
|
* that can be compared later to what was expected in the calling functions.
|
||||||
|
*
|
||||||
|
* The int parameter cnt contains the number of seen files (not dirs) in the
|
||||||
|
* whole tree.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void traverse_dir(void **state, const char *dir, int *cnt)
|
||||||
|
{
|
||||||
|
csync_vio_handle_t *dh;
|
||||||
|
csync_vio_file_stat_t *dirent;
|
||||||
|
statevar *sv = (statevar*) *state;
|
||||||
|
CSYNC *csync = sv->csync;
|
||||||
|
char *subdir;
|
||||||
|
char *subdir_out;
|
||||||
|
int rc;
|
||||||
|
int is_dir;
|
||||||
|
|
||||||
|
/* Format: Smuggle in the C: for unix platforms as its urgently needed
|
||||||
|
* on Windows and the test can be nicely cross platform this way. */
|
||||||
|
#ifdef _WIN32
|
||||||
|
const char *format_str = "%s %s";
|
||||||
|
#else
|
||||||
|
const char *format_str = "%s C:%s";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
dh = csync_vio_opendir(csync, dir);
|
||||||
|
assert_non_null(dh);
|
||||||
|
|
||||||
|
while( (dirent = csync_vio_readdir(csync, dh)) ) {
|
||||||
|
assert_non_null(dirent);
|
||||||
|
if (dirent->original_name) {
|
||||||
|
sv->ignored_dir = c_strdup(dirent->original_name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_non_null(dirent->name);
|
||||||
|
assert_int_equal( dirent->fields & CSYNC_VIO_FILE_STAT_FIELDS_TYPE, CSYNC_VIO_FILE_STAT_FIELDS_TYPE );
|
||||||
|
|
||||||
|
if( c_streq( dirent->name, "..") || c_streq( dirent->name, "." )) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_dir = (dirent->type == CSYNC_VIO_FILE_TYPE_DIRECTORY) ? 1:0;
|
||||||
|
|
||||||
|
assert_int_not_equal( asprintf( &subdir, "%s/%s", dir, dirent->name ), -1 );
|
||||||
|
|
||||||
|
assert_int_not_equal( asprintf( &subdir_out, format_str,
|
||||||
|
is_dir ? "<DIR>":" ",
|
||||||
|
subdir), -1 );
|
||||||
|
|
||||||
|
if( is_dir ) {
|
||||||
|
if( !sv->result ) {
|
||||||
|
sv->result = c_strdup( subdir_out);
|
||||||
|
} else {
|
||||||
|
int newlen = 1+strlen(sv->result)+strlen(subdir_out);
|
||||||
|
char *tmp = sv->result;
|
||||||
|
sv->result = c_malloc(newlen);
|
||||||
|
strcpy( sv->result, tmp);
|
||||||
|
SAFE_FREE(tmp);
|
||||||
|
|
||||||
|
strcat( sv->result, subdir_out );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
*cnt = *cnt +1;
|
||||||
|
}
|
||||||
|
output(subdir_out);
|
||||||
|
if( is_dir ) {
|
||||||
|
traverse_dir( state, subdir, cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
SAFE_FREE(subdir);
|
||||||
|
SAFE_FREE(subdir_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
csync_vio_file_stat_destroy(dirent);
|
||||||
|
rc = csync_vio_closedir(csync, dh);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void create_file( const char *path, const char *name, const char *content)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
char *filepath = c_malloc( 2+strlen(CSYNC_TEST_DIR)+strlen(path) + strlen(name) );
|
||||||
|
*filepath = '\0';
|
||||||
|
strcpy(filepath, CSYNC_TEST_DIR);
|
||||||
|
strcat(filepath, "/");
|
||||||
|
strcat(filepath, path);
|
||||||
|
strcat(filepath, name);
|
||||||
|
|
||||||
|
DWORD dwWritten; // number of bytes written to file
|
||||||
|
HANDLE hFile;
|
||||||
|
|
||||||
|
mbchar_t *w_fname = c_utf8_path_to_locale(filepath);
|
||||||
|
|
||||||
|
hFile=CreateFile(w_fname, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0,
|
||||||
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
|
|
||||||
|
assert_int_equal( 0, hFile==INVALID_HANDLE_VALUE );
|
||||||
|
|
||||||
|
int len = strlen(content);
|
||||||
|
mbchar_t *dst = NULL;
|
||||||
|
|
||||||
|
dst = c_utf8_string_to_locale(content);
|
||||||
|
WriteFile(hFile, dst, len * sizeof(mbchar_t), &dwWritten, 0);
|
||||||
|
|
||||||
|
CloseHandle(hFile);
|
||||||
|
SAFE_FREE(dst);
|
||||||
|
c_free_locale_string(w_fname);
|
||||||
|
#else
|
||||||
|
char *filepath = c_malloc( 1+strlen(path) + strlen(name) );
|
||||||
|
*filepath = '\0';
|
||||||
|
|
||||||
|
strcpy(filepath, path);
|
||||||
|
strcat(filepath, name);
|
||||||
|
|
||||||
|
FILE *sink;
|
||||||
|
sink = fopen(filepath,"w");
|
||||||
|
|
||||||
|
fprintf (sink, "we got: %s",content);
|
||||||
|
fclose(sink);
|
||||||
|
SAFE_FREE(filepath);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_readdir_shorttree(void **state)
|
||||||
|
{
|
||||||
|
statevar *sv = (statevar*) *state;
|
||||||
|
|
||||||
|
const char *t1 = "alibaba/und/die/vierzig/räuber/";
|
||||||
|
create_dirs( t1 );
|
||||||
|
int files_cnt = 0;
|
||||||
|
|
||||||
|
traverse_dir(state, CSYNC_TEST_DIR, &files_cnt);
|
||||||
|
|
||||||
|
assert_string_equal( sv->result,
|
||||||
|
"<DIR> C:/tmp/csync_test/alibaba"
|
||||||
|
"<DIR> C:/tmp/csync_test/alibaba/und"
|
||||||
|
"<DIR> C:/tmp/csync_test/alibaba/und/die"
|
||||||
|
"<DIR> C:/tmp/csync_test/alibaba/und/die/vierzig"
|
||||||
|
"<DIR> C:/tmp/csync_test/alibaba/und/die/vierzig/räuber" );
|
||||||
|
assert_int_equal(files_cnt, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_readdir_with_content(void **state)
|
||||||
|
{
|
||||||
|
statevar *sv = (statevar*) *state;
|
||||||
|
int files_cnt = 0;
|
||||||
|
|
||||||
|
const char *t1 = "warum/nur/40/Räuber/";
|
||||||
|
create_dirs( t1 );
|
||||||
|
|
||||||
|
create_file( t1, "Räuber Max.txt", "Der Max ist ein schlimmer finger");
|
||||||
|
create_file( t1, "пя́тница.txt", "Am Freitag tanzt der Ürk");
|
||||||
|
|
||||||
|
|
||||||
|
traverse_dir(state, CSYNC_TEST_DIR, &files_cnt);
|
||||||
|
|
||||||
|
assert_string_equal( sv->result,
|
||||||
|
"<DIR> C:/tmp/csync_test/warum"
|
||||||
|
"<DIR> C:/tmp/csync_test/warum/nur"
|
||||||
|
"<DIR> C:/tmp/csync_test/warum/nur/40"
|
||||||
|
"<DIR> C:/tmp/csync_test/warum/nur/40/Räuber");
|
||||||
|
/* " C:/tmp/csync_test/warum/nur/40/Räuber/Räuber Max.txt"
|
||||||
|
" C:/tmp/csync_test/warum/nur/40/Räuber/пя́тница.txt"); */
|
||||||
|
assert_int_equal(files_cnt, 2); /* Two files in the sub dir */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_readdir_longtree(void **state)
|
||||||
|
{
|
||||||
|
statevar *sv = (statevar*) *state;
|
||||||
|
|
||||||
|
/* Strange things here: Compilers only support strings with length of 4k max.
|
||||||
|
* The expected result string is longer, so it needs to be split up in r1, r2 and r3
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* create the test tree */
|
||||||
|
const char *t1 = "vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh/und/BESSER/ZWEI/Butteln/VOLL RUM/";
|
||||||
|
create_dirs( t1 );
|
||||||
|
|
||||||
|
const char *r1 =
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum";
|
||||||
|
|
||||||
|
|
||||||
|
const char *r2 =
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH";
|
||||||
|
|
||||||
|
|
||||||
|
const char *r3 =
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh/und"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh/und/BESSER"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh/und/BESSER/ZWEI"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh/und/BESSER/ZWEI/Butteln"
|
||||||
|
"<DIR> C:/tmp/csync_test/vierzig/mann/auf/des/toten/Mann/kiste/ooooooooooooooooooooooh/and/ne/bottle/voll/rum/und/so/singen/wir/VIERZIG/MANN/AUF/DES/TOTEN/MANNS/KISTE/OOOOOOOOH/AND/NE/BOTTLE/VOLL/RUM/undnochmalallezusammen/VierZig/MannaufDesTotenManns/KISTE/ooooooooooooooooooooooooooohhhhhh/und/BESSER/ZWEI/Butteln/VOLL RUM";
|
||||||
|
|
||||||
|
/* assemble the result string ... */
|
||||||
|
int overall_len = 1+strlen(r1)+strlen(r2)+strlen(r3);
|
||||||
|
int files_cnt = 0;
|
||||||
|
char *result = c_malloc(overall_len);
|
||||||
|
*result = '\0';
|
||||||
|
|
||||||
|
strcat(result, r1);
|
||||||
|
strcat(result, r2);
|
||||||
|
strcat(result, r3);
|
||||||
|
|
||||||
|
traverse_dir(state, CSYNC_TEST_DIR, &files_cnt);
|
||||||
|
assert_int_equal(files_cnt, 0);
|
||||||
|
/* and compare. */
|
||||||
|
assert_string_equal( sv->result, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/owncloud/client/issues/3128 https://github.com/owncloud/client/issues/2777
|
||||||
|
static void check_readdir_bigunicode(void **state)
|
||||||
|
{
|
||||||
|
statevar *sv = (statevar*) *state;
|
||||||
|
// 1: ? ASCII: 239 - EF
|
||||||
|
// 2: ? ASCII: 187 - BB
|
||||||
|
// 3: ? ASCII: 191 - BF
|
||||||
|
// 4: ASCII: 32 - 20
|
||||||
|
|
||||||
|
char *p = 0;
|
||||||
|
asprintf( &p, "%s/%s", CSYNC_TEST_DIR, "goodone/" );
|
||||||
|
int rc = _tmkdir(p, MKDIR_MASK);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
SAFE_FREE(p);
|
||||||
|
|
||||||
|
const char *t1 = "goodone/ugly\xEF\xBB\xBF\x32" ".txt";
|
||||||
|
asprintf( &p, "%s/%s", CSYNC_TEST_DIR, t1 );
|
||||||
|
rc = _tmkdir(p, MKDIR_MASK);
|
||||||
|
SAFE_FREE(p);
|
||||||
|
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
int files_cnt = 0;
|
||||||
|
traverse_dir(state, CSYNC_TEST_DIR, &files_cnt);
|
||||||
|
const char *expected_result = "<DIR> C:/tmp/csync_test/goodone"
|
||||||
|
#ifndef __APPLE__
|
||||||
|
// On Mac, iconv will not return some files with fancy unicode.
|
||||||
|
// Linux is not so picky about it and return everything and let the sync engine deal with it.
|
||||||
|
"<DIR> C:/tmp/csync_test/goodone/ugly\xEF\xBB\xBF\x32" ".txt"
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
assert_string_equal( sv->result, expected_result);
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
// Bad one is recognized though.. !
|
||||||
|
assert_string_equal( sv->ignored_dir, CSYNC_TEST_DIR "/goodone/" "ugly\xEF\xBB\xBF\x32" ".txt");
|
||||||
|
#endif
|
||||||
|
assert_int_equal(files_cnt, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int torture_run_tests(void)
|
||||||
|
{
|
||||||
|
const UnitTest tests[] = {
|
||||||
|
unit_test_setup_teardown(check_readdir_shorttree, setup_testenv, teardown),
|
||||||
|
unit_test_setup_teardown(check_readdir_with_content, setup_testenv, teardown),
|
||||||
|
unit_test_setup_teardown(check_readdir_longtree, setup_testenv, teardown),
|
||||||
|
unit_test_setup_teardown(check_readdir_bigunicode, setup_testenv, teardown),
|
||||||
|
};
|
||||||
|
|
||||||
|
return run_tests(tests);
|
||||||
|
}
|
||||||
@@ -47,7 +47,7 @@ Synchronization by Time versus ETag
|
|||||||
.. index:: time stamps, file times, etag, unique id
|
.. index:: time stamps, file times, etag, unique id
|
||||||
|
|
||||||
Until the release of ownCloud 4.5 and ownCloud Client 1.1, the ownCloud
|
Until the release of ownCloud 4.5 and ownCloud Client 1.1, the ownCloud
|
||||||
synchronization process employed a single file property -- the file modificatin
|
synchronization process employed a single file property -- the file modification
|
||||||
time -- to decide which file was newer and needed to be synchronized to the
|
time -- to decide which file was newer and needed to be synchronized to the
|
||||||
other repository.
|
other repository.
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ a synchronization process.
|
|||||||
not support using the file ID functionality.
|
not support using the file ID functionality.
|
||||||
|
|
||||||
Before the 1.3.0 release of the Desktop Client, the synchronization process
|
Before the 1.3.0 release of the Desktop Client, the synchronization process
|
||||||
might create faux conflict files if time deviates. Original and changed files
|
might create false conflict files if time deviates. Original and changed files
|
||||||
conflict only in their timestamp, but not in their content. This behaviour was
|
conflict only in their timestamp, but not in their content. This behaviour was
|
||||||
changed to employ a binary check if files differ.
|
changed to employ a binary check if files differ.
|
||||||
|
|
||||||
@@ -104,11 +104,11 @@ depending on server/client combination:
|
|||||||
+--------------------+-------------------+----------------------------+
|
+--------------------+-------------------+----------------------------+
|
||||||
|
|
||||||
We strongly recommend using ownCloud Server release 4.5 or later when using
|
We strongly recommend using ownCloud Server release 4.5 or later when using
|
||||||
ownCloud Client 1.1 or later. Using incompatible time stamp-based
|
ownCloud Client 1.1 or later. Using an incompatible time stamp-based
|
||||||
synchronization mechanism can lead to data loss in rare cases, especially when
|
synchronization mechanism can lead to data loss in rare cases, especially when
|
||||||
multiple clients are involved and one utilizes a non-synchronized NTP time.
|
multiple clients are involved and one utilizes a non-synchronized NTP time.
|
||||||
|
|
||||||
.. _`NTP time synchronisation`: http://en.wikipedia.org/wiki/Network_Time_Protocol
|
.. _`NTP time synchronization`: http://en.wikipedia.org/wiki/Network_Time_Protocol
|
||||||
.. _Etag: http://en.wikipedia.org/wiki/HTTP_ETag
|
.. _Etag: http://en.wikipedia.org/wiki/HTTP_ETag
|
||||||
|
|
||||||
Comparison and Conflict Cases
|
Comparison and Conflict Cases
|
||||||
@@ -120,7 +120,7 @@ traverses the file tree and compares the modification time of each file with an
|
|||||||
expected value stored in its database. If the value is not the same, the client
|
expected value stored in its database. If the value is not the same, the client
|
||||||
determines that the file has been modified in the local repository.
|
determines that the file has been modified in the local repository.
|
||||||
|
|
||||||
.. note:: On the local side, the modification time a good attribute to use for
|
.. note:: On the local side, the modification time is a good attribute to use for
|
||||||
detecting changes, because
|
detecting changes, because
|
||||||
the value does not depend on time shifts and such.
|
the value does not depend on time shifts and such.
|
||||||
|
|
||||||
@@ -131,8 +131,8 @@ changed and no synchronization occurs.
|
|||||||
|
|
||||||
In the event a file has changed on both the local and the remote repository
|
In the event a file has changed on both the local and the remote repository
|
||||||
since the last sync run, it can not easily be decided which version of the file
|
since the last sync run, it can not easily be decided which version of the file
|
||||||
is the one that should be used. However, changes to any side be lost. Instead,
|
is the one that should be used. However, changes to any side will not be lost. Instead,
|
||||||
a *conflict case* is created. The client resolves this conflic by creating a
|
a *conflict case* is created. The client resolves this conflict by creating a
|
||||||
conflict file of the older of the two files and saving the newer file under the
|
conflict file of the older of the two files and saving the newer file under the
|
||||||
original file name. Conflict files are always created on the client and never
|
original file name. Conflict files are always created on the client and never
|
||||||
on the server. The conflict file uses the same name as the original file, but
|
on the server. The conflict file uses the same name as the original file, but
|
||||||
@@ -153,21 +153,21 @@ By default, the ownCloud Client ignores the following files:
|
|||||||
|
|
||||||
* Files matched by one of the patterns defined in the Ignored Files Editor
|
* Files matched by one of the patterns defined in the Ignored Files Editor
|
||||||
* Files containing characters that do not work on certain file systems ``(`\, /, :, ?, *, ", >, <, |`)``.
|
* Files containing characters that do not work on certain file systems ``(`\, /, :, ?, *, ", >, <, |`)``.
|
||||||
* Files starting in ``.csync_journal.db``, as these files are reserved for journalling.
|
* Files starting with ``.csync_journal.db``, as these files are reserved for journalling.
|
||||||
|
|
||||||
If a pattern selected using a checkbox in the `ignoredFilesEditor-label` (or if
|
If a pattern selected using a checkbox in the `ignoredFilesEditor-label` (or if
|
||||||
a line in the exclude file starts with the character `]` directly followed by
|
a line in the exclude file starts with the character ``]`` directly followed by
|
||||||
the file pattern), files matching the pattern are considered *fleeting meta
|
the file pattern), files matching the pattern are considered *fleeting meta
|
||||||
data*. These files are ingored and *removed* by the client if found in the
|
data*. These files are ignored and *removed* by the client if found in the
|
||||||
synchronized folder. This is suitable for meta files created by some
|
synchronized folder. This is suitable for meta files created by some
|
||||||
applications that have no sustainable meaning.
|
applications that have no sustainable meaning.
|
||||||
|
|
||||||
If a pattern ends with the backslash (`/`) character, only directories are
|
If a pattern ends with the forwardslash (``/``) character, only directories are
|
||||||
matched. The pattern is only applied for directory components of filenames
|
matched. The pattern is only applied for directory components of filenames
|
||||||
selected using the checkbox.
|
selected using the checkbox.
|
||||||
|
|
||||||
To match filenames against the exclude patterns, the unix standard C library
|
To match filenames against the exclude patterns, the unix standard C library
|
||||||
function fnmatch is used. This procesx checks the filename against the
|
function fnmatch is used. This process checks the filename against the
|
||||||
specified pattern using standard shell wildcard pattern matching. For more
|
specified pattern using standard shell wildcard pattern matching. For more
|
||||||
information, please refer to `The opengroup website
|
information, please refer to `The opengroup website
|
||||||
<http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13_01>`_.
|
<http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13_01>`_.
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ To prevent automatic updates and disallow manual overrides:
|
|||||||
.. note::This is the preferred method of controlling the updater behavior using
|
.. note::This is the preferred method of controlling the updater behavior using
|
||||||
Group Policies.
|
Group Policies.
|
||||||
|
|
||||||
1. Migrate to the following directory::
|
1. Edit this Registry key:
|
||||||
|
|
||||||
HKEY_LOCAL_MACHINE\Software\Policies\ownCloud\ownCloud
|
HKEY_LOCAL_MACHINE\Software\Policies\ownCloud\ownCloud
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ using the system-wide ``.plist`` file. To access this file:
|
|||||||
|
|
||||||
/Library/Preferences/
|
/Library/Preferences/
|
||||||
|
|
||||||
2. Locate and open the following file::
|
2. Locate and open the following file::
|
||||||
|
|
||||||
com.owncloud.desktopclient.plist
|
com.owncloud.desktopclient.plist
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
.. _building-label:
|
.. _building-label:
|
||||||
|
|
||||||
|
===============================
|
||||||
Appendix A: Building the Client
|
Appendix A: Building the Client
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
@@ -7,7 +8,7 @@ This section explains how to build the ownCloud Client from source for all
|
|||||||
major platforms. You should read this section if you want to develop for the
|
major platforms. You should read this section if you want to develop for the
|
||||||
desktop client.
|
desktop client.
|
||||||
|
|
||||||
.. note:: Building instruction are subject to change as development proceeds.
|
.. note:: Build instructions are subject to change as development proceeds.
|
||||||
Please check the version for which you want to build.
|
Please check the version for which you want to build.
|
||||||
|
|
||||||
The instructions contained in this topic were updated to work with version 1.7 of the ownCloud Client.
|
The instructions contained in this topic were updated to work with version 1.7 of the ownCloud Client.
|
||||||
@@ -23,7 +24,7 @@ Linux
|
|||||||
* openSUSE: ``zypper ref; zypper si -d owncloud-client``
|
* openSUSE: ``zypper ref; zypper si -d owncloud-client``
|
||||||
* Fedora/CentOS: ``yum install yum-utils; yum-builddep owncloud-client``
|
* Fedora/CentOS: ``yum install yum-utils; yum-builddep owncloud-client``
|
||||||
|
|
||||||
3. Follow the `generic build instructions`_.
|
3. Follow the :ref:`generic-build-instructions`.
|
||||||
|
|
||||||
4. (Optional) Call ``make install`` to install the client to the ``/usr/local/bin`` directory.
|
4. (Optional) Call ``make install`` to install the client to the ``/usr/local/bin`` directory.
|
||||||
|
|
||||||
@@ -43,7 +44,7 @@ The tested and preferred way to develop in this environment is through the use
|
|||||||
of HomeBrew_. The ownCloud team has its own repository containing non-standard
|
of HomeBrew_. The ownCloud team has its own repository containing non-standard
|
||||||
recipes.
|
recipes.
|
||||||
|
|
||||||
To set up your build enviroment for development using HomeBrew_:
|
To set up your build environment for development using HomeBrew_:
|
||||||
|
|
||||||
1. Add the ownCloud repository using the following command::
|
1. Add the ownCloud repository using the following command::
|
||||||
|
|
||||||
@@ -60,7 +61,7 @@ To set up your build enviroment for development using HomeBrew_:
|
|||||||
Where ``x.z`` is the current version of Qt 5 that brew has installed
|
Where ``x.z`` is the current version of Qt 5 that brew has installed
|
||||||
on your machine.
|
on your machine.
|
||||||
|
|
||||||
5. For compilation of the client, follow the `generic build instructions`_.
|
5. For compilation of the client, follow the :ref:`generic-build-instructions`.
|
||||||
|
|
||||||
6. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
6. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
||||||
<install_dir>``. If you have a developer signing certificate, you can specify
|
<install_dir>``. If you have a developer signing certificate, you can specify
|
||||||
@@ -118,14 +119,14 @@ follow `Windows Installer Build (Cross-Compile)`_ instead.
|
|||||||
cmake -G "MinGW Makefiles" ../client
|
cmake -G "MinGW Makefiles" ../client
|
||||||
mingw32-make
|
mingw32-make
|
||||||
|
|
||||||
.. note:: You can try using ninja to build parallelly using
|
.. note:: You can try using ninja to build in parallel using
|
||||||
``cmake -G Ninja ../client`` and ``ninja`` instead.
|
``cmake -G Ninja ../client`` and ``ninja`` instead.
|
||||||
.. note:: Refer to the `generic build instructions`_ section for additional options.
|
.. note:: Refer to the :ref:`generic-build-instructions` section for additional options.
|
||||||
|
|
||||||
The owncloud binary will appear in the ``bin`` directory.
|
The ownCloud binary will appear in the ``bin`` directory.
|
||||||
|
|
||||||
Windows Installer Build (Cross-Compile)
|
Windows Installer Build (Cross-Compile)
|
||||||
-----------------------
|
---------------------------------------
|
||||||
|
|
||||||
Due to the large number of dependencies, building the client installer for Windows
|
Due to the large number of dependencies, building the client installer for Windows
|
||||||
is **currently only officially supported on openSUSE**, by using the MinGW cross compiler.
|
is **currently only officially supported on openSUSE**, by using the MinGW cross compiler.
|
||||||
@@ -134,58 +135,38 @@ have it installed already.
|
|||||||
|
|
||||||
To cross-compile:
|
To cross-compile:
|
||||||
|
|
||||||
1. Add the following repositories using YaST or ``zypper ar`` (adjust when using another openSUSE version)::
|
1. Add the following repository using YaST or ``zypper ar`` (adjust when using another openSUSE version)::
|
||||||
|
|
||||||
zypper ar http://download.opensuse.org/repositories/windows:/mingw/openSUSE_13.2/windows:mingw.repo
|
zypper ar https://build.opensuse.org/project/show/isv:ownCloud:toolchains:mingw:win32:stable
|
||||||
zypper ar http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.2/windows:mingw:win32.repo
|
|
||||||
|
|
||||||
2. Install the cross-compiler packages and the cross-compiled dependencies::
|
2. Install the cross-compiler packages and the cross-compiled dependencies::
|
||||||
|
|
||||||
zypper install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
zypper install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
||||||
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
||||||
mingw32-headers mingw32-runtime site-config \
|
mingw32-headers mingw32-runtime site-config mingw32-libwebp \
|
||||||
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5* \
|
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5*
|
||||||
mingw32-cross-nsis
|
|
||||||
|
|
||||||
3. For the installer, install the NSIS installer package::
|
3. For the installer, install the NSIS installer package::
|
||||||
|
|
||||||
zypper install mingw32-cross-nsis
|
zypper install mingw32-cross-nsis mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
|
||||||
|
|
||||||
4. Install the following plugin::
|
4. Follow the :ref:`generic-build-instructions`
|
||||||
|
|
||||||
mingw32-cross-nsis-plugin-processes mingw32-cross-nsis-plugin-uac
|
|
||||||
|
|
||||||
.. note:: This plugin is typically required. However, due to a current bug
|
|
||||||
in ``mingw``, the plugins do not currently build properly from source.
|
|
||||||
|
|
||||||
5. Manually download and install the following files using ``rpm -ivh <package>``:
|
|
||||||
|
|
||||||
.. note:: These files also work for more recent openSUSE versions!
|
|
||||||
|
|
||||||
::
|
|
||||||
# RPM depends on curl for installs from HTTP
|
|
||||||
zypper install curl
|
|
||||||
|
|
||||||
rpm -ivh http://download.tomahawk-player.org/packman/mingw:32/openSUSE_12.1/x86_64/mingw32-cross-nsis-plugin-processes-0-1.1.x86_64.rpm
|
|
||||||
rpm -ivh http://download.tomahawk-player.org/packman/mingw:32/openSUSE_12.1/x86_64/mingw32-cross-nsis-plugin-uac-0-3.1.x86_64.rpm
|
|
||||||
|
|
||||||
6. Follow the `generic build instructions`_
|
|
||||||
|
|
||||||
.. note:: When building for Windows platforms, you must specify a special
|
.. note:: When building for Windows platforms, you must specify a special
|
||||||
toolchain file that enables cmake to locate the platform-specific tools. To add
|
toolchain file that enables cmake to locate the platform-specific tools. To add
|
||||||
this parameter to the call to cmake, enter
|
this parameter to the call to cmake, enter
|
||||||
``-DCMAKE_TOOLCHAIN_FILE=../client/admin/win/Toolchain-mingw32-openSUSE.cmake``.
|
``-DCMAKE_TOOLCHAIN_FILE=../client/admin/win/Toolchain-mingw32-openSUSE.cmake``.
|
||||||
|
|
||||||
7. Build by running ``make``.
|
5. Build by running ``make``.
|
||||||
|
|
||||||
.. note:: Using ``make package`` produces an NSIS-based installer, provided
|
.. note:: Using ``make package`` produces an NSIS-based installer, provided
|
||||||
the NSIS mingw32 packages are installed.
|
the NSIS mingw32 packages are installed.
|
||||||
|
|
||||||
8. If you want to sign the installer, acquire a `Microsoft Authenticode`_ Certificate and install ``osslsigncode`` to sign the installer::
|
6. If you want to sign the installer, acquire a `Microsoft Authenticode`_ Certificate and install ``osslsigncode`` to sign the installer::
|
||||||
|
|
||||||
zypper install osslsigncode
|
zypper install osslsigncode
|
||||||
|
|
||||||
9. Sign the package::
|
7. Sign the package::
|
||||||
|
|
||||||
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha1 \
|
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha1 \
|
||||||
-pass yourpass \
|
-pass yourpass \
|
||||||
@@ -195,11 +176,12 @@ To cross-compile:
|
|||||||
-in ${unsigned_file} \
|
-in ${unsigned_file} \
|
||||||
-out ${installer_file}
|
-out ${installer_file}
|
||||||
|
|
||||||
for ``-in``, use URL to the time stamping server provided by your CA along with the Authenticode certificate. Alternatively,
|
for ``-in``, use the URL to the time stamping server provided by your CA along with the Authenticode certificate. Alternatively,
|
||||||
you may use the official Microsoft ``signtool`` utility on Microsoft Windows.
|
you may use the official Microsoft ``signtool`` utility on Microsoft Windows.
|
||||||
|
|
||||||
|
|
||||||
.. _`generic build instructions`:
|
.. _generic-build-instructions:
|
||||||
|
|
||||||
Generic Build Instructions
|
Generic Build Instructions
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
The ownCloud Client reads a configuration file. You can locate this configuration files as follows:
|
The ownCloud Client reads a configuration file. You can locate this configuration file as follows:
|
||||||
|
|
||||||
On Linux distributions:
|
On Linux distributions:
|
||||||
``$HOME/.local/share/data/ownCloud/owncloud.cfg``
|
``$HOME/.local/share/data/ownCloud/owncloud.cfg``
|
||||||
@@ -16,7 +16,7 @@ format. You can overwrite changes using the ownCloud configuration dialog.
|
|||||||
.. note:: Use caution when making changes to the ownCloud Client configuration
|
.. note:: Use caution when making changes to the ownCloud Client configuration
|
||||||
file. Incorrect settings can produce unintended results.
|
file. Incorrect settings can produce unintended results.
|
||||||
|
|
||||||
You can change the following configuration settings:
|
You can change the following configuration settings (must be under the ``[ownCloud]`` section)
|
||||||
|
|
||||||
- ``remotePollInterval`` (default: ``30000``) -- Specifies the poll time for the remote repository in milliseconds.
|
- ``remotePollInterval`` (default: ``30000``) -- Specifies the poll time for the remote repository in milliseconds.
|
||||||
|
|
||||||
|
|||||||
11
doc/dev/CMakeLists.txt
Normal file
11
doc/dev/CMakeLists.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# add a target to generate API documentation with Doxygen
|
||||||
|
find_package(Doxygen)
|
||||||
|
if(DOXYGEN_FOUND)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
||||||
|
add_custom_target(doc-dev
|
||||||
|
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
COMMENT "Generating API documentation with Doxygen" VERBATIM
|
||||||
|
)
|
||||||
|
endif(DOXYGEN_FOUND)
|
||||||
|
|
||||||
2307
doc/dev/Doxyfile.in
Normal file
2307
doc/dev/Doxyfile.in
Normal file
File diff suppressed because it is too large
Load Diff
5
doc/dev/main-page.md
Normal file
5
doc/dev/main-page.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Overview {#mainpage}
|
||||||
|
========
|
||||||
|
|
||||||
|
Documentation that will appear on the main page
|
||||||
|
|
||||||
@@ -9,9 +9,9 @@ Some files are continuously uploaded to the server, even when they are not modif
|
|||||||
|
|
||||||
It is possible that another program is changing the modification date of the file.
|
It is possible that another program is changing the modification date of the file.
|
||||||
|
|
||||||
If the file is uses the ``.eml`` extention, Windows automatically and
|
If the file is uses the ``.eml`` extension, Windows automatically and
|
||||||
continually changes all files, unless you remove
|
continually changes all files, unless you remove
|
||||||
``\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers`
|
``\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers``
|
||||||
from the windows registry.
|
from the windows registry.
|
||||||
|
|
||||||
See http://petersteier.wordpress.com/2011/10/22/windows-indexer-changes-modification-dates-of-eml-files/ for more information.
|
See http://petersteier.wordpress.com/2011/10/22/windows-indexer-changes-modification-dates-of-eml-files/ for more information.
|
||||||
|
|||||||
BIN
doc/images/client-1.png
Normal file
BIN
doc/images/client-1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
doc/images/client-2.png
Normal file
BIN
doc/images/client-2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
BIN
doc/images/client-3.png
Normal file
BIN
doc/images/client-3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user