mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-05 05:34:18 +02:00
Compare commits
519 Commits
v2.6.0-fix
...
v2.6.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
adada8b2ee | ||
|
|
8a38e820a6 | ||
|
|
475267aff4 | ||
|
|
cba879e2af | ||
|
|
05e071bafe | ||
|
|
7e4846eeda | ||
|
|
bc2244679c | ||
|
|
6320c60d77 | ||
|
|
abc3d6a271 | ||
|
|
8cc7fa20d3 | ||
|
|
016d21dead | ||
|
|
68aa9853c9 | ||
|
|
5db65ad6b8 | ||
|
|
6e2e1b3650 | ||
|
|
331778c73b | ||
|
|
2a6a7fb9d3 | ||
|
|
3766f70e43 | ||
|
|
6f33740601 | ||
|
|
03e5fa3d49 | ||
|
|
b36c9e6960 | ||
|
|
7f41805bc4 | ||
|
|
7c0cf20901 | ||
|
|
babc4aaf3d | ||
|
|
91db96267f | ||
|
|
a59e5689cb | ||
|
|
0dde3172e6 | ||
|
|
7212bdc02f | ||
|
|
4584b78b71 | ||
|
|
7033f16014 | ||
|
|
d08485331f | ||
|
|
d4cbbebd37 | ||
|
|
727c1e9e6c | ||
|
|
7a7675379d | ||
|
|
2bf9742504 | ||
|
|
5f1158a8a2 | ||
|
|
43e502778f | ||
|
|
f73a90ce26 | ||
|
|
64b0cab524 | ||
|
|
376522bc34 | ||
|
|
f2006d50ce | ||
|
|
0d6edf1240 | ||
|
|
94d92c73c2 | ||
|
|
ea4ae81c08 | ||
|
|
c6a360238f | ||
|
|
445d4d6892 | ||
|
|
0bc4346f30 | ||
|
|
a505071589 | ||
|
|
cd9de7c340 | ||
|
|
5a6b877695 | ||
|
|
6202df1cd0 | ||
|
|
ae33f10226 | ||
|
|
0181debae0 | ||
|
|
bd17cb0b86 | ||
|
|
be62480d0f | ||
|
|
5234dea356 | ||
|
|
27a453ae1a | ||
|
|
eb55308949 | ||
|
|
9d829b2933 | ||
|
|
456e338363 | ||
|
|
24446977c8 | ||
|
|
3a9e12f8c5 | ||
|
|
bdede5cfc4 | ||
|
|
e39a9ba7ae | ||
|
|
23c3885854 | ||
|
|
a186ac6a29 | ||
|
|
7c7627995e | ||
|
|
f62c0f0c0d | ||
|
|
9a55396cb6 | ||
|
|
24a989532d | ||
|
|
c3a4bccb30 | ||
|
|
0da8951a4a | ||
|
|
ad524e8a61 | ||
|
|
cd9a055053 | ||
|
|
513176ae40 | ||
|
|
74dda92f88 | ||
|
|
e6236d4ef5 | ||
|
|
ac414c4374 | ||
|
|
b4e681d128 | ||
|
|
4572f96745 | ||
|
|
d5b737ab4b | ||
|
|
e06990427b | ||
|
|
4fec80d4de | ||
|
|
6cba316ab5 | ||
|
|
b642574751 | ||
|
|
8f909a0de4 | ||
|
|
43f2826622 | ||
|
|
7b8b9742f4 | ||
|
|
531af5bb31 | ||
|
|
9357fb981e | ||
|
|
115bef589b | ||
|
|
69b9c4715e | ||
|
|
0ff93727b2 | ||
|
|
3b28d9471a | ||
|
|
688512cc8c | ||
|
|
c2bb7446aa | ||
|
|
dd03eddb38 | ||
|
|
3ec89ccc5d | ||
|
|
19f2a43ef4 | ||
|
|
0a791acd10 | ||
|
|
1976471543 | ||
|
|
4419e7fe2a | ||
|
|
92e77a186a | ||
|
|
2eb7ba2eb4 | ||
|
|
cdd1e7b69f | ||
|
|
b972fd9e19 | ||
|
|
fb6f998a7a | ||
|
|
f2a8106a57 | ||
|
|
fb428847af | ||
|
|
2f20530bf1 | ||
|
|
4f988e09ca | ||
|
|
1e12b9dca8 | ||
|
|
ce9fa18976 | ||
|
|
8cd63918a7 | ||
|
|
a87e90a56f | ||
|
|
67276be84f | ||
|
|
d3a71c1f60 | ||
|
|
f48ebfd0ab | ||
|
|
2670fcc0f9 | ||
|
|
822fcad0c2 | ||
|
|
9d0b0cb3b6 | ||
|
|
2173abd23f | ||
|
|
fb01fda0fb | ||
|
|
8a938c4af3 | ||
|
|
992ba0321f | ||
|
|
fb33e8f84b | ||
|
|
ef6f00798f | ||
|
|
eb122ffbec | ||
|
|
815170728e | ||
|
|
d9d14fd091 | ||
|
|
23902944da | ||
|
|
6f57016120 | ||
|
|
cd69585d4a | ||
|
|
0fb0fc2d7e | ||
|
|
40121dd03d | ||
|
|
da9e2250d7 | ||
|
|
6aa087a892 | ||
|
|
a6a9df9720 | ||
|
|
aa71623946 | ||
|
|
03c63721a4 | ||
|
|
f77b706eb1 | ||
|
|
01d47ea60a | ||
|
|
9cb8c52568 | ||
|
|
69ae63ea50 | ||
|
|
acec8a9721 | ||
|
|
6bca361351 | ||
|
|
1130d3941a | ||
|
|
a7ad510e93 | ||
|
|
800624de66 | ||
|
|
9c80cc2603 | ||
|
|
3920f264c4 | ||
|
|
b70243c6ba | ||
|
|
a370d9d9c4 | ||
|
|
0bfe78b8eb | ||
|
|
40b0751db9 | ||
|
|
04404d874f | ||
|
|
e18e38e8b7 | ||
|
|
11c246e052 | ||
|
|
c6764ee7b9 | ||
|
|
90e3a580c4 | ||
|
|
9e72888aa3 | ||
|
|
1c66b08c2b | ||
|
|
f411e6e190 | ||
|
|
71205d6b19 | ||
|
|
23ef3329f8 | ||
|
|
a33465c312 | ||
|
|
8d518f0722 | ||
|
|
c40961dc38 | ||
|
|
8a23380fe1 | ||
|
|
f366fe75b0 | ||
|
|
a7653588ae | ||
|
|
e4694df69b | ||
|
|
1420c080a5 | ||
|
|
051f4c2652 | ||
|
|
e159ba5ab8 | ||
|
|
ff01533581 | ||
|
|
78e3ff0288 | ||
|
|
53a7a10abf | ||
|
|
3a09c9658b | ||
|
|
e117d6d0d3 | ||
|
|
0b7eb9d031 | ||
|
|
1c45d8b0e7 | ||
|
|
9eada70bc8 | ||
|
|
5de080a52f | ||
|
|
3630a5e45b | ||
|
|
f286546435 | ||
|
|
2172586e5b | ||
|
|
9ae02a605c | ||
|
|
5bfd5d2260 | ||
|
|
069fd53cf6 | ||
|
|
04e53c39a1 | ||
|
|
3bc6d468e9 | ||
|
|
b09516f0e9 | ||
|
|
8ff738fd43 | ||
|
|
f382309bdb | ||
|
|
50f2ec2e62 | ||
|
|
07cfbd7670 | ||
|
|
93515deb81 | ||
|
|
112a8ccdf1 | ||
|
|
acc59e466c | ||
|
|
0a501e0469 | ||
|
|
ed6aa3d9b2 | ||
|
|
b4a0d6a97d | ||
|
|
1fd4c01062 | ||
|
|
fb9f0aa84d | ||
|
|
fa85fea347 | ||
|
|
e531bb01ff | ||
|
|
fa4711aeb1 | ||
|
|
a5223c692e | ||
|
|
f9fe5dee1e | ||
|
|
be0944ee7c | ||
|
|
eb9f8460e5 | ||
|
|
8b6e4e5569 | ||
|
|
a6b3a9d024 | ||
|
|
232d4ef0d0 | ||
|
|
f8803e57c6 | ||
|
|
b6487eb4ca | ||
|
|
5e92562a79 | ||
|
|
bf1643d2e7 | ||
|
|
265c6dc73b | ||
|
|
33b3df1596 | ||
|
|
7572ad63e5 | ||
|
|
03b6de183f | ||
|
|
b13a74f03c | ||
|
|
7159ec8472 | ||
|
|
e51deb72f2 | ||
|
|
29ef166f29 | ||
|
|
89660121c1 | ||
|
|
213adb77a0 | ||
|
|
ffafe746e5 | ||
|
|
bb2663ddd6 | ||
|
|
dc84e91c4f | ||
|
|
6bffac198e | ||
|
|
e47250137a | ||
|
|
35b7ffbf12 | ||
|
|
6a05605f59 | ||
|
|
20ab3ccae6 | ||
|
|
b18b8f67a9 | ||
|
|
00659b163b | ||
|
|
2ec68c7c1d | ||
|
|
714f4b199d | ||
|
|
e892c180f6 | ||
|
|
f08a278525 | ||
|
|
9079d40063 | ||
|
|
0ebc47f323 | ||
|
|
af9b44d338 | ||
|
|
197e1b668b | ||
|
|
058bfb2db0 | ||
|
|
45d30623e1 | ||
|
|
a6ff038f7f | ||
|
|
a21ae444e3 | ||
|
|
ab46b647f8 | ||
|
|
1d00bac251 | ||
|
|
63d9f87e18 | ||
|
|
6fd832bf1d | ||
|
|
e0b37fcd58 | ||
|
|
1736de6a9f | ||
|
|
f2414e0ebb | ||
|
|
f2a99f713f | ||
|
|
8c02403aec | ||
|
|
740757f384 | ||
|
|
16c68e19ce | ||
|
|
026f0abb7f | ||
|
|
9058602373 | ||
|
|
a083e0513b | ||
|
|
8a46b96b5d | ||
|
|
dadab48b2b | ||
|
|
16d641d04a | ||
|
|
ea3aa54ae5 | ||
|
|
cf79b91503 | ||
|
|
677e6e24ac | ||
|
|
b45f5fd1a9 | ||
|
|
a4317ca50d | ||
|
|
6c6eeab479 | ||
|
|
7fdbc72991 | ||
|
|
2187c6f4fc | ||
|
|
f3b825f333 | ||
|
|
676d4e1308 | ||
|
|
e03309a05e | ||
|
|
de15f20006 | ||
|
|
7ed1062314 | ||
|
|
80138b1cbf | ||
|
|
93547ced6d | ||
|
|
0aefa58644 | ||
|
|
992bcf56f5 | ||
|
|
35de69f7bc | ||
|
|
1c44909254 | ||
|
|
c3ccb72f2b | ||
|
|
890bd09ce9 | ||
|
|
b5309c47fc | ||
|
|
d24a09e47f | ||
|
|
bdae4a9be7 | ||
|
|
d9ce9814da | ||
|
|
f6d019af21 | ||
|
|
423ee61817 | ||
|
|
4871776a4b | ||
|
|
f4e83891e1 | ||
|
|
d589b524e0 | ||
|
|
de0158e2bb | ||
|
|
62856f9001 | ||
|
|
1313bc573f | ||
|
|
c2838fb8a8 | ||
|
|
ba71bf13f4 | ||
|
|
7e36c7ba59 | ||
|
|
e9641a3b94 | ||
|
|
7ff1911492 | ||
|
|
57f8b866a5 | ||
|
|
883df2f4fa | ||
|
|
5880c4954e | ||
|
|
b02bd066a9 | ||
|
|
6abec7cea9 | ||
|
|
cc4e6b236a | ||
|
|
821946ad94 | ||
|
|
94c3e19ede | ||
|
|
feba6910ce | ||
|
|
4f37249750 | ||
|
|
fda8c406f6 | ||
|
|
a804c4650a | ||
|
|
e1f4963973 | ||
|
|
6ae761c43c | ||
|
|
504bb34d26 | ||
|
|
1136cee383 | ||
|
|
591d4c812b | ||
|
|
a105e3f758 | ||
|
|
a88687bfe3 | ||
|
|
879ed544e1 | ||
|
|
13aaffc46b | ||
|
|
62fc12fe40 | ||
|
|
f4543e0c79 | ||
|
|
d35f466773 | ||
|
|
e3cb3b28ff | ||
|
|
36049afbc4 | ||
|
|
59c165aa1d | ||
|
|
071b4abeeb | ||
|
|
93e04fc72b | ||
|
|
a9915c4b46 | ||
|
|
a265ff52e7 | ||
|
|
85b4965d7f | ||
|
|
963beec760 | ||
|
|
2f812063ac | ||
|
|
a485120a34 | ||
|
|
6337116de7 | ||
|
|
a56eb2e95e | ||
|
|
ac3246f9f2 | ||
|
|
aa9849c112 | ||
|
|
a89e49ef84 | ||
|
|
1d745535f7 | ||
|
|
3184aeed43 | ||
|
|
3faf010b55 | ||
|
|
163c80e203 | ||
|
|
73462e97aa | ||
|
|
6f4144a464 | ||
|
|
9820464545 | ||
|
|
3ecd7823f9 | ||
|
|
9b504eaddd | ||
|
|
838ca6cba0 | ||
|
|
7e5e40d5c4 | ||
|
|
abd8d1fda1 | ||
|
|
0a3491f332 | ||
|
|
15d9ca2b00 | ||
|
|
7682749415 | ||
|
|
a18fc5b5c9 | ||
|
|
96783a9b80 | ||
|
|
258c2cee2e | ||
|
|
65ff3c0de1 | ||
|
|
6879c9f1c9 | ||
|
|
fade8465e4 | ||
|
|
76b5c6b6d4 | ||
|
|
bdd0cc4dc3 | ||
|
|
876b1e239e | ||
|
|
da2007c7f6 | ||
|
|
7a33cb97cd | ||
|
|
7a18a58fae | ||
|
|
fcc9d02bcc | ||
|
|
98238669fe | ||
|
|
a80de38517 | ||
|
|
4cb75d91f9 | ||
|
|
55e4dceeb7 | ||
|
|
0006b35abf | ||
|
|
b153391cbf | ||
|
|
c0659a3124 | ||
|
|
de8a7aa680 | ||
|
|
03b11693a3 | ||
|
|
23f2d79f70 | ||
|
|
f6db365391 | ||
|
|
95f74ceb1f | ||
|
|
91be4961d7 | ||
|
|
b3eb16bfd3 | ||
|
|
52d91ce198 | ||
|
|
c49efcc137 | ||
|
|
c14556153f | ||
|
|
5e1a2a423f | ||
|
|
3ac1ba079a | ||
|
|
b7a9cd1d45 | ||
|
|
c7b0ce036d | ||
|
|
f5afa07b0a | ||
|
|
1b550b976f | ||
|
|
68f0b9e0aa | ||
|
|
8945ef2652 | ||
|
|
0cc74d21a2 | ||
|
|
f4c79c8f68 | ||
|
|
b6ef8edb12 | ||
|
|
06ffd3e841 | ||
|
|
a3596b80e9 | ||
|
|
8ac1d92161 | ||
|
|
d55f1d5c06 | ||
|
|
854c637c73 | ||
|
|
92ad0c4a43 | ||
|
|
fb8facb787 | ||
|
|
30832cc427 | ||
|
|
ab7f29c0b2 | ||
|
|
6500442217 | ||
|
|
0e6a9fd0c1 | ||
|
|
ed7c489722 | ||
|
|
d4b9b5129a | ||
|
|
4a79e24db2 | ||
|
|
215d185fbe | ||
|
|
6f273bf7dd | ||
|
|
f2bc25c9ca | ||
|
|
ca6de6128f | ||
|
|
a1e5e6ca40 | ||
|
|
cf8bb1c5bc | ||
|
|
ebe1cef357 | ||
|
|
922d14f016 | ||
|
|
7a0c6a2f8f | ||
|
|
f35a2c0b2c | ||
|
|
c6b22089e3 | ||
|
|
cf0082f92f | ||
|
|
f4e129d4e2 | ||
|
|
ec6eaf2121 | ||
|
|
1dc1f91620 | ||
|
|
5adbc01ef1 | ||
|
|
c4a04bfd05 | ||
|
|
03711429f4 | ||
|
|
e3cb040c3c | ||
|
|
83a21179fa | ||
|
|
829da85aa5 | ||
|
|
3b1ac89312 | ||
|
|
57df29e7c9 | ||
|
|
d774067004 | ||
|
|
728154386c | ||
|
|
bc31182c63 | ||
|
|
a6bb84080a | ||
|
|
576ba7c011 | ||
|
|
b6893aad16 | ||
|
|
59d1624ce5 | ||
|
|
a0faf1f54d | ||
|
|
caa7c845c2 | ||
|
|
e43a80d0be | ||
|
|
f060a92563 | ||
|
|
483696261d | ||
|
|
610e35ec64 | ||
|
|
5fa5526ea2 | ||
|
|
42d9d99a92 | ||
|
|
c3ff9ca917 | ||
|
|
875f123d5b | ||
|
|
a5f053afe4 | ||
|
|
63a6992f97 | ||
|
|
54740378f0 | ||
|
|
1dc443bc06 | ||
|
|
e541109d7c | ||
|
|
993f124120 | ||
|
|
0a373ea708 | ||
|
|
0fae01495e | ||
|
|
97867384b1 | ||
|
|
c54f6e83ed | ||
|
|
a9a731dfc0 | ||
|
|
d0f469bd90 | ||
|
|
374375ce3f | ||
|
|
89ef03412e | ||
|
|
07d3fe3a79 | ||
|
|
24107040cc | ||
|
|
9d9fc6d0bf | ||
|
|
51f5991f1e | ||
|
|
a8b93516cc | ||
|
|
a85c228e59 | ||
|
|
04a75eaca2 | ||
|
|
2f46601396 | ||
|
|
18fc6a9e0e | ||
|
|
34675e03a8 | ||
|
|
4b5cf94a29 | ||
|
|
1729e1a94c | ||
|
|
60859714ae | ||
|
|
b5fcfd918b | ||
|
|
44176be964 | ||
|
|
3935866052 | ||
|
|
1e9c45222c | ||
|
|
adc3b1a25c | ||
|
|
9ae0417cad | ||
|
|
03453d6800 | ||
|
|
1ac9c4ea8d | ||
|
|
986bb49a88 | ||
|
|
8f39c4140e | ||
|
|
9c7903868f | ||
|
|
8ee1adf058 | ||
|
|
27fb1fcd53 | ||
|
|
29cc5c1e7f | ||
|
|
29bb76019f | ||
|
|
bf6d57f327 | ||
|
|
eb5ec05ef8 | ||
|
|
c723028eae | ||
|
|
5d024fdf33 | ||
|
|
ed99cb297b | ||
|
|
a0e794a7f1 | ||
|
|
0761342840 | ||
|
|
4da9123b67 | ||
|
|
c7158e2c7c | ||
|
|
4adc45483a | ||
|
|
ae0ff6b3e3 | ||
|
|
dc6d2e6a6d | ||
|
|
5127f50d1e | ||
|
|
a26f2a7359 | ||
|
|
42f1f445a9 | ||
|
|
51304485c3 | ||
|
|
63cc6edddd | ||
|
|
58abebe9ac | ||
|
|
1182ae9e26 | ||
|
|
3407174c2f | ||
|
|
913894eaa5 | ||
|
|
db91552578 |
47
.drone.yml
47
.drone.yml
@@ -22,7 +22,7 @@ steps:
|
|||||||
source /opt/qt57/bin/qt57-env.sh &&
|
source /opt/qt57/bin/qt57-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -59,7 +59,7 @@ steps:
|
|||||||
source /opt/qt58/bin/qt58-env.sh &&
|
source /opt/qt58/bin/qt58-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -96,7 +96,7 @@ steps:
|
|||||||
source /opt/qt59/bin/qt59-env.sh &&
|
source /opt/qt59/bin/qt59-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -137,7 +137,7 @@ steps:
|
|||||||
source /opt/qt510/bin/qt510-env.sh &&
|
source /opt/qt510/bin/qt510-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -178,7 +178,7 @@ steps:
|
|||||||
source /opt/qt511/bin/qt511-env.sh &&
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -219,7 +219,7 @@ steps:
|
|||||||
source /opt/qt511/bin/qt511-env.sh &&
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -237,13 +237,17 @@ name: qt-5.12
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build and test
|
- name: build and test
|
||||||
image: nextcloudci/client-5.12:client-5.12-2
|
image: nextcloudci/client-5.12:client-5.12-5
|
||||||
commands:
|
commands:
|
||||||
# Install QtKeyChain
|
# Install QtKeyChain
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=gcc-7 &&
|
export CC=gcc-7 &&
|
||||||
export CXX=g++-7 &&
|
export CXX=g++-7 &&
|
||||||
source /opt/qt512/bin/qt512-env.sh &&
|
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
||||||
|
export QTDIR=\$QT_BASE_DIR &&
|
||||||
|
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||||
|
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||||
|
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||||
cd /tmp &&
|
cd /tmp &&
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
cd qtkeychain &&
|
cd qtkeychain &&
|
||||||
@@ -257,10 +261,14 @@ steps:
|
|||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=gcc-7 &&
|
export CC=gcc-7 &&
|
||||||
export CXX=g++-7 &&
|
export CXX=g++-7 &&
|
||||||
source /opt/qt512/bin/qt512-env.sh &&
|
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
||||||
|
export QTDIR=\$QT_BASE_DIR &&
|
||||||
|
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||||
|
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||||
|
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -278,13 +286,17 @@ name: qt-5.12-clang
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build and test
|
- name: build and test
|
||||||
image: nextcloudci/client-5.12:client-5.12-2
|
image: nextcloudci/client-5.12:client-5.12-5
|
||||||
commands:
|
commands:
|
||||||
# Install QtKeyChain
|
# Install QtKeyChain
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=clang-6.0 &&
|
export CC=clang-6.0 &&
|
||||||
export CXX=clang++-6.0 &&
|
export CXX=clang++-6.0 &&
|
||||||
source /opt/qt512/bin/qt512-env.sh &&
|
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
||||||
|
export QTDIR=\$QT_BASE_DIR &&
|
||||||
|
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||||
|
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||||
|
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||||
cd /tmp &&
|
cd /tmp &&
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
cd qtkeychain &&
|
cd qtkeychain &&
|
||||||
@@ -298,10 +310,14 @@ steps:
|
|||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=clang-6.0 &&
|
export CC=clang-6.0 &&
|
||||||
export CXX=clang++-6.0 &&
|
export CXX=clang++-6.0 &&
|
||||||
source /opt/qt512/bin/qt512-env.sh &&
|
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
||||||
|
export QTDIR=\$QT_BASE_DIR &&
|
||||||
|
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
||||||
|
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
||||||
|
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -319,9 +335,10 @@ name: AppImage
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build
|
- name: build
|
||||||
image: nextcloudci/client-5.12:client-5.12-2
|
image: nextcloudci/client-5.12:client-5.12-5
|
||||||
commands:
|
commands:
|
||||||
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
||||||
|
- /bin/bash -c "./admin/linux/upload-appimage.sh"
|
||||||
trigger:
|
trigger:
|
||||||
branch:
|
branch:
|
||||||
- master
|
- master
|
||||||
|
|||||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,9 +1,3 @@
|
|||||||
[submodule "src/3rdparty/qtmacgoodies"]
|
|
||||||
path = src/3rdparty/qtmacgoodies
|
|
||||||
url = https://github.com/camilasan/qtmacgoodies.git
|
|
||||||
[submodule "binary"]
|
|
||||||
path = binary
|
|
||||||
url = git://github.com/owncloud/owncloud-client-binary.git
|
|
||||||
[submodule "src/3rdparty/libcrashreporter-qt"]
|
[submodule "src/3rdparty/libcrashreporter-qt"]
|
||||||
path = src/3rdparty/libcrashreporter-qt
|
path = src/3rdparty/libcrashreporter-qt
|
||||||
url = git://github.com/dschmidt/libcrashreporter-qt.git
|
url = git://github.com/dschmidt/libcrashreporter-qt.git
|
||||||
|
|||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
||||||
Name[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
Name[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
||||||
Comment[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
Comment[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
||||||
GenericName[bg_BG]=Синхронизиране на папка
|
GenericName[bg_BG]=Синхронизиране на папка
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/br_translation
Normal file
204
.tx/nextcloud.client-desktop/br_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[br]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
||||||
|
Comment[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
||||||
|
GenericName[br]=Tuliad kemprenan
|
||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[ca]=@APPLICATION_ICON_NAME@
|
Icon[ca]=@APPLICATION_ICON_NAME@
|
||||||
Name[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
Name[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
||||||
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
Comment[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
||||||
GenericName[ca]=Directori de sincronització
|
GenericName[ca]=Directori de sincronització
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[cs_CZ]=@NAZEV_IKONY_APLIKACE@
|
Icon[cs_CZ]=@APPLICATION_ICON_NAME@
|
||||||
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
||||||
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
||||||
GenericName[cs_CZ]=Synchronizace složek
|
GenericName[cs_CZ]=Synchronizace složek
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/cy_GB_translation
Normal file
204
.tx/nextcloud.client-desktop/cy_GB_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[cy_GB]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
||||||
|
Comment[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
||||||
|
GenericName[cy_GB]=Cydweddu Ffolder
|
||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[de]=@APPLICATION_ICON_NAME@
|
Icon[de]=@APPLICATION_ICON_NAME@
|
||||||
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
||||||
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
||||||
GenericName[de]=Synchronisationsordner
|
GenericName[de]=Synchronisierungsordner
|
||||||
|
|||||||
@@ -198,4 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
|
Icon[el]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
||||||
|
Comment[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
||||||
GenericName[el]=Συγχρονισμός φακέλου
|
GenericName[el]=Συγχρονισμός φακέλου
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/es_AR_translation
Normal file
204
.tx/nextcloud.client-desktop/es_AR_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[es_AR]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
||||||
|
Comment[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
||||||
|
GenericName[es_AR]=Sincronización de carpetas
|
||||||
204
.tx/nextcloud.client-desktop/et_translation
Normal file
204
.tx/nextcloud.client-desktop/et_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[et_EE]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[et_EE]=@APPLICATION_NAME@ töölaua sünkimise klient
|
||||||
|
Comment[et_EE]=@APPLICATION_NAME@ töölaua sünkroniseerimise klient
|
||||||
|
GenericName[et_EE]=Kausta Sünkroonimine
|
||||||
201
.tx/nextcloud.client-desktop/fa_translation
Normal file
201
.tx/nextcloud.client-desktop/fa_translation
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Comment[fa]=@ APPLICATION_NAME @ مشتری هماهنگ سازی دسکتاپ
|
||||||
204
.tx/nextcloud.client-desktop/fi_translation
Normal file
204
.tx/nextcloud.client-desktop/fi_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[fi_FI]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
||||||
|
Comment[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
||||||
|
GenericName[fi_FI]=Kansio synkronointi
|
||||||
204
.tx/nextcloud.client-desktop/oc_translation
Normal file
204
.tx/nextcloud.client-desktop/oc_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[oc]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[oc]=@APPLICATION_NAME@ client de sincronizacion
|
||||||
|
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
|
||||||
|
GenericName[oc]=Sincro. dossièr
|
||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[ro]=@APPLICATION_ICON_NAME@
|
Icon[ro]=@APPLICATION_ICON_NAME@
|
||||||
Name[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
Name[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
||||||
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
||||||
GenericName[ro]=Sincronizare dosare
|
GenericName[ro]=Sincronizare director
|
||||||
|
|||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
||||||
Name[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
Name[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
||||||
Comment[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
Comment[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
||||||
GenericName[sk_SK]=Synchnonizácia priečinkov
|
GenericName[sk_SK]=Synchronizácia priečinkov
|
||||||
|
|||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sl]=@APPLICATION_ICON_NAME@
|
Icon[sl]=@APPLICATION_ICON_NAME@
|
||||||
Name[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
Name[sl]=@APPLICATION_NAME@ program za usklajevanje
|
||||||
Comment[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
Comment[sl]=@APPLICATION_NAME@ program za usklajevanje
|
||||||
GenericName[sl]=Usklajevanje map
|
GenericName[sl]=Usklajevanje map
|
||||||
|
|||||||
@@ -199,4 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sv]=@APPLICATION_ICON_NAME@
|
Icon[sv]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[sv]=@APPLICATION_NAME@ desktopssynkklient
|
||||||
|
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
|
||||||
GenericName[sv]=Mappsynkronisering
|
GenericName[sv]=Mappsynkronisering
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/sw_translation
Normal file
204
.tx/nextcloud.client-desktop/sw_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[sw]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
||||||
|
Comment[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
||||||
|
GenericName[sw]=Fanana Kabrasha
|
||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[uk]=@APPLICATION_ICON_NAME@
|
Icon[uk]=@APPLICATION_ICON_NAME@
|
||||||
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
||||||
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
||||||
GenericName[uk]=Синхронізація каталогів
|
GenericName[uk]=Синхронізація тек
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
|
Icon[zh_TW]=@APPLICATION_ICON_NAME@
|
||||||
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||||
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||||
GenericName[zh_TW]=資料夾同步
|
GenericName[zh_TW]=資料夾同步
|
||||||
|
|||||||
@@ -123,6 +123,15 @@ if(NO_MSG_HANDLER)
|
|||||||
add_definitions(-DNO_MSG_HANDLER=1)
|
add_definitions(-DNO_MSG_HANDLER=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# this option builds the updater
|
||||||
|
option(BUILD_UPDATER "BUILD_UPDATER" OFF)
|
||||||
|
if(BUILD_UPDATER)
|
||||||
|
message("Compiling with updater")
|
||||||
|
add_definitions(-DBUILD_UPDATER=1)
|
||||||
|
else()
|
||||||
|
message("Compiling without updater")
|
||||||
|
endif()
|
||||||
|
|
||||||
# this option builds the shell integration
|
# this option builds the shell integration
|
||||||
option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON)
|
option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON)
|
||||||
|
|
||||||
@@ -172,9 +181,9 @@ if(APPLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILD_CLIENT)
|
if(BUILD_CLIENT)
|
||||||
if(APPLE)
|
if(APPLE AND BUILD_UPDATER)
|
||||||
find_package(Sparkle)
|
find_package(Sparkle)
|
||||||
endif(APPLE)
|
endif()
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
find_package(INotify REQUIRED)
|
find_package(INotify REQUIRED)
|
||||||
@@ -203,14 +212,24 @@ if( WIN32 )
|
|||||||
add_definitions( -D__USE_MINGW_ANSI_STDIO=1 )
|
add_definitions( -D__USE_MINGW_ANSI_STDIO=1 )
|
||||||
add_definitions( -DNOMINMAX )
|
add_definitions( -DNOMINMAX )
|
||||||
# Get APIs from from Vista onwards.
|
# Get APIs from from Vista onwards.
|
||||||
add_definitions( -D_WIN32_WINNT=0x0600)
|
add_definitions( -D_WIN32_WINNT=0x0601 )
|
||||||
add_definitions( -DWINVER=0x0600)
|
add_definitions( -DWINVER=0x0601 )
|
||||||
|
if( MSVC )
|
||||||
|
# Use automatic overload for suitable CRT safe-functions
|
||||||
|
# See https://docs.microsoft.com/de-de/cpp/c-runtime-library/security-features-in-the-crt?view=vs-2019
|
||||||
|
add_definitions( -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 )
|
||||||
|
# Also: Disable compiler warnings because we don't use Windows CRT safe-functions explicitly and don't intend to
|
||||||
|
# as this is a pure cross-platform source the only alternative would be a ton of ifdefs with calls to the _s version
|
||||||
|
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
||||||
|
endif( MSVC )
|
||||||
endif( WIN32 )
|
endif( WIN32 )
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
include(SanitizerFlags)
|
||||||
|
|
||||||
# Handle Translations, pick all client_* files from trans directory.
|
# Handle Translations, pick all client_* files from trans directory.
|
||||||
file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts)
|
file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts)
|
||||||
set(TRANSLATIONS ${TRANS_FILES})
|
set(TRANSLATIONS ${TRANS_FILES})
|
||||||
|
|||||||
124
ChangeLog
124
ChangeLog
@@ -1,3 +1,127 @@
|
|||||||
|
ChangeLog
|
||||||
|
====================
|
||||||
|
For details check https://nextcloud.com/blog/category/release.
|
||||||
|
|
||||||
|
2.6 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
|
version 2.6.4 (release 2020-03-04)
|
||||||
|
* Fix Explorer pinning: Add fallbacks for Shell commands (fixes #1599)
|
||||||
|
* WebFlowCredentials: Make username comparison case-insensitive (fix #1741)
|
||||||
|
* ActivityListModel: Show full date and time as a Tooltip only
|
||||||
|
* Disable HTTP/2 for now due to Qt bug, allow enabling it via env var
|
||||||
|
* Fix Explorer integration re-save and hide option on non-Windows
|
||||||
|
* l10n: Changes to improve source strings
|
||||||
|
* Updater: Add query-parameter 'updatesegment' to the update check
|
||||||
|
* Allow Desktop translation merging and custom backport branches
|
||||||
|
|
||||||
|
version 2.6.3 (release 2020-02-17)
|
||||||
|
* Add UserInfo class and fetch quota via API instead of PropfindJob
|
||||||
|
* l10n: Changed grammar and triple dots to ellipsis
|
||||||
|
* l10n: Changed spelling of "user name" to "username"
|
||||||
|
* Start the client in background if activated by D-Bus
|
||||||
|
* Do not install files related to cloud providers under Xenial
|
||||||
|
* Make sure that the libcloudprovider integration is using a valid D-Bus path
|
||||||
|
* Changed product name to Nextcloud
|
||||||
|
* Update autoupdate.rst
|
||||||
|
* Use system proxy by default if no config file is present
|
||||||
|
* Install libcloudproviders files by default on debian
|
||||||
|
* Windows 7 is out of support
|
||||||
|
* BugFix: Handle broken shared file error gracefully
|
||||||
|
* Fix Explorer integration on Windows and the crash on other systems
|
||||||
|
* Welcome to 2020
|
||||||
|
* Updated year in legalnotice.cpp
|
||||||
|
* apply http2 qt resend patch from owncloud
|
||||||
|
|
||||||
|
version 2.6.2 (release 2019-12-24)
|
||||||
|
* Revert DEFAULT_REMOTE_POLL_INTERVAL back from 5 seconds to 30 seconds
|
||||||
|
* Use user-provided username in displayName() - Fix #836
|
||||||
|
* Fix typo
|
||||||
|
* Build with libcloudproviders on debian and in the AppImage
|
||||||
|
* Fix tests for Windows platform
|
||||||
|
* Merge the list of ignored files/symlinks into one Activity notification.
|
||||||
|
* Fix clang's variadic macro warnings
|
||||||
|
* Add libdbus-1-dev to the build dependencies
|
||||||
|
* Compare QDateTime objects more efficient
|
||||||
|
* Improve the translation of "Share via …"
|
||||||
|
* Upgrade for Qt 5.12.5 in docker-ci
|
||||||
|
* Bump Qt 5.12.5 image
|
||||||
|
* Add timestamp to Mac installer code signing
|
||||||
|
* MacOS build: Avoid the Get-Task-Allow Entitlement (Notarization)
|
||||||
|
* Build for Debian stable and oldstable
|
||||||
|
* Happy new year
|
||||||
|
* Fall back to old login flow on GS as this is not yet ready
|
||||||
|
* [stable-2.6] macOS build: Avoid the Get-Task-Allow Entitlement (Notarization)
|
||||||
|
* Fix remote wipe keychain storage (issue #1592)
|
||||||
|
* Fix copyright year in MacOSXBundleInfo.plist.in for 2019
|
||||||
|
* Fix macOS GUI (Qt 5.12)
|
||||||
|
* Windows: Workaround for storing >= 4k (4096 bit) client-cert SSL keys
|
||||||
|
* Fix Activity List: Add check to avoid first empty entry
|
||||||
|
* Fix macOS GUI (Qt 5.12) No. 2 (continuation of #1651)
|
||||||
|
* Show date and time in activity log (fixes issue #1683)
|
||||||
|
* Login Flow v2 enhancements
|
||||||
|
* Activity List: Fix crash and folder opening
|
||||||
|
* Fix issue #1237: White text on almost-white background
|
||||||
|
* Heavy refactoring: Windows workaround for >= 4k (4096 bit) client-cert SSL keys and large certs
|
||||||
|
* Fix date in ActivityWidget and remove unnecessary string conversion
|
||||||
|
|
||||||
|
version 2.6.1 (release 2019-11-04)
|
||||||
|
* Changed max GUI bandwidth limits
|
||||||
|
* Add sync date next to "Synchronized with local folder"
|
||||||
|
* Slideshow buttons
|
||||||
|
* Fix qt warning about registering a URL sheme first.
|
||||||
|
* Issue #1216: added sync-exclude entry for emacs recovery files
|
||||||
|
* Race condition in the remote size loading logic
|
||||||
|
* Review of msvc/gcc warnings -> code cleanup, prevention of implicit casts, variadic macros
|
||||||
|
* Fix double slashes
|
||||||
|
* Fixing E2E CSR transmission failure for new connections
|
||||||
|
* Fixed missing 'translatable' exclusions, added missing window titles
|
||||||
|
* Checks if exclude file is empty before creating the regular expressions.
|
||||||
|
* Add server info to menu
|
||||||
|
* Fixed grammar
|
||||||
|
* Prevent jumping of tray menu
|
||||||
|
* Don't run connection wizard when quitting the application
|
||||||
|
* Avoiding copying in range-based loops
|
||||||
|
* Add a 'Content-Length: 0' header to initial POST requests
|
||||||
|
* Remote wipe.
|
||||||
|
* Pick from upstream: Update qtmacgoodies for an OSX crash fix #6930
|
||||||
|
* fix for issue no. #1351
|
||||||
|
* Merge the list of ignored files/symlinks into one Activity notification.
|
||||||
|
* Update submodules for Qt 5.12.5 (qtmacgoodies)
|
||||||
|
* Fix duplicate items in Apps menu (a bug introduced in #1477)
|
||||||
|
* Fix #1182
|
||||||
|
* Fix remote wipe when a proxy is configured.
|
||||||
|
* Fix updater message: Download link instead of "use the system's update
|
||||||
|
|
||||||
|
version 2.6.0 Login flow v2 (release 2019-09-27)
|
||||||
|
* Reinstate Debian build in the new Drone config
|
||||||
|
* Typo
|
||||||
|
* Marking unused strings as unstranslatable
|
||||||
|
* Fixes #607
|
||||||
|
* Fixes issue #878
|
||||||
|
* Fixes issue #1187
|
||||||
|
* Displays FileIgnored activities with an info icon
|
||||||
|
* Minor text change in the link to help in the tab 'General'.
|
||||||
|
* Update Qt 5.5 compatibility patch for Xenial
|
||||||
|
* Remove Ubuntu Cosmic and add Eoan package
|
||||||
|
* Add proper CA to client side certificate connection
|
||||||
|
* Remove dependency on libgnome-keyring0 on Eoan
|
||||||
|
* Read .sync_exclude.lst in each subdirectory
|
||||||
|
* Updates ChangeLog.
|
||||||
|
* Login flow v2
|
||||||
|
* Adds SSL client cert storage to webflow + Login Flow v2
|
||||||
|
* Windows: Workaround for CredWriteW used by QtKeychain
|
||||||
|
* Integrated registry check on windows when hasDarkSystray is called.
|
||||||
|
* Logo update
|
||||||
|
* Updated .gitignore to integrate unwanted files when working with VSC …
|
||||||
|
* Full-Scaled new logo in Windows 10 start menu tile
|
||||||
|
* Qt5.5 compatiblity patch for login flow V2 + UI improvement (Use newer digest algorithms in TLS error dialog)
|
||||||
|
* Fix for #1382 "linux client crashes for no discernable reason"
|
||||||
|
* UI improvement: Message box: Delete / Keep all files
|
||||||
|
* Improve wording of the context menu in the file manager extension.
|
||||||
|
* Changes wording in the share context menu.
|
||||||
|
* Fix White Window issue on Windows by upgrading to Qt 5.12.5
|
||||||
|
|
||||||
2.5 Series ChangeLog
|
2.5 Series ChangeLog
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,12 @@ set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE STRING
|
|||||||
set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" )
|
set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" )
|
||||||
set( APPLICATION_ICON_NAME "Nextcloud" )
|
set( APPLICATION_ICON_NAME "Nextcloud" )
|
||||||
set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If entered the server can only connect to this instance" )
|
set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If entered the server can only connect to this instance" )
|
||||||
|
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
|
||||||
|
|
||||||
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
||||||
|
set( LINUX_APPLICATION_ID "${APPLICATION_REV_DOMAIN}.${LINUX_PACKAGE_SHORTNAME}")
|
||||||
|
|
||||||
set( THEME_CLASS "NextcloudTheme" )
|
set( THEME_CLASS "NextcloudTheme" )
|
||||||
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
|
|
||||||
set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" )
|
set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" )
|
||||||
|
|
||||||
set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image")
|
set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image")
|
||||||
@@ -23,6 +24,9 @@ option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
|||||||
#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE STRING "URL for crash reporter" )
|
#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE STRING "URL for crash reporter" )
|
||||||
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
||||||
|
|
||||||
|
## Updater options
|
||||||
|
option( BUILD_UPDATER "Build updater" OFF )
|
||||||
|
|
||||||
option( WITH_PROVIDERS "Build with providers list" ON )
|
option( WITH_PROVIDERS "Build with providers list" ON )
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,14 +61,14 @@ For more info: [Wiki/Daily Builds](https://github.com/nextcloud/desktop/wiki/Dai
|
|||||||
### :bomb: Reporting issues
|
### :bomb: Reporting issues
|
||||||
|
|
||||||
- If you find any bugs or have any suggestion for improvement, please
|
- If you find any bugs or have any suggestion for improvement, please
|
||||||
file an issue at https://github.com/nextcloud/client/issues. Do not
|
file an issue at https://github.com/nextcloud/desktop/issues. Do not
|
||||||
contact the authors directly by mail, as this increases the chance
|
contact the authors directly by mail, as this increases the chance
|
||||||
of your report being lost. :boom:
|
of your report being lost. :boom:
|
||||||
|
|
||||||
### :smiley: :trophy: Pull requests
|
### :smiley: :trophy: Pull requests
|
||||||
|
|
||||||
- If you created a patch :heart_eyes:, please submit a [Pull
|
- If you created a patch :heart_eyes:, please submit a [Pull
|
||||||
Request](https://github.com/nextcloud/client/pulls).
|
Request](https://github.com/nextcloud/desktop/pulls).
|
||||||
- How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
|
- How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 2 )
|
set( MIRALL_VERSION_MAJOR 2 )
|
||||||
set( MIRALL_VERSION_MINOR 6 )
|
set( MIRALL_VERSION_MINOR 6 )
|
||||||
set( MIRALL_VERSION_PATCH 0 )
|
set( MIRALL_VERSION_PATCH 5 )
|
||||||
set( MIRALL_VERSION_YEAR 2019 )
|
set( MIRALL_VERSION_YEAR 2020 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ RUN apt-get update -q && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --
|
|||||||
libsqlite3-dev \
|
libsqlite3-dev \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
libcmocka-dev \
|
libcmocka-dev \
|
||||||
|
libcloudproviders-dev \
|
||||||
qt5-default \
|
qt5-default \
|
||||||
qttools5-dev-tools \
|
qttools5-dev-tools \
|
||||||
libqt5webkit5-dev \
|
libqt5webkit5-dev \
|
||||||
|
|||||||
@@ -6,23 +6,26 @@ mkdir /app
|
|||||||
mkdir /build
|
mkdir /build
|
||||||
|
|
||||||
#Set Qt-5.12
|
#Set Qt-5.12
|
||||||
export QT_BASE_DIR=/opt/qt512
|
export QT_BASE_DIR=/opt/qt5.12.8
|
||||||
export QTDIR=$QT_BASE_DIR
|
export QTDIR=$QT_BASE_DIR
|
||||||
export PATH=$QT_BASE_DIR/bin:$PATH
|
export PATH=$QT_BASE_DIR/bin:$PATH
|
||||||
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
|
||||||
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
|
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
|
||||||
|
|
||||||
|
#Set APPID for .desktop file processing
|
||||||
|
export LINUX_APPLICATION_ID=com.nextcloud.desktopclient.nextcloud
|
||||||
|
|
||||||
#set defaults
|
#set defaults
|
||||||
export SUFFIX=${DRONE_PULL_REQUEST:=master}
|
export SUFFIX=${DRONE_PULL_REQUEST:=master}
|
||||||
if [ $SUFFIX != "master" ]; then
|
if [ $SUFFIX != "master" ]; then
|
||||||
SUFFIX="PR-$SUFFIX"
|
SUFFIX="PR-$SUFFIX"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#QtKeyChain 0.9.1
|
#QtKeyChain master
|
||||||
cd /build
|
cd /build
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git
|
git clone https://github.com/frankosterfeld/qtkeychain.git
|
||||||
cd qtkeychain
|
cd qtkeychain
|
||||||
git checkout v0.9.1
|
git checkout master
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -D CMAKE_INSTALL_PREFIX=/usr ../
|
cmake -D CMAKE_INSTALL_PREFIX=/usr ../
|
||||||
@@ -35,6 +38,7 @@ mkdir build-client
|
|||||||
cd build-client
|
cd build-client
|
||||||
cmake -D CMAKE_INSTALL_PREFIX=/usr \
|
cmake -D CMAKE_INSTALL_PREFIX=/usr \
|
||||||
-D NO_SHIBBOLETH=1 \
|
-D NO_SHIBBOLETH=1 \
|
||||||
|
-D BUILD_UPDATER=ON \
|
||||||
-D QTKEYCHAIN_LIBRARY=/app/usr/lib/x86_64-linux-gnu/libqt5keychain.so \
|
-D QTKEYCHAIN_LIBRARY=/app/usr/lib/x86_64-linux-gnu/libqt5keychain.so \
|
||||||
-D QTKEYCHAIN_INCLUDE_DIR=/app/usr/include/qt5keychain/ \
|
-D QTKEYCHAIN_INCLUDE_DIR=/app/usr/include/qt5keychain/ \
|
||||||
-DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \
|
-DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \
|
||||||
@@ -62,11 +66,12 @@ rm -rf ./usr/share/caja-python/
|
|||||||
rm -rf ./usr/share/nautilus-python/
|
rm -rf ./usr/share/nautilus-python/
|
||||||
rm -rf ./usr/share/nemo-python/
|
rm -rf ./usr/share/nemo-python/
|
||||||
|
|
||||||
# Move sync exlucde to right location
|
# Move sync exclude to right location
|
||||||
mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/
|
mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/
|
||||||
rm -rf ./etc
|
rm -rf ./etc
|
||||||
|
|
||||||
sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' usr/share/applications/nextcloud.desktop # Bug in desktop file?
|
DESKTOP_FILE=/app/usr/share/applications/${LINUX_APPLICATION_ID}.desktop
|
||||||
|
sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' ${DESKTOP_FILE} # Bug in desktop file?
|
||||||
cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME
|
cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME
|
||||||
|
|
||||||
|
|
||||||
@@ -87,17 +92,12 @@ chmod a+x linuxdeployqt*.AppImage
|
|||||||
rm ./linuxdeployqt-continuous-x86_64.AppImage
|
rm ./linuxdeployqt-continuous-x86_64.AppImage
|
||||||
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
||||||
export LD_LIBRARY_PATH=/app/usr/lib/
|
export LD_LIBRARY_PATH=/app/usr/lib/
|
||||||
./squashfs-root/AppRun /app/usr/share/applications/nextcloud.desktop -bundle-non-qt-libs
|
./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs
|
||||||
|
|
||||||
# Set origin
|
# Set origin
|
||||||
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0
|
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0
|
||||||
|
|
||||||
# Build AppImage
|
# Build AppImage
|
||||||
./squashfs-root/AppRun /app/usr/share/applications/nextcloud.desktop -appimage
|
./squashfs-root/AppRun ${DESKTOP_FILE} -appimage
|
||||||
|
|
||||||
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
|
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
|
||||||
|
|
||||||
curl --upload-file $(readlink -f ./Nextcloud*.AppImage) https://transfer.sh/Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "Get the AppImage at the link above!"
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ Build-Depends: cmake,
|
|||||||
extra-cmake-modules (>= 5.16),
|
extra-cmake-modules (>= 5.16),
|
||||||
libkf5kio-dev,
|
libkf5kio-dev,
|
||||||
libcmocka-dev,
|
libcmocka-dev,
|
||||||
|
libcloudproviders-dev,
|
||||||
|
libdbus-1-dev,
|
||||||
libhttp-dav-perl,
|
libhttp-dav-perl,
|
||||||
libinotify-dev [kfreebsd-any],
|
libinotify-dev [kfreebsd-any],
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
|
|||||||
23
admin/linux/debian/debian.focal/changelog
Normal file
23
admin/linux/debian/debian.focal/changelog
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
nextcloud-client (2.3.3-1.0~focal1) focal; urgency=medium
|
||||||
|
|
||||||
|
* Debian build support for the forked client.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.1-1.0~focal1) focal; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.0-1.0~focal1) focal; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.4~focal1) focal; urgency=medium
|
||||||
|
|
||||||
|
* The locale-specific icon names are correct too
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
||||||
90
admin/linux/debian/debian.focal/control
Normal file
90
admin/linux/debian/debian.focal/control
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
Source: nextcloud-client
|
||||||
|
Section: contrib/devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
|
||||||
|
Build-Depends: cmake,
|
||||||
|
debhelper,
|
||||||
|
cdbs,
|
||||||
|
dh-python,
|
||||||
|
extra-cmake-modules (>= 5.16),
|
||||||
|
libkf5kio-dev,
|
||||||
|
libcmocka-dev,
|
||||||
|
libcloudproviders-dev,
|
||||||
|
libdbus-1-dev,
|
||||||
|
libhttp-dav-perl,
|
||||||
|
libinotify-dev [kfreebsd-any],
|
||||||
|
libqt5svg5-dev,
|
||||||
|
libqt5webkit5-dev,
|
||||||
|
libsqlite3-dev,
|
||||||
|
libssl-dev (>= 1.1.0),
|
||||||
|
zlib1g-dev,
|
||||||
|
optipng,
|
||||||
|
pkg-kde-tools,
|
||||||
|
python3-sphinx,
|
||||||
|
python3-all,
|
||||||
|
qt5keychain-dev,
|
||||||
|
qtwebengine5-dev,
|
||||||
|
qtdeclarative5-dev,
|
||||||
|
qttools5-dev,
|
||||||
|
qttools5-dev-tools,
|
||||||
|
xvfb
|
||||||
|
Standards-Version: 3.9.8
|
||||||
|
Homepage: https://github.com/nextcloud/client_theming
|
||||||
|
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
|
||||||
|
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
|
||||||
|
|
||||||
|
Package: nextcloud-client
|
||||||
|
Architecture: any
|
||||||
|
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
|
||||||
|
Description: Nextcloud desktop sync client
|
||||||
|
Use the desktop client to keep your files synchronized
|
||||||
|
between your Nextcloud server and your desktop. Select
|
||||||
|
one or more directories on your local machine and always
|
||||||
|
have access to your latest files wherever you are.
|
||||||
|
|
||||||
|
Package: libnextcloudsync0
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||||
|
Description: Nextcloud sync library
|
||||||
|
Used by the Nextcloud desktop client as the synchronization engine.
|
||||||
|
|
||||||
|
Package: libnextcloudsync-dev
|
||||||
|
Architecture: any
|
||||||
|
Section: contrib/libdevel
|
||||||
|
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
|
||||||
|
Description: Nextcloud sync library development files
|
||||||
|
The headers and development library for the Nextcloud sync library.
|
||||||
|
|
||||||
|
Package: nextcloud-client-l10n
|
||||||
|
Architecture: all
|
||||||
|
Depends: ${misc:Depends}
|
||||||
|
Description: Nextcloud client internatialization files
|
||||||
|
The translation files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-nautilus
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-nautilus, nautilus, ${misc:Depends}
|
||||||
|
Description: Nautilus plugin for Nextcloud
|
||||||
|
This package contains a Nautilus plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-nemo
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo | nemo-python, nemo, ${misc:Depends}
|
||||||
|
Description: Nemo plugin for Nextcloud
|
||||||
|
This package contains a Nemo plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-caja
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-caja, caja, ${misc:Depends}
|
||||||
|
Description: Caja plugin for Nextcloud
|
||||||
|
This package contains a Caja plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-dolphin
|
||||||
|
Architecture: any
|
||||||
|
Depends: dolphin (>= 4:15.12.1), libnextcloudsync0 (= ${binary:Version}), nextcloud-client, ${misc:Depends}, ${shlibs:Depends}
|
||||||
|
Description: Dolphin plugin for Nextcloud
|
||||||
|
This package contains a Dolphin plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
23
admin/linux/debian/debian.groovy/changelog
Normal file
23
admin/linux/debian/debian.groovy/changelog
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
nextcloud-client (2.3.3-1.0~groovy1) groovy; urgency=medium
|
||||||
|
|
||||||
|
* Debian build support for the forked client.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.1-1.0~groovy1) groovy; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.0-1.0~groovy1) groovy; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.4~groovy1) groovy; urgency=medium
|
||||||
|
|
||||||
|
* The locale-specific icon names are correct too
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
||||||
90
admin/linux/debian/debian.groovy/control
Normal file
90
admin/linux/debian/debian.groovy/control
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
Source: nextcloud-client
|
||||||
|
Section: contrib/devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
|
||||||
|
Build-Depends: cmake,
|
||||||
|
debhelper,
|
||||||
|
cdbs,
|
||||||
|
dh-python,
|
||||||
|
extra-cmake-modules (>= 5.16),
|
||||||
|
libkf5kio-dev,
|
||||||
|
libcmocka-dev,
|
||||||
|
libcloudproviders-dev,
|
||||||
|
libdbus-1-dev,
|
||||||
|
libhttp-dav-perl,
|
||||||
|
libinotify-dev [kfreebsd-any],
|
||||||
|
libqt5svg5-dev,
|
||||||
|
libqt5webkit5-dev,
|
||||||
|
libsqlite3-dev,
|
||||||
|
libssl-dev (>= 1.1.0),
|
||||||
|
zlib1g-dev,
|
||||||
|
optipng,
|
||||||
|
pkg-kde-tools,
|
||||||
|
python3-sphinx,
|
||||||
|
python3-all,
|
||||||
|
qt5keychain-dev,
|
||||||
|
qtwebengine5-dev,
|
||||||
|
qtdeclarative5-dev,
|
||||||
|
qttools5-dev,
|
||||||
|
qttools5-dev-tools,
|
||||||
|
xvfb
|
||||||
|
Standards-Version: 3.9.8
|
||||||
|
Homepage: https://github.com/nextcloud/client_theming
|
||||||
|
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
|
||||||
|
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
|
||||||
|
|
||||||
|
Package: nextcloud-client
|
||||||
|
Architecture: any
|
||||||
|
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
|
||||||
|
Description: Nextcloud desktop sync client
|
||||||
|
Use the desktop client to keep your files synchronized
|
||||||
|
between your Nextcloud server and your desktop. Select
|
||||||
|
one or more directories on your local machine and always
|
||||||
|
have access to your latest files wherever you are.
|
||||||
|
|
||||||
|
Package: libnextcloudsync0
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||||
|
Description: Nextcloud sync library
|
||||||
|
Used by the Nextcloud desktop client as the synchronization engine.
|
||||||
|
|
||||||
|
Package: libnextcloudsync-dev
|
||||||
|
Architecture: any
|
||||||
|
Section: contrib/libdevel
|
||||||
|
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
|
||||||
|
Description: Nextcloud sync library development files
|
||||||
|
The headers and development library for the Nextcloud sync library.
|
||||||
|
|
||||||
|
Package: nextcloud-client-l10n
|
||||||
|
Architecture: all
|
||||||
|
Depends: ${misc:Depends}
|
||||||
|
Description: Nextcloud client internatialization files
|
||||||
|
The translation files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-nautilus
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-nautilus, nautilus, ${misc:Depends}
|
||||||
|
Description: Nautilus plugin for Nextcloud
|
||||||
|
This package contains a Nautilus plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-nemo
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo | nemo-python, nemo, ${misc:Depends}
|
||||||
|
Description: Nemo plugin for Nextcloud
|
||||||
|
This package contains a Nemo plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-caja
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-caja, caja, ${misc:Depends}
|
||||||
|
Description: Caja plugin for Nextcloud
|
||||||
|
This package contains a Caja plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-dolphin
|
||||||
|
Architecture: any
|
||||||
|
Depends: dolphin (>= 4:15.12.1), libnextcloudsync0 (= ${binary:Version}), nextcloud-client, ${misc:Depends}, ${shlibs:Depends}
|
||||||
|
Description: Dolphin plugin for Nextcloud
|
||||||
|
This package contains a Dolphin plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
48
admin/linux/debian/debian.oldstable/changelog
Normal file
48
admin/linux/debian/debian.oldstable/changelog
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
nextcloud-client (2.3.3-1.0~oldstable1) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* Debian build support for the forked client.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.1-1.0) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.0-1.0) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.4) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* The locale-specific icon names are correct too
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.3) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* Caja syncstate plugin is built.
|
||||||
|
* The syncstate plugin has application-specific name
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Fri, 27 Jan 2017 19:34:18 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.2) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* Fixed appname in the Nemo syncstate extension.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 19 Jan 2017 16:46:50 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.1) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* Added Nautilus and Nemo syncstate extensions.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 17 Jan 2017 19:55:32 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.0) oldstable; urgency=medium
|
||||||
|
|
||||||
|
* Initial release.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Wed, 14 Dec 2016 20:07:46 +0100
|
||||||
84
admin/linux/debian/debian.oldstable/control
Normal file
84
admin/linux/debian/debian.oldstable/control
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
Source: nextcloud-client
|
||||||
|
Section: contrib/devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
|
||||||
|
Build-Depends: cmake,
|
||||||
|
debhelper,
|
||||||
|
cdbs,
|
||||||
|
dh-python,
|
||||||
|
extra-cmake-modules (>= 5.16),
|
||||||
|
kdelibs5-dev,
|
||||||
|
kio-dev,
|
||||||
|
libcmocka-dev,
|
||||||
|
libdbus-1-dev,
|
||||||
|
libhttp-dav-perl,
|
||||||
|
libinotify-dev [kfreebsd-any],
|
||||||
|
libqt5webkit5-dev,
|
||||||
|
libqt5svg5-dev,
|
||||||
|
libsqlite3-dev,
|
||||||
|
libssl-dev (>= 1.1.0),
|
||||||
|
zlib1g-dev,
|
||||||
|
optipng,
|
||||||
|
pkg-kde-tools,
|
||||||
|
python-sphinx | python3-sphinx,
|
||||||
|
python3-all,
|
||||||
|
qt5keychain-dev,
|
||||||
|
qtwebengine5-dev,
|
||||||
|
qtdeclarative5-dev,
|
||||||
|
qttools5-dev,
|
||||||
|
qttools5-dev-tools,
|
||||||
|
xvfb
|
||||||
|
Standards-Version: 3.9.8
|
||||||
|
Homepage: https://github.com/nextcloud/client_theming
|
||||||
|
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
|
||||||
|
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
|
||||||
|
|
||||||
|
Package: nextcloud-client
|
||||||
|
Architecture: any
|
||||||
|
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
|
||||||
|
Recommends: libgnome-keyring0
|
||||||
|
Description: Nextcloud desktop sync client
|
||||||
|
Use the desktop client to keep your files synchronized
|
||||||
|
between your Nextcloud server and your desktop. Select
|
||||||
|
one or more directories on your local machine and always
|
||||||
|
have access to your latest files wherever you are.
|
||||||
|
|
||||||
|
Package: libnextcloudsync0
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||||
|
Description: Nextcloud sync library
|
||||||
|
Used by the Nextcloud desktop client as the synchronization engine.
|
||||||
|
|
||||||
|
Package: libnextcloudsync-dev
|
||||||
|
Architecture: any
|
||||||
|
Section: contrib/libdevel
|
||||||
|
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
|
||||||
|
Description: Nextcloud sync library development files
|
||||||
|
The headers and development library for the Nextcloud sync library.
|
||||||
|
|
||||||
|
Package: nextcloud-client-l10n
|
||||||
|
Architecture: all
|
||||||
|
Depends: ${misc:Depends}
|
||||||
|
Description: Nextcloud client internatialization files
|
||||||
|
The translation files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-nautilus
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nautilus, nautilus, ${misc:Depends}
|
||||||
|
Description: Nautilus plugin for Nextcloud
|
||||||
|
This package contains a Nautilus plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-nemo
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo, nemo, ${misc:Depends}
|
||||||
|
Description: Nemo plugin for Nextcloud
|
||||||
|
This package contains a Nemo plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
|
|
||||||
|
Package: nextcloud-client-caja
|
||||||
|
Architecture: all
|
||||||
|
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-caja, caja, ${misc:Depends}
|
||||||
|
Description: Caja plugin for Nextcloud
|
||||||
|
This package contains a Caja plugin to display
|
||||||
|
synchronization status icons for Nextcloud files.
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
usr/bin
|
||||||
|
usr/share/applications
|
||||||
|
usr/share/icons
|
||||||
|
debian/101-sync-inotify.conf etc/sysctl.d
|
||||||
@@ -9,7 +9,10 @@ Build-Depends: cmake,
|
|||||||
extra-cmake-modules (>= 5.16),
|
extra-cmake-modules (>= 5.16),
|
||||||
kdelibs5-dev,
|
kdelibs5-dev,
|
||||||
kio-dev,
|
kio-dev,
|
||||||
|
libavcodec58,
|
||||||
libcmocka-dev,
|
libcmocka-dev,
|
||||||
|
libcloudproviders-dev,
|
||||||
|
libdbus-1-dev,
|
||||||
libhttp-dav-perl,
|
libhttp-dav-perl,
|
||||||
libinotify-dev [kfreebsd-any],
|
libinotify-dev [kfreebsd-any],
|
||||||
libqt5webkit5-dev,
|
libqt5webkit5-dev,
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
usr/bin
|
||||||
|
usr/share/applications
|
||||||
|
usr/share/icons
|
||||||
|
debian/101-sync-inotify.conf etc/sysctl.d
|
||||||
@@ -10,6 +10,8 @@ Build-Depends: cmake,
|
|||||||
kdelibs5-dev,
|
kdelibs5-dev,
|
||||||
libkf5kio-dev,
|
libkf5kio-dev,
|
||||||
libcmocka-dev,
|
libcmocka-dev,
|
||||||
|
libcloudproviders-dev,
|
||||||
|
libdbus-1-dev,
|
||||||
libhttp-dav-perl,
|
libhttp-dav-perl,
|
||||||
libinotify-dev [kfreebsd-any],
|
libinotify-dev [kfreebsd-any],
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
usr/bin
|
usr/bin
|
||||||
usr/share/applications
|
usr/share/applications
|
||||||
|
usr/share/cloud-providers/
|
||||||
|
usr/share/dbus-1/services/
|
||||||
usr/share/icons
|
usr/share/icons
|
||||||
debian/101-sync-inotify.conf etc/sysctl.d
|
debian/101-sync-inotify.conf etc/sysctl.d
|
||||||
|
|||||||
@@ -3,12 +3,19 @@
|
|||||||
set -xe
|
set -xe
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
|
env
|
||||||
|
|
||||||
PPA=ppa:nextcloud-devs/client
|
PPA=ppa:nextcloud-devs/client
|
||||||
|
PPA_ALPHA=ppa:nextcloud-devs/client-alpha
|
||||||
PPA_BETA=ppa:nextcloud-devs/client-beta
|
PPA_BETA=ppa:nextcloud-devs/client-beta
|
||||||
|
|
||||||
OBS_PROJECT=home:ivaradi
|
OBS_PROJECT=home:ivaradi
|
||||||
|
OBS_PROJECT_ALPHA=home:ivaradi:alpha
|
||||||
OBS_PROJECT_BETA=home:ivaradi:beta
|
OBS_PROJECT_BETA=home:ivaradi:beta
|
||||||
OBS_PACKAGE=nextcloud-client
|
OBS_PACKAGE=nextcloud-desktop
|
||||||
|
|
||||||
|
UBUNTU_DISTRIBUTIONS="xenial bionic eoan focal groovy"
|
||||||
|
DEBIAN_DISTRIBUTIONS="buster stretch"
|
||||||
|
|
||||||
pull_request=${DRONE_PULL_REQUEST:=master}
|
pull_request=${DRONE_PULL_REQUEST:=master}
|
||||||
|
|
||||||
@@ -31,13 +38,15 @@ fi
|
|||||||
set -x
|
set -x
|
||||||
|
|
||||||
cd "${DRONE_WORKSPACE}"
|
cd "${DRONE_WORKSPACE}"
|
||||||
read basever kind <<<$(admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog stable)
|
read basever revdate kind <<<$(admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog stable)
|
||||||
|
|
||||||
cd "${DRONE_DIR}"
|
cd "${DRONE_DIR}"
|
||||||
|
|
||||||
echo "$kind" > kind
|
echo "$kind" > kind
|
||||||
|
|
||||||
if test "$kind" = "beta"; then
|
if test "$kind" = "alpha"; then
|
||||||
|
repo=nextcloud-devs/client-alpha
|
||||||
|
elif test "$kind" = "beta"; then
|
||||||
repo=nextcloud-devs/client-beta
|
repo=nextcloud-devs/client-beta
|
||||||
else
|
else
|
||||||
repo=nextcloud-devs/client
|
repo=nextcloud-devs/client
|
||||||
@@ -45,79 +54,80 @@ fi
|
|||||||
|
|
||||||
origsourceopt=""
|
origsourceopt=""
|
||||||
|
|
||||||
if ! wget http://ppa.launchpad.net/${repo}/ubuntu/pool/main/n/nextcloud-client/nextcloud-client_${basever}.orig.tar.bz2; then
|
cp -a ${DRONE_WORKSPACE} nextcloud-desktop_${basever}-${revdate}
|
||||||
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
tar cjf nextcloud-desktop_${basever}-${revdate}.orig.tar.bz2 --exclude .git --exclude binary nextcloud-desktop_${basever}-${revdate}
|
||||||
tar cjf nextcloud-client_${basever}.orig.tar.bz2 --exclude .git nextcloud-client_${basever}
|
|
||||||
origsourceopt="-sa"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for distribution in xenial bionic disco eoan stable; do
|
cd "${DRONE_WORKSPACE}"
|
||||||
rm -rf nextcloud-client_${basever}
|
git config --global user.email "drone@noemail.invalid"
|
||||||
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
git config --global user.name "Drone User"
|
||||||
|
|
||||||
cd nextcloud-client_${basever}
|
for distribution in ${UBUNTU_DISTRIBUTIONS} ${DEBIAN_DISTRIBUTIONS}; do
|
||||||
|
git checkout -- .
|
||||||
|
git clean -xdf
|
||||||
|
|
||||||
cp -a admin/linux/debian/debian .
|
git fetch origin debian/dist/${distribution}/${DRONE_TARGET_BRANCH}
|
||||||
if test -d admin/linux/debian/debian.${distribution}; then
|
git checkout origin/debian/dist/${distribution}/${DRONE_TARGET_BRANCH}
|
||||||
tar cf - -C admin/linux/debian/debian.${distribution} . | tar xf - -C debian
|
|
||||||
fi
|
|
||||||
|
|
||||||
admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog ${distribution}
|
git merge ${DRONE_COMMIT}
|
||||||
cp /tmp/tmpchangelog debian/changelog
|
|
||||||
if test -f admin/linux/debian/debian.${distribution}/changelog; then
|
|
||||||
cat admin/linux/debian/debian.${distribution}/changelog >> debian/changelog
|
|
||||||
else
|
|
||||||
cat admin/linux/debian/debian/changelog >> debian/changelog
|
|
||||||
fi
|
|
||||||
|
|
||||||
for p in debian/post-patches/*.patch; do
|
admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog ${distribution} ${revdate}
|
||||||
if test -f "${p}"; then
|
cat /tmp/tmpchangelog debian/changelog > debian/changelog.new
|
||||||
echo "Applying ${p}"
|
mv debian/changelog.new debian/changelog
|
||||||
patch -p1 < "${p}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
fullver=`head -1 debian/changelog | sed "s:nextcloud-client (\([^)]*\)).*:\1:"`
|
fullver=`head -1 debian/changelog | sed "s:nextcloud-desktop (\([^)]*\)).*:\1:"`
|
||||||
|
|
||||||
EDITOR=true dpkg-source --commit . local-changes
|
EDITOR=true dpkg-source --commit . local-changes
|
||||||
|
|
||||||
dpkg-source --build .
|
dpkg-source --build .
|
||||||
dpkg-genchanges -S ${origsourceopt} > "../nextcloud-client_${fullver}_source.changes"
|
dpkg-genchanges -S -sa > "../nextcloud-desktop_${fullver}_source.changes"
|
||||||
|
|
||||||
if test -f ~/.has_ppa_keys; then
|
if test -f ~/.has_ppa_keys; then
|
||||||
debsign -k7D14AA7B -S
|
debsign -k7D14AA7B -S
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd ..
|
|
||||||
done
|
done
|
||||||
|
cd ..
|
||||||
|
ls -al
|
||||||
|
|
||||||
if test "${pull_request}" = "master"; then
|
if test "${pull_request}" = "master"; then
|
||||||
kind=`cat kind`
|
if test "$kind" = "alpha"; then
|
||||||
|
PPA=$PPA_ALPHA
|
||||||
if test "$kind" = "beta"; then
|
OBS_PROJECT=$OBS_PROJECT_ALPHA
|
||||||
|
elif test "$kind" = "beta"; then
|
||||||
PPA=$PPA_BETA
|
PPA=$PPA_BETA
|
||||||
OBS_PROJECT=$OBS_PROJECT_BETA
|
OBS_PROJECT=$OBS_PROJECT_BETA
|
||||||
fi
|
fi
|
||||||
OBS_SUBDIR="${OBS_PROJECT}/${OBS_PACKAGE}"
|
|
||||||
|
|
||||||
if test -f ~/.has_ppa_keys; then
|
if test -f ~/.has_ppa_keys; then
|
||||||
for changes in nextcloud-client_*~+([a-z])1_source.changes; do
|
for distribution in ${UBUNTU_DISTRIBUTIONS}; do
|
||||||
dput $PPA $changes > /dev/null
|
changes=$(ls -1 nextcloud-desktop_*~${distribution}1_source.changes)
|
||||||
|
if test -f "${changes}"; then
|
||||||
|
dput $PPA "${changes}" > /dev/null
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
mkdir osc
|
for distribution in ${DEBIAN_DISTRIBUTIONS}; do
|
||||||
cd osc
|
pkgsuffix=".${distribution}"
|
||||||
osc co ${OBS_PROJECT} ${OBS_PACKAGE}
|
pkgvertag="~${distribution}1"
|
||||||
if test "$(ls ${OBS_SUBDIR})"; then
|
|
||||||
osc delete ${OBS_SUBDIR}/*
|
|
||||||
fi
|
|
||||||
cp ../nextcloud-client*.orig.tar.* ${OBS_SUBDIR}/
|
|
||||||
cp ../nextcloud-client_*[0-9.][0-9].dsc ${OBS_SUBDIR}/
|
|
||||||
cp ../nextcloud-client_*[0-9.][0-9].debian.tar* ${OBS_SUBDIR}/
|
|
||||||
cp ../nextcloud-client_*[0-9.][0-9]_source.changes ${OBS_SUBDIR}/
|
|
||||||
osc add ${OBS_SUBDIR}/*
|
|
||||||
|
|
||||||
cd ${OBS_SUBDIR}
|
package="${OBS_PACKAGE}${pkgsuffix}"
|
||||||
osc commit -m "Travis update"
|
OBS_SUBDIR="${OBS_PROJECT}/${package}"
|
||||||
|
|
||||||
|
mkdir -p osc
|
||||||
|
pushd osc
|
||||||
|
osc co ${OBS_PROJECT} ${package}
|
||||||
|
if test "$(ls ${OBS_SUBDIR})"; then
|
||||||
|
osc delete ${OBS_SUBDIR}/*
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp ../nextcloud-desktop*.orig.tar.* ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-desktop_*[0-9.][0-9]${pkgvertag}.dsc ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-desktop_*[0-9.][0-9]${pkgvertag}.debian.tar* ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-desktop_*[0-9.][0-9]${pkgvertag}_source.changes ${OBS_SUBDIR}/
|
||||||
|
osc add ${OBS_SUBDIR}/*
|
||||||
|
|
||||||
|
cd ${OBS_SUBDIR}
|
||||||
|
osc commit -m "Travis update"
|
||||||
|
popd
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -6,3 +6,7 @@
|
|||||||
[versionhack]
|
[versionhack]
|
||||||
commit = bc7e65b39552ac458b2adacf76cbf98735ec29a0
|
commit = bc7e65b39552ac458b2adacf76cbf98735ec29a0
|
||||||
tag = v2.4.0-beta
|
tag = v2.4.0-beta
|
||||||
|
|
||||||
|
[base]
|
||||||
|
commit = b45f5fd1a947dc21eb11c69049a99616a2ec950e
|
||||||
|
version = 2.6.4
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!//usr/bin/env python2.7
|
#!//usr/bin/env python2.7
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@@ -7,6 +8,11 @@ import datetime
|
|||||||
import os
|
import os
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
|
||||||
|
try:
|
||||||
|
long
|
||||||
|
except NameError:
|
||||||
|
long = int
|
||||||
|
|
||||||
distribution="yakkety"
|
distribution="yakkety"
|
||||||
|
|
||||||
versionTagRE = re.compile("^v([0-9]+((\.[0-9]+)+))(-(.+))?$")
|
versionTagRE = re.compile("^v([0-9]+((\.[0-9]+)+))(-(.+))?$")
|
||||||
@@ -22,39 +28,37 @@ def getCommitVersion(commit):
|
|||||||
major=None
|
major=None
|
||||||
minor=None
|
minor=None
|
||||||
patch=None
|
patch=None
|
||||||
for line in subprocess.check_output(["git", "show",
|
try:
|
||||||
commit + ":VERSION.cmake"]).splitlines():
|
for line in subprocess.check_output(["git", "show",
|
||||||
m = re.match("set\( MIRALL_VERSION_([A-Z]+) +([0-9])+ *\)", line)
|
commit + ":VERSION.cmake"]).splitlines():
|
||||||
if m is not None:
|
m = re.match("set\( MIRALL_VERSION_([A-Z]+) +([0-9])+ *\)", line)
|
||||||
kind=m.group(1)
|
if m is not None:
|
||||||
version=m.group(2)
|
kind=m.group(1)
|
||||||
if kind=="MAJOR":
|
version=m.group(2)
|
||||||
major=version
|
if kind=="MAJOR":
|
||||||
elif kind=="MINOR":
|
major=version
|
||||||
minor=version
|
elif kind=="MINOR":
|
||||||
elif kind=="PATCH":
|
minor=version
|
||||||
patch=version
|
elif kind=="PATCH":
|
||||||
if major and minor and patch:
|
patch=version
|
||||||
return major + "." + minor + "." + patch
|
if major and minor and patch:
|
||||||
else:
|
return major + "." + minor + "." + patch
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
except:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def collectEntries(baseCommit, baseVersion, kind):
|
def collectEntries(baseCommit, baseVersion, kind, finalRevDate, config):
|
||||||
scriptdir = os.path.dirname(__file__)
|
|
||||||
configPath = os.path.join(scriptdir, "git2changelog.cfg")
|
|
||||||
|
|
||||||
newVersionCommit = None
|
newVersionCommit = None
|
||||||
newVersionTag = None
|
newVersionTag = None
|
||||||
newVersionOrigTag = None
|
newVersionOrigTag = None
|
||||||
|
|
||||||
if os.path.exists(configPath):
|
if config is not None and config.has_section("versionhack"):
|
||||||
config = ConfigParser.SafeConfigParser()
|
if config.has_option("versionhack", "commit") and \
|
||||||
config.read(configPath)
|
config.has_option("versionhack", "tag"):
|
||||||
if config.has_section("versionhack"):
|
newVersionCommit = config.get("versionhack", "commit")
|
||||||
if config.has_option("versionhack", "commit") and \
|
newVersionTag = config.get("versionhack", "tag")
|
||||||
config.has_option("versionhack", "tag"):
|
|
||||||
newVersionCommit = config.get("versionhack", "commit")
|
|
||||||
newVersionTag = config.get("versionhack", "tag")
|
|
||||||
|
|
||||||
entries = []
|
entries = []
|
||||||
|
|
||||||
@@ -73,9 +77,11 @@ def collectEntries(baseCommit, baseVersion, kind):
|
|||||||
words = line.split("\t")
|
words = line.split("\t")
|
||||||
(commit, name, email, date, revdate) = words[0:5]
|
(commit, name, email, date, revdate) = words[0:5]
|
||||||
subject = "\t".join(words[5:])
|
subject = "\t".join(words[5:])
|
||||||
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
|
||||||
|
|
||||||
kind = "beta"
|
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
||||||
|
revdate += "." + commit
|
||||||
|
|
||||||
|
kind = "alpha"
|
||||||
|
|
||||||
if commit==newVersionCommit:
|
if commit==newVersionCommit:
|
||||||
result = processVersionTag(newVersionTag)
|
result = processVersionTag(newVersionTag)
|
||||||
@@ -107,38 +113,63 @@ def collectEntries(baseCommit, baseVersion, kind):
|
|||||||
entries.append((commit, name, email, date, revdate, subject,
|
entries.append((commit, name, email, date, revdate, subject,
|
||||||
baseVersion, kind))
|
baseVersion, kind))
|
||||||
|
|
||||||
|
if entries:
|
||||||
|
(commit, name, email, date, revdate, subject, baseVersion, kind) = entries[-1]
|
||||||
|
if finalRevDate is None:
|
||||||
|
revdate = datetime.datetime.now().strftime("%Y%m%d.%H%M%S")+ "." + commit
|
||||||
|
else:
|
||||||
|
revdate = finalRevDate
|
||||||
|
entries[-1] = (commit, name, email, date, revdate, subject, baseVersion, kind)
|
||||||
|
|
||||||
entries.reverse()
|
entries.reverse()
|
||||||
|
|
||||||
return entries
|
return entries
|
||||||
|
|
||||||
def genChangeLogEntries(f, entries, distribution):
|
def genChangeLogEntries(f, entries, distribution):
|
||||||
latestBaseVersion = None
|
latestBaseVersion = None
|
||||||
|
latestRevDate = None
|
||||||
latestKind = None
|
latestKind = None
|
||||||
for (commit, name, email, date, revdate, subject, baseVersion, kind) in entries:
|
for (commit, name, email, date, revdate, subject, baseVersion, kind) in entries:
|
||||||
if latestBaseVersion is None:
|
if latestBaseVersion is None:
|
||||||
latestBaseVersion = baseVersion
|
latestBaseVersion = baseVersion
|
||||||
|
latestRevDate = revdate
|
||||||
latestKind = kind
|
latestKind = kind
|
||||||
upstreamVersion = baseVersion + "-" + revdate
|
upstreamVersion = baseVersion + "-" + revdate
|
||||||
if distribution=="stable":
|
if distribution=="stable":
|
||||||
version = upstreamVersion
|
version = upstreamVersion
|
||||||
else:
|
else:
|
||||||
version = upstreamVersion + "~" + distribution + "1"
|
version = upstreamVersion + "-1.0~" + distribution + "1"
|
||||||
print >> f, "nextcloud-client (%s) %s; urgency=medium" % (version, distribution)
|
print("nextcloud-desktop (%s) %s; urgency=medium" % (version, distribution), file=f)
|
||||||
print >> f
|
print(file=f)
|
||||||
print >> f, " * " + subject
|
print(" * " + subject, file=f)
|
||||||
print >> f
|
print(file=f)
|
||||||
print >> f, " -- %s <%s> %s" % (name, email, date)
|
print(" -- %s <%s> %s" % (name, email, date), file=f)
|
||||||
print >> f
|
print(file=f)
|
||||||
return (latestBaseVersion, latestKind)
|
return (latestBaseVersion, latestRevDate, latestKind)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
scriptdir = os.path.dirname(__file__)
|
||||||
|
configPath = os.path.join(scriptdir, "git2changelog.cfg")
|
||||||
|
|
||||||
|
baseCommit = "f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1"
|
||||||
|
baseVersion = "2.4.0"
|
||||||
|
|
||||||
|
config = None
|
||||||
|
if os.path.exists(configPath):
|
||||||
|
config = ConfigParser.SafeConfigParser()
|
||||||
|
config.read(configPath)
|
||||||
|
|
||||||
|
if config.has_section("base"):
|
||||||
|
if config.has_option("base", "commit") and \
|
||||||
|
config.has_option("base", "version"):
|
||||||
|
baseCommit = config.get("base", "commit")
|
||||||
|
baseVersion = config.get("base", "version")
|
||||||
|
|
||||||
distribution = sys.argv[2]
|
distribution = sys.argv[2]
|
||||||
|
finalRevDate = sys.argv[3] if len(sys.argv)>3 else None
|
||||||
|
|
||||||
#entries = collectEntries("8aade24147b5313f8241a8b42331442b7f40eef9", "2.2.4", "release")
|
entries = collectEntries(baseCommit, baseVersion, "alpha", finalRevDate, config)
|
||||||
entries = collectEntries("f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1", "2.4.0", "beta")
|
|
||||||
|
|
||||||
|
|
||||||
with open(sys.argv[1], "wt") as f:
|
with open(sys.argv[1], "wt") as f:
|
||||||
(baseVersion, kind) = genChangeLogEntries(f, entries, distribution)
|
(baseVersion, revdate, kind) = genChangeLogEntries(f, entries, distribution)
|
||||||
print baseVersion, kind
|
print(baseVersion, revdate, kind)
|
||||||
|
|||||||
21
admin/linux/upload-appimage.sh
Executable file
21
admin/linux/upload-appimage.sh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
cd /build
|
||||||
|
|
||||||
|
# Upload AppImage
|
||||||
|
APPIMAGE=$(readlink -f ./Nextcloud*.AppImage)
|
||||||
|
BASENAME=$(basename ${APPIMAGE})
|
||||||
|
|
||||||
|
if curl --max-time 900 --upload-file ${APPIMAGE} https://transfer.sh/${BASENAME}
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "Get the AppImage at the link above!"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "Upload failed, however this is an optional step."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Don't let the Drone build fail
|
||||||
|
exit 0
|
||||||
@@ -49,7 +49,7 @@ fi
|
|||||||
if [ ! -z "$identity" ]; then
|
if [ ! -z "$identity" ]; then
|
||||||
echo "Will try to sign the installer"
|
echo "Will try to sign the installer"
|
||||||
pushd $install_path
|
pushd $install_path
|
||||||
productsign --sign "$identity" "$installer_file" "$installer_file.new"
|
productsign --timestamp --sign "$identity" "$installer_file" "$installer_file.new"
|
||||||
mv "$installer_file".new "$installer_file"
|
mv "$installer_file".new "$installer_file"
|
||||||
popd
|
popd
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,364 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# This file is part of ownCloud.
|
|
||||||
# It was inspired in large part by the macdeploy script in Clementine
|
|
||||||
# and Tomahawk
|
|
||||||
#
|
|
||||||
# ownCloud is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# ownCLoud 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 General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with ownCloud. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import subprocess
|
|
||||||
import commands
|
|
||||||
import sys
|
|
||||||
from glob import glob
|
|
||||||
from distutils.version import LooseVersion
|
|
||||||
|
|
||||||
def QueryQMake(attrib):
|
|
||||||
return subprocess.check_output([qmake_path, '-query', attrib]).rstrip('\n')
|
|
||||||
|
|
||||||
FRAMEWORK_SEARCH_PATH=[
|
|
||||||
'/Library/Frameworks',
|
|
||||||
os.path.join(os.environ['HOME'], 'Library/Frameworks')
|
|
||||||
]
|
|
||||||
|
|
||||||
LIBRARY_SEARCH_PATH=['/usr/local/lib', '/usr/local/Qt-5.6.2/lib', '.']
|
|
||||||
|
|
||||||
QT_PLUGINS = [
|
|
||||||
'sqldrivers/libqsqlite.dylib',
|
|
||||||
'platforms/libqcocoa.dylib',
|
|
||||||
'imageformats/libqgif.dylib',
|
|
||||||
'imageformats/libqico.dylib',
|
|
||||||
'imageformats/libqjpeg.dylib',
|
|
||||||
'imageformats/libqsvg.dylib',
|
|
||||||
]
|
|
||||||
|
|
||||||
QT_PLUGINS_SEARCH_PATH=[
|
|
||||||
# os.path.join(os.environ['QTDIR'], 'plugins'),
|
|
||||||
# '/usr/local/Cellar/qt/5.2.1/plugins',
|
|
||||||
'/usr/local/Qt-5.6.2/plugins',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class Error(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class CouldNotFindQtPluginErrorFindFrameworkError(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class InstallNameToolError(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class CouldNotFindQtPluginError(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class CouldNotFindScriptPluginError(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class CouldNotFindFrameworkError(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
if len(sys.argv) < 3:
|
|
||||||
print 'Usage: %s <bundle.app> <path-to-qmake>' % sys.argv[0]
|
|
||||||
exit()
|
|
||||||
|
|
||||||
def is_exe(fpath):
|
|
||||||
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
|
|
||||||
|
|
||||||
bundle_dir = sys.argv[1]
|
|
||||||
qmake_path = sys.argv[2]
|
|
||||||
|
|
||||||
bundle_name = os.path.basename(bundle_dir).split('.')[0]
|
|
||||||
|
|
||||||
commands = []
|
|
||||||
|
|
||||||
binary_dir = os.path.join(bundle_dir, 'Contents', 'MacOS')
|
|
||||||
frameworks_dir = os.path.join(bundle_dir, 'Contents', 'Frameworks')
|
|
||||||
commands.append(['mkdir', '-p', frameworks_dir])
|
|
||||||
resources_dir = os.path.join(bundle_dir, 'Contents', 'Resources')
|
|
||||||
commands.append(['mkdir', '-p', resources_dir])
|
|
||||||
plugins_dir = os.path.join(bundle_dir, 'Contents', 'PlugIns')
|
|
||||||
binaries = [i for i in glob(os.path.join(bundle_dir, 'Contents', 'MacOS', "*")) if is_exe(i)];
|
|
||||||
|
|
||||||
qt_version = QueryQMake('QT_VERSION')
|
|
||||||
print "Using Qt", qt_version
|
|
||||||
|
|
||||||
fixed_libraries = []
|
|
||||||
fixed_frameworks = []
|
|
||||||
|
|
||||||
def WriteQtConf():
|
|
||||||
print "Writing qt.conf..."
|
|
||||||
with open(os.path.join(resources_dir, 'qt.conf'), 'w') as f:
|
|
||||||
f.write("[Paths]\nPlugins = PlugIns\n");
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
def GetBrokenLibraries(binary):
|
|
||||||
#print "Checking libs for binary: %s" % binary
|
|
||||||
output = subprocess.Popen(['otool', '-L', binary], stdout=subprocess.PIPE).communicate()[0]
|
|
||||||
broken_libs = {
|
|
||||||
'frameworks': [],
|
|
||||||
'libs': []}
|
|
||||||
for line in [x.split(' ')[0].lstrip() for x in output.split('\n')[1:]]:
|
|
||||||
#print "Checking line: %s" % line
|
|
||||||
if not line: # skip empty lines
|
|
||||||
continue
|
|
||||||
if os.path.basename(binary) == os.path.basename(line):
|
|
||||||
#print "mnope %s-%s" % (os.path.basename(binary), os.path.basename(line))
|
|
||||||
continue
|
|
||||||
if re.match(r'^\s*/System/', line):
|
|
||||||
continue # System framework
|
|
||||||
elif re.match(r'^\s*/usr/lib/', line):
|
|
||||||
#print "unix style system lib"
|
|
||||||
continue # unix style system library
|
|
||||||
elif re.match(r'Breakpad', line):
|
|
||||||
continue # Manually added by cmake.
|
|
||||||
elif re.match(r'^\s*@executable_path', line) or re.match(r'^\s*@loader_path', line):
|
|
||||||
# Potentially already fixed library
|
|
||||||
if '.framework' in line:
|
|
||||||
relative_path = os.path.join(*line.split('/')[3:])
|
|
||||||
if not os.path.exists(os.path.join(frameworks_dir, relative_path)):
|
|
||||||
broken_libs['frameworks'].append(relative_path)
|
|
||||||
else:
|
|
||||||
relative_path = os.path.join(*line.split('/')[1:])
|
|
||||||
#print "RELPATH %s %s" % (relative_path, os.path.join(binary_dir, relative_path))
|
|
||||||
if not os.path.exists(os.path.join(binary_dir, relative_path)):
|
|
||||||
broken_libs['libs'].append(relative_path)
|
|
||||||
elif re.search(r'\w+\.framework', line):
|
|
||||||
broken_libs['frameworks'].append(line)
|
|
||||||
else:
|
|
||||||
broken_libs['libs'].append(line)
|
|
||||||
|
|
||||||
return broken_libs
|
|
||||||
|
|
||||||
def FindFramework(path):
|
|
||||||
search_pathes = FRAMEWORK_SEARCH_PATH
|
|
||||||
search_pathes.insert(0, QueryQMake('QT_INSTALL_LIBS'))
|
|
||||||
for search_path in search_pathes:
|
|
||||||
# The following two lines are needed for a custom built Qt from version 5.5 on, possibly not for the one from the Qt SDK.
|
|
||||||
# Looks like the upstream macdeployqt also had an issue there https://bugreports.qt.io/browse/QTBUG-47868
|
|
||||||
if path.find( "\@rpath/"):
|
|
||||||
path = path.replace("@rpath/", "")
|
|
||||||
abs_path = os.path.join(search_path, path)
|
|
||||||
if os.path.exists(abs_path):
|
|
||||||
return abs_path
|
|
||||||
|
|
||||||
raise CouldNotFindFrameworkError(path)
|
|
||||||
|
|
||||||
def FindLibrary(path):
|
|
||||||
if os.path.exists(path):
|
|
||||||
return path
|
|
||||||
search_pathes = LIBRARY_SEARCH_PATH
|
|
||||||
search_pathes.insert(0, QueryQMake('QT_INSTALL_LIBS'))
|
|
||||||
for search_path in search_pathes:
|
|
||||||
abs_path = os.path.join(search_path, path)
|
|
||||||
if os.path.exists(abs_path):
|
|
||||||
return abs_path
|
|
||||||
else: # try harder---look for lib name in library folders
|
|
||||||
newpath = os.path.join(search_path,os.path.basename(path))
|
|
||||||
if os.path.exists(newpath):
|
|
||||||
return newpath
|
|
||||||
|
|
||||||
return ""
|
|
||||||
#raise CouldNotFindFrameworkError(path)
|
|
||||||
|
|
||||||
def FixAllLibraries(broken_libs):
|
|
||||||
for framework in broken_libs['frameworks']:
|
|
||||||
FixFramework(framework)
|
|
||||||
for lib in broken_libs['libs']:
|
|
||||||
FixLibrary(lib)
|
|
||||||
|
|
||||||
def FixFramework(path):
|
|
||||||
if path in fixed_libraries:
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
fixed_libraries.append(path)
|
|
||||||
abs_path = FindFramework(path)
|
|
||||||
broken_libs = GetBrokenLibraries(abs_path)
|
|
||||||
FixAllLibraries(broken_libs)
|
|
||||||
|
|
||||||
new_path = CopyFramework(abs_path)
|
|
||||||
id = os.sep.join(new_path.split(os.sep)[3:])
|
|
||||||
FixFrameworkId(new_path, id)
|
|
||||||
for framework in broken_libs['frameworks']:
|
|
||||||
FixFrameworkInstallPath(framework, new_path)
|
|
||||||
for library in broken_libs['libs']:
|
|
||||||
FixLibraryInstallPath(library, new_path)
|
|
||||||
|
|
||||||
def FixLibrary(path):
|
|
||||||
if path in fixed_libraries or FindSystemLibrary(os.path.basename(path)) is not None:
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
fixed_libraries.append(path)
|
|
||||||
abs_path = FindLibrary(path)
|
|
||||||
if abs_path == "":
|
|
||||||
print "Could not resolve %s, not fixing!" % path
|
|
||||||
return
|
|
||||||
broken_libs = GetBrokenLibraries(abs_path)
|
|
||||||
FixAllLibraries(broken_libs)
|
|
||||||
|
|
||||||
new_path = CopyLibrary(abs_path)
|
|
||||||
FixLibraryId(new_path)
|
|
||||||
for framework in broken_libs['frameworks']:
|
|
||||||
FixFrameworkInstallPath(framework, new_path)
|
|
||||||
for library in broken_libs['libs']:
|
|
||||||
FixLibraryInstallPath(library, new_path)
|
|
||||||
|
|
||||||
def FixPlugin(abs_path, subdir):
|
|
||||||
broken_libs = GetBrokenLibraries(abs_path)
|
|
||||||
FixAllLibraries(broken_libs)
|
|
||||||
|
|
||||||
new_path = CopyPlugin(abs_path, subdir)
|
|
||||||
for framework in broken_libs['frameworks']:
|
|
||||||
FixFrameworkInstallPath(framework, new_path)
|
|
||||||
for library in broken_libs['libs']:
|
|
||||||
FixLibraryInstallPath(library, new_path)
|
|
||||||
|
|
||||||
def FixBinary(path):
|
|
||||||
broken_libs = GetBrokenLibraries(path)
|
|
||||||
FixAllLibraries(broken_libs)
|
|
||||||
for framework in broken_libs['frameworks']:
|
|
||||||
FixFrameworkInstallPath(framework, path)
|
|
||||||
for library in broken_libs['libs']:
|
|
||||||
FixLibraryInstallPath(library, path)
|
|
||||||
|
|
||||||
def CopyLibrary(path):
|
|
||||||
new_path = os.path.join(binary_dir, os.path.basename(path))
|
|
||||||
args = ['ditto', '--arch=x86_64', path, new_path]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['chmod', 'u+w', new_path]
|
|
||||||
commands.append(args)
|
|
||||||
return new_path
|
|
||||||
|
|
||||||
def CopyPlugin(path, subdir):
|
|
||||||
new_path = os.path.join(plugins_dir, subdir, os.path.basename(path))
|
|
||||||
args = ['mkdir', '-p', os.path.dirname(new_path)]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['ditto', '--arch=x86_64', path, new_path]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['chmod', 'u+w', new_path]
|
|
||||||
commands.append(args)
|
|
||||||
return new_path
|
|
||||||
|
|
||||||
def CopyFramework(source_dylib):
|
|
||||||
parts = source_dylib.split(os.sep)
|
|
||||||
print "CopyFramework:", source_dylib
|
|
||||||
for i, part in enumerate(parts):
|
|
||||||
matchObj = re.match(r'(\w+\.framework)', part)
|
|
||||||
if matchObj:
|
|
||||||
framework = matchObj.group(1)
|
|
||||||
dylib_name = parts[-1]
|
|
||||||
source_path = os.path.join('/', *parts[:i+1])
|
|
||||||
dest_path = os.path.join(frameworks_dir, framework)
|
|
||||||
dest_dylib_path = os.path.join(frameworks_dir, *parts[i:-1])
|
|
||||||
break
|
|
||||||
# if os.path.exists(dest_path):
|
|
||||||
# print dest_path, "already exists, skipping copy..."
|
|
||||||
# return os.path.join(dest_dylib_path, dylib_name)
|
|
||||||
|
|
||||||
args = ['mkdir', '-p', dest_dylib_path]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['ditto', '--arch=x86_64', source_dylib, dest_dylib_path]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['chmod', 'u+w', os.path.join(dest_dylib_path, parts[-1])]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['ln', '-s', '5', os.path.join(dest_path, 'Versions', 'Current')]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['ln', '-s', os.path.join('Versions', 'Current', dylib_name), os.path.join(dest_path, dylib_name)]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['ln', '-s', os.path.join('Versions', 'Current', 'Resources'), os.path.join(dest_path, 'Resources')]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['cp', '-r', os.path.join(source_path, 'Versions', '5', 'Resources'), os.path.join(dest_path, 'Versions', '5')]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['ln', '-s', os.path.join('Versions', 'Current', 'Helpers'), os.path.join(dest_path, 'Helpers')]
|
|
||||||
commands.append(args)
|
|
||||||
args = ['cp', '-r', os.path.join(source_path, 'Versions', '5', 'Helpers'), os.path.join(dest_path, 'Versions', '5')]
|
|
||||||
commands.append(args)
|
|
||||||
|
|
||||||
return os.path.join(dest_dylib_path, dylib_name)
|
|
||||||
|
|
||||||
def FixId(path, library_name):
|
|
||||||
id = '@executable_path/../Frameworks/%s' % library_name
|
|
||||||
args = ['install_name_tool', '-id', id, path]
|
|
||||||
commands.append(args)
|
|
||||||
|
|
||||||
def FixLibraryId(path):
|
|
||||||
library_name = os.path.basename(path)
|
|
||||||
FixId(path, library_name)
|
|
||||||
|
|
||||||
def FixFrameworkId(path, id):
|
|
||||||
FixId(path, id)
|
|
||||||
|
|
||||||
def FixInstallPath(library_path, library, new_path):
|
|
||||||
args = ['install_name_tool', '-change', library_path, new_path, library]
|
|
||||||
commands.append(args)
|
|
||||||
|
|
||||||
def FindSystemLibrary(library_name):
|
|
||||||
for path in ['/lib', '/usr/lib']:
|
|
||||||
full_path = os.path.join(path, library_name)
|
|
||||||
if os.path.exists(full_path):
|
|
||||||
return full_path
|
|
||||||
return None
|
|
||||||
|
|
||||||
def FixLibraryInstallPath(library_path, library):
|
|
||||||
system_library = FindSystemLibrary(os.path.basename(library_path))
|
|
||||||
if system_library is None:
|
|
||||||
new_path = '@executable_path/../MacOS/%s' % os.path.basename(library_path)
|
|
||||||
FixInstallPath(library_path, library, new_path)
|
|
||||||
else:
|
|
||||||
FixInstallPath(library_path, library, system_library)
|
|
||||||
|
|
||||||
def FixFrameworkInstallPath(library_path, library):
|
|
||||||
parts = library_path.split(os.sep)
|
|
||||||
for i, part in enumerate(parts):
|
|
||||||
if re.match(r'\w+\.framework', part):
|
|
||||||
full_path = os.path.join(*parts[i:])
|
|
||||||
break
|
|
||||||
new_path = '@executable_path/../Frameworks/%s' % full_path
|
|
||||||
FixInstallPath(library_path, library, new_path)
|
|
||||||
|
|
||||||
def FindQtPlugin(name):
|
|
||||||
search_path = QT_PLUGINS_SEARCH_PATH
|
|
||||||
search_path.insert(0, QueryQMake('QT_INSTALL_PLUGINS'))
|
|
||||||
for path in search_path:
|
|
||||||
if os.path.exists(path):
|
|
||||||
if os.path.exists(os.path.join(path, name)):
|
|
||||||
return os.path.join(path, name)
|
|
||||||
raise CouldNotFindQtPluginError(name)
|
|
||||||
|
|
||||||
for binary in binaries:
|
|
||||||
FixBinary(binary)
|
|
||||||
|
|
||||||
for plugin in QT_PLUGINS:
|
|
||||||
FixPlugin(FindQtPlugin(plugin), os.path.dirname(plugin))
|
|
||||||
|
|
||||||
if LooseVersion(qt_version) >= LooseVersion("5.10.0"):
|
|
||||||
args = ['plutil', '-insert', 'LSMinimumSystemVersion', '-string', '10.10.0', os.path.join(bundle_dir, 'Contents', 'Info.plist')]
|
|
||||||
commands.append(args)
|
|
||||||
else:
|
|
||||||
args = ['plutil', '-insert', 'LSMinimumSystemVersion', '-string', '10.7.0', os.path.join(bundle_dir, 'Contents', 'Info.plist')]
|
|
||||||
commands.append(args)
|
|
||||||
|
|
||||||
if len(sys.argv) <= 2:
|
|
||||||
print 'Will run %d commands:' % len(commands)
|
|
||||||
for command in commands:
|
|
||||||
print ' '.join(command)
|
|
||||||
|
|
||||||
for command in commands:
|
|
||||||
p = subprocess.Popen(command)
|
|
||||||
os.waitpid(p.pid, 0)
|
|
||||||
|
|
||||||
WriteQtConf()
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 254 KiB |
@@ -9,6 +9,11 @@ import os
|
|||||||
import polib
|
import polib
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
|
||||||
|
try:
|
||||||
|
unicode
|
||||||
|
except NameError:
|
||||||
|
unicode = str
|
||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option("-o", "--output", dest="output",
|
parser.add_option("-o", "--output", dest="output",
|
||||||
help="Directory for localized output", default="../Shared/installer/nightly_localized.nsi")
|
help="Directory for localized output", default="../Shared/installer/nightly_localized.nsi")
|
||||||
@@ -126,7 +131,7 @@ for root,dirs,files in os.walk(options.podir):
|
|||||||
if filename in localeToName:
|
if filename in localeToName:
|
||||||
language = localeToName[filename]
|
language = localeToName[filename]
|
||||||
translationCache[language] = collections.OrderedDict()
|
translationCache[language] = collections.OrderedDict()
|
||||||
|
|
||||||
po = polib.pofile(os.path.join(root,file))
|
po = polib.pofile(os.path.join(root,file))
|
||||||
for entry in po.translated_entries():
|
for entry in po.translated_entries():
|
||||||
# Loop through all our labels and add translation (each translation may have multiple labels)
|
# Loop through all our labels and add translation (each translation may have multiple labels)
|
||||||
@@ -165,14 +170,14 @@ for language,translations in translationCache.iteritems():
|
|||||||
for label,value in translations.iteritems():
|
for label,value in translations.iteritems():
|
||||||
NSINewLines.append( tostr('StrCpy $%s "%s"\n' % (label,value)) )
|
NSINewLines.append( tostr('StrCpy $%s "%s"\n' % (label,value)) )
|
||||||
if language.upper() == options.lang.upper():
|
if language.upper() == options.lang.upper():
|
||||||
NSIDeclarations.append( tostr('Var %s\n' % label) )
|
NSIDeclarations.append( tostr('Var %s\n' % label) )
|
||||||
|
|
||||||
count += 1
|
count += 1
|
||||||
NSIWorkingFile = open('%s/%s.nsh' % (options.output, language),"w")
|
NSIWorkingFile = open('%s/%s.nsh' % (options.output, language),"w")
|
||||||
NSIWorkingFile.writelines(NSINewLines)
|
NSIWorkingFile.writelines(NSINewLines)
|
||||||
NSIWorkingFile.close()
|
NSIWorkingFile.close()
|
||||||
print ( "%i translations merged for language '%s'"%(count,language) )
|
print ( "%i translations merged for language '%s'"%(count,language) )
|
||||||
|
|
||||||
# Finally, let's write languages.nsh and declarations.nsh
|
# Finally, let's write languages.nsh and declarations.nsh
|
||||||
NSIWorkingFile = open('%s/languages.nsh' % options.output,"w")
|
NSIWorkingFile = open('%s/languages.nsh' % options.output,"w")
|
||||||
NSIWorkingFile.writelines(NSILanguages)
|
NSIWorkingFile.writelines(NSILanguages)
|
||||||
@@ -181,5 +186,5 @@ NSIWorkingFile.close()
|
|||||||
NSIWorkingFile = open('%s/declarations.nsh' % options.output,"w")
|
NSIWorkingFile = open('%s/declarations.nsh' % options.output,"w")
|
||||||
NSIWorkingFile.writelines(NSIDeclarations)
|
NSIWorkingFile.writelines(NSIDeclarations)
|
||||||
NSIWorkingFile.close()
|
NSIWorkingFile.close()
|
||||||
|
|
||||||
print ( "NSI Localization Operation Complete" )
|
print ( "NSI Localization Operation Complete" )
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 25 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
1
binary
1
binary
Submodule binary deleted from 3425fab2c6
@@ -10,7 +10,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|||||||
|
|
||||||
# Put the include dirs which are in the source or build tree
|
# Put the include dirs which are in the source or build tree
|
||||||
# before all other include dirs, so the headers in the sources
|
# before all other include dirs, so the headers in the sources
|
||||||
# are prefered over the already installed ones
|
# are preferred over the already installed ones
|
||||||
# since cmake 2.4.1
|
# since cmake 2.4.1
|
||||||
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
|
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
|
||||||
|
|
||||||
|
|||||||
@@ -27,9 +27,11 @@
|
|||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>@MIRALL_VERSION_STRING@</string>
|
<string>@MIRALL_VERSION_STRING@</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>(C) 2014-2018 @APPLICATION_VENDOR@</string>
|
<string>(C) 2014-2020 @APPLICATION_VENDOR@</string>
|
||||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>NSRequiresAquaSystemAppearance</key>
|
||||||
|
<false/>
|
||||||
<key>SUShowReleaseNotes</key>
|
<key>SUShowReleaseNotes</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>SUPublicDSAKeyFile</key>
|
<key>SUPublicDSAKeyFile</key>
|
||||||
|
|||||||
37
cmake/modules/SanitizerFlags.cmake
Normal file
37
cmake/modules/SanitizerFlags.cmake
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Enable address sanitizer (gcc/clang only)
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
|
set(SANITIZERS)
|
||||||
|
set(SANITIZER_EXTRA_FLAGS " -g")
|
||||||
|
|
||||||
|
macro(add_sanitizer_option variable flag help)
|
||||||
|
option(${variable} "Enable ${help}" OFF)
|
||||||
|
if(${variable})
|
||||||
|
list(APPEND SANITIZERS ${flag})
|
||||||
|
string(REPLACE ";" " " optional_args "${ARGN}")
|
||||||
|
if(optional_args)
|
||||||
|
string(APPEND SANITIZER_EXTRA_FLAGS " ${optional_args}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
mark_as_advanced(${variable})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
add_sanitizer_option(SANITIZE_ADDRESS "address"
|
||||||
|
"AddressSanitizer (detects memory violations, buffer overflows, memory leaks)")
|
||||||
|
add_sanitizer_option(SANITIZE_LEAK "leak"
|
||||||
|
"standalone LeakSanitizer (detects memory leaks only)")
|
||||||
|
add_sanitizer_option(SANITIZE_MEMORY "memory"
|
||||||
|
"MemorySanitizer (detects reads in uninitialized memory)")
|
||||||
|
add_sanitizer_option(SANITIZE_UNDEFINED "undefined"
|
||||||
|
"UndefinedBehaviorSanitizer (detects undefined behavior)"
|
||||||
|
"-fno-sanitize=vptr")
|
||||||
|
add_sanitizer_option(SANITIZE_THREAD "thread"
|
||||||
|
"ThreadSanitizer (detects data races)")
|
||||||
|
|
||||||
|
if(SANITIZERS)
|
||||||
|
string(REPLACE ";" "," SANITIZER_FLAGS "${SANITIZERS}")
|
||||||
|
set(SANITIZER_FLAGS "-fsanitize=${SANITIZER_FLAGS}${SANITIZER_EXTRA_FLAGS}")
|
||||||
|
string(APPEND CMAKE_CXX_FLAGS " ${SANITIZER_FLAGS}")
|
||||||
|
string(APPEND CMAKE_C_FLAGS " ${SANITIZER_FLAGS}")
|
||||||
|
string(APPEND CMAKE_EXE_LINKER_FLAGS " ${SANITIZER_FLAGS}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
@@ -3,7 +3,11 @@
|
|||||||
# For details see the accompanying COPYING* file.
|
# For details see the accompanying COPYING* file.
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-long-long -Wno-gnu-zero-variadic-macro-arguments")
|
|
||||||
|
# Use this only for Clang
|
||||||
|
if (CMAKE_CXX_COMPILER MATCHES "Clang")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-long-long -Wno-gnu-zero-variadic-macro-arguments")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Fix sqlite compilation on macOS
|
# Fix sqlite compilation on macOS
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-pointer-types-discards-qualifiers")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-pointer-types-discards-qualifiers")
|
||||||
|
|||||||
@@ -8,12 +8,12 @@
|
|||||||
#cmakedefine CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"
|
#cmakedefine CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"
|
||||||
#define SOCKETAPI_TEAM_IDENTIFIER_PREFIX "@SOCKETAPI_TEAM_IDENTIFIER_PREFIX@"
|
#define SOCKETAPI_TEAM_IDENTIFIER_PREFIX "@SOCKETAPI_TEAM_IDENTIFIER_PREFIX@"
|
||||||
|
|
||||||
#cmakedefine APPLICATION_DOMAIN @APPLICATION_DOMAIN@
|
|
||||||
#cmakedefine THEME_CLASS @THEME_CLASS@
|
#cmakedefine THEME_CLASS @THEME_CLASS@
|
||||||
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
||||||
|
|
||||||
#cmakedefine APPLICATION_NAME "@APPLICATION_NAME@"
|
#cmakedefine APPLICATION_NAME "@APPLICATION_NAME@"
|
||||||
#cmakedefine APPLICATION_VENDOR "@APPLICATION_VENDOR@"
|
#cmakedefine APPLICATION_VENDOR "@APPLICATION_VENDOR@"
|
||||||
|
#cmakedefine APPLICATION_DOMAIN "@APPLICATION_DOMAIN@"
|
||||||
#cmakedefine APPLICATION_REV_DOMAIN "@APPLICATION_REV_DOMAIN@"
|
#cmakedefine APPLICATION_REV_DOMAIN "@APPLICATION_REV_DOMAIN@"
|
||||||
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
|
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
|
||||||
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
|
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
#cmakedefine APPLICATION_HELP_URL "@APPLICATION_HELP_URL@"
|
#cmakedefine APPLICATION_HELP_URL "@APPLICATION_HELP_URL@"
|
||||||
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
||||||
#cmakedefine APPLICATION_SERVER_URL "@APPLICATION_SERVER_URL@"
|
#cmakedefine APPLICATION_SERVER_URL "@APPLICATION_SERVER_URL@"
|
||||||
|
#cmakedefine LINUX_APPLICATION_ID "@LINUX_APPLICATION_ID@"
|
||||||
#cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@"
|
#cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@"
|
||||||
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
|
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
|
||||||
#cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@"
|
#cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@"
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ To prevent automatic updates and disallow manual overrides:
|
|||||||
|
|
||||||
1. Edit this Registry key:
|
1. Edit this Registry key:
|
||||||
|
|
||||||
``HKEY_LOCAL_MACHINE\Software\Policies\Nextcloud\Nextcloud``
|
``HKEY_LOCAL_MACHINE\Software\Policies\Nextcloud GmbH\Nextcloud``
|
||||||
|
|
||||||
2. Add the key ``skipUpdateCheck`` (of type DWORD).
|
2. Add the key ``skipUpdateCheck`` (of type DWORD).
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ download page.
|
|||||||
System Requirements
|
System Requirements
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
- Windows 7+
|
- Windows 8.1+
|
||||||
- macOS 10.7+ (**64-bit only**)
|
- macOS 10.7+ (**64-bit only**)
|
||||||
- CentOS 6 & 7 (64-bit only)
|
- CentOS 6 & 7 (64-bit only)
|
||||||
- Debian 8.0 & 9.0
|
- Debian 8.0 & 9.0
|
||||||
@@ -36,8 +36,7 @@ System Requirements
|
|||||||
- openSUSE Leap 42.2 & 42.3
|
- openSUSE Leap 42.2 & 42.3
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
For Linux distributions, we support, if technically feasible, the latest 2 versions per platform and the previous `LTS`_.
|
For Linux distributions, we support, if technically feasible, the latest 2 versions per platform and the previous LTS.
|
||||||
>>>>>>> b2da03441... update supported linux platforms
|
|
||||||
|
|
||||||
Installation Wizard
|
Installation Wizard
|
||||||
-------------------
|
-------------------
|
||||||
|
|||||||
@@ -467,6 +467,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = FinderSyncExt/FinderSyncExt.entitlements;
|
CODE_SIGN_ENTITLEMENTS = FinderSyncExt/FinderSyncExt.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ public:
|
|||||||
|
|
||||||
auto menuaction = new QAction(parentWidget);
|
auto menuaction = new QAction(parentWidget);
|
||||||
menuaction->setText(helper->contextMenuTitle());
|
menuaction->setText(helper->contextMenuTitle());
|
||||||
|
menuaction->setIcon(QIcon::fromTheme(helper->contextMenuIconName()));
|
||||||
menuaction->setMenu(menu);
|
menuaction->setMenu(menu);
|
||||||
return { menuaction };
|
return { menuaction };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include "ownclouddolphinpluginhelper.h"
|
#include "ownclouddolphinpluginhelper.h"
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
OwncloudDolphinPluginHelper* OwncloudDolphinPluginHelper::instance()
|
OwncloudDolphinPluginHelper* OwncloudDolphinPluginHelper::instance()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <QLocalSocket>
|
#include <QLocalSocket>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include "ownclouddolphinpluginhelper_export.h"
|
#include "ownclouddolphinpluginhelper_export.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
class OWNCLOUDDOLPHINPLUGINHELPER_EXPORT OwncloudDolphinPluginHelper : public QObject {
|
class OWNCLOUDDOLPHINPLUGINHELPER_EXPORT OwncloudDolphinPluginHelper : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -35,11 +36,15 @@ public:
|
|||||||
|
|
||||||
QString contextMenuTitle() const
|
QString contextMenuTitle() const
|
||||||
{
|
{
|
||||||
return _strings.value("CONTEXT_MENU_TITLE", "ownCloud");
|
return _strings.value("CONTEXT_MENU_TITLE", APPLICATION_NAME);
|
||||||
}
|
}
|
||||||
QString shareActionTitle() const
|
QString shareActionTitle() const
|
||||||
{
|
{
|
||||||
return _strings.value("SHARE_MENU_TITLE", "Share...");
|
return _strings.value("SHARE_MENU_TITLE", "Share …");
|
||||||
|
}
|
||||||
|
QString contextMenuIconName() const
|
||||||
|
{
|
||||||
|
return _strings.value("CONTEXT_MENU_ICON", APPLICATION_ICON_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString copyPrivateLinkTitle() const { return _strings["COPY_PRIVATE_LINK_MENU_TITLE"]; }
|
QString copyPrivateLinkTitle() const { return _strings["COPY_PRIVATE_LINK_MENU_TITLE"]; }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[D-BUS Service]
|
[D-BUS Service]
|
||||||
Name=@LIBCLOUDPROVIDERS_DBUS_BUS_NAME@
|
Name=@LIBCLOUDPROVIDERS_DBUS_BUS_NAME@
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@ --background
|
||||||
|
|
||||||
|
|||||||
@@ -191,11 +191,12 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
def check_registered_paths(self, filename):
|
def check_registered_paths(self, filename):
|
||||||
topLevelFolder = False
|
topLevelFolder = False
|
||||||
internalFile = False
|
internalFile = False
|
||||||
|
absfilename = os.path.realpath(filename)
|
||||||
for reg_path in socketConnect.registered_paths:
|
for reg_path in socketConnect.registered_paths:
|
||||||
if filename == reg_path:
|
if absfilename == reg_path:
|
||||||
topLevelFolder = True
|
topLevelFolder = True
|
||||||
break
|
break
|
||||||
if filename.startswith(reg_path):
|
if absfilename.startswith(reg_path):
|
||||||
internalFile = True
|
internalFile = True
|
||||||
# you can't have a registered path below another so it is save to break here
|
# you can't have a registered path below another so it is save to break here
|
||||||
break
|
break
|
||||||
@@ -208,6 +209,7 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
all_internal_files = True
|
all_internal_files = True
|
||||||
for i, file_uri in enumerate(files):
|
for i, file_uri in enumerate(files):
|
||||||
filename = get_local_path(file_uri.get_uri())
|
filename = get_local_path(file_uri.get_uri())
|
||||||
|
filename = os.path.realpath(filename)
|
||||||
|
|
||||||
# Check if its a folder (ends with an /), if yes add a "/"
|
# Check if its a folder (ends with an /), if yes add a "/"
|
||||||
# otherwise it will not find the entry in the table
|
# otherwise it will not find the entry in the table
|
||||||
@@ -296,6 +298,7 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
state = entry['state']
|
state = entry['state']
|
||||||
state_ok = state.startswith('OK')
|
state_ok = state.startswith('OK')
|
||||||
state_sync = state.startswith('SYNC')
|
state_sync = state.startswith('SYNC')
|
||||||
|
isDir = os.path.isdir(filename + os.sep)
|
||||||
if state_ok:
|
if state_ok:
|
||||||
shareable = True
|
shareable = True
|
||||||
elif state_sync and isDir:
|
elif state_sync and isDir:
|
||||||
@@ -446,6 +449,7 @@ class SyncStateExtension(GObject.GObject, Nautilus.InfoProvider):
|
|||||||
return
|
return
|
||||||
|
|
||||||
filename = get_local_path(item.get_uri())
|
filename = get_local_path(item.get_uri())
|
||||||
|
filename = os.path.realpath(filename)
|
||||||
if item.is_directory():
|
if item.is_directory():
|
||||||
filename += os.sep
|
filename += os.sep
|
||||||
|
|
||||||
|
|||||||
@@ -81,15 +81,15 @@ IFACEMETHODIMP OCContextMenu::Initialize(
|
|||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
FORMATETC fe = { CF_HDROP, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
||||||
STGMEDIUM stm;
|
STGMEDIUM stm;
|
||||||
|
|
||||||
if (SUCCEEDED(pDataObj->GetData(&fe, &stm))) {
|
if (SUCCEEDED(pDataObj->GetData(&fe, &stm))) {
|
||||||
// Get an HDROP handle.
|
// Get an HDROP handle.
|
||||||
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
|
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
|
||||||
if (hDrop) {
|
if (hDrop) {
|
||||||
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
|
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, nullptr, 0);
|
||||||
for (int i = 0; i < nFiles; ++i) {
|
for (UINT i = 0; i < nFiles; ++i) {
|
||||||
// Get the path of the file.
|
// Get the path of the file.
|
||||||
wchar_t buffer[MAX_PATH];
|
wchar_t buffer[MAX_PATH];
|
||||||
|
|
||||||
@@ -182,20 +182,38 @@ IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
|||||||
{
|
{
|
||||||
std::wstring command;
|
std::wstring command;
|
||||||
|
|
||||||
|
CMINVOKECOMMANDINFOEX *piciEx = nullptr;
|
||||||
|
if (pici->cbSize == sizeof(CMINVOKECOMMANDINFOEX))
|
||||||
|
piciEx = (CMINVOKECOMMANDINFOEX*)pici;
|
||||||
|
|
||||||
// For the Unicode case, if the high-order word is not zero, the
|
// For the Unicode case, if the high-order word is not zero, the
|
||||||
// command's verb string is in lpcmi->lpVerbW.
|
// command's verb string is in lpcmi->lpVerbW.
|
||||||
if (HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW))
|
if (piciEx
|
||||||
{
|
&& (piciEx->fMask & CMIC_MASK_UNICODE)
|
||||||
command = ((CMINVOKECOMMANDINFOEX *)pici)->lpVerbW;
|
&& HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW)) {
|
||||||
} else {
|
|
||||||
|
command = piciEx->lpVerbW;
|
||||||
|
|
||||||
|
// Verify that we handle the verb
|
||||||
|
bool handled = false;
|
||||||
|
for (auto &item : m_info.menuItems) {
|
||||||
|
if (item.command == command) {
|
||||||
|
handled = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!handled)
|
||||||
|
return E_FAIL;
|
||||||
|
} else if (IS_INTRESOURCE(pici->lpVerb)) {
|
||||||
// If the command cannot be identified through the verb string, then
|
// If the command cannot be identified through the verb string, then
|
||||||
// check the identifier offset.
|
// check the identifier offset.
|
||||||
|
|
||||||
auto offset = LOWORD(pici->lpVerb);
|
auto offset = LOWORD(pici->lpVerb);
|
||||||
if (offset >= m_info.menuItems.size())
|
if (offset >= m_info.menuItems.size())
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
command = m_info.menuItems[offset].command;
|
command = m_info.menuItems[offset].command;
|
||||||
|
} else {
|
||||||
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
OCClientInterface::SendRequest(command.data(), m_selectedFiles);
|
OCClientInterface::SendRequest(command.data(), m_selectedFiles);
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ IFACEMETHODIMP OCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID
|
|||||||
HRESULT hr = CLASS_E_NOAGGREGATION;
|
HRESULT hr = CLASS_E_NOAGGREGATION;
|
||||||
|
|
||||||
// pUnkOuter is used for aggregation. We do not support it in the sample.
|
// pUnkOuter is used for aggregation. We do not support it in the sample.
|
||||||
if (pUnkOuter == NULL) {
|
if (!pUnkOuter) {
|
||||||
hr = E_OUTOFMEMORY;
|
hr = E_OUTOFMEMORY;
|
||||||
|
|
||||||
// Create the COM component.
|
// Create the COM component.
|
||||||
@@ -88,4 +88,4 @@ IFACEMETHODIMP OCContextMenuFactory::LockServer(BOOL fLock)
|
|||||||
InterlockedDecrement(&g_cDllRef);
|
InterlockedDecrement(&g_cDllRef);
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,16 +24,16 @@ namespace {
|
|||||||
HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData)
|
HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
HKEY hKey = NULL;
|
HKEY hKey = nullptr;
|
||||||
|
|
||||||
// Creates the specified registry key. If the key already exists, the
|
// Creates the specified registry key. If the key already exists, the
|
||||||
// function opens it.
|
// function opens it.
|
||||||
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||||
NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL));
|
nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &hKey, nullptr));
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
if (pszData != NULL)
|
if (pszData)
|
||||||
{
|
{
|
||||||
// Set the specified value of the key.
|
// Set the specified value of the key.
|
||||||
DWORD cbData = lstrlen(pszData) * sizeof(*pszData);
|
DWORD cbData = lstrlen(pszData) * sizeof(*pszData);
|
||||||
@@ -50,7 +50,7 @@ HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR
|
|||||||
HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR pszData, DWORD cbData)
|
HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR pszData, DWORD cbData)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
HKEY hKey = NULL;
|
HKEY hKey = nullptr;
|
||||||
|
|
||||||
// Try to open the specified registry key.
|
// Try to open the specified registry key.
|
||||||
hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||||
@@ -59,8 +59,8 @@ HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR
|
|||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
// Get the data for the specified value name.
|
// Get the data for the specified value name.
|
||||||
hr = HRESULT_FROM_WIN32(RegQueryValueEx(hKey, pszValueName, NULL,
|
hr = HRESULT_FROM_WIN32(RegQueryValueEx(hKey, pszValueName, nullptr,
|
||||||
NULL, reinterpret_cast<LPBYTE>(pszData), &cbData));
|
nullptr, reinterpret_cast<LPBYTE>(pszData), &cbData));
|
||||||
|
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR
|
|||||||
|
|
||||||
HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
||||||
{
|
{
|
||||||
if (pszModule == NULL || pszThreadModel == NULL)
|
if (!pszModule || !pszThreadModel)
|
||||||
{
|
{
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CL
|
|||||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszFriendlyName);
|
hr = SetHKCRRegistryKeyAndValue(szSubkey, nullptr, pszFriendlyName);
|
||||||
|
|
||||||
// Create the HKCR\CLSID\{<CLSID>}\InprocServer32 key.
|
// Create the HKCR\CLSID\{<CLSID>}\InprocServer32 key.
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
@@ -99,7 +99,7 @@ HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CL
|
|||||||
{
|
{
|
||||||
// Set the default value of the InprocServer32 key to the
|
// Set the default value of the InprocServer32 key to the
|
||||||
// path of the COM module.
|
// path of the COM module.
|
||||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszModule);
|
hr = SetHKCRRegistryKeyAndValue(szSubkey, nullptr, pszModule);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
// Set the threading model of the component.
|
// Set the threading model of the component.
|
||||||
@@ -136,7 +136,7 @@ HRESULT OCContextMenuRegHandler::UnregisterInprocServer(const CLSID& clsid)
|
|||||||
HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
||||||
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
||||||
{
|
{
|
||||||
if (pszFileType == NULL)
|
if (!pszFileType)
|
||||||
{
|
{
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
|||||||
if (*pszFileType == L'.')
|
if (*pszFileType == L'.')
|
||||||
{
|
{
|
||||||
wchar_t szDefaultVal[260];
|
wchar_t szDefaultVal[260];
|
||||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
hr = GetHKCRRegistryKeyAndValue(pszFileType, nullptr, szDefaultVal,
|
||||||
sizeof(szDefaultVal));
|
sizeof(szDefaultVal));
|
||||||
|
|
||||||
// If the key exists and its default value is not empty, use the
|
// If the key exists and its default value is not empty, use the
|
||||||
@@ -171,7 +171,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
|||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
// Set the default value of the key.
|
// Set the default value of the key.
|
||||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, szCLSID);
|
hr = SetHKCRRegistryKeyAndValue(szSubkey, nullptr, szCLSID);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
@@ -180,7 +180,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
|||||||
HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
||||||
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
||||||
{
|
{
|
||||||
if (pszFileType == NULL)
|
if (!pszFileType)
|
||||||
{
|
{
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
@@ -195,7 +195,7 @@ HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
|||||||
if (*pszFileType == L'.')
|
if (*pszFileType == L'.')
|
||||||
{
|
{
|
||||||
wchar_t szDefaultVal[260];
|
wchar_t szDefaultVal[260];
|
||||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
hr = GetHKCRRegistryKeyAndValue(pszFileType, nullptr, szDefaultVal,
|
||||||
sizeof(szDefaultVal));
|
sizeof(szDefaultVal));
|
||||||
|
|
||||||
// If the key exists and its default value is not empty, use the
|
// If the key exists and its default value is not empty, use the
|
||||||
@@ -215,4 +215,4 @@ HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ HRESULT RegDelnodeRecurse(HKEY hKeyRoot, LPTSTR lpSubKey)
|
|||||||
// Enumerate the keys
|
// Enumerate the keys
|
||||||
|
|
||||||
dwSize = MAX_PATH;
|
dwSize = MAX_PATH;
|
||||||
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,
|
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, nullptr,
|
||||||
NULL, NULL, &ftWrite);
|
nullptr, nullptr, &ftWrite);
|
||||||
|
|
||||||
if (lResult == ERROR_SUCCESS)
|
if (lResult == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
@@ -73,8 +73,8 @@ HRESULT RegDelnodeRecurse(HKEY hKeyRoot, LPTSTR lpSubKey)
|
|||||||
|
|
||||||
dwSize = MAX_PATH;
|
dwSize = MAX_PATH;
|
||||||
|
|
||||||
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,
|
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, nullptr,
|
||||||
NULL, NULL, &ftWrite);
|
nullptr, nullptr, &ftWrite);
|
||||||
|
|
||||||
} while (lResult == ERROR_SUCCESS);
|
} while (lResult == ERROR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
// {841A0AAD-AA11-4B50-84D9-7F8E727D77D7}
|
// {841A0AAD-AA11-4B50-84D9-7F8E727D77D7}
|
||||||
static const GUID CLSID_FileContextMenuExt = { 0x841a0aad, 0xaa11, 0x4b50, { 0x84, 0xd9, 0x7f, 0x8e, 0x72, 0x7d, 0x77, 0xd7 } };
|
static const GUID CLSID_FileContextMenuExt = { 0x841a0aad, 0xaa11, 0x4b50, { 0x84, 0xd9, 0x7f, 0x8e, 0x72, 0x7d, 0x77, 0xd7 } };
|
||||||
|
|
||||||
HINSTANCE g_hInst = NULL;
|
HINSTANCE g_hInst = nullptr;
|
||||||
long g_cDllRef = 0;
|
long g_cDllRef = 0;
|
||||||
|
|
||||||
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
|
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
|
||||||
@@ -105,4 +105,4 @@ STDAPI DllUnregisterServer(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
||||||
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
||||||
|
|
||||||
#define WINVER 0x0501
|
// Note: Here was a #define for windows target version
|
||||||
#define _WIN32_WINNT 0x0501
|
// e.g. WINVER / _WIN32_WINNT, see https://devblogs.microsoft.com/oldnewthing/20070411-00/?p=27283
|
||||||
|
// Unnecessary because we define both in desktop/CMakeLists.txt
|
||||||
|
|
||||||
#include <SDKDDKVer.h>
|
#include <SDKDDKVer.h>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include "OCOverlayRegistrationHandler.h"
|
#include "OCOverlayRegistrationHandler.h"
|
||||||
#include "OCOverlayFactory.h"
|
#include "OCOverlayFactory.h"
|
||||||
|
|
||||||
HINSTANCE instanceHandle = NULL;
|
HINSTANCE instanceHandle = nullptr;
|
||||||
|
|
||||||
long dllReferenceCount = 0;
|
long dllReferenceCount = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ IFACEMETHODIMP OCOverlay::QueryInterface(REFIID riid, void **ppv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hr = E_NOINTERFACE;
|
hr = E_NOINTERFACE;
|
||||||
*ppv = NULL;
|
*ppv = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*ppv)
|
if (*ppv)
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ IFACEMETHODIMP OCOverlayFactory::QueryInterface(REFIID riid, void **ppv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hResult = E_NOINTERFACE;
|
hResult = E_NOINTERFACE;
|
||||||
*ppv = NULL;
|
*ppv = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -70,7 +70,7 @@ IFACEMETHODIMP OCOverlayFactory::CreateInstance(
|
|||||||
{
|
{
|
||||||
HRESULT hResult = CLASS_E_NOAGGREGATION;
|
HRESULT hResult = CLASS_E_NOAGGREGATION;
|
||||||
|
|
||||||
if (pUnkOuter != NULL) { return hResult; }
|
if (pUnkOuter) { return hResult; }
|
||||||
|
|
||||||
hResult = E_OUTOFMEMORY;
|
hResult = E_OUTOFMEMORY;
|
||||||
OCOverlay *lrOverlay = new (std::nothrow) OCOverlay(_state);
|
OCOverlay *lrOverlay = new (std::nothrow) OCOverlay(_state);
|
||||||
@@ -90,4 +90,4 @@ IFACEMETHODIMP OCOverlayFactory::LockServer(BOOL fLock)
|
|||||||
InterlockedDecrement(&dllReferenceCount);
|
InterlockedDecrement(&dllReferenceCount);
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ using namespace std;
|
|||||||
HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PCWSTR friendlyName)
|
HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PCWSTR friendlyName)
|
||||||
{
|
{
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY shellOverlayKey = NULL;
|
HKEY shellOverlayKey = nullptr;
|
||||||
// the key may not exist yet
|
// the key may not exist yet
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &shellOverlayKey, NULL));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &shellOverlayKey, nullptr));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
hResult = RegCreateKey(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, &shellOverlayKey);
|
hResult = RegCreateKey(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, &shellOverlayKey);
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
@@ -34,8 +34,8 @@ HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY syncExOverlayKey = NULL;
|
HKEY syncExOverlayKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(shellOverlayKey, friendlyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &syncExOverlayKey, NULL));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(shellOverlayKey, friendlyName, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &syncExOverlayKey, nullptr));
|
||||||
|
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -44,7 +44,7 @@ HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PC
|
|||||||
wchar_t stringCLSID[MAX_PATH];
|
wchar_t stringCLSID[MAX_PATH];
|
||||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||||
LPCTSTR value = stringCLSID;
|
LPCTSTR value = stringCLSID;
|
||||||
hResult = RegSetValueEx(syncExOverlayKey, NULL, 0, REG_SZ, (LPBYTE)value, (DWORD)((wcslen(value)+1) * sizeof(TCHAR)));
|
hResult = RegSetValueEx(syncExOverlayKey, nullptr, 0, REG_SZ, (LPBYTE)value, (DWORD)((wcslen(value)+1) * sizeof(TCHAR)));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
@@ -55,14 +55,14 @@ HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PC
|
|||||||
HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
||||||
{
|
{
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY shellOverlayKey = NULL;
|
HKEY shellOverlayKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, KEY_WRITE, &shellOverlayKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, KEY_WRITE, &shellOverlayKey));
|
||||||
|
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY syncExOverlayKey = NULL;
|
HKEY syncExOverlayKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(shellOverlayKey, friendlyName));
|
hResult = HRESULT_FROM_WIN32(RegDeleteKey(shellOverlayKey, friendlyName));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -73,35 +73,35 @@ HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
|||||||
|
|
||||||
HRESULT OCOverlayRegistrationHandler::RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid)
|
HRESULT OCOverlayRegistrationHandler::RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid)
|
||||||
{
|
{
|
||||||
if (modulePath == NULL) {
|
if (!modulePath) {
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
wchar_t stringCLSID[MAX_PATH];
|
wchar_t stringCLSID[MAX_PATH];
|
||||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY hKey = NULL;
|
HKEY hKey = nullptr;
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, KEY_WRITE, &hKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, KEY_WRITE, &hKey));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY clsidKey = NULL;
|
HKEY clsidKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(hKey, stringCLSID, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &clsidKey, NULL));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(hKey, stringCLSID, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &clsidKey, nullptr));
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegSetValue(clsidKey, NULL, REG_SZ, friendlyName, (DWORD) wcslen(friendlyName)));
|
hResult = HRESULT_FROM_WIN32(RegSetValue(clsidKey, nullptr, REG_SZ, friendlyName, (DWORD) wcslen(friendlyName)));
|
||||||
|
|
||||||
HKEY inprocessKey = NULL;
|
HKEY inprocessKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(clsidKey, REGISTRY_IN_PROCESS, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &inprocessKey, NULL));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(clsidKey, REGISTRY_IN_PROCESS, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &inprocessKey, nullptr));
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegSetValue(inprocessKey, NULL, REG_SZ, modulePath, (DWORD) wcslen(modulePath)));
|
hResult = HRESULT_FROM_WIN32(RegSetValue(inprocessKey, nullptr, REG_SZ, modulePath, (DWORD) wcslen(modulePath)));
|
||||||
|
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -126,13 +126,13 @@ HRESULT OCOverlayRegistrationHandler::UnregisterCOMObject(const CLSID& clsid)
|
|||||||
|
|
||||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY hKey = NULL;
|
HKEY hKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, DELETE, &hKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, DELETE, &hKey));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY clsidKey = NULL;
|
HKEY clsidKey = nullptr;
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(hKey, stringCLSID, 0, DELETE, &clsidKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(hKey, stringCLSID, 0, DELETE, &clsidKey));
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -149,4 +149,4 @@ HRESULT OCOverlayRegistrationHandler::UnregisterCOMObject(const CLSID& clsid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define WINVER 0x0501
|
|
||||||
#define _WIN32_WINNT 0x0501
|
// Note: Here was a #define for windows target version
|
||||||
|
// e.g. WINVER / _WIN32_WINNT, see https://devblogs.microsoft.com/oldnewthing/20070411-00/?p=27283
|
||||||
|
// Unnecessary because we define both in desktop/CMakeLists.txt
|
||||||
|
|
||||||
#include "CommunicationSocket.h"
|
#include "CommunicationSocket.h"
|
||||||
#include "RegistryUtil.h"
|
#include "RegistryUtil.h"
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ bool CommunicationSocket::Close()
|
|||||||
|
|
||||||
bool CommunicationSocket::Connect(const std::wstring &pipename)
|
bool CommunicationSocket::Connect(const std::wstring &pipename)
|
||||||
{
|
{
|
||||||
_pipe = CreateFile(pipename.data(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
_pipe = CreateFile(pipename.data(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, 0, nullptr);
|
||||||
|
|
||||||
if (_pipe == INVALID_HANDLE_VALUE) {
|
if (_pipe == INVALID_HANDLE_VALUE) {
|
||||||
return false;
|
return false;
|
||||||
@@ -87,7 +87,7 @@ bool CommunicationSocket::SendMsg(const wchar_t* message) const
|
|||||||
auto utf8_msg = StringUtil::toUtf8(message);
|
auto utf8_msg = StringUtil::toUtf8(message);
|
||||||
|
|
||||||
DWORD numBytesWritten = 0;
|
DWORD numBytesWritten = 0;
|
||||||
auto result = WriteFile( _pipe, utf8_msg.c_str(), DWORD(utf8_msg.size()), &numBytesWritten, NULL);
|
auto result = WriteFile( _pipe, utf8_msg.c_str(), DWORD(utf8_msg.size()), &numBytesWritten, nullptr);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
return true;
|
return true;
|
||||||
@@ -123,7 +123,7 @@ bool CommunicationSocket::ReadLine(wstring* response)
|
|||||||
DWORD numBytesRead = 0;
|
DWORD numBytesRead = 0;
|
||||||
DWORD totalBytesAvailable = 0;
|
DWORD totalBytesAvailable = 0;
|
||||||
|
|
||||||
if (!PeekNamedPipe(_pipe, NULL, 0, 0, &totalBytesAvailable, 0)) {
|
if (!PeekNamedPipe(_pipe, nullptr, 0, 0, &totalBytesAvailable, 0)) {
|
||||||
Close();
|
Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -131,7 +131,7 @@ bool CommunicationSocket::ReadLine(wstring* response)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ReadFile(_pipe, resp_utf8.data(), DWORD(resp_utf8.size()), &numBytesRead, NULL)) {
|
if (!ReadFile(_pipe, resp_utf8.data(), DWORD(resp_utf8.size()), &numBytesRead, nullptr)) {
|
||||||
Close();
|
Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ bool FileUtil::IsChildFile(const wchar_t* rootFolder, vector<wstring>* files)
|
|||||||
|
|
||||||
bool FileUtil::IsChildFile(const wchar_t* rootFolder, const wchar_t* file)
|
bool FileUtil::IsChildFile(const wchar_t* rootFolder, const wchar_t* file)
|
||||||
{
|
{
|
||||||
wstring* f = new wstring(file);
|
const wstring f(file);
|
||||||
|
|
||||||
size_t found = f->find(rootFolder);
|
size_t found = f.find(rootFolder);
|
||||||
|
|
||||||
if(found != string::npos)
|
if(found != string::npos)
|
||||||
{
|
{
|
||||||
@@ -83,4 +83,4 @@ bool FileUtil::IsChildFileOfRoot(const wchar_t* filePath)
|
|||||||
|
|
||||||
delete rootFolder;
|
delete rootFolder;
|
||||||
return needed;
|
return needed;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ bool RegistryUtil::ReadRegistry(const wchar_t* key, const wchar_t* name, wstring
|
|||||||
{
|
{
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
HKEY rootKey = NULL;
|
HKEY rootKey = nullptr;
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CURRENT_USER, (LPCWSTR)key, NULL, KEY_READ, &rootKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CURRENT_USER, (LPCWSTR)key, 0, KEY_READ, &rootKey));
|
||||||
|
|
||||||
if(!SUCCEEDED(hResult))
|
if(!SUCCEEDED(hResult))
|
||||||
{
|
{
|
||||||
@@ -49,8 +49,8 @@ bool RegistryUtil::ReadRegistry(const wchar_t* key, const wchar_t* name, wstring
|
|||||||
|
|
||||||
wchar_t value[SIZE];
|
wchar_t value[SIZE];
|
||||||
DWORD value_length = SIZE;
|
DWORD value_length = SIZE;
|
||||||
|
|
||||||
hResult = RegQueryValueEx(rootKey, (LPCWSTR)name, NULL, NULL, (LPBYTE)value, &value_length );
|
hResult = RegQueryValueEx(rootKey, (LPCWSTR)name, nullptr, nullptr, (LPBYTE)value, &value_length );
|
||||||
|
|
||||||
if(!SUCCEEDED(hResult))
|
if(!SUCCEEDED(hResult))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
// We don't keep track of all files and can't know which file is currently visible
|
// We don't keep track of all files and can't know which file is currently visible
|
||||||
// to the user, but at least reload the root dir so that any shortcut to the root
|
// to the user, but at least reload the root dir so that any shortcut to the root
|
||||||
// is updated without the user needing to refresh.
|
// is updated without the user needing to refresh.
|
||||||
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), nullptr);
|
||||||
} else if (StringUtil::begins_with(response, wstring(L"UNREGISTER_PATH:"))) {
|
} else if (StringUtil::begins_with(response, wstring(L"UNREGISTER_PATH:"))) {
|
||||||
wstring responsePath = response.substr(16); // length of UNREGISTER_PATH:
|
wstring responsePath = response.substr(16); // length of UNREGISTER_PATH:
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto& path : removedPaths)
|
for (auto& path : removedPaths)
|
||||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, path.data(), NULL);
|
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, path.data(), nullptr);
|
||||||
} else if (StringUtil::begins_with(response, wstring(L"STATUS:")) ||
|
} else if (StringUtil::begins_with(response, wstring(L"STATUS:")) ||
|
||||||
StringUtil::begins_with(response, wstring(L"BROADCAST:"))) {
|
StringUtil::begins_with(response, wstring(L"BROADCAST:"))) {
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
it->second = state;
|
it->second = state;
|
||||||
}
|
}
|
||||||
if (updateView) {
|
if (updateView) {
|
||||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +151,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
// Let explorer know about each invalidated cache entry that needs to get its icon removed.
|
// Let explorer know about each invalidated cache entry that needs to get its icon removed.
|
||||||
for (auto it = cache.begin(); it != cache.end(); ++it) {
|
for (auto it = cache.begin(); it != cache.end(); ++it) {
|
||||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, it->first.data(), NULL);
|
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, it->first.data(), nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ RemotePathChecker::RemotePathChecker()
|
|||||||
: _stop(false)
|
: _stop(false)
|
||||||
, _watchedDirectories(make_shared<const vector<wstring>>())
|
, _watchedDirectories(make_shared<const vector<wstring>>())
|
||||||
, _connected(false)
|
, _connected(false)
|
||||||
, _newQueries(CreateEvent(NULL, FALSE, FALSE, NULL))
|
, _newQueries(CreateEvent(nullptr, FALSE, FALSE, nullptr))
|
||||||
, _thread([this]{ this->workerThreadLoop(); })
|
, _thread([this]{ this->workerThreadLoop(); })
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define WINVER 0x0501
|
|
||||||
#define _WIN32_WINNT 0x0501
|
// Note: Here was a #define for windows target version
|
||||||
|
// e.g. WINVER / _WIN32_WINNT, see https://devblogs.microsoft.com/oldnewthing/20070411-00/?p=27283
|
||||||
|
// Unnecessary because we define both in desktop/CMakeLists.txt
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ void QProgressIndicator::setColor(const QColor & color)
|
|||||||
|
|
||||||
QSize QProgressIndicator::sizeHint() const
|
QSize QProgressIndicator::sizeHint() const
|
||||||
{
|
{
|
||||||
return QSize(20,20);
|
return {20, 20};
|
||||||
}
|
}
|
||||||
|
|
||||||
int QProgressIndicator::heightForWidth(int w) const
|
int QProgressIndicator::heightForWidth(int w) const
|
||||||
|
|||||||
2
src/3rdparty/libcrashreporter-qt
vendored
2
src/3rdparty/libcrashreporter-qt
vendored
Submodule src/3rdparty/libcrashreporter-qt updated: 7df66f72aa...a4409c5c1b
@@ -94,7 +94,7 @@ bool QtLockedFile::lock(LockMode mode, bool block)
|
|||||||
QString mut_name = QString::fromLatin1(MUTEX_PREFIX)
|
QString mut_name = QString::fromLatin1(MUTEX_PREFIX)
|
||||||
+ fi.absoluteFilePath().toLower();
|
+ fi.absoluteFilePath().toLower();
|
||||||
|
|
||||||
m_mutex_hnd = CreateMutexW(NULL, FALSE, (TCHAR*)mut_name.utf16());
|
m_mutex_hnd = CreateMutexW(nullptr, FALSE, (TCHAR*)mut_name.utf16());
|
||||||
|
|
||||||
if (m_mutex_hnd == 0) {
|
if (m_mutex_hnd == 0) {
|
||||||
qWarning("QtLockedFile::lock(): CreateMutex: %s",
|
qWarning("QtLockedFile::lock(): CreateMutex: %s",
|
||||||
@@ -118,7 +118,7 @@ bool QtLockedFile::lock(LockMode mode, bool block)
|
|||||||
if (res == WAIT_TIMEOUT) {
|
if (res == WAIT_TIMEOUT) {
|
||||||
if (i) {
|
if (i) {
|
||||||
// A failed nonblocking rw locking. Undo changes to semaphore.
|
// A failed nonblocking rw locking. Undo changes to semaphore.
|
||||||
if (ReleaseSemaphore(m_semaphore_hnd, i, NULL) == 0) {
|
if (ReleaseSemaphore(m_semaphore_hnd, i, nullptr) == 0) {
|
||||||
qWarning("QtLockedFile::unlock(): ReleaseSemaphore: %s",
|
qWarning("QtLockedFile::unlock(): ReleaseSemaphore: %s",
|
||||||
errorCodeToString(GetLastError()).toLatin1().constData());
|
errorCodeToString(GetLastError()).toLatin1().constData());
|
||||||
// Fall through
|
// Fall through
|
||||||
|
|||||||
1
src/3rdparty/qtmacgoodies
vendored
1
src/3rdparty/qtmacgoodies
vendored
Submodule src/3rdparty/qtmacgoodies deleted from ebc7ec6f68
@@ -123,7 +123,7 @@ bool QtLocalPeer::sendMessage(const QString &message, int timeout, bool block)
|
|||||||
Sleep(DWORD(ms));
|
Sleep(DWORD(ms));
|
||||||
#else
|
#else
|
||||||
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
|
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
|
||||||
nanosleep(&ts, NULL);
|
nanosleep(&ts, nullptr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (!connOk)
|
if (!connOk)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ static QString instancesLockFilename(const QString &appSessionId)
|
|||||||
QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
|
QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
|
||||||
: QApplication(argc, argv),
|
: QApplication(argc, argv),
|
||||||
firstPeer(-1),
|
firstPeer(-1),
|
||||||
pidPeer(0)
|
pidPeer(nullptr)
|
||||||
{
|
{
|
||||||
this->appId = appId;
|
this->appId = appId;
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
|
|||||||
|
|
||||||
// This shared memory holds a zero-terminated array of active (or crashed) instances
|
// This shared memory holds a zero-terminated array of active (or crashed) instances
|
||||||
instances = new QSharedMemory(appSessionId, this);
|
instances = new QSharedMemory(appSessionId, this);
|
||||||
actWin = 0;
|
actWin = nullptr;
|
||||||
block = false;
|
block = false;
|
||||||
|
|
||||||
// First instance creates the shared memory, later instances attach to it
|
// First instance creates the shared memory, later instances attach to it
|
||||||
@@ -71,7 +71,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
|
|||||||
qWarning() << "Failed to initialize instances shared memory: "
|
qWarning() << "Failed to initialize instances shared memory: "
|
||||||
<< instances->errorString();
|
<< instances->errorString();
|
||||||
delete instances;
|
delete instances;
|
||||||
instances = 0;
|
instances = nullptr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
src/3rdparty/sqlite3/sqlite3.c
vendored
4
src/3rdparty/sqlite3/sqlite3.c
vendored
@@ -70201,7 +70201,7 @@ static int btreeOverwriteContent(
|
|||||||
){
|
){
|
||||||
int nData = pX->nData - iOffset;
|
int nData = pX->nData - iOffset;
|
||||||
if( nData<=0 ){
|
if( nData<=0 ){
|
||||||
/* Overwritting with zeros */
|
/* Overwriting with zeros */
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<iAmt && pDest[i]==0; i++){}
|
for(i=0; i<iAmt && pDest[i]==0; i++){}
|
||||||
if( i<iAmt ){
|
if( i<iAmt ){
|
||||||
@@ -91521,7 +91521,7 @@ static int vdbeSorterFlushPMA(VdbeSorter *pSorter){
|
|||||||
** the background thread from a sub-tasks previous turn is still running,
|
** the background thread from a sub-tasks previous turn is still running,
|
||||||
** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy,
|
** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy,
|
||||||
** fall back to using the final sub-task. The first (pSorter->nTask-1)
|
** fall back to using the final sub-task. The first (pSorter->nTask-1)
|
||||||
** sub-tasks are prefered as they use background threads - the final
|
** sub-tasks are preferred as they use background threads - the final
|
||||||
** sub-task uses the main thread. */
|
** sub-task uses the main thread. */
|
||||||
for(i=0; i<nWorker; i++){
|
for(i=0; i<nWorker; i++){
|
||||||
int iTest = (pSorter->iPrev + i + 1) % nWorker;
|
int iTest = (pSorter->iPrev + i + 1) % nWorker;
|
||||||
|
|||||||
@@ -29,12 +29,17 @@ if(NOT MSVC)
|
|||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Calling Qt's qCWarning(category, ...) with no params for "..." is a GNU
|
||||||
|
# extension (C++11 §16.3/4 forbids them). Silence clang's warnings.
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# Enable DEP & ASLR
|
# Enable DEP & ASLR
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /nxcompat /dynamicbase")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /nxcompat /dynamicbase")
|
||||||
elseif(UNIX AND NOT APPLE)
|
elseif(UNIX AND NOT APPLE)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
||||||
@@ -47,8 +52,8 @@ include_directories(
|
|||||||
add_subdirectory(csync)
|
add_subdirectory(csync)
|
||||||
add_subdirectory(libsync)
|
add_subdirectory(libsync)
|
||||||
if (NOT BUILD_LIBRARIES_ONLY)
|
if (NOT BUILD_LIBRARIES_ONLY)
|
||||||
add_subdirectory(gui)
|
|
||||||
add_subdirectory(cmd)
|
add_subdirectory(cmd)
|
||||||
|
add_subdirectory(gui)
|
||||||
|
|
||||||
if (WITH_CRASHREPORTER)
|
if (WITH_CRASHREPORTER)
|
||||||
add_subdirectory(3rdparty/libcrashreporter-qt)
|
add_subdirectory(3rdparty/libcrashreporter-qt)
|
||||||
|
|||||||
@@ -32,24 +32,17 @@ if(NOT BUILD_LIBRARIES_ONLY)
|
|||||||
target_include_directories(${cmd_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer)
|
target_include_directories(${cmd_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# OSX: Copy nextcloudcmd to app bundle, src/gui will run macdeployqt
|
||||||
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||||
install(TARGETS ${cmd_NAME} DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS)
|
add_custom_command(TARGET ${cmd_NAME} POST_BUILD
|
||||||
|
COMMAND "cp"
|
||||||
|
"$<TARGET_FILE:${cmd_NAME}>"
|
||||||
|
"${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS"
|
||||||
|
COMMENT "Copying nextcloudcmd..."
|
||||||
|
)
|
||||||
elseif(NOT BUILD_LIBRARIES_ONLY)
|
elseif(NOT BUILD_LIBRARIES_ONLY)
|
||||||
install(TARGETS ${cmd_NAME}
|
install(TARGETS ${cmd_NAME}
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# FIXME: The following lines are dup in src/gui and src/cmd because it needs to be done after both are installed
|
|
||||||
#FIXME: find a nice solution to make the second if(BUILD_OWNCLOUD_OSX_BUNDLE) unnecessary
|
|
||||||
# currently it needs to be done because the code right above needs to be executed no matter
|
|
||||||
# if building a bundle or not and the install_qt4_executable needs to be called afterwards
|
|
||||||
if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY)
|
|
||||||
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
|
||||||
install(CODE "
|
|
||||||
message(STATUS \"Deploying (Qt) dependencies and fixing library paths...\")
|
|
||||||
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE} ${QT_QMAKE_EXECUTABLE})
|
|
||||||
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE}/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app ${QT_QMAKE_EXECUTABLE})
|
|
||||||
" COMPONENT RUNTIME)
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ struct CmdOptions
|
|||||||
|
|
||||||
// we can't use csync_set_userdata because the SyncEngine sets it already.
|
// we can't use csync_set_userdata because the SyncEngine sets it already.
|
||||||
// So we have to use a global variable
|
// So we have to use a global variable
|
||||||
CmdOptions *opts = 0;
|
CmdOptions *opts = nullptr;
|
||||||
|
|
||||||
class EchoDisabler
|
class EchoDisabler
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,43 +11,50 @@
|
|||||||
|
|
||||||
// For overloading macros by argument count
|
// For overloading macros by argument count
|
||||||
// See stackoverflow.com/questions/16683146/can-macros-be-overloaded-by-number-of-arguments
|
// See stackoverflow.com/questions/16683146/can-macros-be-overloaded-by-number-of-arguments
|
||||||
#define OC_ASSERT_CAT(A, B) A##B
|
// Bugfix 08/09/2019: Broken arg expansion led to always collapsing to 1 arg (XXXX_1 overload result)
|
||||||
#define OC_ASSERT_SELECT(NAME, NUM) OC_ASSERT_CAT(NAME##_, NUM)
|
// See also: https://stackoverflow.com/questions/9183993/msvc-variadic-macro-expansion
|
||||||
#define OC_ASSERT_GET_COUNT(_1, _2, _3, COUNT, ...) COUNT
|
#define OC_ASSERT_GLUE(x, y) x y
|
||||||
#define OC_ASSERT_VA_SIZE(...) OC_ASSERT_GET_COUNT(__VA_ARGS__, 3, 2, 1, 0)
|
|
||||||
|
|
||||||
#define OC_ASSERT_OVERLOAD(NAME, ...) OC_ASSERT_SELECT(NAME, OC_ASSERT_VA_SIZE(__VA_ARGS__)) \
|
#define OC_ASSERT_GET_COUNT(_1, _2, _3, COUNT, ...) COUNT
|
||||||
(__VA_ARGS__)
|
#define OC_ASSERT_EXPAND_ARGS(args) OC_ASSERT_GET_COUNT args
|
||||||
|
#define OC_ASSERT_VA_SIZE(...) OC_ASSERT_EXPAND_ARGS((__VA_ARGS__, 3, 2, 1, 0))
|
||||||
|
|
||||||
|
#define OC_ASSERT_SELECT2(NAME, COUNT) NAME##COUNT
|
||||||
|
#define OC_ASSERT_SELECT1(NAME, COUNT) OC_ASSERT_SELECT2(NAME, COUNT)
|
||||||
|
#define OC_ASSERT_SELECT(NAME, COUNT) OC_ASSERT_SELECT1(NAME, COUNT)
|
||||||
|
|
||||||
|
#define OC_ASSERT_OVERLOAD(NAME, ...) OC_ASSERT_GLUE(OC_ASSERT_SELECT(NAME, OC_ASSERT_VA_SIZE(__VA_ARGS__)), \
|
||||||
|
(__VA_ARGS__))
|
||||||
|
|
||||||
// Default assert: If the condition is false in debug builds, terminate.
|
// Default assert: If the condition is false in debug builds, terminate.
|
||||||
//
|
//
|
||||||
// Prints a message on failure, even in release builds.
|
// Prints a message on failure, even in release builds.
|
||||||
#define ASSERT(...) OC_ASSERT_OVERLOAD(ASSERT, __VA_ARGS__)
|
#define ASSERT1(cond) \
|
||||||
#define ASSERT_1(cond) \
|
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
#define ASSERT_2(cond, message) \
|
#define ASSERT2(cond, message) \
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
|
#define ASSERT(...) OC_ASSERT_OVERLOAD(ASSERT, __VA_ARGS__)
|
||||||
|
|
||||||
// Enforce condition to be true, even in release builds.
|
// Enforce condition to be true, even in release builds.
|
||||||
//
|
//
|
||||||
// Prints 'message' and aborts execution if 'cond' is false.
|
// Prints 'message' and aborts execution if 'cond' is false.
|
||||||
#define ENFORCE(...) OC_ASSERT_OVERLOAD(ENFORCE, __VA_ARGS__)
|
#define ENFORCE1(cond) \
|
||||||
#define ENFORCE_1(cond) \
|
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
qFatal("ENFORCE: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
qFatal("ENFORCE: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
#define ENFORCE_2(cond, message) \
|
#define ENFORCE2(cond, message) \
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
qFatal("ENFORCE: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
qFatal("ENFORCE: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
|
#define ENFORCE(...) OC_ASSERT_OVERLOAD(ENFORCE, __VA_ARGS__)
|
||||||
|
|
||||||
// An assert that is only present in debug builds: typically used for
|
// An assert that is only present in debug builds: typically used for
|
||||||
// asserts that are too expensive for release mode.
|
// asserts that are too expensive for release mode.
|
||||||
|
|||||||
@@ -207,7 +207,10 @@ static inline uint64_t c_jhash64(const uint8_t *k, uint64_t length, uint64_t int
|
|||||||
/* handle the last 23 bytes */
|
/* handle the last 23 bytes */
|
||||||
c += length;
|
c += length;
|
||||||
switch(len) {
|
switch(len) {
|
||||||
|
// pragma only for GCC (and clang continues to pretend to be it by defining __GNUC__)
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
||||||
|
#endif
|
||||||
case 23: c+=((uint64_t)k[22]<<56);
|
case 23: c+=((uint64_t)k[22]<<56);
|
||||||
case 22: c+=((uint64_t)k[21]<<48);
|
case 22: c+=((uint64_t)k[21]<<48);
|
||||||
case 21: c+=((uint64_t)k[20]<<40);
|
case 21: c+=((uint64_t)k[20]<<40);
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ QByteArray contentChecksumType()
|
|||||||
|
|
||||||
static bool checksumComputationEnabled()
|
static bool checksumComputationEnabled()
|
||||||
{
|
{
|
||||||
static bool enabled = qgetenv("OWNCLOUD_DISABLE_CHECKSUM_COMPUTATIONS").isEmpty();
|
static bool enabled = qEnvironmentVariableIsEmpty("OWNCLOUD_DISABLE_CHECKSUM_COMPUTATIONS");
|
||||||
return enabled;
|
return enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,21 +255,19 @@ void ValidateChecksumHeader::slotChecksumCalculated(const QByteArray &checksumTy
|
|||||||
emit validated(checksumType, checksum);
|
emit validated(checksumType, checksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSyncChecksumHook::CSyncChecksumHook()
|
CSyncChecksumHook::CSyncChecksumHook() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray CSyncChecksumHook::hook(const QByteArray &path, const QByteArray &otherChecksumHeader, void * /*this_obj*/)
|
QByteArray CSyncChecksumHook::hook(const QByteArray &path, const QByteArray &otherChecksumHeader, void * /*this_obj*/)
|
||||||
{
|
{
|
||||||
QByteArray type = parseChecksumHeaderType(QByteArray(otherChecksumHeader));
|
QByteArray type = parseChecksumHeaderType(QByteArray(otherChecksumHeader));
|
||||||
if (type.isEmpty())
|
if (type.isEmpty())
|
||||||
return NULL;
|
return nullptr;
|
||||||
|
|
||||||
qCInfo(lcChecksums) << "Computing" << type << "checksum of" << path << "in the csync hook";
|
qCInfo(lcChecksums) << "Computing" << type << "checksum of" << path << "in the csync hook";
|
||||||
QByteArray checksum = ComputeChecksum::computeNow(QString::fromUtf8(path), type);
|
QByteArray checksum = ComputeChecksum::computeNow(QString::fromUtf8(path), type);
|
||||||
if (checksum.isNull()) {
|
if (checksum.isNull()) {
|
||||||
qCWarning(lcChecksums) << "Failed to compute checksum" << type << "for" << path;
|
qCWarning(lcChecksums) << "Failed to compute checksum" << type << "for" << path;
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return makeChecksumHeader(type, checksum);
|
return makeChecksumHeader(type, checksum);
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ bool FileSystem::rename(const QString &originFileName,
|
|||||||
if (!success) {
|
if (!success) {
|
||||||
wchar_t *string = 0;
|
wchar_t *string = 0;
|
||||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||||
NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
nullptr, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
(LPWSTR)&string, 0, NULL);
|
(LPWSTR)&string, 0, nullptr);
|
||||||
|
|
||||||
error = QString::fromWCharArray(string);
|
error = QString::fromWCharArray(string);
|
||||||
LocalFree((HLOCAL)string);
|
LocalFree((HLOCAL)string);
|
||||||
@@ -216,8 +216,8 @@ bool FileSystem::uncheckedRenameReplace(const QString &originFileName,
|
|||||||
if (!ok) {
|
if (!ok) {
|
||||||
wchar_t *string = 0;
|
wchar_t *string = 0;
|
||||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||||
NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
nullptr, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
(LPWSTR)&string, 0, NULL);
|
(LPWSTR)&string, 0, nullptr);
|
||||||
|
|
||||||
*errorString = QString::fromWCharArray(string);
|
*errorString = QString::fromWCharArray(string);
|
||||||
qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString;
|
qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString;
|
||||||
@@ -248,7 +248,7 @@ bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qi
|
|||||||
DWORD creationDisp = OPEN_EXISTING;
|
DWORD creationDisp = OPEN_EXISTING;
|
||||||
|
|
||||||
// Create the file handle.
|
// Create the file handle.
|
||||||
SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE };
|
SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), nullptr, FALSE };
|
||||||
QString fName = longWinPath(file->fileName());
|
QString fName = longWinPath(file->fileName());
|
||||||
|
|
||||||
HANDLE fileHandle = CreateFileW(
|
HANDLE fileHandle = CreateFileW(
|
||||||
@@ -258,7 +258,7 @@ bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qi
|
|||||||
&securityAtts,
|
&securityAtts,
|
||||||
creationDisp,
|
creationDisp,
|
||||||
FILE_ATTRIBUTE_NORMAL,
|
FILE_ATTRIBUTE_NORMAL,
|
||||||
NULL);
|
nullptr);
|
||||||
|
|
||||||
// Bail out on error.
|
// Bail out on error.
|
||||||
if (fileHandle == INVALID_HANDLE_VALUE) {
|
if (fileHandle == INVALID_HANDLE_VALUE) {
|
||||||
@@ -352,8 +352,8 @@ QString FileSystem::fileSystemForPath(const QString &path)
|
|||||||
|
|
||||||
if (!GetVolumeInformationW(
|
if (!GetVolumeInformationW(
|
||||||
reinterpret_cast<LPCWSTR>(drive.utf16()),
|
reinterpret_cast<LPCWSTR>(drive.utf16()),
|
||||||
NULL, 0,
|
nullptr, 0,
|
||||||
NULL, NULL, NULL,
|
nullptr, nullptr, nullptr,
|
||||||
fileSystemBuffer, fileSystemBufferSize)) {
|
fileSystemBuffer, fileSystemBufferSize)) {
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
@@ -516,9 +516,9 @@ bool FileSystem::isFileLocked(const QString &fileName)
|
|||||||
wuri,
|
wuri,
|
||||||
GENERIC_READ | GENERIC_WRITE,
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||||
NULL, OPEN_EXISTING,
|
nullptr, OPEN_EXISTING,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
|
||||||
NULL);
|
nullptr);
|
||||||
|
|
||||||
if (win_h == INVALID_HANDLE_VALUE) {
|
if (win_h == INVALID_HANDLE_VALUE) {
|
||||||
/* could not be opened, so locked? */
|
/* could not be opened, so locked? */
|
||||||
@@ -543,7 +543,7 @@ bool FileSystem::isJunction(const QString &filename)
|
|||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
WIN32_FIND_DATA findData;
|
WIN32_FIND_DATA findData;
|
||||||
HANDLE hFind = FindFirstFileEx((const wchar_t *)filename.utf16(), FindExInfoBasic, &findData, FindExSearchNameMatch, NULL, 0);
|
HANDLE hFind = FindFirstFileEx((const wchar_t *)filename.utf16(), FindExInfoBasic, &findData, FindExSearchNameMatch, nullptr, 0);
|
||||||
if (hFind != INVALID_HANDLE_VALUE) {
|
if (hFind != INVALID_HANDLE_VALUE) {
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ namespace FileSystem {
|
|||||||
*/
|
*/
|
||||||
bool OCSYNC_EXPORT rename(const QString &originFileName,
|
bool OCSYNC_EXPORT rename(const QString &originFileName,
|
||||||
const QString &destinationFileName,
|
const QString &destinationFileName,
|
||||||
QString *errorString = NULL);
|
QString *errorString = nullptr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rename the file \a originFileName to \a destinationFileName, and
|
* Rename the file \a originFileName to \a destinationFileName, and
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace OCC {
|
|||||||
Q_LOGGING_CATEGORY(lcSql, "nextcloud.sync.database.sql", QtInfoMsg)
|
Q_LOGGING_CATEGORY(lcSql, "nextcloud.sync.database.sql", QtInfoMsg)
|
||||||
|
|
||||||
SqlDatabase::SqlDatabase()
|
SqlDatabase::SqlDatabase()
|
||||||
: _db(0)
|
: _db(nullptr)
|
||||||
, _errId(0)
|
, _errId(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ SqlDatabase::~SqlDatabase()
|
|||||||
|
|
||||||
bool SqlDatabase::isOpen()
|
bool SqlDatabase::isOpen()
|
||||||
{
|
{
|
||||||
return _db != 0;
|
return _db != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SqlDatabase::openHelper(const QString &filename, int sqliteFlags)
|
bool SqlDatabase::openHelper(const QString &filename, int sqliteFlags)
|
||||||
@@ -68,7 +68,7 @@ bool SqlDatabase::openHelper(const QString &filename, int sqliteFlags)
|
|||||||
|
|
||||||
sqliteFlags |= SQLITE_OPEN_NOMUTEX;
|
sqliteFlags |= SQLITE_OPEN_NOMUTEX;
|
||||||
|
|
||||||
SQLITE_DO(sqlite3_open_v2(filename.toUtf8().constData(), &_db, sqliteFlags, 0));
|
SQLITE_DO(sqlite3_open_v2(filename.toUtf8().constData(), &_db, sqliteFlags, nullptr));
|
||||||
|
|
||||||
if (_errId != SQLITE_OK) {
|
if (_errId != SQLITE_OK) {
|
||||||
qCWarning(lcSql) << "Error:" << _error << "for" << filename;
|
qCWarning(lcSql) << "Error:" << _error << "for" << filename;
|
||||||
@@ -196,7 +196,7 @@ void SqlDatabase::close()
|
|||||||
SQLITE_DO(sqlite3_close(_db));
|
SQLITE_DO(sqlite3_close(_db));
|
||||||
if (_errId != SQLITE_OK)
|
if (_errId != SQLITE_OK)
|
||||||
qCWarning(lcSql) << "Closing database failed" << _error;
|
qCWarning(lcSql) << "Closing database failed" << _error;
|
||||||
_db = 0;
|
_db = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ bool SqlDatabase::transaction()
|
|||||||
if (!_db) {
|
if (!_db) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SQLITE_DO(sqlite3_exec(_db, "BEGIN", 0, 0, 0));
|
SQLITE_DO(sqlite3_exec(_db, "BEGIN", nullptr, nullptr, nullptr));
|
||||||
return _errId == SQLITE_OK;
|
return _errId == SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ bool SqlDatabase::commit()
|
|||||||
if (!_db) {
|
if (!_db) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SQLITE_DO(sqlite3_exec(_db, "COMMIT", 0, 0, 0));
|
SQLITE_DO(sqlite3_exec(_db, "COMMIT", nullptr, nullptr, nullptr));
|
||||||
return _errId == SQLITE_OK;
|
return _errId == SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +255,7 @@ int SqlQuery::prepare(const QByteArray &sql, bool allow_failure)
|
|||||||
int n = 0;
|
int n = 0;
|
||||||
int rc;
|
int rc;
|
||||||
do {
|
do {
|
||||||
rc = sqlite3_prepare_v2(_db, _sql.constData(), -1, &_stmt, 0);
|
rc = sqlite3_prepare_v2(_db, _sql.constData(), -1, &_stmt, nullptr);
|
||||||
if ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED)) {
|
if ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED)) {
|
||||||
n++;
|
n++;
|
||||||
OCC::Utility::usleep(SQLITE_SLEEP_TIME_USEC);
|
OCC::Utility::usleep(SQLITE_SLEEP_TIME_USEC);
|
||||||
@@ -281,8 +281,8 @@ int SqlQuery::prepare(const QByteArray &sql, bool allow_failure)
|
|||||||
*/
|
*/
|
||||||
static bool startsWithInsensitive(const QByteArray &a, const char *b)
|
static bool startsWithInsensitive(const QByteArray &a, const char *b)
|
||||||
{
|
{
|
||||||
int len = strlen(b);
|
size_t len = strlen(b);
|
||||||
return a.size() >= len && qstrnicmp(a.constData(), b, len) == 0;
|
return a.size() >= len && qstrnicmp(a.constData(), b, Utility::convertSizeToUint(len)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SqlQuery::isSelect()
|
bool SqlQuery::isSelect()
|
||||||
@@ -462,7 +462,7 @@ void SqlQuery::finish()
|
|||||||
if (!_stmt)
|
if (!_stmt)
|
||||||
return;
|
return;
|
||||||
SQLITE_DO(sqlite3_finalize(_stmt));
|
SQLITE_DO(sqlite3_finalize(_stmt));
|
||||||
_stmt = 0;
|
_stmt = nullptr;
|
||||||
if (_sqldb) {
|
if (_sqldb) {
|
||||||
_sqldb->_queries.remove(this);
|
_sqldb->_queries.remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -661,7 +661,7 @@ bool SyncJournalDb::updateMetadataTableStructure()
|
|||||||
commitInternal("update database structure: add filesize col");
|
commitInternal("update database structure: add filesize col");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (1) {
|
if (true) {
|
||||||
SqlQuery query(_db);
|
SqlQuery query(_db);
|
||||||
query.prepare("CREATE INDEX IF NOT EXISTS metadata_inode ON metadata(inode);");
|
query.prepare("CREATE INDEX IF NOT EXISTS metadata_inode ON metadata(inode);");
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
@@ -671,7 +671,7 @@ bool SyncJournalDb::updateMetadataTableStructure()
|
|||||||
commitInternal("update database structure: add inode index");
|
commitInternal("update database structure: add inode index");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (1) {
|
if (true) {
|
||||||
SqlQuery query(_db);
|
SqlQuery query(_db);
|
||||||
query.prepare("CREATE INDEX IF NOT EXISTS metadata_path ON metadata(path);");
|
query.prepare("CREATE INDEX IF NOT EXISTS metadata_path ON metadata(path);");
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
@@ -1857,12 +1857,12 @@ QByteArray SyncJournalDb::getChecksumType(int checksumTypeId)
|
|||||||
return {};
|
return {};
|
||||||
query.bindValue(1, checksumTypeId);
|
query.bindValue(1, checksumTypeId);
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!query.next()) {
|
if (!query.next()) {
|
||||||
qCWarning(lcDb) << "No checksum type mapping found for" << checksumTypeId;
|
qCWarning(lcDb) << "No checksum type mapping found for" << checksumTypeId;
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return query.baValue(0);
|
return query.baValue(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,32 +87,19 @@ public:
|
|||||||
|
|
||||||
struct DownloadInfo
|
struct DownloadInfo
|
||||||
{
|
{
|
||||||
DownloadInfo()
|
|
||||||
: _errorCount(0)
|
|
||||||
, _valid(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
QString _tmpfile;
|
QString _tmpfile;
|
||||||
QByteArray _etag;
|
QByteArray _etag;
|
||||||
int _errorCount;
|
int _errorCount = 0;
|
||||||
bool _valid;
|
bool _valid = false;
|
||||||
};
|
};
|
||||||
struct UploadInfo
|
struct UploadInfo
|
||||||
{
|
{
|
||||||
UploadInfo()
|
int _chunk = 0;
|
||||||
: _chunk(0)
|
int _transferid = 0;
|
||||||
, _transferid(0)
|
quint64 _size = 0; //currently unused
|
||||||
, _size(0)
|
qint64 _modtime = 0;
|
||||||
, _errorCount(0)
|
int _errorCount = 0;
|
||||||
, _valid(false)
|
bool _valid = false;
|
||||||
{
|
|
||||||
}
|
|
||||||
int _chunk;
|
|
||||||
int _transferid;
|
|
||||||
quint64 _size; //currently unused
|
|
||||||
qint64 _modtime;
|
|
||||||
int _errorCount;
|
|
||||||
bool _valid;
|
|
||||||
QByteArray _contentChecksum;
|
QByteArray _contentChecksum;
|
||||||
/**
|
/**
|
||||||
* Returns true if this entry refers to a chunked upload that can be continued.
|
* Returns true if this entry refers to a chunked upload that can be continued.
|
||||||
|
|||||||
@@ -81,31 +81,22 @@ public:
|
|||||||
InsufficientRemoteStorage
|
InsufficientRemoteStorage
|
||||||
};
|
};
|
||||||
|
|
||||||
SyncJournalErrorBlacklistRecord()
|
|
||||||
: _retryCount(0)
|
|
||||||
, _errorCategory(Category::Normal)
|
|
||||||
, _lastTryModtime(0)
|
|
||||||
, _lastTryTime(0)
|
|
||||||
, _ignoreDuration(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The number of times the operation was unsuccessful so far.
|
/// The number of times the operation was unsuccessful so far.
|
||||||
int _retryCount;
|
int _retryCount = 0;
|
||||||
|
|
||||||
/// The last error string.
|
/// The last error string.
|
||||||
QString _errorString;
|
QString _errorString;
|
||||||
/// The error category. Sometimes used for special actions.
|
/// The error category. Sometimes used for special actions.
|
||||||
Category _errorCategory;
|
Category _errorCategory = Category::Normal;
|
||||||
|
|
||||||
qint64 _lastTryModtime;
|
qint64 _lastTryModtime = 0;
|
||||||
QByteArray _lastTryEtag;
|
QByteArray _lastTryEtag;
|
||||||
|
|
||||||
/// The last time the operation was attempted (in s since epoch).
|
/// The last time the operation was attempted (in s since epoch).
|
||||||
qint64 _lastTryTime;
|
qint64 _lastTryTime = 0;
|
||||||
|
|
||||||
/// The number of seconds the file shall be ignored.
|
/// The number of seconds the file shall be ignored.
|
||||||
qint64 _ignoreDuration;
|
qint64 _ignoreDuration = 0;
|
||||||
|
|
||||||
QString _file;
|
QString _file;
|
||||||
QString _renameTarget;
|
QString _renameTarget;
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ qint64 Utility::freeDiskSpace(const QString &path)
|
|||||||
#elif defined(Q_OS_WIN)
|
#elif defined(Q_OS_WIN)
|
||||||
ULARGE_INTEGER freeBytes;
|
ULARGE_INTEGER freeBytes;
|
||||||
freeBytes.QuadPart = 0L;
|
freeBytes.QuadPart = 0L;
|
||||||
if (GetDiskFreeSpaceEx(reinterpret_cast<const wchar_t *>(path.utf16()), &freeBytes, NULL, NULL)) {
|
if (GetDiskFreeSpaceEx(reinterpret_cast<const wchar_t *>(path.utf16()), &freeBytes, nullptr, nullptr)) {
|
||||||
return freeBytes.QuadPart;
|
return freeBytes.QuadPart;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -298,7 +298,7 @@ namespace {
|
|||||||
|
|
||||||
QString description(quint64 value) const
|
QString description(quint64 value) const
|
||||||
{
|
{
|
||||||
return QCoreApplication::translate("Utility", name, 0, value);
|
return QCoreApplication::translate("Utility", name, nullptr, value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// QTBUG-3945 and issue #4855: QT_TRANSLATE_NOOP does not work with plural form because lupdate
|
// QTBUG-3945 and issue #4855: QT_TRANSLATE_NOOP does not work with plural form because lupdate
|
||||||
@@ -313,7 +313,7 @@ namespace {
|
|||||||
{ QT_TRANSLATE_NOOP("Utility", "%n hour(s)", 0, _), 3600 * 1000LL },
|
{ QT_TRANSLATE_NOOP("Utility", "%n hour(s)", 0, _), 3600 * 1000LL },
|
||||||
{ QT_TRANSLATE_NOOP("Utility", "%n minute(s)", 0, _), 60 * 1000LL },
|
{ QT_TRANSLATE_NOOP("Utility", "%n minute(s)", 0, _), 60 * 1000LL },
|
||||||
{ QT_TRANSLATE_NOOP("Utility", "%n second(s)", 0, _), 1000LL },
|
{ QT_TRANSLATE_NOOP("Utility", "%n second(s)", 0, _), 1000LL },
|
||||||
{ 0, 0 }
|
{ nullptr, 0 }
|
||||||
};
|
};
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
@@ -392,10 +392,30 @@ QString Utility::platformName()
|
|||||||
|
|
||||||
void Utility::crash()
|
void Utility::crash()
|
||||||
{
|
{
|
||||||
volatile int *a = (int *)(NULL);
|
volatile int *a = (int *)nullptr;
|
||||||
*a = 1;
|
*a = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use this functions to retrieve uint/int (often required by Qt and WIN32) from size_t
|
||||||
|
// without compiler warnings about possible truncation
|
||||||
|
uint Utility::convertSizeToUint(size_t &convertVar)
|
||||||
|
{
|
||||||
|
if( convertVar > UINT_MAX ) {
|
||||||
|
//throw std::bad_cast();
|
||||||
|
convertVar = UINT_MAX; // intentionally default to wrong value here to not crash: exception handling TBD
|
||||||
|
}
|
||||||
|
return static_cast<uint>(convertVar);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint Utility::convertSizeToInt(size_t &convertVar)
|
||||||
|
{
|
||||||
|
if( convertVar > INT_MAX ) {
|
||||||
|
//throw std::bad_cast();
|
||||||
|
convertVar = INT_MAX; // intentionally default to wrong value here to not crash: exception handling TBD
|
||||||
|
}
|
||||||
|
return static_cast<int>(convertVar);
|
||||||
|
}
|
||||||
|
|
||||||
// read the output of the owncloud --version command from the owncloud
|
// read the output of the owncloud --version command from the owncloud
|
||||||
// version that is on disk. This works for most versions of the client,
|
// version that is on disk. This works for most versions of the client,
|
||||||
// because clients that do not yet know the --version flag return the
|
// because clients that do not yet know the --version flag return the
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user