Comparar commits
614 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 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 | |||
| 236951d9b3 | |||
| e7d7646151 | |||
| 7757886ebc | |||
| 61a1a0bb2d | |||
| 77941b5ba7 | |||
| 10aaf18129 | |||
| f4c816f378 | |||
| 7332afa171 | |||
| db87d2a18e | |||
| d7555cc14e | |||
| 29fecb029e | |||
| 494f08de8c | |||
| 4d21800a05 | |||
| e3278c8312 | |||
| 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 |
@@ -3,7 +3,7 @@
|
||||
url = https://github.com/owncloud/documentation
|
||||
[submodule "src/3rdparty/qtmacgoodies"]
|
||||
path = src/3rdparty/qtmacgoodies
|
||||
url = git://github.com/shadone/qtmacgoodies.git
|
||||
url = git://github.com/guruz/qtmacgoodies.git
|
||||
[submodule "binary"]
|
||||
path = binary
|
||||
url = git://github.com/owncloud/owncloud-client-binary.git
|
||||
|
||||
@@ -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
|
||||
@@ -74,6 +74,10 @@ message(STATUS "GIT_SHA1 ${GIT_SHA1}")
|
||||
|
||||
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
|
||||
set(DATADIR ${DATA_INSTALL_DIR})
|
||||
if(WIN32)
|
||||
set(DATADIR "share")
|
||||
endif(WIN32)
|
||||
set(SHAREDIR ${DATADIR})
|
||||
|
||||
#####
|
||||
## handle BUILD_OWNCLOUD_OSX_BUNDLE
|
||||
@@ -118,6 +122,10 @@ if(OWNCLOUD_5XX_NO_BLACKLIST)
|
||||
add_definitions(-DOWNCLOUD_5XX_NO_BLACKLIST=1)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesigh key's TeamIdentifier/Organizational Unit" )
|
||||
endif()
|
||||
|
||||
#### find libs
|
||||
#find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtXml QtNetwork QtTest QtWebkit REQUIRED )
|
||||
#if( UNIX AND NOT APPLE ) # Fdo notifications
|
||||
@@ -133,11 +141,11 @@ if(HAVE_QT5)
|
||||
message(STATUS "We would not require Neon in this setup, compile without!")
|
||||
set(USE_NEON FALSE)
|
||||
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()
|
||||
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()
|
||||
|
||||
if (USE_NEON)
|
||||
@@ -194,6 +202,7 @@ add_subdirectory(src)
|
||||
if(NOT BUILD_LIBRARIES_ONLY)
|
||||
add_subdirectory(shell_integration)
|
||||
add_subdirectory(doc)
|
||||
add_subdirectory(doc/dev)
|
||||
add_subdirectory(admin)
|
||||
endif(NOT BUILD_LIBRARIES_ONLY)
|
||||
|
||||
@@ -205,6 +214,7 @@ endif(UNIT_TESTING)
|
||||
|
||||
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||
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()
|
||||
install( FILES sync-exclude.lst DESTINATION ${SYSCONFDIR}/${APPLICATION_SHORTNAME} )
|
||||
configure_file(sync-exclude.lst bin/sync-exclude.lst COPYONLY)
|
||||
|
||||
@@ -7,6 +7,7 @@ We are also available on [IRC][irc].
|
||||
### Bug Reporting Guidelines
|
||||
* __Important__: Report the issue using our [template][template], it includes all the
|
||||
informations 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.
|
||||
Issues in other compontents should be reported in their own repositores:
|
||||
- [ownCloud server](https://github.com/owncloud/core/issues)
|
||||
|
||||
@@ -1,5 +1,35 @@
|
||||
ChangeLog
|
||||
=========
|
||||
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)
|
||||
* Fix a bug in the Windows Installer that could crash explorer (#3320)
|
||||
* Reduce 'Connection closed' errors (#3318, #3313, #3298)
|
||||
@@ -8,8 +38,6 @@ version 1.8.3 (release 2015-06-23)
|
||||
* 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)
|
||||
* Improve reporting of server error messages (#3220)
|
||||
* Discovery: Ignore folders with any 503 (#3113)
|
||||
|
||||
@@ -18,14 +18,14 @@ set( CPACK_PACKAGE_VERSION ${MIRALL_VERSION_FULL}${MIRALL_VERSION_SUFFIX} )
|
||||
if(APPLE)
|
||||
set( CPACK_GENERATOR "DragNDrop" )
|
||||
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_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_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
|
||||
#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_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
|
||||
set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_NAME} ) # 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_DIRECTORY ${APPLICATION_SHORTNAME} ) # Installation directory on the target system -> C:\Program Files\fellody
|
||||
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_VENDOR "http://${APPLICATION_DOMAIN}" ) # Package vendor name
|
||||
endif()
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# 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
|
||||
|
||||
The ownCloud Desktop Client is a tool to synchronize files from ownCloud Server
|
||||
@@ -13,7 +19,7 @@ with your computer.
|
||||
|
||||
### 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
|
||||
can be found on the Internet, in particular on GitHub. However, the
|
||||
authoritative repository maintained by the developers is located at
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
set( MIRALL_VERSION_MAJOR 1 )
|
||||
set( MIRALL_VERSION_MINOR 8 )
|
||||
set( MIRALL_VERSION_PATCH 4 )
|
||||
set( MIRALL_VERSION_MAJOR 2 )
|
||||
set( MIRALL_VERSION_MINOR 0 )
|
||||
set( MIRALL_VERSION_PATCH 0 )
|
||||
set( MIRALL_SOVERSION 0 )
|
||||
|
||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||
|
||||
@@ -14,3 +14,4 @@ endif()
|
||||
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(pre_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh)
|
||||
configure_file(post_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/post_install.sh)
|
||||
|
||||
@@ -472,7 +472,12 @@
|
||||
<key>PACKAGE_SCRIPTS</key>
|
||||
<dict>
|
||||
<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>
|
||||
<dict>
|
||||
<key>PATH</key>
|
||||
@@ -1016,11 +1021,11 @@
|
||||
<key>CONCLUSION_ACTION</key>
|
||||
<integer>0</integer>
|
||||
<key>IDENTIFIER</key>
|
||||
<string>com.owncCloud.finderPlugin</string>
|
||||
<string>com.ownCloud.finderPlugin</string>
|
||||
<key>LOCATION</key>
|
||||
<integer>0</integer>
|
||||
<key>NAME</key>
|
||||
<string>Finder Plugin</string>
|
||||
<string>Legacy Finder Plugin (OS X 10.9 or older)</string>
|
||||
<key>OVERWRITE_PERMISSIONS</key>
|
||||
<false/>
|
||||
<key>VERSION</key>
|
||||
|
||||
@@ -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
|
||||
|
||||
[ "$#" -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"
|
||||
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
|
||||
spctl -a -t exec -vv $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 $?
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} ezinbestekoak."
|
||||
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_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_REGISTRY_Detail "Instalatzaileko Erregistroko Giltzak idazten"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Bukatuta"
|
||||
@@ -44,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Desinstalatzaile honek administratzaile b
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Desinstalatzailea dagoeneko martxan da."
|
||||
StrCpy $SectionGroup_Shortcuts "Lasterbideak"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} essencial."
|
||||
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_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_REGISTRY_Detail "Escrivint les claus del registre de l'instal·lador"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Acabat"
|
||||
@@ -44,3 +40,4 @@ 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 $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
|
||||
StrCpy $SectionGroup_Shortcuts "Dreceres"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -1,46 +1,43 @@
|
||||
# Auto-generated - do not modify
|
||||
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_KILLING_PROCESSES_TEXT "Ukončuji procesy ${APPLICATION_EXECUTABLE}."
|
||||
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_2 "Odinstalovat před instalací"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Neodinstalovávat"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Již nainstalováno"
|
||||
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_KILLING_PROCESSES_TEXT "UkonŸuji procesy ${APPLICATION_EXECUTABLE}."
|
||||
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_2 "Odinstalovat pýed instalac¡"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Neodinstalov vat"
|
||||
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_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_2 "Přidat či znovu instalovat komponenty"
|
||||
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_2 "Pýidat Ÿi znovu instalovat komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "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 $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_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_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_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_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_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_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_APPDATA_LABEL_1 "Chcete smazat složku s daty ${APPLICATION_NAME}?"
|
||||
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_APPDATA_CHECKBOX "Ano, smazat tuto složku s daty."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstalátor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instalátor do registrů"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokončeno"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezdá se, že ${APPLICATION_NAME} je nainstalována ve složce '$INSTDIR'.\nChcete pokračovat (nedoporučuje se)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinstalace zrušena uživatelem"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Zástupce rychlého spuštění (není k dispozici)"
|
||||
StrCpy $INIT_NO_DESKTOP "Zástupce na ploše (přepíše existující)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Nelze zvýšit, chyba:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Tento instalátor vyžaduje správcovská oprávnění, opakujte znovu"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Instalátor je již spuštěn."
|
||||
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"
|
||||
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 $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_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_DESKTOP_SECTION "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_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_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_QUICK_LAUNCH_Desc "Z stupce rychl‚ho spuçtØn¡ pro ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "DokonŸeno"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na ve slo§ce '$INSTDIR'.\nChcete pokraŸovat (nedoporuŸuje se)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinstalace zruçena u§ivatelem"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Z stupce rychl‚ho spuçtØn¡ (nen¡ k dispozici)"
|
||||
StrCpy $INIT_NO_DESKTOP "Z stupce na ploçe (pýep¡çe existuj¡c¡)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Nelze zvìçit, chyba:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Tento instal tor vy§aduje spr vcovsk opr vnØn¡, opakujte znovu"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Instal tor je ji§ spuçtØn."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinstal tor vy§aduje spr vcovsk opr vnØn¡, opakujte znovu"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Slu§ba pýihl çen¡ nebا¡, ukonŸuji!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinstal tor je ji§ spuçtØn."
|
||||
StrCpy $SectionGroup_Shortcuts "Z stupci"
|
||||
|
||||
@@ -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_DESKTOP_Desc "Werkblad 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_REGISTRY_Detail "Wegschrijven installer Registersleutels"
|
||||
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 $INIT_INSTALLER_RUNNING "De Installer is al gestart."
|
||||
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 $SectionGroup_Shortcuts "Snelkoppelingen"
|
||||
|
||||
@@ -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_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_APPDATA_CHECKBOX "Yes, delete this data folder."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Writing Uninstaller"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Writing Installer Registry Keys"
|
||||
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 $INIT_INSTALLER_RUNNING "The installer is already running."
|
||||
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 $SectionGroup_Shortcuts "Shortcuts"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} p
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "${APPLICATION_NAME} otsetee."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Töölaua otsetee 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_REGISTRY_Detail "Kirjutan paigaldaja registri võtmeid"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Lõpetatud"
|
||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Ei suuda
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "See paigaldaja vajab admini ligipääsu, proovi uuesti"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Paigaldaja on juba käimas."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "See desinstallija vajab admini ligipääsu, proovi uuesti"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Sisselogimisteenus ei tööta, katkestamine!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
||||
StrCpy $SectionGroup_Shortcuts "Otseteed"
|
||||
|
||||
@@ -15,9 +15,6 @@ 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_APPDATA_SUBTITLE "حذف پوشه ی data نرم افزار ${APPLICATION_NAME} از روی سیستم شما ."
|
||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "آیا می خواهید پوشه ی data نرم افزار ${APPLICATION_NAME} را حذف نمایید ؟"
|
||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "بله، این پوشه داده را حذف کن."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "نوشتن حذف کننده"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "در حال نوشتن کلید های رجیستری نصاب"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "اتمام"
|
||||
@@ -42,5 +39,5 @@ StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Choose the maintenance opti
|
||||
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 $UNINSTALLER_APPDATA_LABEL_2 "Leave unchecked to keep the data folder for later use or check to delete the data folder."
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "This installer requires admin access, try again"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -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_DESKTOP_Desc "Sovelluksen ${APPLICATION_NAME} työpyötäpikakuvake."
|
||||
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_REGISTRY_Detail "Kirjoitetaan asennusohjelman rekisteriavaimia"
|
||||
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 $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_ERROR_LOGON_SERVICE "Kirjautumispalvelu ei ole käynnissä, perutaan!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Poisto-ohjelma on jo käynnissä."
|
||||
StrCpy $SectionGroup_Shortcuts "Pikakuvakkeet"
|
||||
|
||||
@@ -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_DESKTOP_Desc "Raccourci Bureau 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_REGISTRY_Detail "Écriture des clefs de registre du désinstallateur"
|
||||
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 $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_ERROR_LOGON_SERVICE "Service de logon non lancé ! Abandon."
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Une désinstallation est déjà en cours."
|
||||
StrCpy $SectionGroup_Shortcuts "Raccourcis"
|
||||
|
||||
@@ -27,10 +27,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_DESKTOP_Desc "Acceso directo no escritorio para "
|
||||
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_REGISTRY_Detail "Escribindo o instalador nas chaves do rexistro"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Rematado"
|
||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Non foi pos
|
||||
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 $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 $SectionGroup_Shortcuts "Atallos"
|
||||
|
||||
@@ -27,10 +27,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_DESKTOP_Desc "Desktop-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_REGISTRY_Detail "Schreibe Registrierungseinträge"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Abgeschlossen"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "Das Installationsprogramm wird bereits ausgef
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Das Deinstallationsprogramm erfordert Administrator-Rechte. Bitte erneut versuchen."
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
||||
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "
|
||||
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_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_REGISTRY_Detail "Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ολοκληρώθηκε"
|
||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή εγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Η εφαρμογή εγκατάστασης λειτουργεί ήδη."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Αυτή η εφαρμογή απεγκατάστασης απαιτεί πρόσβαση διαχειριστή, δοκιμάστε ξανά"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Η υπηρεσία σύνδεσης δεν εκτελείται, ακύρωση!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Η εφαρμογή απεγκατάστασης λειτουργεί ήδη."
|
||||
StrCpy $SectionGroup_Shortcuts "Συντομεύσεις"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} lényeges kompon
|
||||
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_APPDATA_SUBTITLE "Az ${APPLICATION_NAME} alkalmazás adatkönyvtárának eltávolítása a számítógépről."
|
||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "El szeretné távolítani az ${APPLICATION_NAME} alkalmazás adatkönyvtárát?"
|
||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Hagyja bejelelöletlenül, hogy megtartsa az adatkönyvtárat későbbi használatra, vagy jelölje be az adatkönyvtár törléséhez."
|
||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Igen, törölje ezt az adatkönyvtárat."
|
||||
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"
|
||||
@@ -42,5 +38,6 @@ 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 $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_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 $SectionGroup_Shortcuts "Parancsikonok"
|
||||
|
||||
@@ -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_DESKTOP_Desc "Scorciatoia del desktop per ${APPLICATION_NAME}."
|
||||
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_REGISTRY_Detail "Scrittura delle chiavi di registro del programma di installazione"
|
||||
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 $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_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 $SectionGroup_Shortcuts "Scorciatoie"
|
||||
|
||||
@@ -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_DESKTOP_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_REGISTRY_Detail "インストーラーのレジストリキーの書き込み"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "終了"
|
||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "このインストーラーは、管理者権限が必要です。インストールを再試行してください。"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "インストーラーは、すでに起動しています。"
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "このアンインストーラーは、管理者権限が必要です。アンインストールを再試行してください。"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "ログオンサービスが動いていません。中止します。"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "アンインストーラーは、すでに起動しています。"
|
||||
StrCpy $SectionGroup_Shortcuts "ショートカット"
|
||||
|
||||
@@ -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_DESKTOP_Desc "Skrivebordssnarvei 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_REGISTRY_Detail "Skriver registernøkler for installasjonsprogrammet"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Ferdig"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kj
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
||||
StrCpy $SectionGroup_Shortcuts "Snarveier"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -1,46 +1,43 @@
|
||||
# Auto-generated - do not modify
|
||||
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 $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_KILLING_PROCESSES_TEXT "Zamykam proces ${APPLICATION_EXECUTABLE}."
|
||||
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_3 "Nie usuwaj "
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Już zainstalowane"
|
||||
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_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} jest już zainstalowany.\nWybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ju¿ zainstalowane"
|
||||
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_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_3 "Odinstaluj ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstaluj ${APPLICATION_NAME}"
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wybierz sposób utrzymywania."
|
||||
StrCpy $SEC_APPLICATION_DETAILS "Instaluje niezbędne pliki ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Wybierz sposób utrzymywania."
|
||||
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_DetailPrint "Instalowanie Integracji z Eksploratorem Windows"
|
||||
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_DESKTOP_SECTION "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_DetailPrint "Tworzę skrót na Pasku Zadań"
|
||||
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_DESKTOP_Desc "Skrót ${APPLICATION_NAME} na pulpicie."
|
||||
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_APPDATA_LABEL_1 "Czy chcesz usunąć folder z danymi ${APPLICATION_NAME}?"
|
||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Zostaw niezaznaczone aby zachować folder z danymi lub zaznacz aby go usunąć."
|
||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Tak, usuń folder z danymi."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Tworzę dezinstalator"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Tworzę wpisy w rejestrze"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Zakończony"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nie wygląda na to że ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuować mimo tego (nie zalecane)?"
|
||||
StrCpy $UNINSTALL_ABORT "Dezinstalacja przerwana przez użytkownika"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Skrót na Pasku Zadań (NIE DOTYCZY)"
|
||||
StrCpy $INIT_NO_DESKTOP "Skróty na pulpicie (nadpisuje obecne)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Niemożność podniesienia, błąd:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Ten instalator potrzebuje uprawnień administratora, spróbuj ponownie"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Instalator już jest uruchomiony."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnień administratora, spróbuj ponownie"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator już jest uruchomiony."
|
||||
StrCpy $SectionGroup_Shortcuts "Skróty"
|
||||
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_DESKTOP_SECTION "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_DetailPrint "Tworzê skrót na Pasku Zadañ"
|
||||
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_DESKTOP_Desc "Skrót ${APPLICATION_NAME} na pulpicie."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Skrót ${APPLICATION_NAME} na Pasku Zadañ."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Tworzê dezinstalator"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Tworzê wpisy w rejestrze"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Zakoñczony"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nie wygl¹da na to ¿e ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuowaæ mimo tego (nie zalecane)?"
|
||||
StrCpy $UNINSTALL_ABORT "Dezinstalacja przerwana przez u¿ytkownika"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Skrót na Pasku Zadañ (NIE DOTYCZY)"
|
||||
StrCpy $INIT_NO_DESKTOP "Skróty na pulpicie (nadpisuje obecne)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Niemo¿noœæ podniesienia, b³¹d:"
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Ten instalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Instalator ju¿ jest uruchomiony."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator ju¿ jest uruchomiony."
|
||||
StrCpy $SectionGroup_Shortcuts "Skróty"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -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_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 $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_REGISTRY_Detail "A escrever chaves de registo do instalador"
|
||||
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 $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_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 $SectionGroup_Shortcuts "Atalhos"
|
||||
|
||||
@@ -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_DESKTOP_Desc "Atalho Desktop 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_REGISTRY_Detail "Gravando Chaves de Registro do Inslalador"
|
||||
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 $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_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 $SectionGroup_Shortcuts "Atalhos"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Базовые компоненты
|
||||
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_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_REGISTRY_Detail "Запись ключей реестра установщика"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Невозможно повысить привиле
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Этому установщику требуются права администратора, попробуйте ещё раз"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Установщик уже запущен."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Этому деинсталлятору требуются права администратора, попробуйте ещё раз"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Служба входа в систему не запущена, прерывание!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Программа удаления уже выполняется."
|
||||
StrCpy $SectionGroup_Shortcuts "Ярлыки"
|
||||
|
||||
@@ -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_DESKTOP_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_REGISTRY_Detail "正在写入注册表"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "完成"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "安装程序已经运行。"
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "卸载程序需要管理员权限,请重试"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "卸载程序已经运行。"
|
||||
StrCpy $SectionGroup_Shortcuts "快捷方式"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "N
|
||||
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_QUICK_LAUNCH_Desc "Zástupca na paneli úloh pre ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_APPDATA_SUBTITLE "Zmaza� dátový prieèinok ${APPLICATION_NAME}'s z vášho poèítaèa."
|
||||
StrCpy $UNINSTALLER_APPDATA_LABEL_1 "Naozaj chcete zmaza� prieèinok s dátami ${APPLICATION_NAME}'s ?"
|
||||
StrCpy $UNINSTALLER_APPDATA_LABEL_2 "Ponechajte nezaškrtnuté, ak chcete prieèinok s dátami ponecha� na neskoršie použitie, alebo zaškrtnite, ak chcete prieèinok zmaza�."
|
||||
StrCpy $UNINSTALLER_APPDATA_CHECKBOX "Áno, zmaza� tento prieèinok."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisujem odinštalátor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisujem inštalaèné k¾úèe do registra"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Dokonèené"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "In
|
||||
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 $SectionGroup_Shortcuts "Zástupcovia"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -27,10 +27,6 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Knji
|
||||
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_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_REGISTRY_Detail "Poteka zapisovanje namestilnika v register"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Končano"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "Namestilnik je
|
||||
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 $SectionGroup_Shortcuts "Bližnjice"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -27,10 +27,6 @@ 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_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 $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_REGISTRY_Detail "Escribiendo claves en el registro del instalador"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||
@@ -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 $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_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 $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_START_MENU_Desc "Acceso directo de ${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_REGISTRY_Detail "Escribiendo claves de Registro del Instalador"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||
@@ -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 $INIT_NO_QUICK_LAUNCH "Quick Launch Shortcut (N/A)"
|
||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -25,10 +25,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_DESKTOP_Desc "Skrivbordsgenvä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_REGISTRY_Detail "Skriver installationsprogrammets registernycklar"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Klar"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
||||
StrCpy $SectionGroup_Shortcuts "Genvägar"
|
||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "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!"
|
||||
|
||||
@@ -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_DESKTOP_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_REGISTRY_Detail "กำลังติดตั้งรหัสรีจิสทรี"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "เสร็จสิ้น"
|
||||
@@ -42,5 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "ไม่สามารถที่จะยกร
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "การติดตั้งนี้จะต้องมีการเข้าถึงผู้ดูแลระบบ กรุณาลองอีกครั้ง"
|
||||
StrCpy $INIT_INSTALLER_RUNNING "กำลังทำการติดตั้ง"
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "การถอนการติดตั้งนี้จะต้องมีการเข้าถึงส่วนผู้ดูแลระบบ กรุณาลองอีกครั้ง"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "บริการเข้าสู่ระบบไม่ทำงาน กำลังยกเลิก!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "กำลังทำการถอนการติดตั้ง"
|
||||
StrCpy $SectionGroup_Shortcuts "ทางลัด"
|
||||
|
||||
@@ -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_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 $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_REGISTRY_Detail "Yükleyici Kayýt Anahtarlarý Yazýlýyor"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Tamamlandý"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "Y
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldýrýcý yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldýrýcý zaten çalýþýyor."
|
||||
StrCpy $SectionGroup_Shortcuts "Kýsayollar"
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||
|
||||
@@ -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_DESKTOP_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_REGISTRY_Detail "Запис ключів реєстру"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
||||
@@ -44,3 +40,4 @@ StrCpy $INIT_INSTALLER_RUNNING "Установка вже запущена."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Для видалення потрібні права адміністратора, спробуйте ще раз"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Програма видалення вже запущено."
|
||||
StrCpy $SectionGroup_Shortcuts "Ярлики"
|
||||
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 )"
|
||||
SCRIPTDIR="$L10NDIR/bin"
|
||||
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 CP1254 -o Turkish.nsh Turkish.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_DESKTOP_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_REGISTRY_Detail
|
||||
Var UNINSTALLER_FINISHED_Detail
|
||||
@@ -42,5 +38,6 @@ Var UAC_ERROR_ELEVATE
|
||||
Var UAC_INSTALLER_REQUIRE_ADMIN
|
||||
Var INIT_INSTALLER_RUNNING
|
||||
Var UAC_UNINSTALLER_REQUIRE_ADMIN
|
||||
Var UAC_ERROR_LOGON_SERVICE
|
||||
Var INIT_UNINSTALLER_RUNNING
|
||||
Var SectionGroup_Shortcuts
|
||||
|
||||
@@ -133,24 +133,6 @@ msgstr "Desktop shortcut for ${APPLICATION_NAME}."
|
||||
msgid "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
|
||||
msgid "Writing Uninstaller"
|
||||
msgstr "Writing Uninstaller"
|
||||
@@ -198,6 +180,10 @@ msgstr "The installer is already running."
|
||||
msgid "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
|
||||
msgid "The uninstaller is already running."
|
||||
msgstr "The uninstaller is already running."
|
||||
|
||||
@@ -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@2x.png</file>
|
||||
<file>resources/settings.png</file>
|
||||
<file>resources/settings@2x.png</file>
|
||||
<file>resources/activity.png</file>
|
||||
<file>resources/activity@2x.png</file>
|
||||
<file>resources/network.png</file>
|
||||
<file>resources/network@2x.png</file>
|
||||
<file>resources/lock-http.png</file>
|
||||
<file>resources/lock-http@2x.png</file>
|
||||
<file>resources/lock-https.png</file>
|
||||
|
||||
@@ -20,4 +20,15 @@ function (ADD_CMOCKA_TEST _testName _testSource)
|
||||
add_executable(${_testName} ${_testSource})
|
||||
target_link_libraries(${_testName} ${ARGN})
|
||||
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)
|
||||
|
||||
@@ -4,20 +4,27 @@
|
||||
|
||||
# This module defines
|
||||
# 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.
|
||||
# also defined, but not for general use are
|
||||
# INOTIFY_LIBRARY, where to find the inotify library.
|
||||
|
||||
find_path(INOTIFY_INCLUDE_DIR sys/inotify.h
|
||||
HINTS /usr/include/${CMAKE_LIBRARY_ARCHITECTURE})
|
||||
PATH_SUFFIXES inotify)
|
||||
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
|
||||
# handle the QUIETLY and REQUIRED arguments and set INOTIFY_FOUND to TRUE if
|
||||
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)
|
||||
SET(INotify_INCLUDE_DIRS ${INOTIFY_INCLUDE_DIR})
|
||||
SET(INotify_LIBRARY_DIRS ${INOTIFY_LIBRARY_DIR})
|
||||
ENDIF(INOTIFY_FOUND)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@MIRALL_VERSION_STRING@</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>(C) 2014 @APPLICATION_VENDOR@</string>
|
||||
<string>(C) 2014-2015 @APPLICATION_VENDOR@</string>
|
||||
<key>SUShowReleaseNotes</key>
|
||||
<false/>
|
||||
<key>LSMinimumBundleVersion</key>
|
||||
|
||||
@@ -89,7 +89,6 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
||||
; Include some required header files.
|
||||
;-----------------------------------------------------------------------------
|
||||
!include LogicLib.nsh ;Used by APPDATA uninstaller.
|
||||
!include nsDialogs.nsh ;Used by APPDATA uninstaller.
|
||||
!include MUI2.nsh ;Used by APPDATA uninstaller.
|
||||
!include InstallOptions.nsh ;Required by MUI2 to support old MUI_INSTALLOPTIONS.
|
||||
!include Memento.nsh ;Remember user selections.
|
||||
@@ -97,6 +96,7 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
||||
!include WordFunc.nsh ;Used by VersionCompare macro function.
|
||||
!include FileFunc.nsh ;Used to read out parameters
|
||||
!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 x64.nsh ;Used to determine the right arch for the shell extensions
|
||||
|
||||
@@ -145,7 +145,6 @@ Page custom PageReinstall PageLeaveReinstall
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
!endif
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
UninstPage custom un.UnPageUserAppData un.UnPageUserAppDataLeave
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
@@ -177,7 +176,7 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"
|
||||
StrCmp $LANGUAGE ${LANG_GREEK} Greek 0
|
||||
StrCmp $LANGUAGE ${LANG_BASQUE} Basque 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_NORWEGIAN} Norwegian 0
|
||||
StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
|
||||
@@ -214,8 +213,8 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"
|
||||
Galician:
|
||||
!include "${source_path}/admin/win/nsi/l10n\Galician.nsh"
|
||||
Goto EndLanguageCmp
|
||||
Slovak:
|
||||
!include "${source_path}/admin/win/nsi/l10n\Slovak.nsh"
|
||||
Polish:
|
||||
!include "${source_path}/admin/win/nsi/l10n\Polish.nsh"
|
||||
Goto EndLanguageCmp
|
||||
Turkish:
|
||||
!include "${source_path}/admin/win/nsi/l10n\Turkish.nsh"
|
||||
@@ -247,11 +246,7 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}"
|
||||
##############################################################################
|
||||
|
||||
Function LaunchApplication
|
||||
${UAC.CallFunctionAsUser} LaunchApplicationAsUser
|
||||
FunctionEnd
|
||||
|
||||
Function LaunchApplicationAsUser
|
||||
Exec "$INSTDIR\${APPLICATION_EXECUTABLE}"
|
||||
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\${APPLICATION_EXECUTABLE}" "" "" ""
|
||||
FunctionEnd
|
||||
|
||||
##############################################################################
|
||||
@@ -261,8 +256,8 @@ FunctionEnd
|
||||
##############################################################################
|
||||
|
||||
!macro CheckForProcess processName gotoWhenFound gotoWhenNotFound
|
||||
Processes::FindProcess ${processName}
|
||||
StrCmp $R0 "0" ${gotoWhenNotFound} ${gotoWhenFound}
|
||||
${nsProcess::FindProcess} ${processName} $R0
|
||||
StrCmp $R0 0 ${gotoWhenFound} ${gotoWhenNotFound}
|
||||
!macroend
|
||||
|
||||
!macro ConfirmEndProcess processName
|
||||
@@ -271,7 +266,7 @@ FunctionEnd
|
||||
/SD IDYES IDYES process_${processName}_kill IDNO process_${processName}_ended
|
||||
process_${processName}_kill:
|
||||
DetailPrint $ConfirmEndProcess_KILLING_PROCESSES_TEXT
|
||||
Processes::KillProcess ${processName}
|
||||
${nsProcess::KillProcess} ${processName} $R0
|
||||
Sleep 1500
|
||||
StrCmp $R0 "1" process_${processName}_ended
|
||||
DetailPrint $ConfirmEndProcess_KILL_NOT_FOUND_TEXT
|
||||
@@ -366,7 +361,6 @@ Function PageLeaveReinstall
|
||||
RMDir $INSTDIR
|
||||
no_remove_uninstaller:
|
||||
StrCmp $R0 "2" 0 +3
|
||||
UAC::Unload
|
||||
Quit
|
||||
BringToFront
|
||||
reinst_done:
|
||||
@@ -449,7 +443,7 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
File "${MING_BIN}\libcrypto-10.dll"
|
||||
File "${MING_BIN}\libssl-10.dll"
|
||||
File "${MING_BIN}\libstdc++-6.dll"
|
||||
File "${MING_BIN}\libwebp-5.dll"
|
||||
File "${MING_BIN}\libwebp-4.dll"
|
||||
File "${MING_BIN}\libxslt-1.dll"
|
||||
File "${MING_BIN}\libxml2-2.dll"
|
||||
File "${MING_BIN}\zlib1.dll"
|
||||
@@ -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
|
||||
!insertmacro CheckAndConfirmEndProcess "${APPLICATION_EXECUTABLE}"
|
||||
FunctionEnd
|
||||
@@ -705,11 +665,6 @@ Section Uninstall
|
||||
;Remove all the Program Files.
|
||||
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}"
|
||||
|
||||
SetDetailsPrint textonly
|
||||
@@ -764,25 +719,27 @@ Function .onInit
|
||||
|
||||
${MementoSectionRestore}
|
||||
|
||||
UAC_Elevate:
|
||||
UAC::RunElevated
|
||||
StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
|
||||
StrCmp 0 $0 0 UAC_Err ; Error?
|
||||
StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
|
||||
Quit
|
||||
|
||||
UAC_Err:
|
||||
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
||||
Abort
|
||||
|
||||
UAC_ElevationAborted:
|
||||
Abort
|
||||
|
||||
UAC_Success:
|
||||
StrCmp 1 $3 +4 ;Admin?
|
||||
StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
|
||||
MessageBox MB_ICONSTOP $UAC_INSTALLER_REQUIRE_ADMIN
|
||||
goto UAC_Elevate
|
||||
UAC_TryAgain:
|
||||
!insertmacro UAC_RunElevated
|
||||
${Switch} $0
|
||||
${Case} 0
|
||||
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
|
||||
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
|
||||
${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
|
||||
MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
|
||||
${EndIf}
|
||||
;fall-through and die
|
||||
${Case} 1223
|
||||
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN
|
||||
Quit
|
||||
${Case} 1062
|
||||
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
|
||||
Quit
|
||||
${Default}
|
||||
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
||||
Abort
|
||||
Quit
|
||||
${EndSwitch}
|
||||
|
||||
;Prevent multiple instances.
|
||||
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Installer") i .r1 ?e'
|
||||
@@ -813,11 +770,9 @@ Function .onInstSuccess
|
||||
${AndIf} $InstallRunIfSilent == "yes"
|
||||
Call LaunchApplication
|
||||
${EndIf}
|
||||
UAC::Unload ;Must call unload!
|
||||
FunctionEnd
|
||||
|
||||
Function .onInstFailed
|
||||
UAC::Unload ;Must call unload!
|
||||
FunctionEnd
|
||||
|
||||
##############################################################################
|
||||
@@ -829,25 +784,27 @@ FunctionEnd
|
||||
Function un.onInit
|
||||
Call un.SetLang
|
||||
|
||||
UAC_Elevate:
|
||||
UAC::RunElevated
|
||||
StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
|
||||
StrCmp 0 $0 0 UAC_Err ; Error?
|
||||
StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
|
||||
Quit
|
||||
|
||||
UAC_Err:
|
||||
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
||||
Abort
|
||||
|
||||
UAC_ElevationAborted:
|
||||
Abort
|
||||
|
||||
UAC_Success:
|
||||
StrCmp 1 $3 +4 ;Admin?
|
||||
StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
|
||||
MessageBox MB_ICONSTOP $UAC_UNINSTALLER_REQUIRE_ADMIN
|
||||
goto UAC_Elevate
|
||||
UAC_TryAgain:
|
||||
!insertmacro UAC_RunElevated
|
||||
${Switch} $0
|
||||
${Case} 0
|
||||
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
|
||||
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
|
||||
${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
|
||||
MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
|
||||
${EndIf}
|
||||
;fall-through and die
|
||||
${Case} 1223
|
||||
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN
|
||||
Quit
|
||||
${Case} 1062
|
||||
MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
|
||||
Quit
|
||||
${Default}
|
||||
MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
|
||||
Abort
|
||||
Quit
|
||||
${EndSwitch}
|
||||
|
||||
;Prevent multiple instances.
|
||||
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Uninstaller") i .r1 ?e'
|
||||
@@ -861,9 +818,7 @@ Function un.onInit
|
||||
FunctionEnd
|
||||
|
||||
Function un.onUnInstSuccess
|
||||
UAC::Unload ;Must call unload!
|
||||
FunctionEnd
|
||||
|
||||
Function un.onUnInstFailed
|
||||
UAC::Unload ;Must call unload!
|
||||
FunctionEnd
|
||||
|
||||
@@ -5,9 +5,8 @@
|
||||
#cmakedefine WITH_QTKEYCHAIN 1
|
||||
#cmakedefine WITH_CRASHREPORTER
|
||||
#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 THEME_CLASS @THEME_CLASS@
|
||||
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
||||
@@ -22,7 +21,7 @@
|
||||
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
|
||||
|
||||
#cmakedefine SYSCONFDIR "@SYSCONFDIR@"
|
||||
#cmakedefine DATADIR "@DATADIR@"
|
||||
#cmakedefine SHAREDIR "@SHAREDIR@"
|
||||
|
||||
#ifndef NEON_WITH_LFS
|
||||
#cmakedefine NEON_WITH_LFS "@NEON_WITH_LFS@"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#cmakedefine PACKAGE "${APPLICATION_NAME}"
|
||||
#cmakedefine VERSION "${APPLICATION_VERSION}"
|
||||
#cmakedefine LOCALEDIR "${LOCALE_INSTALL_DIR}"
|
||||
#cmakedefine DATADIR "${DATADIR}"
|
||||
#cmakedefine LIBDIR "${LIBDIR}"
|
||||
#cmakedefine PLUGINDIR "${PLUGINDIR}"
|
||||
#cmakedefine SYSCONFDIR "${SYSCONFDIR}"
|
||||
|
||||
@@ -58,9 +58,19 @@ set(csync_SRCS
|
||||
|
||||
vio/csync_vio.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)
|
||||
list(APPEND csync_SRCS
|
||||
csync_owncloud.c
|
||||
|
||||
@@ -124,6 +124,8 @@ int csync_create(CSYNC **csync, const char *local, const char *remote) {
|
||||
|
||||
ctx->abort = false;
|
||||
|
||||
ctx->ignore_hidden_files = true;
|
||||
|
||||
*csync = ctx;
|
||||
return 0;
|
||||
}
|
||||
@@ -434,7 +436,8 @@ static int _csync_treewalk_visitor(void *obj, void *data) {
|
||||
trav.inode = cur->inode;
|
||||
|
||||
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 ) {
|
||||
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->read_remote_from_db = true;
|
||||
ctx->db_is_empty = false;
|
||||
ctx->ignore_hidden_files = true; // do NOT sync hidden files by default.
|
||||
|
||||
|
||||
/* Create new trees */
|
||||
|
||||
@@ -49,41 +49,37 @@ struct csync_client_certs_s {
|
||||
char *certificatePasswd;
|
||||
};
|
||||
|
||||
/**
|
||||
* Instruction enum. In the file traversal structure, it describes
|
||||
* the csync state of a file.
|
||||
*/
|
||||
enum csync_status_codes_e {
|
||||
CSYNC_STATUS_OK = 0,
|
||||
|
||||
CSYNC_STATUS_ERROR = 1024, /* don't use this code,
|
||||
*/
|
||||
CSYNC_STATUS_UNSUCCESSFUL,
|
||||
CSYNC_STATUS_NO_LOCK, /* OBSOLETE does not happen anymore */
|
||||
CSYNC_STATUS_STATEDB_LOAD_ERROR,
|
||||
CSYNC_STATUS_STATEDB_CORRUPTED,
|
||||
CSYNC_STATUS_NO_MODULE,
|
||||
CSYNC_STATUS_TIMESKEW, /* OBSOLETE */
|
||||
CSYNC_STATUS_UNSUCCESSFUL, /* Unspecific problem happend */
|
||||
CSYNC_STATUS_NO_LOCK, /* OBSOLETE does not happen anymore */
|
||||
CSYNC_STATUS_STATEDB_LOAD_ERROR, /* Statedb can not be loaded. */
|
||||
CSYNC_STATUS_STATEDB_CORRUPTED, /* Statedb is corrupted */
|
||||
CSYNC_STATUS_NO_MODULE, /* URL passed to csync does not start with owncloud:// or ownclouds:// */
|
||||
CSYNC_STATUS_TIMESKEW, /* OBSOLETE */
|
||||
CSYNC_STATUS_FILESYSTEM_UNKNOWN, /* UNUSED */
|
||||
CSYNC_STATUS_TREE_ERROR,
|
||||
CSYNC_STATUS_MEMORY_ERROR,
|
||||
CSYNC_STATUS_PARAM_ERROR,
|
||||
CSYNC_STATUS_UPDATE_ERROR,
|
||||
CSYNC_STATUS_RECONCILE_ERROR,
|
||||
CSYNC_STATUS_PROPAGATE_ERROR, /* OBSOLETE */
|
||||
CSYNC_STATUS_TREE_ERROR, /* csync trees could not be created */
|
||||
CSYNC_STATUS_MEMORY_ERROR, /* not enough memory problem */
|
||||
CSYNC_STATUS_PARAM_ERROR, /* parameter is zero where not expected */
|
||||
CSYNC_STATUS_UPDATE_ERROR, /* general update or discovery error */
|
||||
CSYNC_STATUS_RECONCILE_ERROR, /* general reconcile error */
|
||||
CSYNC_STATUS_PROPAGATE_ERROR, /* OBSOLETE */
|
||||
CSYNC_STATUS_REMOTE_ACCESS_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_STAT_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_PROXY_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_LOOKUP_ERROR,
|
||||
CSYNC_STATUS_SERVER_AUTH_ERROR,
|
||||
CSYNC_STATUS_PROXY_AUTH_ERROR,
|
||||
CSYNC_STATUS_CONNECT_ERROR,
|
||||
CSYNC_STATUS_TIMEOUT,
|
||||
CSYNC_STATUS_HTTP_ERROR,
|
||||
CSYNC_STATUS_PERMISSION_DENIED,
|
||||
CSYNC_STATUS_LOCAL_STAT_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_PROXY_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_LOOKUP_ERROR, /* Neon fails to find proxy. Almost OBSOLETE */
|
||||
CSYNC_STATUS_SERVER_AUTH_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_PROXY_AUTH_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_CONNECT_ERROR, /* neon driven connection failed */
|
||||
CSYNC_STATUS_TIMEOUT, /* UNUSED */
|
||||
CSYNC_STATUS_HTTP_ERROR, /* UNUSED */
|
||||
CSYNC_STATUS_PERMISSION_DENIED, /* */
|
||||
CSYNC_STATUS_NOT_FOUND,
|
||||
CSYNC_STATUS_FILE_EXISTS,
|
||||
CSYNC_STATUS_OUT_OF_SPACE,
|
||||
@@ -100,11 +96,12 @@ enum csync_status_codes_e {
|
||||
CSYNC_STATUS_ABORTED,
|
||||
/* Codes for file individual status: */
|
||||
CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK,
|
||||
CSYNC_STATUS_INDIVIDUAL_IS_HARDLINK,
|
||||
CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST,
|
||||
CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS,
|
||||
CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME,
|
||||
CYSNC_STATUS_FILE_LOCKED_OR_OPEN,
|
||||
CSYNC_STATUS_INDIVIDUAL_EXCLUDE_HIDDEN,
|
||||
CSYNC_STATUS_INVALID_CHARACTERS,
|
||||
CSYNC_STATUS_INDIVIDUAL_STAT_FAILED
|
||||
};
|
||||
|
||||
@@ -121,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_EQUAL(x, y) ((x) == (y))
|
||||
|
||||
|
||||
/**
|
||||
* Instruction enum. In the file traversal structure, it describes
|
||||
* the csync state of a file.
|
||||
*/
|
||||
enum csync_instructions_e {
|
||||
CSYNC_INSTRUCTION_NONE = 0x00000000, /* Nothing to do (UPDATE|RECONCILE) */
|
||||
CSYNC_INSTRUCTION_EVAL = 0x00000001, /* There was changed compared to the DB (UPDATE) */
|
||||
@@ -175,7 +175,7 @@ enum csync_vio_file_stat_fields_e {
|
||||
CSYNC_VIO_FILE_STAT_FIELDS_FLAGS = 1 << 2,
|
||||
CSYNC_VIO_FILE_STAT_FIELDS_DEVICE = 1 << 3,
|
||||
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_BLOCK_COUNT = 1 << 7, /* will be removed */
|
||||
// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_SIZE = 1 << 8, /* will be removed */
|
||||
@@ -214,12 +214,13 @@ struct csync_vio_file_stat_s {
|
||||
|
||||
dev_t device;
|
||||
uint64_t inode;
|
||||
nlink_t nlink;
|
||||
|
||||
int fields; // actually enum csync_vio_file_stat_fields_e fields;
|
||||
enum csync_vio_file_type_e type;
|
||||
|
||||
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);
|
||||
@@ -250,7 +251,10 @@ struct csync_tree_walk_file_s {
|
||||
enum csync_instructions_e instruction;
|
||||
|
||||
/* 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 *etag;
|
||||
|
||||
@@ -81,7 +81,7 @@ int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
||||
_fmode = _O_BINARY;
|
||||
#endif
|
||||
|
||||
w_fname = c_utf8_to_locale(fname);
|
||||
w_fname = c_utf8_path_to_locale(fname);
|
||||
if (w_fname == NULL) {
|
||||
return -1;
|
||||
}
|
||||
@@ -282,6 +282,8 @@ CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path
|
||||
if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) {
|
||||
rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME"));
|
||||
if (rc < 0) {
|
||||
SAFE_FREE(bname);
|
||||
SAFE_FREE(dname);
|
||||
goto out;
|
||||
}
|
||||
rc = csync_fnmatch(conflict, path, 0);
|
||||
|
||||
@@ -28,6 +28,7 @@ enum csync_exclude_type_e {
|
||||
CSYNC_FILE_EXCLUDE_LIST,
|
||||
CSYNC_FILE_EXCLUDE_INVALID_CHAR,
|
||||
CSYNC_FILE_EXCLUDE_LONG_FILENAME,
|
||||
CSYNC_FILE_EXCLUDE_HIDDEN,
|
||||
CSYNC_FILE_EXCLUDE_STAT_FAILED
|
||||
};
|
||||
typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
|
||||
|
||||
@@ -64,10 +64,10 @@ int csync_fnmatch(__const char *__pattern, __const char *__name, int __flags) {
|
||||
|
||||
(void) __flags;
|
||||
|
||||
name = c_utf8_to_locale(__name);
|
||||
pat = c_utf8_to_locale(__pattern);
|
||||
name = c_utf8_string_to_locale(__name);
|
||||
pat = c_utf8_string_to_locale(__pattern);
|
||||
|
||||
match = PathMatchSpec(name, pat);
|
||||
match = PathMatchSpecW(name, pat);
|
||||
|
||||
c_free_locale_string(pat);
|
||||
c_free_locale_string(name);
|
||||
|
||||
@@ -90,6 +90,11 @@ struct csync_s {
|
||||
csync_update_callback update_callback;
|
||||
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_readdir_hook remote_readdir_hook;
|
||||
csync_vio_closedir_hook remote_closedir_hook;
|
||||
@@ -163,11 +168,10 @@ struct csync_s {
|
||||
*/
|
||||
bool db_is_empty;
|
||||
|
||||
bool ignore_hidden_files;
|
||||
|
||||
struct csync_owncloud_ctx_s *owncloud_context;
|
||||
|
||||
/* hooks for checking the white list */
|
||||
void *checkSelectiveSyncBlackListData;
|
||||
int (*checkSelectiveSyncBlackListHook)(void*, const char*);
|
||||
};
|
||||
|
||||
|
||||
@@ -181,10 +185,10 @@ struct csync_file_stat_s {
|
||||
size_t pathlen; /* u64 */
|
||||
uint64_t inode; /* u64 */
|
||||
mode_t mode; /* u32 */
|
||||
int nlink; /* u32 */
|
||||
int type; /* u32 */
|
||||
int child_modified;/*bool*/
|
||||
int should_update_etag; /*bool */
|
||||
int should_update_metadata; /*bool: specify that the etag, or the remote perm or fileid has
|
||||
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 */
|
||||
|
||||
char *destpath; /* for renames */
|
||||
|
||||
@@ -181,6 +181,12 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
||||
|
||||
if(!other) {
|
||||
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
|
||||
|| cur->type == CSYNC_FTW_TYPE_DIR) {
|
||||
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 );
|
||||
}
|
||||
other->inode = cur->inode;
|
||||
other->should_update_etag = true;
|
||||
other->should_update_metadata = true;
|
||||
cur->instruction = CSYNC_INSTRUCTION_NONE;
|
||||
} else if (other->instruction == CSYNC_INSTRUCTION_REMOVE) {
|
||||
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 );
|
||||
}
|
||||
other->inode = cur->inode;
|
||||
other->should_update_etag = true;
|
||||
other->should_update_metadata = true;
|
||||
cur->instruction = CSYNC_INSTRUCTION_NONE;
|
||||
} else if (other->instruction == CSYNC_INSTRUCTION_NEW) {
|
||||
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 */
|
||||
if (ctx->current == LOCAL_REPLICA) {
|
||||
other->should_update_etag = true;
|
||||
other->should_update_metadata = true;
|
||||
} else {
|
||||
cur->should_update_etag = true;
|
||||
cur->should_update_metadata = true;
|
||||
}
|
||||
} else if(ctx->current == REMOTE_REPLICA) {
|
||||
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,
|
||||
//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->type == CSYNC_FTW_TYPE_DIR)
|
||||
{
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
|
||||
"%-20s dir: %s",
|
||||
"%-20s %s dir: %s",
|
||||
csync_instruction_str(cur->instruction),
|
||||
repo,
|
||||
cur->path);
|
||||
}
|
||||
else
|
||||
{
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
|
||||
"%-20s file: %s",
|
||||
"%-20s %s file: %s",
|
||||
csync_instruction_str(cur->instruction),
|
||||
repo,
|
||||
cur->path);
|
||||
}
|
||||
}
|
||||
@@ -314,15 +323,17 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
||||
if(cur->type == CSYNC_FTW_TYPE_DIR)
|
||||
{
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
|
||||
"%-20s dir: %s",
|
||||
"%-20s %s dir: %s",
|
||||
csync_instruction_str(cur->instruction),
|
||||
repo,
|
||||
cur->path);
|
||||
}
|
||||
else
|
||||
{
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
|
||||
"%-20s file: %s",
|
||||
"%-20s %s file: %s",
|
||||
csync_instruction_str(cur->instruction),
|
||||
repo,
|
||||
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)) {
|
||||
(*st)->size = sqlite3_column_int64(stmt, 12);
|
||||
}
|
||||
if(column_count > 13) {
|
||||
(*st)->has_ignored_files = sqlite3_column_int(stmt, 13);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if( rc != SQLITE_DONE ) {
|
||||
@@ -435,7 +438,7 @@ char *csync_statedb_get_etag( CSYNC *ctx, uint64_t jHash ) {
|
||||
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 rc;
|
||||
|
||||
@@ -163,14 +163,6 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
|
||||
len = strlen(path);
|
||||
|
||||
/* This code should probably be in csync_exclude, but it does not have the fs parameter.
|
||||
Keep it here for now and TODO also find out if we want this for Windows
|
||||
https://github.com/owncloud/mirall/issues/2086 */
|
||||
if (fs->flags & CSYNC_VIO_FILE_FLAGS_HIDDEN) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (type == CSYNC_FTW_TYPE_SKIP) {
|
||||
excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED;
|
||||
} else {
|
||||
@@ -178,22 +170,28 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
excluded = csync_excluded(ctx, path,type);
|
||||
}
|
||||
|
||||
if (excluded != CSYNC_NOT_EXCLUDED) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", path, excluded);
|
||||
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) {
|
||||
return 1;
|
||||
}
|
||||
if (excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ctx->current_fs) {
|
||||
ctx->current_fs->has_ignored_files = true;
|
||||
}
|
||||
if( excluded == CSYNC_NOT_EXCLUDED ) {
|
||||
/* 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.
|
||||
* This code should probably be in csync_exclude, but it does not have the fs parameter.
|
||||
* Keep it here for now */
|
||||
if (ctx->ignore_hidden_files && (fs->flags & CSYNC_VIO_FILE_FLAGS_HIDDEN)) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", path);
|
||||
excluded = CSYNC_FILE_EXCLUDE_HIDDEN;
|
||||
}
|
||||
} 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 (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) {
|
||||
return 1;
|
||||
}
|
||||
if (excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->current == REMOTE_REPLICA && ctx->checkSelectiveSyncBlackListHook) {
|
||||
if (ctx->checkSelectiveSyncBlackListHook(ctx->checkSelectiveSyncBlackListData, path)) {
|
||||
if (ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncBlackListHook) {
|
||||
if (ctx->callbacks.checkSelectiveSyncBlackListHook(ctx->callbacks.update_callback_userdata, path)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -212,20 +210,16 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
st->child_modified = 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( fs->nlink > 1) {
|
||||
st->instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_HARDLINK;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (fs->mtime == 0) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", path);
|
||||
|
||||
tmp = csync_statedb_get_stat_by_hash(ctx, h);
|
||||
if(_last_db_return_error(ctx)) {
|
||||
SAFE_FREE(st);
|
||||
SAFE_FREE(tmp);
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
return -1;
|
||||
}
|
||||
@@ -246,11 +240,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
}
|
||||
|
||||
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;
|
||||
goto out;
|
||||
if (ctx->current_fs) {
|
||||
ctx->current_fs->has_ignored_files = true;
|
||||
}
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Update detection: Check if a database entry exists.
|
||||
@@ -271,10 +266,10 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
/* we have an update! */
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Database entry found, compare: %" 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),
|
||||
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) {
|
||||
st->instruction = CSYNC_INSTRUCTION_EVAL;
|
||||
goto out;
|
||||
@@ -317,7 +312,13 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
if (metadata_differ) {
|
||||
/* 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);
|
||||
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;
|
||||
} else {
|
||||
@@ -397,12 +398,20 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
} else {
|
||||
/* file not found in statedb */
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unable to open statedb" );
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
return -1;
|
||||
}
|
||||
@@ -411,15 +420,21 @@ out:
|
||||
|
||||
/* Set the ignored error string. */
|
||||
if (st->instruction == CSYNC_INSTRUCTION_IGNORE) {
|
||||
if (excluded == CSYNC_FILE_EXCLUDE_LIST) {
|
||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST; /* File listed on ignore list. */
|
||||
} 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_STAT_FAILED) {
|
||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_STAT_FAILED;
|
||||
}
|
||||
if( type == CSYNC_FTW_TYPE_SLINK ) {
|
||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK; /* Symbolic links are ignored. */
|
||||
} else {
|
||||
if (excluded == CSYNC_FILE_EXCLUDE_LIST) {
|
||||
st->error_status = CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST; /* File listed on ignore list. */
|
||||
} 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
|
||||
&& type != CSYNC_FTW_TYPE_DIR) {
|
||||
@@ -432,7 +447,6 @@ out:
|
||||
st->mode = fs->mode;
|
||||
st->size = fs->size;
|
||||
st->modtime = fs->mtime;
|
||||
st->nlink = fs->nlink;
|
||||
st->type = type;
|
||||
st->etag = NULL;
|
||||
if( fs->etag ) {
|
||||
@@ -650,6 +664,14 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||
int flen;
|
||||
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;
|
||||
if (d_name == NULL) {
|
||||
ctx->status_code = CSYNC_STATUS_READDIR_ERROR;
|
||||
@@ -749,6 +771,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||
|
||||
if(_last_db_return_error(ctx)) {
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
SAFE_FREE(etag);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -797,7 +820,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_NONE;
|
||||
if (ctx->current == REMOTE_REPLICA) {
|
||||
ctx->current_fs->should_update_etag = true;
|
||||
ctx->current_fs->should_update_metadata = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -815,7 +838,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||
if (flag == CSYNC_FTW_FLAG_DIR && ctx->current_fs
|
||||
&& (ctx->current_fs->instruction == CSYNC_INSTRUCTION_EVAL ||
|
||||
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;
|
||||
|
||||
@@ -104,30 +104,6 @@ void csync_memstat_check(void) {
|
||||
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
|
||||
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_win32_set_file_hidden( const char *file, bool hidden );
|
||||
|
||||
bool csync_file_locked_or_open( const char *dir, const char *fname);
|
||||
#endif /* _CSYNC_UTIL_H */
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "c_private.h"
|
||||
#include "c_alloc.h"
|
||||
#include "c_path.h"
|
||||
#include "c_string.h"
|
||||
|
||||
/*
|
||||
* dirname - parse directory component.
|
||||
@@ -389,3 +390,61 @@ int c_parse_uri(const char *uri,
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function takes a path and converts it to a UNC representation of the
|
||||
* string. That means that it prepends a \\?\ and convertes 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;
|
||||
int i = 4; // index where to start changing "/"=>"\"
|
||||
|
||||
len = strlen(str);
|
||||
longStr = c_malloc(len+5);
|
||||
*longStr = '\0';
|
||||
|
||||
// prepend \\?\ and convert '/' => '\' to support long names
|
||||
if( str[0] == '/' ) {
|
||||
strncpy( longStr, "\\\\?", 4);
|
||||
i=3;
|
||||
} else {
|
||||
strncpy( longStr, "\\\\?\\", 5); // prepend string by this four magic chars.
|
||||
}
|
||||
strncat( longStr, str, len );
|
||||
|
||||
/* replace all occurences of / with the windows native \ */
|
||||
while(longStr[i] != '\0') {
|
||||
if(longStr[i] == '/') {
|
||||
longStr[i] = '\\';
|
||||
}
|
||||
i++;
|
||||
}
|
||||
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
|
||||
|
||||
#include "c_macro.h"
|
||||
#include "c_private.h"
|
||||
|
||||
/**
|
||||
* @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 filename '\0' terminated string
|
||||
*
|
||||
*
|
||||
* @param extension '\0' terminated string
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
@@ -107,6 +108,33 @@ typedef struct
|
||||
char * extension;
|
||||
} 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
|
||||
#define EDQUOT 0
|
||||
#define ENODATA 0
|
||||
#ifndef S_IRGRP
|
||||
#define S_IRGRP 0
|
||||
#endif
|
||||
#ifndef S_IROTH
|
||||
#define S_IROTH 0
|
||||
#endif
|
||||
#ifndef S_IXGRP
|
||||
#define S_IXGRP 0
|
||||
#endif
|
||||
#ifndef S_IXOTH
|
||||
#define S_IXOTH 0
|
||||
#endif
|
||||
|
||||
#define S_IFSOCK 10000 /* 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;
|
||||
#define _topen _wopen
|
||||
#define _tdirent _wdirent
|
||||
#define _TDIR _WDIR
|
||||
#define _topendir _wopendir
|
||||
#define _tclosedir _wclosedir
|
||||
#define _treaddir _wreaddir
|
||||
@@ -118,11 +125,12 @@ typedef wchar_t mbchar_t;
|
||||
#define _tchmod _wchmod
|
||||
#define _trewinddir _wrewinddir
|
||||
#define _tchown(X, Y, Z) 0 /* no chown on Win32 */
|
||||
#define _tchdir _wchdir
|
||||
#define _tgetcwd _wgetcwd
|
||||
#else
|
||||
typedef char mbchar_t;
|
||||
#define _tdirent dirent
|
||||
#define _topen open
|
||||
#define _TDIR DIR
|
||||
#define _topendir opendir
|
||||
#define _tclosedir closedir
|
||||
#define _treaddir readdir
|
||||
@@ -138,6 +146,8 @@ typedef char mbchar_t;
|
||||
#define _tchmod chmod
|
||||
#define _trewinddir rewinddir
|
||||
#define _tchown(X,Y,Z) chown(X,Y,Z)
|
||||
#define _tchdir chdir
|
||||
#define _tgetcwd getcwd
|
||||
#endif
|
||||
|
||||
#ifdef WITH_ICONV
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <wchar.h>
|
||||
|
||||
#include "c_string.h"
|
||||
#include "c_path.h"
|
||||
#include "c_alloc.h"
|
||||
#include "c_macro.h"
|
||||
|
||||
@@ -275,33 +276,33 @@ char* c_utf8_from_locale(const mbchar_t *wstr)
|
||||
}
|
||||
|
||||
/* 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
|
||||
size_t len;
|
||||
int size_needed;
|
||||
size_t len;
|
||||
int size_needed;
|
||||
#endif
|
||||
|
||||
if (str == NULL ) {
|
||||
return NULL;
|
||||
}
|
||||
if (str == NULL ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
len = strlen(str);
|
||||
size_needed = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);
|
||||
if (size_needed > 0) {
|
||||
int size_char = (size_needed + 1) * sizeof(mbchar_t);
|
||||
dst = c_malloc(size_char);
|
||||
memset((void*)dst, 0, size_char);
|
||||
MultiByteToWideChar(CP_UTF8, 0, str, -1, dst, size_needed);
|
||||
}
|
||||
len = strlen(str);
|
||||
size_needed = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);
|
||||
if (size_needed > 0) {
|
||||
int size_char = (size_needed + 1) * sizeof(mbchar_t);
|
||||
dst = c_malloc(size_char);
|
||||
memset((void*)dst, 0, size_char);
|
||||
MultiByteToWideChar(CP_UTF8, 0, str, -1, dst, size_needed);
|
||||
}
|
||||
#else
|
||||
#ifdef WITH_ICONV
|
||||
dst = c_iconv(str, iconv_to_native);
|
||||
dst = c_iconv(str, iconv_to_native);
|
||||
#else
|
||||
dst = (_TCHAR*) str;
|
||||
dst = (_TCHAR*) str;
|
||||
#endif
|
||||
#endif
|
||||
return dst;
|
||||
return dst;
|
||||
}
|
||||
|
||||
@@ -163,12 +163,14 @@ void c_strlist_destroy(c_strlist_t *strlist);
|
||||
* Instead of using the standard file operations the multi platform aliases
|
||||
* 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.
|
||||
* 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
|
||||
* 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.
|
||||
*
|
||||
* @return The malloced converted multibyte string or NULL on error.
|
||||
@@ -177,7 +179,7 @@ void c_strlist_destroy(c_strlist_t *strlist);
|
||||
* @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)
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "c_private.h"
|
||||
#include "c_string.h"
|
||||
|
||||
#include "c_string.h"
|
||||
#include "c_path.h"
|
||||
#include "c_time.h"
|
||||
|
||||
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
|
||||
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);
|
||||
c_free_locale_string(wuri);
|
||||
return ret;
|
||||
@@ -97,7 +97,7 @@ int c_utimes(const char *uri, const struct timeval *times) {
|
||||
FILETIME LastModificationTime;
|
||||
HANDLE hFile;
|
||||
|
||||
mbchar_t *wuri = c_utf8_to_locale( uri );
|
||||
mbchar_t *wuri = c_utf8_path_to_locale( uri );
|
||||
|
||||
if(times) {
|
||||
UnixTimevalToFileTime(times[0], &LastAccessTime);
|
||||
|
||||
@@ -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
|
||||
*
|
||||
* 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
|
||||
@@ -25,9 +26,7 @@
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "windows.h"
|
||||
#endif
|
||||
|
||||
#include "c_private.h"
|
||||
#include "c_lib.h"
|
||||
@@ -44,23 +43,43 @@
|
||||
*/
|
||||
|
||||
typedef struct dhandle_s {
|
||||
_TDIR *dh;
|
||||
WIN32_FIND_DATA ffd;
|
||||
HANDLE hFind;
|
||||
int firstFind;
|
||||
char *path;
|
||||
} dhandle_t;
|
||||
|
||||
csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
||||
dhandle_t *handle = NULL;
|
||||
mbchar_t *dirname = c_utf8_to_locale(name);
|
||||
mbchar_t *dirname = NULL;
|
||||
|
||||
handle = c_malloc(sizeof(dhandle_t));
|
||||
|
||||
handle->dh = _topendir( dirname );
|
||||
if (handle->dh == NULL) {
|
||||
c_free_locale_string(dirname);
|
||||
SAFE_FREE(handle);
|
||||
return NULL;
|
||||
// the file wildcard has to be attached
|
||||
int len_name = strlen(name);
|
||||
if( len_name ) {
|
||||
char *h = 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) {
|
||||
SAFE_FREE(handle);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
handle->firstFind = 1; // Set a flag that there first fileinfo is available.
|
||||
|
||||
handle->path = c_strdup(name);
|
||||
c_free_locale_string(dirname);
|
||||
|
||||
@@ -77,7 +96,10 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) {
|
||||
}
|
||||
|
||||
handle = (dhandle_t *) dhandle;
|
||||
rc = _tclosedir(handle->dh);
|
||||
// FindClose returns non-zero on success
|
||||
if( FindClose(handle->hFind) != 0 ) {
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
SAFE_FREE(handle->path);
|
||||
SAFE_FREE(handle);
|
||||
@@ -86,7 +108,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) {
|
||||
struct _tdirent *dirent = NULL;
|
||||
|
||||
dhandle_t *handle = NULL;
|
||||
csync_vio_file_stat_t *file_stat = NULL;
|
||||
@@ -94,47 +115,34 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
||||
handle = (dhandle_t *) dhandle;
|
||||
|
||||
errno = 0;
|
||||
dirent = _treaddir(handle->dh);
|
||||
if (dirent == NULL) {
|
||||
if (errno) {
|
||||
goto err;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
file_stat = csync_vio_file_stat_new();
|
||||
if (file_stat == NULL) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
file_stat->name = c_utf8_from_locale(dirent->d_name);
|
||||
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
||||
|
||||
/* Check for availability of d_type, see manpage. */
|
||||
#ifdef _DIRENT_HAVE_D_TYPE
|
||||
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;
|
||||
// the win32 functions get the first valid entry with the opendir
|
||||
// thus we must not jump to next entry if it was the first find.
|
||||
if( handle->firstFind ) {
|
||||
handle->firstFind = 0;
|
||||
} else {
|
||||
if( FindNextFile(handle->hFind, &(handle->ffd)) == 0 ) {
|
||||
// might be error, check!
|
||||
int dwError = GetLastError();
|
||||
if (dwError != ERROR_NO_MORE_FILES) {
|
||||
errno = EACCES; // no more files is fine. Otherwise EACCESS
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
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;
|
||||
|
||||
@@ -144,8 +152,6 @@ err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
static time_t FileTimeToUnixTime(FILETIME *filetime, DWORD *remainder)
|
||||
{
|
||||
long long int t = filetime->dwHighDateTime;
|
||||
@@ -170,7 +176,7 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
||||
BY_HANDLE_FILE_INFORMATION fileInfo;
|
||||
WIN32_FIND_DATAW FindFileData;
|
||||
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,
|
||||
FILE_ATTRIBUTE_NORMAL+FILE_FLAG_BACKUP_SEMANTICS, NULL );
|
||||
@@ -218,7 +224,12 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
||||
buf->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||
break;
|
||||
} 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_TYPE;
|
||||
|
||||
@@ -257,98 +268,3 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
||||
|
||||
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
|
||||
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_ext vio_tests/check_vio_ext.c ${TEST_TARGET_LIBRARIES})
|
||||
|
||||
# sync
|
||||
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})
|
||||
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)
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ static void check_logging(void **state)
|
||||
int rc;
|
||||
csync_stat_t sb;
|
||||
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 */
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ static void check_csync_statedb_close(void **state)
|
||||
CSYNC *csync = *state;
|
||||
csync_stat_t sb;
|
||||
time_t modtime;
|
||||
mbchar_t *testdb = c_utf8_to_locale(TESTDB);
|
||||
mbchar_t *testdb = c_utf8_path_to_locale(TESTDB);
|
||||
int rc;
|
||||
|
||||
/* statedb not written */
|
||||
|
||||
@@ -167,7 +167,6 @@ static void teardown_rm(void **state) {
|
||||
/* create a file stat, caller must free memory */
|
||||
static csync_vio_file_stat_t* create_fstat(const char *name,
|
||||
ino_t inode,
|
||||
nlink_t nlink,
|
||||
time_t mtime)
|
||||
{
|
||||
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->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) {
|
||||
@@ -248,7 +241,7 @@ static void check_csync_detect_update(void **state)
|
||||
csync_vio_file_stat_t *fs;
|
||||
int rc;
|
||||
|
||||
fs = create_fstat("file.txt", 0, 1, 1217597845);
|
||||
fs = create_fstat("file.txt", 0, 1217597845);
|
||||
assert_non_null(fs);
|
||||
|
||||
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;
|
||||
int rc;
|
||||
|
||||
fs = create_fstat("file.txt", 0, 1, 1217597845);
|
||||
fs = create_fstat("file.txt", 0, 1217597845);
|
||||
assert_non_null(fs);
|
||||
|
||||
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;
|
||||
int rc;
|
||||
|
||||
fs = create_fstat("file.txt", 0, 1, 42);
|
||||
fs = create_fstat("file.txt", 0, 42);
|
||||
assert_non_null(fs);
|
||||
|
||||
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;
|
||||
int rc = 0;
|
||||
|
||||
fs = create_fstat("wurst.txt", 0, 1, 42);
|
||||
fs = create_fstat("wurst.txt", 0, 42);
|
||||
assert_non_null(fs);
|
||||
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;
|
||||
int rc;
|
||||
|
||||
fs = create_fstat("file.txt", 42000, 1, 0);
|
||||
fs = create_fstat("file.txt", 42000, 0);
|
||||
assert_non_null(fs);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
CSYNC *csync = *state;
|
||||
csync_vio_file_stat_t *fs;
|
||||
int rc;
|
||||
|
||||
fs = create_fstat("file.txt", 0, 1, 0);
|
||||
fs = create_fstat("file.txt", 0, 0);
|
||||
assert_non_null(fs);
|
||||
|
||||
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_rename, setup, teardown),
|
||||
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_ftw, setup_ftw, teardown_rm),
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include "torture.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include "c_string.h"
|
||||
#include "c_path.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
|
||||
static void setup(void **state)
|
||||
{
|
||||
int rc = 0;
|
||||
@@ -63,7 +65,7 @@ static void check_iconv_to_native_normalization(void **state)
|
||||
const char *exp_out = "\x48\xc3\xa4"; // UTF8
|
||||
#endif
|
||||
|
||||
out = c_utf8_to_locale(in);
|
||||
out = c_utf8_path_to_locale(in);
|
||||
assert_string_equal(out, exp_out);
|
||||
|
||||
c_free_locale_string(out);
|
||||
@@ -125,8 +127,8 @@ static void check_to_multibyte(void **state)
|
||||
{
|
||||
int rc = -1;
|
||||
|
||||
mbchar_t *mb_string = c_utf8_to_locale( TESTSTRING );
|
||||
mbchar_t *mb_null = c_utf8_to_locale( NULL );
|
||||
mbchar_t *mb_string = c_utf8_path_to_locale( TESTSTRING );
|
||||
mbchar_t *mb_null = c_utf8_path_to_locale( NULL );
|
||||
|
||||
(void) state;
|
||||
|
||||
@@ -142,13 +144,44 @@ static void check_to_multibyte(void **state)
|
||||
c_free_locale_string(mb_null);
|
||||
}
|
||||
|
||||
static void check_long_win_path(void **state)
|
||||
{
|
||||
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);
|
||||
|
||||
(void) state; /* unused */
|
||||
|
||||
assert_string_equal(new_short, exp_path);
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
int torture_run_tests(void)
|
||||
{
|
||||
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_iconv_ascii, setup, teardown),
|
||||
unit_test_setup_teardown(check_iconv_to_native_normalization, setup, teardown),
|
||||
unit_test_setup_teardown(check_iconv_from_native_normalization, setup, teardown),
|
||||
|
||||
};
|
||||
|
||||
return run_tests(tests);
|
||||
|
||||
@@ -29,7 +29,16 @@ use ownCloud::Test;
|
||||
|
||||
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
|
||||
|
||||
initTesting();
|
||||
@@ -167,6 +176,48 @@ assertLocalAndRemoteDir( '', 0 );
|
||||
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();
|
||||
|
||||
# --
|
||||
|
||||
@@ -59,7 +59,7 @@ static void setup(void **state)
|
||||
|
||||
static void setup_dir(void **state) {
|
||||
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);
|
||||
|
||||
@@ -121,7 +121,7 @@ static void check_csync_vio_opendir_perm(void **state)
|
||||
CSYNC *csync = *state;
|
||||
csync_vio_handle_t *dh;
|
||||
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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
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
|
||||
other repository.
|
||||
|
||||
@@ -76,7 +76,7 @@ a synchronization process.
|
||||
not support using the file ID functionality.
|
||||
|
||||
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
|
||||
changed to employ a binary check if files differ.
|
||||
|
||||
@@ -104,7 +104,7 @@ depending on server/client combination:
|
||||
+--------------------+-------------------+----------------------------+
|
||||
|
||||
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
|
||||
multiple clients are involved and one utilizes a non-synchronized NTP time.
|
||||
|
||||
@@ -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
|
||||
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
|
||||
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
|
||||
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,
|
||||
a *conflict case* is created. The client resolves this conflic by creating a
|
||||
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 conflict by creating a
|
||||
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
|
||||
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 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
|
||||
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
|
||||
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
|
||||
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
|
||||
selected using the checkbox.
|
||||
|
||||
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
|
||||
information, please refer to `The opengroup website
|
||||
<http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13_01>`_.
|
||||
|
||||
@@ -106,7 +106,7 @@ using the system-wide ``.plist`` file. To access this file:
|
||||
|
||||
/Library/Preferences/
|
||||
|
||||
2. Locate and open the following file::
|
||||
2. Locate and open the following file::
|
||||
|
||||
com.owncloud.desktopclient.plist
|
||||
|
||||
|
||||
@@ -7,7 +7,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
|
||||
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.
|
||||
|
||||
The instructions contained in this topic were updated to work with version 1.7 of the ownCloud Client.
|
||||
@@ -134,58 +134,38 @@ have it installed already.
|
||||
|
||||
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 http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.2/windows:mingw:win32.repo
|
||||
zypper ar https://build.opensuse.org/project/show/isv:ownCloud:toolchains:mingw:win32:stable
|
||||
|
||||
2. Install the cross-compiler packages and the cross-compiled dependencies::
|
||||
|
||||
zypper install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
||||
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
||||
mingw32-headers mingw32-runtime site-config \
|
||||
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5* \
|
||||
mingw32-cross-nsis
|
||||
zypper install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
||||
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
||||
mingw32-headers mingw32-runtime site-config mingw32-libwebp \
|
||||
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5*
|
||||
|
||||
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::
|
||||
|
||||
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`_
|
||||
4. Follow the `generic build instructions`_
|
||||
|
||||
.. note:: When building for Windows platforms, you must specify a special
|
||||
toolchain file that enables cmake to locate the platform-specific tools. To add
|
||||
this parameter to the call to cmake, enter
|
||||
``-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
|
||||
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
|
||||
|
||||
9. Sign the package::
|
||||
7. Sign the package::
|
||||
|
||||
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha1 \
|
||||
-pass yourpass \
|
||||
@@ -195,7 +175,7 @@ To cross-compile:
|
||||
-in ${unsigned_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.
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
``$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
|
||||
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.
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
Overview {#mainpage}
|
||||
========
|
||||
|
||||
Documentation that will appear on the main page
|
||||
|
||||
@@ -9,7 +9,7 @@ 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.
|
||||
|
||||
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
|
||||
``\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers`
|
||||
from the windows registry.
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 14 KiB |
@@ -3,7 +3,7 @@ Installing the Desktop Synchronization Client
|
||||
=============================================
|
||||
|
||||
You can download the latest version of the ownCloud Desktop Synchronization
|
||||
Client from the `ownCloud Website <https://owncloud.org/install/#>`_.
|
||||
Client from the `ownCloud Website <https://owncloud.org/install/#desktop>`_.
|
||||
There are clients for Linux, Mac OS X, and Microsoft Windows.
|
||||
|
||||
Installation on Mac OS X and Windows is the same as for any software
|
||||
@@ -18,7 +18,7 @@ and then use their package managers to install the desktop sync client. Linux
|
||||
users will also update their sync clients via package manager, and the client
|
||||
will display a notification when an update is available.
|
||||
|
||||
Linux users must also have a password manager enabled, such as GNOME Keyring or
|
||||
Linux users must also have a password manager enabled, such as GNOME Keyring or
|
||||
KWallet, so that the sync client can login automatically.
|
||||
|
||||
Improvements and New Features
|
||||
@@ -68,7 +68,7 @@ On the next screen enter your ownCloud login and password.
|
||||
|
||||
.. image:: images/client5.png
|
||||
|
||||
Now you can select while folders and files to sync, and the location of your
|
||||
Now you can select which folders and files to sync, and the location of your
|
||||
local ownCloud folder.
|
||||
|
||||
.. image:: images/client6.png
|
||||
@@ -105,8 +105,3 @@ you saw in the installation wizard. If you un-check any folders or files that
|
||||
you have already synchronized they will be deleted.
|
||||
|
||||
.. image:: images/client11.png
|
||||
|
||||
Right-click on the systray icon to see more options, such as Open ownCloud in
|
||||
browser, Open folder 'ownCloud', Recent changes, Help, and Quit ownCloud.
|
||||
|
||||
.. image:: images/client12.png
|
||||
|
||||
@@ -71,7 +71,7 @@ Using the Account Settings Window
|
||||
|
||||
.. index:: account settings, user, password, Server URL
|
||||
|
||||
The ``Account`` window provides a summary for your ownCloud account settings.
|
||||
The ``Account`` window provides a summary of your ownCloud account settings.
|
||||
You can manage which folders and files you want to synchronize, change your
|
||||
account settings, and pause and resume synchronization.
|
||||
|
||||
@@ -96,12 +96,10 @@ The fields and options in this window include:
|
||||
root folder.
|
||||
|
||||
* ``Storage Usage`` field: Displays how much space your files are using on the
|
||||
ownCloud server.
|
||||
ownCloud server.
|
||||
|
||||
* ``Edit Ignored Files`` button: Launches the Ignored Files Editor.
|
||||
|
||||
* ``Modify Account`` button: Use this to change your ownCloud server settings
|
||||
by launching the account setup wizard (see :doc:`accountsetup`).
|
||||
* ``Modify Account`` button: Use this to change your ownCloud server settings
|
||||
by launching the account setup wizard (see :doc:`accountsetup`).
|
||||
|
||||
@@ -113,7 +111,7 @@ synchronization process.
|
||||
|
||||
To add a new folder:
|
||||
|
||||
1. Click the ``Add a Folder ...`` button in the Account window.
|
||||
1. Click the ``Add Folder ...`` button in the Account window.
|
||||
|
||||
The ``Add Folder...`` window opens
|
||||
|
||||
@@ -195,11 +193,11 @@ startup, notifications, and using monochrome icons.
|
||||
startup. By default, this option is enabled (checked) after you have configured
|
||||
your account.
|
||||
|
||||
* ``Show Desktop Nofications`` checkbox: Provides the option to check (enable)
|
||||
* ``Show Desktop Notifications`` checkbox: Provides the option to check (enable)
|
||||
or uncheck (disable) notifications about sync activity.
|
||||
|
||||
* ``Use Monochrome Icons`` checkbox: Provides the option to check (enable) or
|
||||
uncheck (disable) the use of monochrome (visually less obtrusive) icons.
|
||||
uncheck (disable) the use of monochrome (visually less obtrusive) icons.
|
||||
|
||||
.. note:: This option can be useful on Mac OS X platforms.
|
||||
|
||||
@@ -257,7 +255,7 @@ Synchronization of files between a client and server can use a lot of
|
||||
bandwidth, so you can limit how much your ownCloud sync client uses.
|
||||
|
||||
- ``No limit`` option: The default setting for the client; specifies that there
|
||||
are no limit settings on the amount of data downloaded from the server.
|
||||
are no limit settings on the bandwidth used by data downloaded from the server.
|
||||
|
||||
- ``Limit to <value> KBytes/s`` option: Limits (throttles) the bandwidth to
|
||||
a customized value (in KBytes/second).
|
||||
@@ -266,7 +264,7 @@ The Upload Bandwidth field (for data flowing from the ownCloud client to the
|
||||
server) provides the following options:
|
||||
|
||||
- ``No limit`` option: The default setting for the client; specifies that there
|
||||
are no limit settings on the amount of data downloaded from the server.
|
||||
are no limit settings on the bandwidth used by data uploaded to the server.
|
||||
|
||||
- ``Limit automatically``: When enabled, the ownCloud client surrenders
|
||||
available bandwidth to other applications. Use this option if there are
|
||||
|
||||
@@ -90,7 +90,7 @@ Other issues can affect synchronization of your ownCloud files:
|
||||
Log Files
|
||||
---------
|
||||
|
||||
Effectively debugging software requires as much relative information as can be
|
||||
Effectively debugging software requires as much relevant information as can be
|
||||
obtained. To assist the ownCloud support personnel, please try to provide as
|
||||
many relevant logs as possible. Log output can help with tracking down
|
||||
problems and, if you report a bug, log output can help to resolve an issue more
|
||||
@@ -119,7 +119,7 @@ To obtain the client log file:
|
||||
|
||||
5. Name the log file and click the 'Save' button.
|
||||
|
||||
The log files is saved in the location specifed.
|
||||
The log file is saved in the location specifed.
|
||||
|
||||
Alternatively, you can launch the ownCloud Log Output window using the
|
||||
``--logwindow`` command. After issuing this command, the Log Output window
|
||||
|
||||
@@ -40,7 +40,7 @@ logs.
|
||||
|
||||
1. Output of `owncloud --logwindow` or `owncloud --logfile log.txt`
|
||||
(On Windows using `cmd.exe`, you might need to first `cd` into the ownCloud directory)
|
||||
(See also http://doc.owncloud.org/desktop/1.5/troubleshooting.html#client-logfile )
|
||||
(See also http://doc.owncloud.org/desktop/1.8/troubleshooting.html#client-logfile )
|
||||
|
||||
2. Web server error log:
|
||||
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 2.7 KiB Depois Largura: | Altura: | Tamanho: 1.4 KiB |
|
Depois Largura: | Altura: | Tamanho: 2.7 KiB |
|
Antes Largura: | Altura: | Tamanho: 1.9 KiB Depois Largura: | Altura: | Tamanho: 1.1 KiB |
|
Depois Largura: | Altura: | Tamanho: 1.9 KiB |
|
Antes Largura: | Altura: | Tamanho: 1.4 KiB Depois Largura: | Altura: | Tamanho: 879 B |
|
Depois Largura: | Altura: | Tamanho: 2.5 KiB |
|
Antes Largura: | Altura: | Tamanho: 3.6 KiB Depois Largura: | Altura: | Tamanho: 1.9 KiB |