Compare commits
970 Commits
v2.5.2
...
v2.7.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03cddabfd0 | ||
|
|
8c2d77c68f | ||
|
|
d3cd422b46 | ||
|
|
482ab9ad14 | ||
|
|
835cd2ac80 | ||
|
|
36e2813169 | ||
|
|
35f8103b40 | ||
|
|
f4febe04bc | ||
|
|
c2f5f156f0 | ||
|
|
7136d92011 | ||
|
|
a35aa58943 | ||
|
|
e7f7ad7eb3 | ||
|
|
c0863ede02 | ||
|
|
45b39cdbc1 | ||
|
|
9447a10716 | ||
|
|
2039872ee5 | ||
|
|
016a90d7b0 | ||
|
|
9b5bb1365c | ||
|
|
b0dfdca76f | ||
|
|
de74057cc8 | ||
|
|
e2188b109a | ||
|
|
3ae55c2555 | ||
|
|
b47adb7aeb | ||
|
|
889cb636d3 | ||
|
|
c9719f44dc | ||
|
|
599dae0486 | ||
|
|
1c5cdc4d36 | ||
|
|
0156edf320 | ||
|
|
f425dfdfea | ||
|
|
7ea2f3fa59 | ||
|
|
1c22070a74 | ||
|
|
21f3cb8f7d | ||
|
|
9abc1eb921 | ||
|
|
94325359d7 | ||
|
|
585094a719 | ||
|
|
4b79c597dc | ||
|
|
1bc8ec59aa | ||
|
|
b9a350e201 | ||
|
|
cd80c749d6 | ||
|
|
06fdde8f1e | ||
|
|
9f259bda27 | ||
|
|
d7a9940973 | ||
|
|
db92d5bfff | ||
|
|
246f7e9395 | ||
|
|
b5549bf00c | ||
|
|
7fe138330e | ||
|
|
3488fd7c7f | ||
|
|
a3aab00ca9 | ||
|
|
d10bc1bb14 | ||
|
|
18a88fcecf | ||
|
|
c92f520423 | ||
|
|
00d73a9389 | ||
|
|
ddf67ff948 | ||
|
|
9b32ebdae4 | ||
|
|
0ec2291bd7 | ||
|
|
026bf02c85 | ||
|
|
42ebc7e995 | ||
|
|
b4b6366ba8 | ||
|
|
7b740f5e9a | ||
|
|
cb328d6cea | ||
|
|
b57b8cfb66 | ||
|
|
cb1c68a36e | ||
|
|
29138cc533 | ||
|
|
c09dd9287c | ||
|
|
65b47d4613 | ||
|
|
aab2d01a7c | ||
|
|
f748a4bb50 | ||
|
|
e4b19d0cb5 | ||
|
|
eeefbe57af | ||
|
|
84066634e7 | ||
|
|
9e82ba60b4 | ||
|
|
96a74d9ef0 | ||
|
|
1ebcd3a0fb | ||
|
|
7565c547ae | ||
|
|
8f9101773c | ||
|
|
17fcfd4e41 | ||
|
|
9e6df7a4dc | ||
|
|
9319210c4c | ||
|
|
43fa27887d | ||
|
|
58f1c3234d | ||
|
|
715924cac6 | ||
|
|
163ca3b58a | ||
|
|
1c2916052d | ||
|
|
b76da25ef1 | ||
|
|
7f35178c70 | ||
|
|
212e1f80f5 | ||
|
|
a2c9e369c3 | ||
|
|
78f12de997 | ||
|
|
8ec7cfa700 | ||
|
|
bc8f64bb98 | ||
|
|
c7cc716e57 | ||
|
|
578a3b4ef4 | ||
|
|
cc671dfad3 | ||
|
|
86b915d42e | ||
|
|
738127525f | ||
|
|
6485ef480b | ||
|
|
9af7d4ad06 | ||
|
|
32741162d9 | ||
|
|
3da982f073 | ||
|
|
a021f62e96 | ||
|
|
80e21560eb | ||
|
|
e38b98c81a | ||
|
|
9c0221a0fa | ||
|
|
afbed7dbd7 | ||
|
|
05083e32c9 | ||
|
|
c6bd8c1221 | ||
|
|
63c7844a27 | ||
|
|
762032ebbc | ||
|
|
4a64e8da83 | ||
|
|
5c6af99f11 | ||
|
|
6ac1a4a353 | ||
|
|
330ff96ee2 | ||
|
|
a90995cf15 | ||
|
|
84693b95ec | ||
|
|
aa9921c6f5 | ||
|
|
d653618b0a | ||
|
|
dc9744448c | ||
|
|
ed9c06583a | ||
|
|
ff92adf3e0 | ||
|
|
bf95c03847 | ||
|
|
e0641df727 | ||
|
|
f01c47e0ec | ||
|
|
faf46fcf60 | ||
|
|
687a99279d | ||
|
|
25e09815be | ||
|
|
02cb43180c | ||
|
|
b32310b8a6 | ||
|
|
556a1a5ef2 | ||
|
|
36467c1e3a | ||
|
|
d4b334636e | ||
|
|
7653c5fa60 | ||
|
|
bd61cd3142 | ||
|
|
1a0f7221d9 | ||
|
|
7303c726f9 | ||
|
|
44bfc79caa | ||
|
|
6f8ffc0357 | ||
|
|
bb45a5f67e | ||
|
|
baa0a5b8af | ||
|
|
9081556e1d | ||
|
|
1b14f55c3c | ||
|
|
89a5e34414 | ||
|
|
e2bc7d1307 | ||
|
|
768cf7e1ae | ||
|
|
d87a88e39f | ||
|
|
314c00a8b7 | ||
|
|
16ed62d548 | ||
|
|
2b2810511d | ||
|
|
e07859fb3c | ||
|
|
9b034a2eb0 | ||
|
|
bd9652b24c | ||
|
|
8b5f09305c | ||
|
|
6d033f2964 | ||
|
|
0bcac1882a | ||
|
|
b6b04aeff8 | ||
|
|
a69aed80e6 | ||
|
|
e81f972270 | ||
|
|
542590db7c | ||
|
|
e04aae94bc | ||
|
|
aa18667905 | ||
|
|
addb27a085 | ||
|
|
be10d5200f | ||
|
|
e8348612b4 | ||
|
|
3a160a4dce | ||
|
|
ccd20f0172 | ||
|
|
c03bc8540c | ||
|
|
003acb7254 | ||
|
|
b961b683d6 | ||
|
|
f82ef95866 | ||
|
|
ed9000bb07 | ||
|
|
6afe2b124d | ||
|
|
629d23d832 | ||
|
|
d837feca71 | ||
|
|
a7dade979c | ||
|
|
3a2caf61e5 | ||
|
|
b5ed16088a | ||
|
|
e4a20b9e72 | ||
|
|
37e5fe786f | ||
|
|
643995528b | ||
|
|
ecd17f2ea2 | ||
|
|
bf0bf2c1b6 | ||
|
|
acedf362b6 | ||
|
|
3b580eeca7 | ||
|
|
6adfff1f13 | ||
|
|
7d542d7989 | ||
|
|
b6a8195cb0 | ||
|
|
cc21d175f1 | ||
|
|
ade4b198cf | ||
|
|
32b65f576f | ||
|
|
f2bbb90d52 | ||
|
|
ffbf06755f | ||
|
|
58716bb406 | ||
|
|
782d68afa8 | ||
|
|
1c1f291778 | ||
|
|
b754eacd74 | ||
|
|
7ce8a6a201 | ||
|
|
789a2a7ae3 | ||
|
|
be4fc6b887 | ||
|
|
2dae31486a | ||
|
|
71f66c6229 | ||
|
|
b4f926ded7 | ||
|
|
438a445353 | ||
|
|
6a04fe8ab6 | ||
|
|
ca7bdf245e | ||
|
|
c45d2212a5 | ||
|
|
66bfccc738 | ||
|
|
ae7eddf7c9 | ||
|
|
36a59f09ac | ||
|
|
5869b93acb | ||
|
|
b15eb27aa9 | ||
|
|
336b64a569 | ||
|
|
6a49e787bb | ||
|
|
0c5f4a1525 | ||
|
|
6ef9f3cc26 | ||
|
|
72be80cbd9 | ||
|
|
99a27d19b9 | ||
|
|
877fd7abb9 | ||
|
|
363e62f8fa | ||
|
|
9a3aa55b29 | ||
|
|
ab9897b397 | ||
|
|
30829d0669 | ||
|
|
c18611d4af | ||
|
|
5eff8608fe | ||
|
|
c25a56b2be | ||
|
|
3a4ca5e190 | ||
|
|
d1d1f9bb58 | ||
|
|
0c81d25e96 | ||
|
|
90ace3fedc | ||
|
|
3a0ccf3697 | ||
|
|
ea1e42cb83 | ||
|
|
4e0997dbdf | ||
|
|
50b4fdc03d | ||
|
|
57084fbd3e | ||
|
|
4478399282 | ||
|
|
53abf5a316 | ||
|
|
9ce2491d67 | ||
|
|
ec637217f2 | ||
|
|
91a5395e1a | ||
|
|
dac1c9b413 | ||
|
|
c21e4f5982 | ||
|
|
478281d853 | ||
|
|
08d4c56886 | ||
|
|
4987add452 | ||
|
|
6a9f155856 | ||
|
|
407864c40e | ||
|
|
03c0d8ba5a | ||
|
|
76c7ab499f | ||
|
|
dcc84d3508 | ||
|
|
8ae18d9935 | ||
|
|
013e08f80a | ||
|
|
33dd60107d | ||
|
|
2fc76c2b24 | ||
|
|
923abd8d0b | ||
|
|
dc6c638f34 | ||
|
|
2081a265b1 | ||
|
|
a72c3ba8f0 | ||
|
|
363a865263 | ||
|
|
b40e753696 | ||
|
|
58e99184bb | ||
|
|
79ba95ce04 | ||
|
|
93319a6a61 | ||
|
|
7fb0a82e69 | ||
|
|
e9e6b85bd9 | ||
|
|
3b5966bba0 | ||
|
|
7fc592cb22 | ||
|
|
c7299dec78 | ||
|
|
fce0a50e37 | ||
|
|
c047232c3b | ||
|
|
a846f0276d | ||
|
|
e2cb3aa078 | ||
|
|
801098f546 | ||
|
|
4fc8936553 | ||
|
|
dd0135ce2e | ||
|
|
d830a1c5f7 | ||
|
|
403df7cebc | ||
|
|
45bc034261 | ||
|
|
bbbead5769 | ||
|
|
fca7b32405 | ||
|
|
d558af31c9 | ||
|
|
5131463644 | ||
|
|
9e8498ad4e | ||
|
|
3777ae4624 | ||
|
|
e896c41ef9 | ||
|
|
9d8b8be8d2 | ||
|
|
1c15b97b11 | ||
|
|
8017ee45f5 | ||
|
|
8c1e3cabe0 | ||
|
|
0c6279f86a | ||
|
|
1cffa3b731 | ||
|
|
549acb0785 | ||
|
|
a143b42c2a | ||
|
|
e85ad9de6a | ||
|
|
0ab5bbb08e | ||
|
|
4efa282f80 | ||
|
|
d53cfbd9fb | ||
|
|
94986877d8 | ||
|
|
f3bc2f5e87 | ||
|
|
a5365a6cce | ||
|
|
b9ad82ceeb | ||
|
|
fe959fe0d5 | ||
|
|
6421397083 | ||
|
|
52ae354ca2 | ||
|
|
c6ff66be79 | ||
|
|
73af9b1cac | ||
|
|
cdaee7b933 | ||
|
|
6adbd9bd50 | ||
|
|
6acf3871e4 | ||
|
|
ead2131ba2 | ||
|
|
cf1532acf1 | ||
|
|
17ca7ab5db | ||
|
|
c42332a5ee | ||
|
|
c736f48ac9 | ||
|
|
06b251063e | ||
|
|
cb7b2a3dc6 | ||
|
|
5ac203ebd8 | ||
|
|
6135eb26ad | ||
|
|
d18e2ba339 | ||
|
|
7ed03f1f29 | ||
|
|
5301477747 | ||
|
|
73667a5367 | ||
|
|
09c282d9ea | ||
|
|
f9f1b49298 | ||
|
|
f5ff69f8b3 | ||
|
|
1e43c29484 | ||
|
|
a15cad0088 | ||
|
|
8e8858178b | ||
|
|
528352ba82 | ||
|
|
e54f127a06 | ||
|
|
d9fd9cfef2 | ||
|
|
9618500975 | ||
|
|
25076f2ddc | ||
|
|
66912071a8 | ||
|
|
e9438549f4 | ||
|
|
eff75a2059 | ||
|
|
d001d9d1a3 | ||
|
|
5c3f71c097 | ||
|
|
7f764f8108 | ||
|
|
2dcf594fc6 | ||
|
|
076469f385 | ||
|
|
e178eeb7f5 | ||
|
|
a8cf6e0443 | ||
|
|
725458b63c | ||
|
|
9a11bef263 | ||
|
|
b184cba953 | ||
|
|
8b393ce792 | ||
|
|
f801ffe4f7 | ||
|
|
b293a5b818 | ||
|
|
beffd726bd | ||
|
|
41f6c9e52d | ||
|
|
ce71673824 | ||
|
|
e05f187fcf | ||
|
|
04b5754653 | ||
|
|
44bc3692fd | ||
|
|
3a310f93e0 | ||
|
|
706769026d | ||
|
|
704e34fa99 | ||
|
|
a6fae36cb2 | ||
|
|
4c791abafc | ||
|
|
11e14f1726 | ||
|
|
0273689ca9 | ||
|
|
05a56c2e8e | ||
|
|
325dd8732e | ||
|
|
4d5dd0f49c | ||
|
|
39d85fd008 | ||
|
|
a12164ad53 | ||
|
|
805b85a4d7 | ||
|
|
cacb300ffd | ||
|
|
15e36c535f | ||
|
|
b5e51c7e34 | ||
|
|
e4482ef675 | ||
|
|
09b3be25fc | ||
|
|
7235db2793 | ||
|
|
35005e46b4 | ||
|
|
abd50022d1 | ||
|
|
e9c12c32d2 | ||
|
|
8950417d37 | ||
|
|
8c6e2f84c1 | ||
|
|
d0aec7696a | ||
|
|
a9da2a2277 | ||
|
|
4f1e4e149f | ||
|
|
bd25144390 | ||
|
|
3d1fc20d01 | ||
|
|
921b144d06 | ||
|
|
12d306fa85 | ||
|
|
3b750895b4 | ||
|
|
8c334a1f43 | ||
|
|
6db3b2fb78 | ||
|
|
5775ec1ff1 | ||
|
|
32bb31a417 | ||
|
|
87844f5ff4 | ||
|
|
19491ff85f | ||
|
|
8546d53b05 | ||
|
|
dfb20586ce | ||
|
|
5783c406a2 | ||
|
|
6c56811636 | ||
|
|
08c7be5350 | ||
|
|
ade9c6ce72 | ||
|
|
fdefb19bdb | ||
|
|
ade50d0b92 | ||
|
|
09bae4d6e1 | ||
|
|
0c30d9cfe8 | ||
|
|
94dae8d535 | ||
|
|
e8fc3ecf28 | ||
|
|
b3a03e9c58 | ||
|
|
097b923871 | ||
|
|
f422a63200 | ||
|
|
eec460a32d | ||
|
|
5ccea62ba6 | ||
|
|
529beb328a | ||
|
|
796cc8cd28 | ||
|
|
c8b4145214 | ||
|
|
04a9f0313a | ||
|
|
6166961804 | ||
|
|
4ddc606361 | ||
|
|
836c748cd9 | ||
|
|
3bee0bcf04 | ||
|
|
0d349d54b4 | ||
|
|
29123f4d9d | ||
|
|
a16c1a8957 | ||
|
|
c1cd308940 | ||
|
|
4bba498229 | ||
|
|
40b2fc8848 | ||
|
|
6bc13fcab1 | ||
|
|
c3cb7dfadd | ||
|
|
7750d2198d | ||
|
|
3ced2a6ea3 | ||
|
|
f993e7c555 | ||
|
|
35df5691f2 | ||
|
|
6b71e4ec6f | ||
|
|
9c199cc753 | ||
|
|
57f9b8159f | ||
|
|
a94e116926 | ||
|
|
75444e44b9 | ||
|
|
dbfa5dc786 | ||
|
|
17f39bd09d | ||
|
|
7c8e650c5a | ||
|
|
eaddc55267 | ||
|
|
f6b6765424 | ||
|
|
f3ab9d5fef | ||
|
|
998354b5ab | ||
|
|
852d39e271 | ||
|
|
7deb74cc22 | ||
|
|
ba6d1ab886 | ||
|
|
c72aa457b3 | ||
|
|
6ed6a5e8ea | ||
|
|
fd7ba861a1 | ||
|
|
b25aa99de7 | ||
|
|
dddb233f16 | ||
|
|
04dd02c295 | ||
|
|
3f495a30e0 | ||
|
|
37f74291b5 | ||
|
|
361c5a5a54 | ||
|
|
4114fe68c9 | ||
|
|
4dddf88569 | ||
|
|
7f19d5669b | ||
|
|
c6705ecd9c | ||
|
|
28da954aad | ||
|
|
a8fbbc65c1 | ||
|
|
47ffcfd561 | ||
|
|
481d8d3a0b | ||
|
|
ace142bb23 | ||
|
|
ea14baff6c | ||
|
|
0c4c5c5f8b | ||
|
|
0a407a39b0 | ||
|
|
3ad1c0e7a8 | ||
|
|
a140720901 | ||
|
|
141d31c546 | ||
|
|
f293dbfeeb | ||
|
|
3f533edba6 | ||
|
|
10a5e75cd8 | ||
|
|
58349fae02 | ||
|
|
3269402f48 | ||
|
|
26f7848821 | ||
|
|
08efb40599 | ||
|
|
f81e5be119 | ||
|
|
cf4fcebc53 | ||
|
|
00db94a73c | ||
|
|
a8ecf486d1 | ||
|
|
83918619cf | ||
|
|
f52c330c22 | ||
|
|
67ed54671b | ||
|
|
fc6b895f52 | ||
|
|
6f9256f290 | ||
|
|
f6b03f0186 | ||
|
|
555c513acb | ||
|
|
96da4674f9 | ||
|
|
e5f0ee3b92 | ||
|
|
570041e3b4 | ||
|
|
c0e7120b12 | ||
|
|
82a73e443c | ||
|
|
5d3a8e3725 | ||
|
|
8f616969ab | ||
|
|
cb60e8aa90 | ||
|
|
b9f0e444e8 | ||
|
|
cd89efc24b | ||
|
|
8ebacae846 | ||
|
|
7a033395f2 | ||
|
|
dd90ed9643 | ||
|
|
d392843c12 | ||
|
|
e944aa6f2d | ||
|
|
08c76f5997 | ||
|
|
4c2895c92f | ||
|
|
d8dca83dd5 | ||
|
|
0ff91574d2 | ||
|
|
30cff4e4f8 | ||
|
|
1138118d8e | ||
|
|
be2c1fdb89 | ||
|
|
030e85c06c | ||
|
|
b493f03d42 | ||
|
|
4bfd2a5d77 | ||
|
|
4945dd126a | ||
|
|
8caa997181 | ||
|
|
2b88ea390c | ||
|
|
31f3b322c8 | ||
|
|
55ebd5154c | ||
|
|
dcc33f3417 | ||
|
|
eab8c1eb7e | ||
|
|
5a9fc02f07 | ||
|
|
9d6780d6c1 | ||
|
|
811c3c995a | ||
|
|
44ed5744f1 | ||
|
|
179bbffd76 | ||
|
|
207de071f4 | ||
|
|
0845f25f70 | ||
|
|
916d414543 | ||
|
|
b93fbddf05 | ||
|
|
b40e3e7b4e | ||
|
|
c46ca5c256 | ||
|
|
44d954ade9 | ||
|
|
cdc939ae97 | ||
|
|
a2a753a34b | ||
|
|
d0e25c230a | ||
|
|
82a67a44c4 | ||
|
|
233a423e8c | ||
|
|
5e099adb2f | ||
|
|
a35b346e62 | ||
|
|
7d4406254a | ||
|
|
70091726c9 | ||
|
|
564088680a | ||
|
|
1eb61b7949 | ||
|
|
f6bac6cfdd | ||
|
|
e8c8fe4223 | ||
|
|
3659bca0ec | ||
|
|
ace3da841c | ||
|
|
457b0c3ab1 | ||
|
|
544229d1e8 | ||
|
|
af05db895c | ||
|
|
2958cf2180 | ||
|
|
32c114bd17 | ||
|
|
1d96b102c0 | ||
|
|
d6fce49162 | ||
|
|
ff5bf8634f | ||
|
|
f49cd1850c | ||
|
|
d420242fcb | ||
|
|
c873da75e4 | ||
|
|
9b60573d7e | ||
|
|
907f36bfcb | ||
|
|
04fedf83b4 | ||
|
|
f3d774e2e5 | ||
|
|
8f40161fa2 | ||
|
|
febc035063 | ||
|
|
4902751d02 | ||
|
|
45bd869a15 | ||
|
|
905c1532fe | ||
|
|
c3d8657619 | ||
|
|
51ff031de5 | ||
|
|
6b9395a3c5 | ||
|
|
b1db012094 | ||
|
|
556e8d39aa | ||
|
|
cd5ff96904 | ||
|
|
24a20ec758 | ||
|
|
4edab98b58 | ||
|
|
dd130ede8f | ||
|
|
81bcb46ef2 | ||
|
|
37f532c1f0 | ||
|
|
04f2bd4baa | ||
|
|
07df659a3f | ||
|
|
e89ff9ae61 | ||
|
|
c662ff1902 | ||
|
|
a3825080db | ||
|
|
a237493def | ||
|
|
3a0cd45782 | ||
|
|
f08cc08eb2 | ||
|
|
e3685b951c | ||
|
|
6b04e2f77b | ||
|
|
2e8b7771b0 | ||
|
|
26e98d35e6 | ||
|
|
ab3d0141ec | ||
|
|
39df36c247 | ||
|
|
7473cdf184 | ||
|
|
4f7d7e3601 | ||
|
|
49a6dc311e | ||
|
|
c585e81530 | ||
|
|
c779098772 | ||
|
|
cc07ed1ee8 | ||
|
|
222b2d8645 | ||
|
|
f41eeaf6ec | ||
|
|
48097801e8 | ||
|
|
dca83aad45 | ||
|
|
be7a524557 | ||
|
|
0827ff0995 | ||
|
|
503b9de2a0 | ||
|
|
a2d47cdec4 | ||
|
|
ba74c24d8f | ||
|
|
d60a216982 | ||
|
|
d6af025a46 | ||
|
|
82fa10c227 | ||
|
|
13b2b5253e | ||
|
|
46e0a05078 | ||
|
|
8329de4cee | ||
|
|
b4dee67bf5 | ||
|
|
5ae3435fe6 | ||
|
|
9a256fcbfe | ||
|
|
112d2bfe11 | ||
|
|
69a11a7ec1 | ||
|
|
3960ffea3f | ||
|
|
78543deee4 | ||
|
|
4dd49327e4 | ||
|
|
2121e7116e | ||
|
|
67107a4f5d | ||
|
|
0557d53f5f | ||
|
|
819a006a17 | ||
|
|
65ee5915af | ||
|
|
8ad3b18932 | ||
|
|
c835c39491 | ||
|
|
4cb45d5d6a | ||
|
|
acb9fc7c8e | ||
|
|
081f9741e4 | ||
|
|
a70b7d5852 | ||
|
|
8b2c47cdcb | ||
|
|
a3beb9ba41 | ||
|
|
c4dfe576d0 | ||
|
|
0841fe8dd3 | ||
|
|
b28ae98d58 | ||
|
|
c3b270ba26 | ||
|
|
9ab5241459 | ||
|
|
ec603b061d | ||
|
|
b792a627e2 | ||
|
|
0e8c6a176b | ||
|
|
0353724472 | ||
|
|
bbb295fea4 | ||
|
|
d36ddb752a | ||
|
|
680f70aa1a | ||
|
|
4ea64bf9ee | ||
|
|
c1dd0079d9 | ||
|
|
f33d0a322d | ||
|
|
429c9afd60 | ||
|
|
a6653af440 | ||
|
|
abb2711d26 | ||
|
|
0a5ba5a3c7 | ||
|
|
0a643c06e7 | ||
|
|
6f5dcfa78b | ||
|
|
e2f7947966 | ||
|
|
4b9e8274b5 | ||
|
|
7aefa5afaf | ||
|
|
1606cf2e09 | ||
|
|
464cdabecf | ||
|
|
defa0b2781 | ||
|
|
acd2425250 | ||
|
|
aa37a67729 | ||
|
|
1b2e64788d | ||
|
|
b8ef78205a | ||
|
|
3e6422a889 | ||
|
|
0bcc923a8a | ||
|
|
0cb1f4d14b | ||
|
|
7ac6df24a3 | ||
|
|
5ef9600007 | ||
|
|
fcc84b6dc4 | ||
|
|
88dcbad790 | ||
|
|
7e4323c7de | ||
|
|
af831a7653 | ||
|
|
8bd85fa71d | ||
|
|
9d225452bd | ||
|
|
b79a82cc3f | ||
|
|
0380271499 | ||
|
|
2e243e5a38 | ||
|
|
e56b1a082b | ||
|
|
c389985c2e | ||
|
|
ef9c092662 | ||
|
|
86f559add4 | ||
|
|
5bcff7dab6 | ||
|
|
812e688572 | ||
|
|
8f3bf3313e | ||
|
|
87bf0d9a7e | ||
|
|
bb9140d075 | ||
|
|
267224b258 | ||
|
|
61884d1ada | ||
|
|
29ff9f403e | ||
|
|
b52292db92 | ||
|
|
57d0a17744 | ||
|
|
85a2860e86 | ||
|
|
7fc95c4c52 | ||
|
|
2c4336ab2a | ||
|
|
d584bedcb6 | ||
|
|
5c34f9e247 | ||
|
|
dbde585049 | ||
|
|
18404a128b | ||
|
|
302ca0e04e | ||
|
|
50cd6af394 | ||
|
|
fd8345ccbe | ||
|
|
7add98e9a3 | ||
|
|
aa93a04fd6 | ||
|
|
628bab92c4 | ||
|
|
12f2ea6728 | ||
|
|
8fa55b97b4 | ||
|
|
2742411abd | ||
|
|
9941d49579 | ||
|
|
93f6bb2740 | ||
|
|
95c6dd32e9 | ||
|
|
c5f8b00a6b | ||
|
|
7135d441e6 | ||
|
|
e0a1d78441 | ||
|
|
eb31925a00 | ||
|
|
6f4de8f503 | ||
|
|
db83302546 | ||
|
|
c74db8677b | ||
|
|
5e3c2d2a96 | ||
|
|
7a9b13a563 | ||
|
|
e27645cb00 | ||
|
|
34fcb13e78 | ||
|
|
758483bc6e | ||
|
|
9f4873e864 | ||
|
|
94448a8b33 | ||
|
|
acf0b0f7c4 | ||
|
|
d4816442ef | ||
|
|
e44a2302de | ||
|
|
4a2b91a043 | ||
|
|
14279104ae | ||
|
|
7843660bbf | ||
|
|
037b2338de | ||
|
|
cfa6f13620 | ||
|
|
00d222891c | ||
|
|
1ed8c898e9 | ||
|
|
c2f401a77a | ||
|
|
169dea1627 | ||
|
|
1883c04a12 | ||
|
|
ec70ee96f3 | ||
|
|
0337507446 | ||
|
|
890c7d731d | ||
|
|
3a6f9e51f5 | ||
|
|
eb41f01857 | ||
|
|
681c03b097 | ||
|
|
233333a616 | ||
|
|
f9947334f6 | ||
|
|
9b6b14b374 | ||
|
|
4c8da1a3e7 | ||
|
|
9e7868b3de | ||
|
|
8fad2acc36 | ||
|
|
4befda1eab | ||
|
|
29218158c0 | ||
|
|
40753860cf | ||
|
|
5142cf026f | ||
|
|
d64b477280 | ||
|
|
d0cf21d355 | ||
|
|
4257f70d2e | ||
|
|
d000328700 | ||
|
|
b5e45711fc | ||
|
|
9f94f412ef | ||
|
|
c13d4ca40e | ||
|
|
04d825f4b6 | ||
|
|
b448e215ad | ||
|
|
2d2c1ef29e | ||
|
|
d654a65ac7 | ||
|
|
f462bfc7c5 | ||
|
|
d6ab7920d9 | ||
|
|
ec359d0e6b | ||
|
|
be3713a535 | ||
|
|
a21258487f | ||
|
|
3ea472d9f2 | ||
|
|
a0587f3cde | ||
|
|
96c35a9410 | ||
|
|
41900140df | ||
|
|
a47dd69a71 | ||
|
|
0539e34c69 | ||
|
|
5d30f4b1eb | ||
|
|
4559965abf | ||
|
|
4801bd5818 | ||
|
|
9411a34a2b | ||
|
|
94bff61c45 | ||
|
|
cf3dd53e12 | ||
|
|
0ae72cd68a | ||
|
|
88624f055d | ||
|
|
50be2e067c | ||
|
|
116c5b361f | ||
|
|
ae28be4a10 | ||
|
|
fa2f52b551 | ||
|
|
658f6817ce | ||
|
|
28c401236b | ||
|
|
57ca82e620 | ||
|
|
7d700a3c84 | ||
|
|
2c2cc5c23e | ||
|
|
1763504b4e | ||
|
|
94db2f82a2 | ||
|
|
d967ebac9a | ||
|
|
6b5b3c96cf | ||
|
|
a8bf75d496 | ||
|
|
bb34de2bd8 | ||
|
|
b146654474 | ||
|
|
c897564d28 | ||
|
|
ae9bc786ad | ||
|
|
b2d85cc4bf | ||
|
|
ac505aac0e | ||
|
|
4eac71a032 | ||
|
|
fa29fc4028 | ||
|
|
f352af7ffb | ||
|
|
d7098343a2 | ||
|
|
908f4d34e3 | ||
|
|
78c7aed3b9 | ||
|
|
a8986124b8 | ||
|
|
57ec1cdda4 | ||
|
|
9dc47438c9 | ||
|
|
d6a0a5272a | ||
|
|
47ac10fb8e | ||
|
|
459a17bd7e | ||
|
|
de65b6fb7e | ||
|
|
6ddfc80672 | ||
|
|
048cf3b23e | ||
|
|
3c958dea20 | ||
|
|
ac24874585 | ||
|
|
0b420c5fe6 | ||
|
|
bb7d330516 | ||
|
|
795c29d5bd | ||
|
|
ad04116c00 | ||
|
|
42b9dec1d0 | ||
|
|
51e398d4f4 | ||
|
|
5c2e8c9574 | ||
|
|
feee0bf62b | ||
|
|
f6dee2b10f | ||
|
|
57fc438b91 | ||
|
|
aa5b62c931 | ||
|
|
f089fa34fc | ||
|
|
200032c9cb | ||
|
|
6a294bb4a0 | ||
|
|
4aa2e2e8c3 | ||
|
|
4cd7095a40 | ||
|
|
d3c5a71689 | ||
|
|
f4340b98ce | ||
|
|
867e546fa9 | ||
|
|
eb28fe9990 | ||
|
|
fa5c1eff25 | ||
|
|
bcdc88ecf0 | ||
|
|
1dca017537 | ||
|
|
9ff1a30dc4 | ||
|
|
4f0ff154d3 | ||
|
|
981a4ee240 | ||
|
|
378dd744fb | ||
|
|
d38e829330 | ||
|
|
ad65b6fdf3 | ||
|
|
ea6f3be374 | ||
|
|
85d217ec95 | ||
|
|
e8213242a9 | ||
|
|
a9bea53c89 | ||
|
|
0c603944b8 | ||
|
|
559187df6c | ||
|
|
eb00500b0b | ||
|
|
876f69dc7d | ||
|
|
33605d7f65 | ||
|
|
492fc846df | ||
|
|
febf206704 | ||
|
|
e1eeaadaff | ||
|
|
4f17366262 | ||
|
|
a8ac89c20c | ||
|
|
a13bba7f42 | ||
|
|
e0f421ac7a | ||
|
|
b6c0f9db5d | ||
|
|
50755d0295 | ||
|
|
9dc0027304 | ||
|
|
37ee52a930 | ||
|
|
692d885b55 | ||
|
|
6c0d796b4b | ||
|
|
db7e5e01b3 | ||
|
|
ae0b1ce3d6 | ||
|
|
419b8a3ff9 | ||
|
|
bdfc5dcd14 | ||
|
|
c0704cd500 | ||
|
|
1b36dbc435 | ||
|
|
188374f60c | ||
|
|
fd9d7563c2 | ||
|
|
bd9fcd88d8 | ||
|
|
b6ff17c50b | ||
|
|
2d3bac4e53 | ||
|
|
7af786fde9 | ||
|
|
0f7c10a2d6 | ||
|
|
1f1a7a27f0 | ||
|
|
c2e3cbca31 | ||
|
|
92a5e64487 | ||
|
|
9153f710df | ||
|
|
8151eb4837 | ||
|
|
18f51e47d7 | ||
|
|
aba4b722af | ||
|
|
654049d4fd | ||
|
|
a5b65a73a8 | ||
|
|
26b9bf0281 | ||
|
|
19c968de76 | ||
|
|
e64fa74899 | ||
|
|
9b3fa62b2d | ||
|
|
68983c54bb | ||
|
|
d9af9b895f | ||
|
|
50f332eac7 | ||
|
|
ad095efe3a | ||
|
|
cea0d519a4 | ||
|
|
3c947819c1 | ||
|
|
f52f9f0abe | ||
|
|
75ccffa5a2 | ||
|
|
f0035b95bb | ||
|
|
955f54cdef | ||
|
|
c5b8cda323 | ||
|
|
ae0dbcde5b | ||
|
|
f32d83e993 | ||
|
|
d7b881feb6 | ||
|
|
6bd98518e4 | ||
|
|
54d80bbc9b | ||
|
|
5f9ec1762a | ||
|
|
1c8dfd701b | ||
|
|
f520d7364d | ||
|
|
4d61a7c263 | ||
|
|
ac6ef500cc | ||
|
|
b5b2ef3120 | ||
|
|
7f3c3f6eb6 | ||
|
|
936bdd04a8 | ||
|
|
33baf40061 | ||
|
|
6a63d8f2b9 | ||
|
|
b11a4217c7 | ||
|
|
35114cf45c | ||
|
|
e07c472057 | ||
|
|
0fed1cc54d | ||
|
|
ac257cd65f | ||
|
|
088b0817d8 | ||
|
|
b0c75723e2 | ||
|
|
b368a93e2e | ||
|
|
c75cb390dd | ||
|
|
d39f826e0e | ||
|
|
1ea8b18893 | ||
|
|
8491ef428e | ||
|
|
42ce5c0c0d | ||
|
|
acca019afe | ||
|
|
4591f9c09f | ||
|
|
088a5a9771 | ||
|
|
19079c65c1 | ||
|
|
3804410949 | ||
|
|
b8e874a3a7 | ||
|
|
3a03568ec8 | ||
|
|
40da5630e1 | ||
|
|
b36626d50a | ||
|
|
26f897d22c | ||
|
|
1b4cb6483b | ||
|
|
9312c18c57 | ||
|
|
96434aabe9 | ||
|
|
95ec0777ca | ||
|
|
283423f1bd | ||
|
|
3a893d6179 | ||
|
|
6a83b31c5a | ||
|
|
9a3667c1de | ||
|
|
90fa47bbe6 | ||
|
|
44c265e2a7 | ||
|
|
bb9017d3a6 | ||
|
|
9d87f707a6 | ||
|
|
89cda9a1b4 | ||
|
|
653e56268d | ||
|
|
ff7b0aace9 | ||
|
|
9b476a5caa | ||
|
|
2c58bee151 | ||
|
|
0862d6cfb0 | ||
|
|
c4ffd844f3 | ||
|
|
cbc19e86fb | ||
|
|
10073c1f10 | ||
|
|
8a35bfdc13 | ||
|
|
ddf1ac04e5 | ||
|
|
aa388b86c0 | ||
|
|
f9c6449c05 | ||
|
|
3c00c09ea8 |
597
.drone.yml
@@ -1,228 +1,383 @@
|
|||||||
clone:
|
kind: pipeline
|
||||||
git:
|
name: qt-5.7
|
||||||
image: plugins/git
|
|
||||||
tags: true
|
|
||||||
depth: 1
|
|
||||||
|
|
||||||
pipeline:
|
steps:
|
||||||
qt-5.7:
|
- name: build and test
|
||||||
image: nextcloudci/client-5.7:client-5.7-4
|
image: nextcloudci/client-5.7:client-5.7-4
|
||||||
commands:
|
commands:
|
||||||
# Install QtKeyChain
|
# Install QtKeyChain
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
source /opt/qt57/bin/qt57-env.sh &&
|
source /opt/qt57/bin/qt57-env.sh &&
|
||||||
cd /tmp &&
|
cd /tmp &&
|
||||||
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 v0.9.1 &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake ../ &&
|
cmake ../ &&
|
||||||
make &&
|
make &&
|
||||||
make install"
|
make install"
|
||||||
# Build client
|
# Build client
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
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 -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 . &&
|
||||||
su -c 'ctest --output-on-failure' test"
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
when:
|
trigger:
|
||||||
matrix:
|
branch:
|
||||||
TESTS: qt-5.7
|
- master
|
||||||
qt-5.8:
|
event:
|
||||||
image: nextcloudci/client-5.8:client-5.8-4
|
- pull_request
|
||||||
commands:
|
- push
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt58/bin/qt58-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt58/bin/qt58-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.8
|
|
||||||
qt-5.9:
|
|
||||||
image: nextcloudci/client-5.9:client-5.9-5
|
|
||||||
commands:
|
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt59/bin/qt59-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt59/bin/qt59-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.9
|
|
||||||
qt-5.10:
|
|
||||||
image: nextcloudci/client-5.10:client-5.10-3
|
|
||||||
commands:
|
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt510/bin/qt510-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt510/bin/qt510-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.10
|
|
||||||
qt-5.11:
|
|
||||||
image: nextcloudci/client-5.11:client-5.11-3
|
|
||||||
commands:
|
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.11
|
|
||||||
|
|
||||||
qt-5.11-clang:
|
---
|
||||||
image: nextcloudci/client-5.11:client-5.11-3
|
kind: pipeline
|
||||||
commands:
|
name: qt-5.8
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=clang-6.0 &&
|
|
||||||
export CXX=clang++-6.0 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=clang-6.0 &&
|
|
||||||
export CXX=clang++-6.0 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.11-clang
|
|
||||||
|
|
||||||
AppImage:
|
steps:
|
||||||
image: nextcloudci/client-5.11:client-5.11-3
|
- name: build and test
|
||||||
commands:
|
image: nextcloudci/client-5.8:client-5.8-4
|
||||||
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
commands:
|
||||||
when:
|
# Install QtKeyChain
|
||||||
matrix:
|
- /bin/bash -c "
|
||||||
BUILD: AppImage
|
source /opt/qt58/bin/qt58-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
source /opt/qt58/bin/qt58-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
Debian:
|
---
|
||||||
image: nextcloudci/client-debian-ci:client-debian-ci-2
|
kind: pipeline
|
||||||
commands:
|
name: qt-5.9
|
||||||
- /bin/bash -c "./admin/linux/debian/drone-build.sh"
|
|
||||||
secrets: [ DEBIAN_SECRET_KEY, DEBIAN_SECRET_IV ]
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
BUILD: Debian
|
|
||||||
|
|
||||||
documentation:
|
steps:
|
||||||
image: nextcloudci/documentation:documentation-5
|
- name: build and test
|
||||||
commands:
|
image: nextcloudci/client-5.9:client-5.9-5
|
||||||
- cd doc
|
commands:
|
||||||
- make html
|
# Install QtKeyChain
|
||||||
when:
|
- /bin/bash -c "
|
||||||
matrix:
|
source /opt/qt59/bin/qt59-env.sh &&
|
||||||
TESTS: documentation
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
source /opt/qt59/bin/qt59-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
matrix:
|
---
|
||||||
include:
|
kind: pipeline
|
||||||
- TESTS: qt-5.7
|
name: qt-5.10
|
||||||
- TESTS: qt-5.8
|
|
||||||
- TESTS: qt-5.9
|
|
||||||
- TESTS: qt-5.10
|
|
||||||
- TESTS: qt-5.11
|
|
||||||
- TESTS: qt-5.11-clang
|
|
||||||
- BUILD: AppImage
|
|
||||||
- BUILD: Debian
|
|
||||||
- TESTS: documentation
|
|
||||||
|
|
||||||
branches: [ master, 2.* ]
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.10:client-5.10-3
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt510/bin/qt510-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt510/bin/qt510-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.11
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.11:client-5.11-3
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.11-clang
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.11:client-5.11-3
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.12
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.12:client-5.12-5
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
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 &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
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 &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.12-clang
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.12:client-5.12-5
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
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 &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
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 &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: AppImage
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: nextcloudci/client-5.12:client-5.12-5
|
||||||
|
commands:
|
||||||
|
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
||||||
|
- /bin/bash -c "./admin/linux/upload-appimage.sh"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: Debian
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: nextcloudci/client-debian-ci:client-debian-ci-2
|
||||||
|
commands:
|
||||||
|
- /bin/bash -c "./admin/linux/debian/drone-build.sh"
|
||||||
|
environment:
|
||||||
|
DEBIAN_SECRET_KEY:
|
||||||
|
from_secret: DEBIAN_SECRET_KEY
|
||||||
|
DEBIAN_SECRET_IV:
|
||||||
|
from_secret: DEBIAN_SECRET_IV
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: Documentation
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: nextcloudci/documentation:documentation-5
|
||||||
|
commands:
|
||||||
|
- cd doc
|
||||||
|
- make html
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|||||||
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
# You can add one username per supported platform and one custom link
|
||||||
|
custom: https://www.bountysource.com/teams/nextcloud/issues?tracker_ids=74294474
|
||||||
33
.github/issue_template.md
vendored
@@ -1,9 +1,14 @@
|
|||||||
<!---
|
<!--
|
||||||
Please try to only report a bug if it happens with the latest version
|
Dear user,
|
||||||
The latest version can be seen by checking https://download.nextcloud.com/desktop/
|
Please understand that at the moment, we are very busy with customer issues
|
||||||
For support try our forums: https://help.nextcloud.com
|
and some high priority development work. A lot of issues are getting reported.
|
||||||
--->
|
Right now we can't keep up and timely respond to all of them.
|
||||||
|
We're sorry for that and are expanding our team, if you're looking for a C++
|
||||||
|
job or know somebody who is, please point them to https://nextcloud.com/jobs
|
||||||
|
Don't forget that Github is not a support system or a place to ask for
|
||||||
|
features but only a place to report verified bugs - see nextcloud.com/support
|
||||||
|
for support options!
|
||||||
|
-->
|
||||||
|
|
||||||
### Expected behaviour
|
### Expected behaviour
|
||||||
Tell us what should happen
|
Tell us what should happen
|
||||||
@@ -18,6 +23,11 @@ Tell us what happens instead
|
|||||||
|
|
||||||
### Client configuration
|
### Client configuration
|
||||||
Client version:
|
Client version:
|
||||||
|
<!---
|
||||||
|
Please try to only report a bug if it happens with the latest version
|
||||||
|
The latest version can be seen by checking https://download.nextcloud.com/desktop/
|
||||||
|
For support try our forums: https://help.nextcloud.com
|
||||||
|
--->
|
||||||
|
|
||||||
Operating system:
|
Operating system:
|
||||||
|
|
||||||
@@ -34,15 +44,6 @@ Installation path of client:
|
|||||||
<!---
|
<!---
|
||||||
Optional section. It depends on the issue.
|
Optional section. It depends on the issue.
|
||||||
--->
|
--->
|
||||||
|
|
||||||
Operating system:
|
|
||||||
|
|
||||||
Web server:
|
|
||||||
|
|
||||||
Database:
|
|
||||||
|
|
||||||
PHP version:
|
|
||||||
|
|
||||||
Nextcloud version:
|
Nextcloud version:
|
||||||
|
|
||||||
Storage backend (external storage):
|
Storage backend (external storage):
|
||||||
@@ -52,8 +53,6 @@ Storage backend (external storage):
|
|||||||
Please use Gist (https://gist.github.com/) or a similar code paster for longer
|
Please use Gist (https://gist.github.com/) or a similar code paster for longer
|
||||||
logs.
|
logs.
|
||||||
|
|
||||||
```Template for output < 10 lines```
|
|
||||||
|
|
||||||
1. Client logfile: Output of `nextcloud --logwindow` or `nextcloud --logfile log.txt`
|
1. Client logfile: Output of `nextcloud --logwindow` or `nextcloud --logfile log.txt`
|
||||||
(On Windows using `cmd.exe`, you might need to first `cd` into the Nextcloud directory)
|
(On Windows using `cmd.exe`, you might need to first `cd` into the Nextcloud directory)
|
||||||
(See also https://docs.nextcloud.com/desktop/2.3/troubleshooting.html#log-files)
|
(See also https://docs.nextcloud.com/desktop/2.3/troubleshooting.html#log-files)
|
||||||
|
|||||||
67
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
# Number of days of inactivity before an issue becomes stale
|
||||||
|
daysUntilStale: 28
|
||||||
|
# Number of days of inactivity before a stale issue is closed
|
||||||
|
daysUntilClose: 14
|
||||||
|
# Issues with these labels will never be considered stale
|
||||||
|
exemptLabels:
|
||||||
|
- 1. to develop
|
||||||
|
- 2. to review
|
||||||
|
- 3. to release
|
||||||
|
- 4. to test
|
||||||
|
- accessibility
|
||||||
|
- backport-request
|
||||||
|
- bug
|
||||||
|
- design
|
||||||
|
- enhancement
|
||||||
|
- epic
|
||||||
|
- discussion
|
||||||
|
- documentation
|
||||||
|
- overview
|
||||||
|
- good first issue
|
||||||
|
- feature-request
|
||||||
|
- feature: :arrows_counterclockwise: sync engine
|
||||||
|
- feature: :busts_in_silhouette: sharing
|
||||||
|
- feature: :cloud: system tray
|
||||||
|
- feature: :gear: settings
|
||||||
|
- feature: :inbox_tray: install and update
|
||||||
|
- feature: :key: authentication
|
||||||
|
- feature: :lock: end to end encryption
|
||||||
|
- feature: :memo: versions
|
||||||
|
- feature: :minidisc: external storage
|
||||||
|
- feature: :minidisc: virtual drive
|
||||||
|
- feature: :new: versions
|
||||||
|
- feature: :tongue: language l10n and translations
|
||||||
|
- feature: :wheelchair: accessibility
|
||||||
|
- feature: :white_square_button: nextcloudcmd
|
||||||
|
- feature: :zap: activity and :bell: notification
|
||||||
|
- good first issue
|
||||||
|
- help wanted
|
||||||
|
- high
|
||||||
|
- integration
|
||||||
|
- low
|
||||||
|
- medium
|
||||||
|
- needs info
|
||||||
|
- os: :apple: macOS
|
||||||
|
- os: :door: Windows
|
||||||
|
- os: :penguin: Linux
|
||||||
|
- os: :smiling_imp: FreeBSD
|
||||||
|
- overview
|
||||||
|
- package: appimage
|
||||||
|
- package: debian
|
||||||
|
- package: snap
|
||||||
|
- papercut
|
||||||
|
- regression
|
||||||
|
- security
|
||||||
|
- server
|
||||||
|
- spec
|
||||||
|
- technical debt
|
||||||
|
# Label to use when marking an issue as stale
|
||||||
|
staleLabel: stale
|
||||||
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This request did not receive an update in the last 4 weeks.
|
||||||
|
Please take a look again and update the issue with new details,
|
||||||
|
otherwise the issue will be automatically closed in 2 weeks. Thank you!
|
||||||
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
|
closeComment: false
|
||||||
10
.gitignore
vendored
@@ -15,9 +15,18 @@ cscope.*
|
|||||||
tags
|
tags
|
||||||
t1.cfg
|
t1.cfg
|
||||||
|
|
||||||
|
## Ignore Visual Studio Code config & environment files
|
||||||
|
|
||||||
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
## files generated by popular Visual Studio add-ons.
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# CMake integration on VS2019+
|
||||||
|
|
||||||
|
CMakeSettings.json
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
@@ -171,3 +180,4 @@ CPackConfig.cmake
|
|||||||
CPackOptions.cmake
|
CPackOptions.cmake
|
||||||
CPackSourceConfig.cmake
|
CPackSourceConfig.cmake
|
||||||
|
|
||||||
|
compile_commands.json
|
||||||
|
|||||||
3
.gitmodules
vendored
@@ -1,6 +1,3 @@
|
|||||||
[submodule "src/3rdparty/qtmacgoodies"]
|
|
||||||
path = src/3rdparty/qtmacgoodies
|
|
||||||
url = https://github.com/camilasan/qtmacgoodies.git
|
|
||||||
[submodule "binary"]
|
[submodule "binary"]
|
||||||
path = binary
|
path = binary
|
||||||
url = git://github.com/owncloud/owncloud-client-binary.git
|
url = git://github.com/owncloud/owncloud-client-binary.git
|
||||||
|
|||||||
201
.tx/nextcloud.client-desktop/ar_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
|
||||||
|
GenericName[ar]=مزامنة المجلد
|
||||||
204
.tx/nextcloud.client-desktop/bg_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[bg_BG]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
||||||
|
Comment[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
||||||
|
GenericName[bg_BG]=Синхронизиране на папка
|
||||||
@@ -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 sincro d'escriptori
|
Name[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
||||||
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
||||||
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
@@ -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
|
||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[da]=@APPLICATION_ICON_NAME@
|
Icon[da]=@APPLICATION_ICON_NAME@
|
||||||
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
||||||
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
||||||
GenericName[da]=Mappe sync
|
GenericName[da]=Mappesynkronisering
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[hr]=sinkronizacija računala
|
Icon[hr]=@APPLICATION_ICON_NAME@
|
||||||
Comment[hr]=klijent za sinkronizaciju računala
|
Name[hr]=@APPLICATION_NAME@ klijent za sink. računala
|
||||||
|
Comment[hr]=@APPLICATION_NAME@ klijent za sinkronizaciju računala
|
||||||
GenericName[hr]=Sinkronizacija mapa
|
GenericName[hr]=Sinkronizacija mapa
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/mk_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[mk]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
||||||
|
Comment[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
||||||
|
GenericName[mk]=Папка за синхронизација
|
||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[pt_BR]=@APPLICATION_ICON_NAME@
|
Icon[pt_BR]=@APPLICATION_ICON_NAME@
|
||||||
Name[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
Name[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
||||||
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
||||||
GenericName[pt_BR]=Sincronizar Pasta
|
GenericName[pt_BR]=Sincronizar pasta
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
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činka
|
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
@@ -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
|
||||||
@@ -203,14 +203,28 @@ 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()
|
||||||
|
|
||||||
|
option(SANITIZE_ADDRESS "Enable address sanitizer in tests" OFF)
|
||||||
|
if (SANITIZE_ADDRESS)
|
||||||
|
include(SanitizerFlags)
|
||||||
|
enable_sanitizer()
|
||||||
|
endif ()
|
||||||
|
|
||||||
# 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})
|
||||||
|
|||||||
353
ChangeLog
@@ -1,5 +1,141 @@
|
|||||||
ChangeLog
|
Will be tracked going forward here:
|
||||||
=========
|
https://github.com/nextcloud/desktop/releases
|
||||||
|
|
||||||
|
2.5 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
|
version 2.5.3 (release 2019-07-22)
|
||||||
|
* Fix empty file wording in error log (small)
|
||||||
|
* Add Qt-5.12 to CI
|
||||||
|
* Fix a minor typo
|
||||||
|
* Libcloudproviders: Add missing check for Qt5DBus
|
||||||
|
* Fix several memory leaks in cloudproviders and add translation support
|
||||||
|
* Share link fixing
|
||||||
|
* New drone config
|
||||||
|
* Uses configuraion to determine if it should show empty folder popup.
|
||||||
|
* Simplify cmake command to make copy-pastable
|
||||||
|
* Updated default remote poll to 5 seconds #1115
|
||||||
|
* Fix memory leak with device pointer
|
||||||
|
* Added a nice UI for the E2E-enabled account first connect
|
||||||
|
* This should fix issue #1000
|
||||||
|
* Adds parameter to retrieve shares with its reshares.
|
||||||
|
* Fixed typo
|
||||||
|
* Fixed typo in "certificate"
|
||||||
|
* WebView: Properly handle usernames with spaces and plus signs in it
|
||||||
|
* Add error category for http file lock error status 423.
|
||||||
|
* Displays the uid_owner of a shared file.
|
||||||
|
* Minor text change in the link to help in the tab 'General'.
|
||||||
|
|
||||||
|
version 2.5.2 (release 2019-04-11)
|
||||||
|
* Handle spaces in username properly in login flow
|
||||||
|
* Wizard: show an error message if there is no enough free space in the local folder
|
||||||
|
* Removed whitespace from string
|
||||||
|
* Do not add double slash to login flow url
|
||||||
|
* Fix login flow with system proxy
|
||||||
|
* Start with easier theming
|
||||||
|
* Do not display dismissed notifications
|
||||||
|
* Fixed l18n issue. Added space for separating string
|
||||||
|
* Add invalid certiticate messagebox
|
||||||
|
* Correct app passwords link
|
||||||
|
* Be less verbose with logging
|
||||||
|
* Fix typo in translation string
|
||||||
|
* Add a command line option to launch the client in the background
|
||||||
|
* Support Ubuntu Disco Dingo
|
||||||
|
* Added missing Include
|
||||||
|
* Make sure _profile and _page are deleted in the correct order
|
||||||
|
* Fix KDEInstallDirs deprecation warnings
|
||||||
|
* Removed Stylesheet
|
||||||
|
|
||||||
|
version 2.5.1 (release 2019-01-06)
|
||||||
|
* Fixup the port in server notification URLs
|
||||||
|
* GUI: let Clang-Tidy modernize nullptr & override usage
|
||||||
|
* Improve the slide show
|
||||||
|
* Libsync: let Clang-Tidy modernize nullptr & override usage
|
||||||
|
* SettingsDialog: fix a little glitch in the account tool button size
|
||||||
|
* SettingsDialog: tweak color aware icons
|
||||||
|
* More verbose error and proper app name on configuration read error
|
||||||
|
* Fix cmake build using WITH_PROVIDERS=OFF
|
||||||
|
* Debian/Ubuntu target repository update
|
||||||
|
* Change man page names and contents for nextcloud
|
||||||
|
* Share dialog alignment
|
||||||
|
* Fixed typo
|
||||||
|
* Change link to docs for NC 15
|
||||||
|
* Do not fetch activities if they are not enabled
|
||||||
|
* Do not read system exclude list if user exclude is present
|
||||||
|
* Fix the activity loop
|
||||||
|
* Write the actual folder to the log
|
||||||
|
* Fix appname for Nautilus integration script
|
||||||
|
|
||||||
|
version 2.5.0 (release 2018-11-14)
|
||||||
|
* End to end encryption
|
||||||
|
* New Web login flow
|
||||||
|
* UI improvements: Notifications
|
||||||
|
* UI improvements: refactoring of Activities
|
||||||
|
* SyncJournal: Clear etag filter before sync
|
||||||
|
* Partial local discovery: Fix scheduling logic
|
||||||
|
* Sync hidden files by default
|
||||||
|
* Larger Windows App Icon
|
||||||
|
* Show a tray message when a folder watcher becomes unreliable #6119
|
||||||
|
* Create symlinks for the small-letter application icon file names
|
||||||
|
* In setup wizard put link to nextcloud installation
|
||||||
|
* Web view scales vertically
|
||||||
|
* Add a WebFlowCredentialsAccessManager
|
||||||
|
* Mac Application Icon
|
||||||
|
* Ensure GETFileJob notices finishing #6581
|
||||||
|
* OAuth2: Try to refresh the token even if the credentials weren't ready.
|
||||||
|
* Tray workarounds #6545
|
||||||
|
* UpdateInfo: Remove unused code
|
||||||
|
* OAuth: Remove the timeout
|
||||||
|
* TestOAuth: Don't have global static QObject
|
||||||
|
* Log: Adjust update/reconcile log verbosity
|
||||||
|
* Reconcile: When detecting a local move, keep the local mtime
|
||||||
|
* Wizard enhancement
|
||||||
|
* FolderMan::checkPathValidityForNewFolder: make sure to work when fold…
|
||||||
|
* Update: Report on readdir() errors #6610
|
||||||
|
* Use encode()/decode() with Python 3 only
|
||||||
|
* Sqlite: Update bundled version to 3.24.0
|
||||||
|
* Do not require server replies to contain an mtime
|
||||||
|
* Settings: Attempt to fix rename issue on old macOS
|
||||||
|
* Support higher resolution theme icons
|
||||||
|
* OAuth: Fix infinite loop when the refresh token is expired
|
||||||
|
* Windows: Don't ignore files with FILE_ATTRIBUTE_TEMPORARY
|
||||||
|
* Data-Fingerprint: Fix backup detection when fingerprint is empty
|
||||||
|
* Nautilus: Fix GET_MENU_ITEMS with utf8 filenames #6643
|
||||||
|
* Windows: Release handle/fd when file open fails #6699
|
||||||
|
* SettingsDialog: Show the page for the newly created account
|
||||||
|
* Updates submodule qtmacgoodies.
|
||||||
|
* Fixes #665 Adds slot for confirmShare button.
|
||||||
|
* Rename INSTALL to INSTALL.md for Preview :)
|
||||||
|
* Add cmake temporary stuff
|
||||||
|
* Inform user that configuration is not writable
|
||||||
|
* Uses QByteArray to store private key.
|
||||||
|
* Fix cmake command for linux in README too
|
||||||
|
* Build fix: remove an unused QtSvg/QSvgRenderer include
|
||||||
|
* Qtkeychain: 0.8.0 -> 0.9.1
|
||||||
|
* Setup wizard: implement an animated and interactive slide show
|
||||||
|
* Theming for general settings ui
|
||||||
|
* Make the "Add Folder Sync Connection" button act like a button
|
||||||
|
* Allow to use the login flow with a self signed certificate
|
||||||
|
* Fix warning in ShareUserGroupWidget
|
||||||
|
* Copy over config file to new location on windows
|
||||||
|
* Update to translate strings
|
||||||
|
* Migrate http auth to webflow
|
||||||
|
* Margins
|
||||||
|
* Qt 5.5 compatibility patch for Xenial
|
||||||
|
* Fix cmake build of documentation
|
||||||
|
* Use Nextcloud
|
||||||
|
* Update isntaller background for OSX
|
||||||
|
* Fix ActivityWidget palette
|
||||||
|
* SettingsDialog: disable unnecessary wrapping for the about label
|
||||||
|
* Added default scheme when server returns just a host
|
||||||
|
* Removed explicit initialization; Fixed RAND_bytes not found
|
||||||
|
* Actually open the activity view on a click for more info
|
||||||
|
* Use a format that supports alpha channels for avatars
|
||||||
|
* L10n. Added space for correct grammar.
|
||||||
|
|
||||||
|
|
||||||
|
2.4 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 2.4.1 (2017-02-xx)
|
version 2.4.1 (2017-02-xx)
|
||||||
* Ignore files with file names that can't be encoded for the filesystem (#6287, #5676, #5719)
|
* Ignore files with file names that can't be encoded for the filesystem (#6287, #5676, #5719)
|
||||||
@@ -114,6 +250,10 @@ version 2.4.0 (2017-12-21)
|
|||||||
* Compile with stack-smashing protection
|
* Compile with stack-smashing protection
|
||||||
* Updater: Rudimentary support for beta channel (#6048)
|
* Updater: Rudimentary support for beta channel (#6048)
|
||||||
|
|
||||||
|
|
||||||
|
2.3 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 2.3.4 (2017-11-02)
|
version 2.3.4 (2017-11-02)
|
||||||
* Checksums: Use addData function to avoid endless loop CPU load issues with Office files
|
* Checksums: Use addData function to avoid endless loop CPU load issues with Office files
|
||||||
* Packaging: Require ZLIB
|
* Packaging: Require ZLIB
|
||||||
@@ -184,6 +324,10 @@ version 2.3.0 (2017-03-03)
|
|||||||
* Improved documentation
|
* Improved documentation
|
||||||
* Crash fixes
|
* Crash fixes
|
||||||
|
|
||||||
|
|
||||||
|
2.2 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 2.2.4 (release 2016-09-27)
|
version 2.2.4 (release 2016-09-27)
|
||||||
* Dolphin Plugin: Use the Application name for the socket path (#5172)
|
* Dolphin Plugin: Use the Application name for the socket path (#5172)
|
||||||
* SyncEngine: Fix renaming of folder when file are changed (#5195)
|
* SyncEngine: Fix renaming of folder when file are changed (#5195)
|
||||||
@@ -248,6 +392,10 @@ version 2.2.0 (release 2016-05-12)
|
|||||||
* Update of QtKeyChain to support Windows credential store
|
* Update of QtKeyChain to support Windows credential store
|
||||||
* Packaging of dolphin overlay icon module for bleeding edge distros
|
* Packaging of dolphin overlay icon module for bleeding edge distros
|
||||||
|
|
||||||
|
|
||||||
|
2.1 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 2.1.1 (release 2016-02-10)
|
version 2.1.1 (release 2016-02-10)
|
||||||
* UI improvements for HiDPI screens, error messages, RTL languages
|
* UI improvements for HiDPI screens, error messages, RTL languages
|
||||||
* Fix occurences of "Connection Closed" when a new unauthenticated TCP socket is used
|
* Fix occurences of "Connection Closed" when a new unauthenticated TCP socket is used
|
||||||
@@ -281,8 +429,8 @@ version 2.1 (release 2015-12-03)
|
|||||||
* Improved reconnecting after network change/disconnect (#4167 #3969 ...)
|
* Improved reconnecting after network change/disconnect (#4167 #3969 ...)
|
||||||
* Improved performance in Windows file system discovery
|
* Improved performance in Windows file system discovery
|
||||||
* Removed libneon-based propagator. As a consequence, The client can no
|
* Removed libneon-based propagator. As a consequence, The client can no
|
||||||
longer provide bandwith limiting on Linux-distributions where it is
|
* longer provide bandwith limiting on Linux-distributions where it is
|
||||||
using Qt < 5.4
|
* using Qt < 5.4
|
||||||
* Performance improvements in the logging functions
|
* Performance improvements in the logging functions
|
||||||
* Ensured that local disk space problems are handled gracefully (#2939)
|
* Ensured that local disk space problems are handled gracefully (#2939)
|
||||||
* Improved handling of checksums: transport validation, db (#3735)
|
* Improved handling of checksums: transport validation, db (#3735)
|
||||||
@@ -318,6 +466,10 @@ version 2.1 (release 2015-12-03)
|
|||||||
* Organized patches to our base Qt version into admin/qt/patches
|
* Organized patches to our base Qt version into admin/qt/patches
|
||||||
* Plus: A lot of unmentioned improvements and fixes
|
* Plus: A lot of unmentioned improvements and fixes
|
||||||
|
|
||||||
|
|
||||||
|
2.0 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 2.0.2 (release 2015-10-21)
|
version 2.0.2 (release 2015-10-21)
|
||||||
* csync_file_stat_s: Save a bit of memory
|
* csync_file_stat_s: Save a bit of memory
|
||||||
* Shibboleth: Add our base user agent to WebKit
|
* Shibboleth: Add our base user agent to WebKit
|
||||||
@@ -393,6 +545,10 @@ version 2.0.0 (release 2015-08-25)
|
|||||||
* Bandwidth Throttling: Provide automatic limit setting for downloads (#3084)
|
* Bandwidth Throttling: Provide automatic limit setting for downloads (#3084)
|
||||||
* Systray: Workaround for issue with Qt 5.5.0 #3656
|
* Systray: Workaround for issue with Qt 5.5.0 #3656
|
||||||
|
|
||||||
|
|
||||||
|
1.8 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.8.4 (release 2015-07-13)
|
version 1.8.4 (release 2015-07-13)
|
||||||
* Release to ship a security release of openSSL. No source changes of the ownCloud Client code.
|
* Release to ship a security release of openSSL. No source changes of the ownCloud Client code.
|
||||||
|
|
||||||
@@ -402,7 +558,7 @@ version 1.8.3 (release 2015-06-23)
|
|||||||
* Ignores: Force a remote discovery after ignore list change (#3172)
|
* Ignores: Force a remote discovery after ignore list change (#3172)
|
||||||
* Shibboleth: Avoid crash by letting the webview use its own QNAM (#3359)
|
* Shibboleth: Avoid crash by letting the webview use its own QNAM (#3359)
|
||||||
* System Ignores: Removed *.tmp from system ignore again. If a user
|
* System Ignores: Removed *.tmp from system ignore again. If a user
|
||||||
wants to ignore *.tmp, it needs to be added to the user ignore list.
|
* wants to ignore *.tmp, it needs to be added to the user ignore list.
|
||||||
|
|
||||||
version 1.8.2 (release 2015-06-08)
|
version 1.8.2 (release 2015-06-08)
|
||||||
* Improve reporting of server error messages (#3220)
|
* Improve reporting of server error messages (#3220)
|
||||||
@@ -415,16 +571,16 @@ version 1.8.2 (release 2015-06-08)
|
|||||||
* HTTP: Add the branding name to the UserAgent string
|
* HTTP: Add the branding name to the UserAgent string
|
||||||
* ConnectonValidator: Always run with new credentials (#3266)
|
* ConnectonValidator: Always run with new credentials (#3266)
|
||||||
* Recall Feature: Admins can trigger an upload of a file from
|
* Recall Feature: Admins can trigger an upload of a file from
|
||||||
client to server again (#3246)
|
* client to server again (#3246)
|
||||||
* Propagator: Add 'Content-Length: 0' header to MKCOL request (#3256)
|
* Propagator: Add 'Content-Length: 0' header to MKCOL request (#3256)
|
||||||
* Switch on checksum verification through branding or config
|
* Switch on checksum verification through branding or config
|
||||||
* Add ability for checksum verification of up and download
|
* Add ability for checksum verification of up and download
|
||||||
* Fix opening external links for some labels (#3135)
|
* Fix opening external links for some labels (#3135)
|
||||||
* AccountState: Run only a single validator, allow error message
|
* AccountState: Run only a single validator, allow error message
|
||||||
overriding (#3236, #3153)
|
* overriding (#3236, #3153)
|
||||||
* SyncJournalDB: Minor fixes and simplificatons
|
* SyncJournalDB: Minor fixes and simplificatons
|
||||||
* SyncEngine: Force re-read of folder Etags for upgrades from
|
* SyncEngine: Force re-read of folder Etags for upgrades from
|
||||||
1.8.0 and 1.8.1
|
* 1.8.0 and 1.8.1
|
||||||
* Propagator: Limit length of temporary file name (#2789)
|
* Propagator: Limit length of temporary file name (#2789)
|
||||||
* ShareDialog: Password ui fixes (#3189)
|
* ShareDialog: Password ui fixes (#3189)
|
||||||
* Fix startup hang by removing QSettings lock file (#3175)
|
* Fix startup hang by removing QSettings lock file (#3175)
|
||||||
@@ -445,12 +601,12 @@ version 1.8.2 (release 2015-06-08)
|
|||||||
version 1.8.1 (release 2015-05-07)
|
version 1.8.1 (release 2015-05-07)
|
||||||
* Make "operation canceled" error a soft error
|
* Make "operation canceled" error a soft error
|
||||||
* Do not throw an error for files that are scheduled to be removed,
|
* Do not throw an error for files that are scheduled to be removed,
|
||||||
but can not be found on the server. #2919
|
* but can not be found on the server. #2919
|
||||||
* Windows: Reset QNAM to proper function after hibernation. #2899 #2895 #2973
|
* Windows: Reset QNAM to proper function after hibernation. #2899 #2895 #2973
|
||||||
* Fix argument verification of --confdir #2453
|
* Fix argument verification of --confdir #2453
|
||||||
* Fix a crash when accessing a dangling UploadDevice pointer #2984
|
* Fix a crash when accessing a dangling UploadDevice pointer #2984
|
||||||
* Add-folder wizard: Make sure there is a scrollbar if folder names
|
* Add-folder wizard: Make sure there is a scrollbar if folder names
|
||||||
are too long #2962
|
* are too long #2962
|
||||||
* Add-folder Wizard: Select the newly created folder
|
* Add-folder Wizard: Select the newly created folder
|
||||||
* Activity: Correctly restore column sizes #3005
|
* Activity: Correctly restore column sizes #3005
|
||||||
* SSL Button: do not crash on empty certificate chain
|
* SSL Button: do not crash on empty certificate chain
|
||||||
@@ -458,8 +614,8 @@ version 1.8.1 (release 2015-05-07)
|
|||||||
* Lookup system proxy async to avoid hangs #2993 #2802
|
* Lookup system proxy async to avoid hangs #2993 #2802
|
||||||
* ShareDialog: Some GUI refinements
|
* ShareDialog: Some GUI refinements
|
||||||
* ShareDialog: On creation of a share always retrieve the share
|
* ShareDialog: On creation of a share always retrieve the share
|
||||||
This makes sure that if a default expiration date is set this is reflected
|
* This makes sure that if a default expiration date is set this is reflected
|
||||||
in the dialog. #2889
|
* in the dialog. #2889
|
||||||
* ShareDialog: Only show share dialog if we are connected.
|
* ShareDialog: Only show share dialog if we are connected.
|
||||||
* HttpCreds: Fill pw dialog with previous password. #2848 #2879
|
* HttpCreds: Fill pw dialog with previous password. #2848 #2879
|
||||||
* HttpCreds: Delete password from old location. #2186
|
* HttpCreds: Delete password from old location. #2186
|
||||||
@@ -468,7 +624,7 @@ version 1.8.1 (release 2015-05-07)
|
|||||||
* ProtocolWidget: Always add seconds to the DateTime locale. #2535
|
* ProtocolWidget: Always add seconds to the DateTime locale. #2535
|
||||||
* Updater: Give context as to which app is about to be updated #3040
|
* Updater: Give context as to which app is about to be updated #3040
|
||||||
* Windows: Add version information for owncloud.exe. This should help us know
|
* Windows: Add version information for owncloud.exe. This should help us know
|
||||||
what version or build number a crash report was generated with.
|
* what version or build number a crash report was generated with.
|
||||||
* Fix a crash on shutdown in ~SocketApi #3057
|
* Fix a crash on shutdown in ~SocketApi #3057
|
||||||
* SyncEngine: Show more timing measurements #3064
|
* SyncEngine: Show more timing measurements #3064
|
||||||
* Discovery: Add warning if returned etag is 0
|
* Discovery: Add warning if returned etag is 0
|
||||||
@@ -491,8 +647,8 @@ version 1.8.1 (release 2015-05-07)
|
|||||||
version 1.8.0 (release 2015-03-17)
|
version 1.8.0 (release 2015-03-17)
|
||||||
* Mac OS: HIDPI support
|
* Mac OS: HIDPI support
|
||||||
* Support Sharing from desktop: Added a share dialog that can be
|
* Support Sharing from desktop: Added a share dialog that can be
|
||||||
opened by context menu in the file managers (Win, Mac, Nautilus)
|
* opened by context menu in the file managers (Win, Mac, Nautilus)
|
||||||
Supports public links with password enforcement
|
* Supports public links with password enforcement
|
||||||
* Enhanced usage of parallel HTTP requests for ownCloud 8 servers
|
* Enhanced usage of parallel HTTP requests for ownCloud 8 servers
|
||||||
* Renamed github repository from mirall to client.
|
* Renamed github repository from mirall to client.
|
||||||
* Mac OS: Use native notification support
|
* Mac OS: Use native notification support
|
||||||
@@ -505,7 +661,7 @@ version 1.8.0 (release 2015-03-17)
|
|||||||
* Build with Qt 5.4
|
* Build with Qt 5.4
|
||||||
* Dropped libneon dependency if Qt 5.4 is available
|
* Dropped libneon dependency if Qt 5.4 is available
|
||||||
* Keep files open very short, that avoid lock problems on Windows
|
* Keep files open very short, that avoid lock problems on Windows
|
||||||
especially with office software but also others.
|
* especially with office software but also others.
|
||||||
* Merged some NetBSD patches
|
* Merged some NetBSD patches
|
||||||
* Selective sync support for owncloudcmd
|
* Selective sync support for owncloudcmd
|
||||||
* Reorganize the source repository
|
* Reorganize the source repository
|
||||||
@@ -514,13 +670,17 @@ version 1.8.0 (release 2015-03-17)
|
|||||||
* A huge amount of bug fixes in all areas of the client.
|
* A huge amount of bug fixes in all areas of the client.
|
||||||
* almost 700 commits since 1.7.1
|
* almost 700 commits since 1.7.1
|
||||||
|
|
||||||
|
|
||||||
|
1.7 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.7.1 (release 2014-12-18)
|
version 1.7.1 (release 2014-12-18)
|
||||||
* Documentation fixes and updates
|
* Documentation fixes and updates
|
||||||
* Nautilus Python plugin fixed for Python 3
|
* Nautilus Python plugin fixed for Python 3
|
||||||
* GUI wording fixes plus improved log messages
|
* GUI wording fixes plus improved log messages
|
||||||
* Fix hidning of the database files in the sync directories
|
* Fix hidning of the database files in the sync directories
|
||||||
* Compare http download size with the header value to avoid broken
|
* Compare http download size with the header value to avoid broken
|
||||||
downloads, bug #2528
|
* downloads, bug #2528
|
||||||
* Avoid initial ETag fetch job at startup, which is not needed.
|
* Avoid initial ETag fetch job at startup, which is not needed.
|
||||||
* Add chunk size http header to PUT requests
|
* Add chunk size http header to PUT requests
|
||||||
* Fixed deteteCookie method of our CookieJar, fix for Shibboleth
|
* Fixed deteteCookie method of our CookieJar, fix for Shibboleth
|
||||||
@@ -543,21 +703,20 @@ version 1.7.1 (release 2014-12-18)
|
|||||||
* Win32: Improve reliability of Installer, fix removal of Shell Extensions
|
* Win32: Improve reliability of Installer, fix removal of Shell Extensions
|
||||||
|
|
||||||
version 1.7.0 (release 2014-11-07)
|
version 1.7.0 (release 2014-11-07)
|
||||||
|
|
||||||
* oC7 Sharing: Handle new sharing options of ownCloud 7 correctly.
|
* oC7 Sharing: Handle new sharing options of ownCloud 7 correctly.
|
||||||
* Added Selective sync: Ability to unselect server folders which are
|
* Added Selective sync: Ability to unselect server folders which are
|
||||||
excluded from syncing, plus GUI and setup GUI
|
* excluded from syncing, plus GUI and setup GUI
|
||||||
* Added overlay icons for Windows Explorer, Mac OS Finder and GNOME Nautilus.
|
* Added overlay icons for Windows Explorer, Mac OS Finder and GNOME Nautilus.
|
||||||
Information is provided by the client via a local socket / named pipe API
|
* Information is provided by the client via a local socket / named pipe API
|
||||||
which provides information about the sync status of files.
|
* which provides information about the sync status of files.
|
||||||
* Improved local change detection: consider file size, detect files
|
* Improved local change detection: consider file size, detect files
|
||||||
with ongoing changes and do not upload immediately
|
* with ongoing changes and do not upload immediately
|
||||||
* Improved HTTP request timeout handler: all successful requests reset
|
* Improved HTTP request timeout handler: all successful requests reset
|
||||||
the timeout counter
|
* the timeout counter
|
||||||
* Improvements for syncing command line tool: netrc support, improved
|
* Improvements for syncing command line tool: netrc support, improved
|
||||||
SSL support, non interactive mode
|
* SSL support, non interactive mode
|
||||||
* Permission system: ownCloud 7 delivers file and folder permissions,
|
* Permission system: ownCloud 7 delivers file and folder permissions,
|
||||||
added ability to deal with it for shared folders and more.
|
* added ability to deal with it for shared folders and more.
|
||||||
* Ignore handling: Do not recurse into ignored or excluded directories
|
* Ignore handling: Do not recurse into ignored or excluded directories
|
||||||
* Major sync journal database improvements for more stability and performance
|
* Major sync journal database improvements for more stability and performance
|
||||||
* New library interface to sqlite3
|
* New library interface to sqlite3
|
||||||
@@ -566,35 +725,40 @@ version 1.7.0 (release 2014-11-07)
|
|||||||
* Improved logging: more useful meta info, removed noise
|
* Improved logging: more useful meta info, removed noise
|
||||||
* Updated to latest Qt5 versions on Windows and OS X
|
* Updated to latest Qt5 versions on Windows and OS X
|
||||||
* Fixed data loss when renaming a download temporary fails and there was
|
* Fixed data loss when renaming a download temporary fails and there was
|
||||||
a conflict at the same time.
|
* a conflict at the same time.
|
||||||
* Fixed missing warnings about reusing a sync folder when the back button
|
* Fixed missing warnings about reusing a sync folder when the back button
|
||||||
was used in the advanced folder setup wizard.
|
* was used in the advanced folder setup wizard.
|
||||||
* The 'Retry Sync' button now also restarts all downloads.
|
* The 'Retry Sync' button now also restarts all downloads.
|
||||||
* Clean up temporary downloads and some extra database files when wiping a
|
* Clean up temporary downloads and some extra database files when wiping a
|
||||||
folder.
|
* folder.
|
||||||
* OS X: Sparkle update to provide pkg format properly
|
* OS X: Sparkle update to provide pkg format properly
|
||||||
* OS X: Change distribution format from dmg to pkg with new installer.
|
* OS X: Change distribution format from dmg to pkg with new installer.
|
||||||
* Windows: Fix handling of filenames with trailing dot or space
|
* Windows: Fix handling of filenames with trailing dot or space
|
||||||
* Windows: Don't use the wrong way to get file mtimes in the legacy propagator.
|
* Windows: Don't use the wrong way to get file mtimes in the legacy propagator.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1.6 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.6.4 (release 2014-10-22)
|
version 1.6.4 (release 2014-10-22)
|
||||||
* Fix startup logic, fixes bug #1989
|
* Fix startup logic, fixes bug #1989
|
||||||
* Fix raise dialog on X11
|
* Fix raise dialog on X11
|
||||||
* Win32: fix overflow when computing the size of file > 4GiB
|
* Win32: fix overflow when computing the size of file > 4GiB
|
||||||
* Use a fixed function to get files modification time, the
|
* Use a fixed function to get files modification time, the
|
||||||
original one was broken for certain timezone issues, see
|
* original one was broken for certain timezone issues, see
|
||||||
core bug #9781 for details
|
* core bug #9781 for details
|
||||||
* Added some missing copyright headers
|
* Added some missing copyright headers
|
||||||
* Avoid data corruption due to wrong error handling, bug #2280
|
* Avoid data corruption due to wrong error handling, bug #2280
|
||||||
* Do improved request timeout handling to reduce the number of
|
* Do improved request timeout handling to reduce the number of
|
||||||
timed out jobs, bug #2155
|
* timed out jobs, bug #2155
|
||||||
version 1.6.3 (release 2014-09-03)
|
* version 1.6.3 (release 2014-09-03)
|
||||||
* Fixed updater on OS X
|
* Fixed updater on OS X
|
||||||
* Fixed memory leak in SSL button that could lead to quick memory draining
|
* Fixed memory leak in SSL button that could lead to quick memory draining
|
||||||
* Fixed upload problem with files >4 GB
|
* Fixed upload problem with files >4 GB
|
||||||
* MacOSX, Linux: Bring Settings window to front properly
|
* MacOSX, Linux: Bring Settings window to front properly
|
||||||
* Branded clients: If no configuration is detected, try to import the data
|
* Branded clients: If no configuration is detected, try to import the data
|
||||||
from a previously configured community edition.
|
* from a previously configured community edition.
|
||||||
|
|
||||||
version 1.6.2 (release 2014-07-28 )
|
version 1.6.2 (release 2014-07-28 )
|
||||||
* Limit the HTTP buffer size when downloading to limit memory consumption.
|
* Limit the HTTP buffer size when downloading to limit memory consumption.
|
||||||
@@ -602,7 +766,7 @@ version 1.6.2 (release 2014-07-28 )
|
|||||||
* Fix local file name clash detection for MacOSX.
|
* Fix local file name clash detection for MacOSX.
|
||||||
* Limit maximum wait time to ten seconds in network limiting.
|
* Limit maximum wait time to ten seconds in network limiting.
|
||||||
* Fix data corruption while trying to resume and the server does
|
* Fix data corruption while trying to resume and the server does
|
||||||
not support it.
|
* not support it.
|
||||||
* HTTP Credentials: Read password from legacy place if not found.
|
* HTTP Credentials: Read password from legacy place if not found.
|
||||||
* Shibboleth: Fix the waiting curser that would not disapear (#1915)
|
* Shibboleth: Fix the waiting curser that would not disapear (#1915)
|
||||||
* Limit memory usage to avoid mem wasting and crashes
|
* Limit memory usage to avoid mem wasting and crashes
|
||||||
@@ -616,18 +780,18 @@ version 1.6.1 (release 2014-06-26 )
|
|||||||
* Fix openSSL problems for windows deployment
|
* Fix openSSL problems for windows deployment
|
||||||
* Fix syncing a folder with '#' in the name
|
* Fix syncing a folder with '#' in the name
|
||||||
* Fix #1845: do not update parent directory etag before sub
|
* Fix #1845: do not update parent directory etag before sub
|
||||||
directories are removed
|
* directories are removed
|
||||||
* Fix reappearing directories if dirs are removed during its
|
* Fix reappearing directories if dirs are removed during its
|
||||||
upload
|
* upload
|
||||||
* Fix app version in settings dialog, General tab
|
* Fix app version in settings dialog, General tab
|
||||||
* Fix crash in FolderWizard when going offline
|
* Fix crash in FolderWizard when going offline
|
||||||
* Shibboleth fixes
|
* Shibboleth fixes
|
||||||
* More specific error messages (file remove during upload, open
|
* More specific error messages (file remove during upload, open
|
||||||
local sync file)
|
* local sync file)
|
||||||
* Use QSet rather than QHash in SyncEngine (save memory)
|
* Use QSet rather than QHash in SyncEngine (save memory)
|
||||||
* Fix some memory leaks
|
* Fix some memory leaks
|
||||||
* Fix some thread race problems, ie. wait for neon thread to finish
|
* Fix some thread race problems, ie. wait for neon thread to finish
|
||||||
before the propagator is shut down
|
* before the propagator is shut down
|
||||||
* Fix a lot of issues and warnings found by Coverity
|
* Fix a lot of issues and warnings found by Coverity
|
||||||
* Fix Mac some settings dialog problems
|
* Fix Mac some settings dialog problems
|
||||||
|
|
||||||
@@ -650,16 +814,16 @@ version 1.6.0 (release 2014-05-30 )
|
|||||||
* Introduce a general timeout of 300s for network operations
|
* Introduce a general timeout of 300s for network operations
|
||||||
* Improve error handling, blacklisting
|
* Improve error handling, blacklisting
|
||||||
* Job-based change propagation, enables faster parallel up/downloads
|
* Job-based change propagation, enables faster parallel up/downloads
|
||||||
(right now only if no bandwidth limit is set and no proxy is used)
|
* (right now only if no bandwidth limit is set and no proxy is used)
|
||||||
* Significantly reduced CPU load when checking for local and remote changes
|
* Significantly reduced CPU load when checking for local and remote changes
|
||||||
* Speed up file stat code on Windows
|
* Speed up file stat code on Windows
|
||||||
* Enforce Qt5 for Windows and Mac OS X builds
|
* Enforce Qt5 for Windows and Mac OS X builds
|
||||||
* Improved owncloudcmd: SSL support, documentation
|
* Improved owncloudcmd: SSL support, documentation
|
||||||
* Added advanced logging of operations (file .???.log in sync
|
* Added advanced logging of operations (file .???.log in sync
|
||||||
directory)
|
* directory)
|
||||||
* Avoid creating a temporary copy of the sync database (.ctmp)
|
* Avoid creating a temporary copy of the sync database (.ctmp)
|
||||||
* Enable support for TLS 1.2 negotiation on platforms that use
|
* Enable support for TLS 1.2 negotiation on platforms that use
|
||||||
Qt 5.2 or later
|
* Qt 5.2 or later
|
||||||
* Forward server exception messages to client error messages
|
* Forward server exception messages to client error messages
|
||||||
* Mac OS X: Support Notification Center in OS X 10.8+
|
* Mac OS X: Support Notification Center in OS X 10.8+
|
||||||
* Mac OS X: Use native settings dialog
|
* Mac OS X: Use native settings dialog
|
||||||
@@ -668,11 +832,15 @@ version 1.6.0 (release 2014-05-30 )
|
|||||||
* Remove vio abstraction in csync
|
* Remove vio abstraction in csync
|
||||||
* Avoid data loss when a client file system is not case sensitive
|
* Avoid data loss when a client file system is not case sensitive
|
||||||
|
|
||||||
|
|
||||||
|
1.5 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.5.3 (release 2014-03-10 )
|
version 1.5.3 (release 2014-03-10 )
|
||||||
* Fix usage of proxies after first sync run (#1502, #1524, #1459, #1521)
|
* Fix usage of proxies after first sync run (#1502, #1524, #1459, #1521)
|
||||||
* Do not wipe the credentials from config for reconnect (#1499, #1503)
|
* Do not wipe the credentials from config for reconnect (#1499, #1503)
|
||||||
* Do not erase the full account config if an old version of the client stored
|
* Do not erase the full account config if an old version of the client stored
|
||||||
the password (related to above)
|
* the password (related to above)
|
||||||
* Fix layout of the network tab (fixes #1491)
|
* Fix layout of the network tab (fixes #1491)
|
||||||
* Handle authentication requests by a Shibboleth IdP
|
* Handle authentication requests by a Shibboleth IdP
|
||||||
* Shibboleth: If no connection is available, don't open the login window
|
* Shibboleth: If no connection is available, don't open the login window
|
||||||
@@ -701,34 +869,34 @@ version 1.5.2 (release 2014-02-26 )
|
|||||||
|
|
||||||
version 1.5.1 (release 2014-02-13 )
|
version 1.5.1 (release 2014-02-13 )
|
||||||
* Added an auto updater that updates the client if a
|
* Added an auto updater that updates the client if a
|
||||||
more recent version was found automatically (Windows, Mac OS X)
|
* more recent version was found automatically (Windows, Mac OS X)
|
||||||
* Added a button to the account dialog that gives information
|
* Added a button to the account dialog that gives information
|
||||||
about the encryption layer used for communication, plus a
|
* about the encryption layer used for communication, plus a
|
||||||
certificate information widget
|
* certificate information widget
|
||||||
* Preserve the permission settings of local files rather than
|
* Preserve the permission settings of local files rather than
|
||||||
setting them to a default (Bug #820)
|
* setting them to a default (Bug #820)
|
||||||
* Handle windows lnk files correctly (Bug #1307)
|
* Handle windows lnk files correctly (Bug #1307)
|
||||||
* Detect removes and renames in read only shares and
|
* Detect removes and renames in read only shares and
|
||||||
restore the gone away files. (Bug #1386)
|
* restore the gone away files. (Bug #1386)
|
||||||
* Fixes sign in/sign out and password dialog. (Bug #1353)
|
* Fixes sign in/sign out and password dialog. (Bug #1353)
|
||||||
* Fixed error messages (Bug #1394)
|
* Fixed error messages (Bug #1394)
|
||||||
* Lots of fixes for building with Qt5
|
* Lots of fixes for building with Qt5
|
||||||
* Changes to network limits are now also applied during a
|
* Changes to network limits are now also applied during a
|
||||||
sync run
|
* sync run
|
||||||
* Fixed mem leak after via valgrind on Mac
|
* Fixed mem leak after via valgrind on Mac
|
||||||
* Imported the ocsync library into miralls repository.
|
* Imported the ocsync library into miralls repository.
|
||||||
Adopted all build systems and packaging to that.
|
* Adopted all build systems and packaging to that.
|
||||||
* Introduce a new linux packaging scheme following the
|
* Introduce a new linux packaging scheme following the
|
||||||
debian upstream scheme
|
* debian upstream scheme
|
||||||
* Use a refactored Linux file system watcher based on
|
* Use a refactored Linux file system watcher based on
|
||||||
inotify, incl. unit tests
|
* inotify, incl. unit tests
|
||||||
* Wizard: Gracefully fall back to HTTP if HTTPS connection
|
* Wizard: Gracefully fall back to HTTP if HTTPS connection
|
||||||
fails, issuing a warning
|
* fails, issuing a warning
|
||||||
* Fixed translation misses in the propagator
|
* Fixed translation misses in the propagator
|
||||||
* Fixes in proxy configuration
|
* Fixes in proxy configuration
|
||||||
* Fixes in sync journal handling
|
* Fixes in sync journal handling
|
||||||
* Fix the upload progress if the local source is still
|
* Fix the upload progress if the local source is still
|
||||||
changing when the upload begins.
|
* changing when the upload begins.
|
||||||
* Add proxy support to owncloud commandline client
|
* Add proxy support to owncloud commandline client
|
||||||
* NSIS fixes
|
* NSIS fixes
|
||||||
* A lot of other fixes and minor improvements
|
* A lot of other fixes and minor improvements
|
||||||
@@ -765,6 +933,10 @@ version 1.5.0 (release 2013-12-12 ), csync 0.91.4 required
|
|||||||
* Windows: Fix rename of temporary files
|
* Windows: Fix rename of temporary files
|
||||||
* Windows: Fix move file operation
|
* Windows: Fix move file operation
|
||||||
|
|
||||||
|
|
||||||
|
1.4 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.4.2 (release 2013-10-18 ), csync 0.90.4 required
|
version 1.4.2 (release 2013-10-18 ), csync 0.90.4 required
|
||||||
* Do not show the warning icon in the tray (#944)
|
* Do not show the warning icon in the tray (#944)
|
||||||
* Fix manual proxy support when switching (#1016)
|
* Fix manual proxy support when switching (#1016)
|
||||||
@@ -780,12 +952,11 @@ version 1.4.2 (release 2013-10-18 ), csync 0.90.4 required
|
|||||||
* Progress: Show number of deletes.
|
* Progress: Show number of deletes.
|
||||||
|
|
||||||
version 1.4.1 (release 2013-09-24 ), csync 0.90.1 required
|
version 1.4.1 (release 2013-09-24 ), csync 0.90.1 required
|
||||||
|
|
||||||
* Translation and documentation fixes.
|
* Translation and documentation fixes.
|
||||||
* Fixed error display in settings/status dialog, displays multi
|
* Fixed error display in settings/status dialog, displays multi
|
||||||
line error messages now correctly.
|
* line error messages now correctly.
|
||||||
* Wait up to 30 secs before complaining about missing systray
|
* Wait up to 30 secs before complaining about missing systray
|
||||||
Fixes bug #949
|
* Fixes bug #949
|
||||||
* Fixed utf8 issues with basic auth authentication, fixes bug #941
|
* Fixed utf8 issues with basic auth authentication, fixes bug #941
|
||||||
* Fixed remote folder selector, avoid recursive syncing, fixes bug #962
|
* Fixed remote folder selector, avoid recursive syncing, fixes bug #962
|
||||||
* Handle and display network problems at startup correctly.
|
* Handle and display network problems at startup correctly.
|
||||||
@@ -802,7 +973,6 @@ version 1.4.1 (release 2013-09-24 ), csync 0.90.1 required
|
|||||||
* Various minor code fixes
|
* Various minor code fixes
|
||||||
|
|
||||||
version 1.4.0 (release 2013-09-04 ), csync 0.90.0 required
|
version 1.4.0 (release 2013-09-04 ), csync 0.90.0 required
|
||||||
|
|
||||||
* New Scheduler: Only sync when there are actual changes in the server
|
* New Scheduler: Only sync when there are actual changes in the server
|
||||||
* Add a Settings Dialog, move Proxy Settings there
|
* Add a Settings Dialog, move Proxy Settings there
|
||||||
* Transform folder Status Dialog into Account Settings, provide feedback via context menu
|
* Transform folder Status Dialog into Account Settings, provide feedback via context menu
|
||||||
@@ -813,7 +983,7 @@ version 1.4.0 (release 2013-09-04 ), csync 0.90.0 required
|
|||||||
* Move ability to switch to mono icons from a switch to a Settings option
|
* Move ability to switch to mono icons from a switch to a Settings option
|
||||||
* Add "Launch on System Startup" GUI option
|
* Add "Launch on System Startup" GUI option
|
||||||
* Add "Show Desktop Nofications"GUI option (enabled by default)
|
* Add "Show Desktop Nofications"GUI option (enabled by default)
|
||||||
top optionally disable sync notifications
|
* top optionally disable sync notifications
|
||||||
* Add Help item, pointing to online reference
|
* Add Help item, pointing to online reference
|
||||||
* Implement graphical selection of remote folders in FolderWizard
|
* Implement graphical selection of remote folders in FolderWizard
|
||||||
* Allow custom ignore patterns
|
* Allow custom ignore patterns
|
||||||
@@ -832,11 +1002,14 @@ version 1.4.0 (release 2013-09-04 ), csync 0.90.0 required
|
|||||||
* Require Qt 4.7
|
* Require Qt 4.7
|
||||||
* Known issue: Under certain conditions, a file will only get uploaded after up to five minutes
|
* Known issue: Under certain conditions, a file will only get uploaded after up to five minutes
|
||||||
|
|
||||||
version 1.3.0 (release 2013-06-25 ), csync 0.80.0 required
|
|
||||||
|
|
||||||
|
1.3 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
|
version 1.3.0 (release 2013-06-25 ), csync 0.80.0 required
|
||||||
* Default proxy port to 8080
|
* Default proxy port to 8080
|
||||||
* Don't lose proxy settings when changing passwords
|
* Don't lose proxy settings when changing passwords
|
||||||
* Support SOCKS5 proxy (useful in combination with ssh *D)
|
* Support SOCKS5 proxy (useful in combination with ssh* *D)
|
||||||
* Propagate proxy changes to csync at runtime
|
* Propagate proxy changes to csync at runtime
|
||||||
* Improve proxy wizard
|
* Improve proxy wizard
|
||||||
* Display proxy errors
|
* Display proxy errors
|
||||||
@@ -852,7 +1025,7 @@ version 1.3.0 (release 2013-06-25 ), csync 0.80.0 required
|
|||||||
* Remove journal when reusing a directory that used to have a journal before
|
* Remove journal when reusing a directory that used to have a journal before
|
||||||
* Visual clean up of status dialog items
|
* Visual clean up of status dialog items
|
||||||
* Wizard: When changing the URL or user name, allow the user to push his data
|
* Wizard: When changing the URL or user name, allow the user to push his data
|
||||||
to the new location or wipe the folder and start from scratch
|
* to the new location or wipe the folder and start from scratch
|
||||||
* Wizard: Make setting a custom folder as a sync target work again
|
* Wizard: Make setting a custom folder as a sync target work again
|
||||||
* Fix application icon
|
* Fix application icon
|
||||||
* User-Agent now contains "Mozilla/5.0" and the Platform name (for firewall/proxy compat)
|
* User-Agent now contains "Mozilla/5.0" and the Platform name (for firewall/proxy compat)
|
||||||
@@ -860,6 +1033,10 @@ version 1.3.0 (release 2013-06-25 ), csync 0.80.0 required
|
|||||||
* New setup wizard, defaulting to root syncing (only for new setups)
|
* New setup wizard, defaulting to root syncing (only for new setups)
|
||||||
* Improved thread stop/termination
|
* Improved thread stop/termination
|
||||||
|
|
||||||
|
|
||||||
|
1.2 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.2.5 (release 2013-04-23 ), csync 0.70.7 required
|
version 1.2.5 (release 2013-04-23 ), csync 0.70.7 required
|
||||||
* [Fixes] NSIS installer fixes
|
* [Fixes] NSIS installer fixes
|
||||||
* [Fixes] Fix crash race by making certificateChain() thread safe
|
* [Fixes] Fix crash race by making certificateChain() thread safe
|
||||||
@@ -925,6 +1102,10 @@ version 1.2.0 (release 2013-01-24 ), csync 0.70.2 required
|
|||||||
* [Platform] cmake fixes.
|
* [Platform] cmake fixes.
|
||||||
* [Platform] Improved, more detailed error reporting.
|
* [Platform] Improved, more detailed error reporting.
|
||||||
|
|
||||||
|
|
||||||
|
1.1 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.1.4 (release 2012-12-19 ), csync 0.60.4 required
|
version 1.1.4 (release 2012-12-19 ), csync 0.60.4 required
|
||||||
* No changes to mirall, only csync fixes.
|
* No changes to mirall, only csync fixes.
|
||||||
|
|
||||||
@@ -934,7 +1115,7 @@ version 1.1.3 (release 2012-11-30 ), csync 0.60.3 required
|
|||||||
version 1.1.2 (release 2012-11-26 ), csync 0.60.2 required
|
version 1.1.2 (release 2012-11-26 ), csync 0.60.2 required
|
||||||
* [Fixes] Allow to properly cancel the password dialog.
|
* [Fixes] Allow to properly cancel the password dialog.
|
||||||
* [Fixes] Share folder name correctly percent encoded with old Qt
|
* [Fixes] Share folder name correctly percent encoded with old Qt
|
||||||
4.6 builds ie. Debian.
|
* * * * 4.6 builds ie. Debian.
|
||||||
* [Fixes] If local sync dir is not existing, create it.
|
* [Fixes] If local sync dir is not existing, create it.
|
||||||
* [Fixes] lots of other minor fixes.
|
* [Fixes] lots of other minor fixes.
|
||||||
* [GUI] Display error messages in status dialog.
|
* [GUI] Display error messages in status dialog.
|
||||||
@@ -942,30 +1123,30 @@ version 1.1.2 (release 2012-11-26 ), csync 0.60.2 required
|
|||||||
* [GUI] Show username for connection in statusdialog.
|
* [GUI] Show username for connection in statusdialog.
|
||||||
* [GUI] Show intro wizard on new connection setup.
|
* [GUI] Show intro wizard on new connection setup.
|
||||||
* [APP] Use CredentialStore to better support various credential
|
* [APP] Use CredentialStore to better support various credential
|
||||||
backends.
|
* * * backends.
|
||||||
* [APP] Handle missing local folder more robust: Create it if
|
* [APP] Handle missing local folder more robust: Create it if
|
||||||
missing instead of ignoring.
|
* * * missing instead of ignoring.
|
||||||
* [APP] Simplify treewalk code.
|
* [APP] Simplify treewalk code.
|
||||||
* [Platform] Fix Mac building
|
* [Platform] Fix Mac building
|
||||||
|
|
||||||
version 1.1.1 (release 2012-10-18), csync 0.60.1 required
|
version 1.1.1 (release 2012-10-18), csync 0.60.1 required
|
||||||
* [GUI] Allow changing folder name in single folder mode
|
* [GUI]* Allow changing folder name in single folder mode
|
||||||
* [GUI] Windows: Add license to installer
|
* [GUI]* Windows: Add license to installer
|
||||||
* [GUI] owncloud --logwindow will bring up the log window
|
* [GUI]* owncloud --logwindow will bring up the log window
|
||||||
in an already running instance
|
* * * * in an already running instance
|
||||||
* [Fixes] Make sure SSL errors are always handled
|
* [Fixes] Make sure SSL errors are always handled
|
||||||
* [Fixes] Allow special characters in folder alias
|
* [Fixes] Allow special characters in folder alias
|
||||||
* [Fixes] Proper workaround for Menu bug in Ubuntu
|
* [Fixes] Proper workaround for Menu bug in Ubuntu
|
||||||
* [Fixes] csync: Fix improper memory cleanup which could
|
* [Fixes] csync: Fix improper memory cleanup which could
|
||||||
cause memory leaks and crashes
|
* * * * cause memory leaks and crashes
|
||||||
* [Fixes] csync: Fix memory leak
|
* [Fixes] csync: Fix memory leak
|
||||||
* [Fixes] csync: Allow single quote (') in file names
|
* [Fixes] csync: Allow single quote (') in file names
|
||||||
* [Fixes] csync: Remove stray temporary files
|
* [Fixes] csync: Remove stray temporary files
|
||||||
|
|
||||||
* [GUI] Reworked tray context menu.
|
* [GUI]* Reworked tray context menu.
|
||||||
* [GUI] Users can now sync the server root folder.
|
* [GUI]* Users can now sync the server root folder.
|
||||||
* [Fixes] Proxy support: now supports Proxy Auto-Configuration (PAC)
|
* [Fixes] Proxy support: now supports Proxy Auto-Configuration (PAC)
|
||||||
on Windows, reliability fixes across all OSes.
|
* * * * on Windows, reliability fixes across all OSes.
|
||||||
* [Fixes] Url entry field in setup assistant handles http/https correctly.
|
* [Fixes] Url entry field in setup assistant handles http/https correctly.
|
||||||
* [Fixes] Button enable state in status dialog.
|
* [Fixes] Button enable state in status dialog.
|
||||||
* [Fixes] Crash fixed on ending the client, tray icon related.
|
* [Fixes] Crash fixed on ending the client, tray icon related.
|
||||||
@@ -978,11 +1159,15 @@ version 1.1.1 (release 2012-10-18), csync 0.60.1 required
|
|||||||
* [Platform] Windows: ownCloud gets added to autorun by default.
|
* [Platform] Windows: ownCloud gets added to autorun by default.
|
||||||
* [Platform] insert correct version info from cmake.
|
* [Platform] insert correct version info from cmake.
|
||||||
* [Platform] csync conf file and database were moved to the users app data
|
* [Platform] csync conf file and database were moved to the users app data
|
||||||
directory, away from the .csync dir.
|
* * * * * directory, away from the .csync dir.
|
||||||
* Renamed exclude.lst to sync-exclude.lst and moved it to
|
** * * Renamed exclude.lst to sync-exclude.lst and moved it to
|
||||||
/etc/appName()/ for more clean packaging. From the user path,
|
* * * * /etc/appName()/ for more clean packaging. From the user path,
|
||||||
still exclude.lst is read if sync-exclude.lst is not existing.
|
* * * * still exclude.lst is read if sync-exclude.lst is not existing.
|
||||||
* Placed custom.ini with customization options to /etc/appName()
|
** * * Placed custom.ini with customization options to /etc/appName()
|
||||||
|
|
||||||
|
|
||||||
|
1.0 Series ChangeLog
|
||||||
|
====================
|
||||||
|
|
||||||
version 1.0.5 (release 2012-08-14), csync 0.50.8 required
|
version 1.0.5 (release 2012-08-14), csync 0.50.8 required
|
||||||
* [Fixes] Fixed setup dialog: Really use https if checkbox is activated.
|
* [Fixes] Fixed setup dialog: Really use https if checkbox is activated.
|
||||||
@@ -1000,23 +1185,23 @@ version 1.0.4 (release 2012-08-10), csync 0.50.8 required
|
|||||||
* [GUI] Removed Log Window Button, log available through command line.
|
* [GUI] Removed Log Window Button, log available through command line.
|
||||||
* [GUI] Proxy configuration dialog added.
|
* [GUI] Proxy configuration dialog added.
|
||||||
* [GUI] Added Translations to languages Slovenian, Polish, Catalan,
|
* [GUI] Added Translations to languages Slovenian, Polish, Catalan,
|
||||||
Portuguese (Brazil), German, Greek, Spanish, Czech, Italian, Slovak,
|
* * * Portuguese (Brazil), German, Greek, Spanish, Czech, Italian, Slovak,
|
||||||
French, Russian, Japanese, Swedish, Portuguese (Portugal)
|
* * * French, Russian, Japanese, Swedish, Portuguese (Portugal)
|
||||||
all with translation rate >90%.
|
* * * all with translation rate >90%.
|
||||||
* [Fixes] Loading of self signed certs into Networkmanager (#oc-843)
|
* [Fixes] Loading of self signed certs into Networkmanager (#oc-843)
|
||||||
* [Fixes] Win32: Handle SSL dll loading correctly.
|
* [Fixes] Win32: Handle SSL dll loading correctly.
|
||||||
* [Fixes] Many other small fixes and improvements.
|
* [Fixes] Many other small fixes and improvements.
|
||||||
|
|
||||||
version 1.0.3 (release 2012-06-19), csync 0.50.7 required
|
version 1.0.3 (release 2012-06-19), csync 0.50.7 required
|
||||||
* [GUI] Added a log window which catches the logging if required and
|
* [GUI] Added a log window which catches the logging if required and
|
||||||
allows to save for information.
|
* * * allows to save for information.
|
||||||
* [CMI] Added options --help, --logfile and --logflush
|
* [CMI] Added options --help, --logfile and --logflush
|
||||||
* [APP] Allow to specify sync frequency in the config file.
|
* [APP] Allow to specify sync frequency in the config file.
|
||||||
* [Fixes] Do not use csync database files from a sync before.
|
* [Fixes] Do not use csync database files from a sync before.
|
||||||
* [Fixes] In Connection wizard, write the final config onyl if
|
* [Fixes] In Connection wizard, write the final config onyl if
|
||||||
the user really accepted. Also remove the former database.
|
* * * * the user really accepted. Also remove the former database.
|
||||||
* [Fixes] More user expected behaviour deletion of sync folder local
|
* [Fixes] More user expected behaviour deletion of sync folder local
|
||||||
and remote.
|
* * * * and remote.
|
||||||
* [Fixes] Allow special characters in the sync directory names
|
* [Fixes] Allow special characters in the sync directory names
|
||||||
* [Fixes] Win32: Fixed directory removal with special character dirs.
|
* [Fixes] Win32: Fixed directory removal with special character dirs.
|
||||||
* [Fixes] MacOS: Do not flood the system log any more
|
* [Fixes] MacOS: Do not flood the system log any more
|
||||||
@@ -1035,7 +1220,7 @@ version 1.0.2 (release 2012-05-18), csync 0.50.6 required
|
|||||||
* [Fixes] Dialogs comes to front on click
|
* [Fixes] Dialogs comes to front on click
|
||||||
* [Fixes] Open local sync folder from tray and status for win32
|
* [Fixes] Open local sync folder from tray and status for win32
|
||||||
* [Fixes] Load exclude.lst correctly on MacOSX
|
* [Fixes] Load exclude.lst correctly on MacOSX
|
||||||
+ csync fixes.
|
* + csync fixes.
|
||||||
|
|
||||||
version 1.0.1 (release 2012-04-18), csync 0.50.5 required
|
version 1.0.1 (release 2012-04-18), csync 0.50.5 required
|
||||||
* [Security] Support SSL Connections
|
* [Security] Support SSL Connections
|
||||||
|
|||||||
@@ -3,15 +3,16 @@ set( APPLICATION_SHORTNAME "Nextcloud" )
|
|||||||
set( APPLICATION_EXECUTABLE "nextcloud" )
|
set( APPLICATION_EXECUTABLE "nextcloud" )
|
||||||
set( APPLICATION_DOMAIN "nextcloud.com" )
|
set( APPLICATION_DOMAIN "nextcloud.com" )
|
||||||
set( APPLICATION_VENDOR "Nextcloud GmbH" )
|
set( APPLICATION_VENDOR "Nextcloud GmbH" )
|
||||||
set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE string "URL for updater" )
|
set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE STRING "URL for updater" )
|
||||||
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")
|
||||||
@@ -20,14 +21,14 @@ set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-back
|
|||||||
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
||||||
|
|
||||||
option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
||||||
#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE string "URL for crash 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" )
|
||||||
|
|
||||||
option( WITH_PROVIDERS "Build with providers list" ON )
|
option( WITH_PROVIDERS "Build with providers list" ON )
|
||||||
|
|
||||||
|
|
||||||
## Theming options
|
## Theming options
|
||||||
set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "#0082c9" CACHE string "Hex color of the wizard header background")
|
set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "#0082c9" CACHE STRING "Hex color of the wizard header background")
|
||||||
set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#ffffff" CACHE string "Hex color of the text in the wizard header")
|
set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#ffffff" CACHE STRING "Hex color of the text in the wizard header")
|
||||||
option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.png' else the default application icon is used" ON )
|
option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.png' else the default application icon is used" ON )
|
||||||
|
|
||||||
|
|||||||
24
README.md
@@ -24,33 +24,27 @@ $ cd build
|
|||||||
```
|
```
|
||||||
##### Compile and install
|
##### Compile and install
|
||||||
|
|
||||||
For development reasons it is better to install the client on user space
|
:warning: For development reasons it is better to **install the client on user space** instead on the global system. Mixing up libs/dll's of different version can lead to undefined behavior and crashes:
|
||||||
instead on the global system. For example you could use in the next
|
|
||||||
instructions `path-to-install-folder/` as `~/.local/` in a linux system. If
|
|
||||||
you want to install system wide you could use `/usr/local` or `/opt/nextcloud/`.
|
|
||||||
|
|
||||||
##### Linux
|
* You could use the **cmake flag** ```CMAKE_INSTALL_PREFIX``` as ```~/.local/``` in a **Linux** system. If you want to install system wide you could use ```/usr/local``` or ```/opt/nextcloud/```.
|
||||||
|
|
||||||
|
* On **Windows 10** [```$USERPROFILE```](https://docs.microsoft.com/en-us/windows/deployment/usmt/usmt-recognized-environment-variables#a-href-idbkmk-2avariables-that-are-recognized-only-in-the-user-context) refers to ```C:\Users\<USERNAME>```.
|
||||||
|
|
||||||
|
##### Linux & Mac OS
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib64/libqt5keychain.so -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
|
$ cmake .. -DCMAKE_INSTALL_PREFIX=~/nextcloud-desktop-client -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
|
||||||
$ make install
|
$ make install
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Windows
|
##### Windows
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DPng2Ico_EXECUTABLE=/path-to-install-png2ico/png2ico.exe -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib/qt5keychain.lib -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
|
$ cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=$USERPROFILE\nextcloud-desktop-client -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
|
||||||
$ cmake --build . --config Debug --target install
|
$ cmake --build . --config Debug --target install
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Mac OS
|
:information_source: More detailed instructions can be found at the [Desktop Client Wiki](https://github.com/nextcloud/desktop/wiki).
|
||||||
|
|
||||||
```
|
|
||||||
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib/libqt5keychain.dylib -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
|
|
||||||
$ make install
|
|
||||||
```
|
|
||||||
|
|
||||||
More detailed instructions can be found at the [Desktop Client Wiki](https://github.com/nextcloud/desktop/wiki).
|
|
||||||
|
|
||||||
### :inbox_tray: Where to find binaries to download
|
### :inbox_tray: Where to find binaries to download
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 2 )
|
set( MIRALL_VERSION_MAJOR 2 )
|
||||||
set( MIRALL_VERSION_MINOR 5 )
|
set( MIRALL_VERSION_MINOR 7 )
|
||||||
set( MIRALL_VERSION_PATCH 2 )
|
set( MIRALL_VERSION_PATCH 0 )
|
||||||
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 \
|
||||||
|
|||||||
@@ -5,24 +5,27 @@ set -xe
|
|||||||
mkdir /app
|
mkdir /app
|
||||||
mkdir /build
|
mkdir /build
|
||||||
|
|
||||||
#Set Qt-5.11
|
#Set Qt-5.12
|
||||||
export QT_BASE_DIR=/opt/qt511
|
export QT_BASE_DIR=/opt/qt5.12.5
|
||||||
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 ../
|
||||||
@@ -62,11 +65,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 +91,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 -qmldir=$DRONE_WORKSPACE/src/gui
|
||||||
|
|
||||||
# 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!"
|
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
nextcloud-client (2.3.3-1.0~cosmic1) cosmic; urgency=medium
|
nextcloud-client (2.3.3-1.0~eoan1) eoan; urgency=medium
|
||||||
|
|
||||||
* Debian build support for the forked client.
|
* Debian build support for the forked client.
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
||||||
|
|
||||||
nextcloud-client (2.3.1-1.0~cosmic1) cosmic; urgency=medium
|
nextcloud-client (2.3.1-1.0~eoan1) eoan; urgency=medium
|
||||||
|
|
||||||
* New upstream version
|
* New upstream version
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
||||||
|
|
||||||
nextcloud-client (2.3.0-1.0~cosmic1) cosmic; urgency=medium
|
nextcloud-client (2.3.0-1.0~eoan1) eoan; urgency=medium
|
||||||
|
|
||||||
* New upstream version
|
* New upstream version
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.4~cosmic1) cosmic; urgency=medium
|
nextcloud-client (2.2.4-1.4~eoan1) eoan; urgency=medium
|
||||||
|
|
||||||
* The locale-specific icon names are correct too
|
* The locale-specific icon names are correct too
|
||||||
|
|
||||||
90
admin/linux/debian/debian.eoan/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,
|
||||||
|
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
|
||||||
|
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-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, python-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
@@ -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
@@ -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.
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -1,40 +1,12 @@
|
|||||||
--- nextcloud-client-2.4.0.orig/src/gui/wizard/owncloudoauthcredspage.cpp
|
--- nextcloud-client-2.5.3.orig/src/3rdparty/kmessagewidget/kmessagewidget.cpp 2019-07-26 18:40:34.949349387 +0000
|
||||||
+++ nextcloud-client-2.4.0/src/gui/wizard/owncloudoauthcredspage.cpp
|
+++ nextcloud-client-2.5.3/src/3rdparty/kmessagewidget/kmessagewidget.cpp 2019-07-26 18:41:39.866478051 +0000
|
||||||
@@ -53,10 +53,8 @@ OwncloudOAuthCredsPage::OwncloudOAuthCredsPage()
|
@@ -105,6 +105,9 @@
|
||||||
_ui.openLinkButton->setContextMenuPolicy(Qt::CustomContextMenu);
|
q->setMessageType(KMessageWidget::Information);
|
||||||
QObject::connect(_ui.openLinkButton, &QWidget::customContextMenuRequested, [this](const QPoint &pos) {
|
|
||||||
auto menu = new QMenu(_ui.openLinkButton);
|
|
||||||
- menu->addAction(tr("Copy link to clipboard"), this, [this] {
|
|
||||||
- if (_asyncAuth)
|
|
||||||
- QApplication::clipboard()->setText(_asyncAuth->authorisationLink().toString(QUrl::FullyEncoded));
|
|
||||||
- });
|
|
||||||
+ auto action = menu->addAction(tr("Copy link to clipboard"));
|
|
||||||
+ connect(action, &QAction::triggered, this, &OwncloudOAuthCredsPage::copyLinkToClipboard);
|
|
||||||
menu->setAttribute(Qt::WA_DeleteOnClose);
|
|
||||||
menu->popup(_ui.openLinkButton->mapToGlobal(pos));
|
|
||||||
});
|
|
||||||
@@ -131,4 +129,11 @@ bool OwncloudOAuthCredsPage::isComplete() const
|
|
||||||
return false; /* We can never go forward manually */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+void OwncloudOAuthCredsPage::copyLinkToClipboard()
|
+template <typename T>
|
||||||
+{
|
+constexpr typename std::add_const<T>::type &qAsConst(T &t) noexcept { return t; }
|
||||||
+ if (_asyncAuth)
|
|
||||||
+ QApplication::clipboard()->setText(_asyncAuth->authorisationLink().toString(QUrl::FullyEncoded));
|
|
||||||
+}
|
|
||||||
+
|
+
|
||||||
+
|
void KMessageWidgetPrivate::createLayout()
|
||||||
} // namespace OCC
|
{
|
||||||
--- nextcloud-client-2.4.0.orig/src/gui/wizard/owncloudoauthcredspage.h
|
delete content->layout();
|
||||||
+++ nextcloud-client-2.4.0/src/gui/wizard/owncloudoauthcredspage.h
|
|
||||||
@@ -57,6 +57,10 @@ public:
|
|
||||||
QString _refreshToken;
|
|
||||||
QScopedPointer<OAuth> _asyncAuth;
|
|
||||||
Ui_OwncloudOAuthCredsPage _ui;
|
|
||||||
+
|
|
||||||
+protected slots:
|
|
||||||
+ void copyLinkToClipboard();
|
|
||||||
+
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace OCC
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ if ! wget http://ppa.launchpad.net/${repo}/ubuntu/pool/main/n/nextcloud-client/n
|
|||||||
origsourceopt="-sa"
|
origsourceopt="-sa"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for distribution in xenial bionic cosmic disco stable; do
|
for distribution in xenial bionic disco eoan stable oldstable; do
|
||||||
rm -rf nextcloud-client_${basever}
|
rm -rf nextcloud-client_${basever}
|
||||||
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
||||||
|
|
||||||
@@ -98,26 +98,46 @@ if test "${pull_request}" = "master"; 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 changes in nextcloud-client_*~+([a-z])1_source.changes; do
|
||||||
dput $PPA $changes > /dev/null
|
case "${changes}" in
|
||||||
|
*oldstable1*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
dput $PPA $changes > /dev/null
|
||||||
|
;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
mkdir osc
|
for distribution in stable oldstable; do
|
||||||
cd osc
|
if test "${distribution}" = "oldstable"; then
|
||||||
osc co ${OBS_PROJECT} ${OBS_PACKAGE}
|
pkgsuffix=".${distribution}"
|
||||||
if test "$(ls ${OBS_SUBDIR})"; then
|
pkgvertag="~${distribution}1"
|
||||||
osc delete ${OBS_SUBDIR}/*
|
else
|
||||||
fi
|
pkgsuffix=""
|
||||||
cp ../nextcloud-client*.orig.tar.* ${OBS_SUBDIR}/
|
pkgvertag=""
|
||||||
cp ../nextcloud-client_*[0-9.][0-9].dsc ${OBS_SUBDIR}/
|
fi
|
||||||
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-client*.orig.tar.* ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-client_*[0-9.][0-9]${pkgvertag}.dsc ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-client_*[0-9.][0-9]${pkgvertag}.debian.tar* ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-client_*[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
|
||||||
|
|||||||
@@ -70,7 +70,9 @@ def collectEntries(baseCommit, baseVersion, kind):
|
|||||||
lastVersionTag = None
|
lastVersionTag = None
|
||||||
lastCMAKEVersion = None
|
lastCMAKEVersion = None
|
||||||
for line in output.splitlines():
|
for line in output.splitlines():
|
||||||
(commit, name, email, date, revdate, subject) = line.split("\t")
|
words = line.split("\t")
|
||||||
|
(commit, name, email, date, revdate) = words[0:5]
|
||||||
|
subject = "\t".join(words[5:])
|
||||||
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
||||||
|
|
||||||
kind = "beta"
|
kind = "beta"
|
||||||
|
|||||||
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
|
||||||
|
|||||||
@@ -32,11 +32,12 @@ FRAMEWORK_SEARCH_PATH=[
|
|||||||
os.path.join(os.environ['HOME'], 'Library/Frameworks')
|
os.path.join(os.environ['HOME'], 'Library/Frameworks')
|
||||||
]
|
]
|
||||||
|
|
||||||
LIBRARY_SEARCH_PATH=['/usr/local/lib', '/usr/local/Qt-5.6.2/lib', '.']
|
LIBRARY_SEARCH_PATH=['/usr/local/lib', '/usr/local/Qt-5.12.5/lib', '.']
|
||||||
|
|
||||||
QT_PLUGINS = [
|
QT_PLUGINS = [
|
||||||
'sqldrivers/libqsqlite.dylib',
|
'sqldrivers/libqsqlite.dylib',
|
||||||
'platforms/libqcocoa.dylib',
|
'platforms/libqcocoa.dylib',
|
||||||
|
'styles/libqmacstyle.dylib',
|
||||||
'imageformats/libqgif.dylib',
|
'imageformats/libqgif.dylib',
|
||||||
'imageformats/libqico.dylib',
|
'imageformats/libqico.dylib',
|
||||||
'imageformats/libqjpeg.dylib',
|
'imageformats/libqjpeg.dylib',
|
||||||
@@ -46,7 +47,7 @@ QT_PLUGINS = [
|
|||||||
QT_PLUGINS_SEARCH_PATH=[
|
QT_PLUGINS_SEARCH_PATH=[
|
||||||
# os.path.join(os.environ['QTDIR'], 'plugins'),
|
# os.path.join(os.environ['QTDIR'], 'plugins'),
|
||||||
# '/usr/local/Cellar/qt/5.2.1/plugins',
|
# '/usr/local/Cellar/qt/5.2.1/plugins',
|
||||||
'/usr/local/Qt-5.6.2/plugins',
|
'/usr/local/Qt-5.12.5/plugins',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
2
binary
21
client.qrc
@@ -1,16 +1,8 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/client">
|
<qresource prefix="/client">
|
||||||
<file>resources/dialog-close.png</file>
|
|
||||||
<file>resources/dialog-ok.png</file>
|
|
||||||
<file>resources/dialog-cancel.png</file>
|
|
||||||
<file>resources/folder-sync.png</file>
|
|
||||||
<file>resources/folder-sync@2x.png</file>
|
|
||||||
<file>resources/task-ongoing.png</file>
|
|
||||||
<file>resources/view-refresh.png</file>
|
|
||||||
<file>resources/warning.png</file>
|
|
||||||
<file>resources/warning@2x.png</file>
|
|
||||||
<file>resources/settings.png</file>
|
<file>resources/settings.png</file>
|
||||||
<file>resources/settings@2x.png</file>
|
<file>resources/settings@2x.png</file>
|
||||||
|
<file>resources/activity.svg</file>
|
||||||
<file>resources/activity.png</file>
|
<file>resources/activity.png</file>
|
||||||
<file>resources/activity@2x.png</file>
|
<file>resources/activity@2x.png</file>
|
||||||
<file>resources/network.png</file>
|
<file>resources/network.png</file>
|
||||||
@@ -20,13 +12,13 @@
|
|||||||
<file>resources/lock-https.png</file>
|
<file>resources/lock-https.png</file>
|
||||||
<file>resources/lock-https@2x.png</file>
|
<file>resources/lock-https@2x.png</file>
|
||||||
<file>resources/account.png</file>
|
<file>resources/account.png</file>
|
||||||
|
<file>resources/account.svg</file>
|
||||||
<file>resources/more.svg</file>
|
<file>resources/more.svg</file>
|
||||||
<file>resources/delete.png</file>
|
<file>resources/delete.png</file>
|
||||||
<file>resources/close.svg</file>
|
<file>resources/close.svg</file>
|
||||||
<file>resources/bell.svg</file>
|
<file>resources/bell.svg</file>
|
||||||
<file>resources/link.svg</file>
|
<file>resources/link.svg</file>
|
||||||
<file>resources/files.svg</file>
|
<file>resources/files.svg</file>
|
||||||
<file>resources/folder-grey.png</file>
|
|
||||||
<file>resources/state-error.svg</file>
|
<file>resources/state-error.svg</file>
|
||||||
<file>resources/state-warning.svg</file>
|
<file>resources/state-warning.svg</file>
|
||||||
<file>resources/folder.svg</file>
|
<file>resources/folder.svg</file>
|
||||||
@@ -37,6 +29,15 @@
|
|||||||
<file>resources/confirm.svg</file>
|
<file>resources/confirm.svg</file>
|
||||||
<file>resources/copy.svg</file>
|
<file>resources/copy.svg</file>
|
||||||
<file>resources/state-sync.svg</file>
|
<file>resources/state-sync.svg</file>
|
||||||
|
<file>resources/add.png</file>
|
||||||
|
<file>resources/add-color.svg</file>
|
||||||
|
<file>resources/state-info.svg</file>
|
||||||
|
<file>resources/change.svg</file>
|
||||||
|
<file>resources/delete-color.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/"/>
|
<qresource prefix="/"/>
|
||||||
|
<qresource prefix="/qml">
|
||||||
|
<file>src/gui/tray/Window.qml</file>
|
||||||
|
<file>src/gui/tray/UserLine.qml</file>
|
||||||
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -47,7 +47,13 @@ macro (KDE4_ADD_APP_ICON appsources pattern)
|
|||||||
endif (fn MATCHES ".*128.*")
|
endif (fn MATCHES ".*128.*")
|
||||||
if (fn MATCHES ".*256.*" )
|
if (fn MATCHES ".*256.*" )
|
||||||
list (APPEND _icons ${it})
|
list (APPEND _icons ${it})
|
||||||
endif (fn MATCHES ".*256.*")
|
endif (fn MATCHES ".*256.*")
|
||||||
|
if (fn MATCHES ".*512.*" )
|
||||||
|
list (APPEND _icons ${it})
|
||||||
|
endif (fn MATCHES ".*512.*")
|
||||||
|
if (fn MATCHES ".*1024.*" )
|
||||||
|
list (APPEND _icons ${it})
|
||||||
|
endif (fn MATCHES ".*1024.*")
|
||||||
endforeach (it)
|
endforeach (it)
|
||||||
if (_icons)
|
if (_icons)
|
||||||
add_custom_command(OUTPUT ${_outfilename}.ico ${_outfilename}.rc
|
add_custom_command(OUTPUT ${_outfilename}.ico ${_outfilename}.rc
|
||||||
@@ -104,14 +110,14 @@ macro (KDE4_ADD_APP_ICON appsources pattern)
|
|||||||
foreach (it ${files})
|
foreach (it ${files})
|
||||||
if (it MATCHES ".*sidebar-16.*")
|
if (it MATCHES ".*sidebar-16.*")
|
||||||
configure_file(${it} ${appsources}.iconset/sidebar_16x16.png COPYONLY)
|
configure_file(${it} ${appsources}.iconset/sidebar_16x16.png COPYONLY)
|
||||||
elseif (it MATCHES ".*sidebar-18.*")
|
|
||||||
configure_file(${it} ${appsources}.iconset/sidebar_18x18.png COPYONLY)
|
|
||||||
elseif (it MATCHES ".*sidebar-32.*")
|
elseif (it MATCHES ".*sidebar-32.*")
|
||||||
|
configure_file(${it} ${appsources}.iconset/sidebar_18x18.png COPYONLY)
|
||||||
configure_file(${it} ${appsources}.iconset/sidebar_16x16@2x.png COPYONLY)
|
configure_file(${it} ${appsources}.iconset/sidebar_16x16@2x.png COPYONLY)
|
||||||
configure_file(${it} ${appsources}.iconset/sidebar_32x32.png COPYONLY)
|
|
||||||
elseif (it MATCHES ".*sidebar-36.*")
|
|
||||||
configure_file(${it} ${appsources}.iconset/sidebar_18x18@2x.png COPYONLY)
|
|
||||||
elseif (it MATCHES ".*sidebar-64.*")
|
elseif (it MATCHES ".*sidebar-64.*")
|
||||||
|
configure_file(${it} ${appsources}.iconset/sidebar_18x18@2x.png COPYONLY)
|
||||||
|
elseif (it MATCHES ".*sidebar-128.*")
|
||||||
|
configure_file(${it} ${appsources}.iconset/sidebar_32x32.png COPYONLY)
|
||||||
|
elseif (it MATCHES ".*sidebar-256.*")
|
||||||
configure_file(${it} ${appsources}.iconset/sidebar_32x32@2x.png COPYONLY)
|
configure_file(${it} ${appsources}.iconset/sidebar_32x32@2x.png COPYONLY)
|
||||||
endif()
|
endif()
|
||||||
endforeach (it)
|
endforeach (it)
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
#
|
#
|
||||||
# ecm_add_app_icon(<sources_var>
|
# ecm_add_app_icon(<sources_var>
|
||||||
# ICONS <icon> [<icon> [...]]
|
# ICONS <icon> [<icon> [...]]
|
||||||
# [SIDEBAR_ICONS <icon> [<icon> [...]] # Since 5.4x
|
# [SIDEBAR_ICONS <icon> [<icon> [...]] # Since 5.49
|
||||||
# [OUTFILE_BASE <name>]) # Since 5.4x
|
# [OUTFILE_BASENAME <name>]) # Since 5.49
|
||||||
# )
|
# )
|
||||||
#
|
#
|
||||||
# The given icons, whose names must match the pattern::
|
# The given icons, whose names must match the pattern::
|
||||||
@@ -27,20 +27,21 @@
|
|||||||
#
|
#
|
||||||
# ``SIDEBAR_ICONS`` can be used to add Mac OS X sidebar
|
# ``SIDEBAR_ICONS`` can be used to add Mac OS X sidebar
|
||||||
# icons to the generated iconset. They are used when a folder monitored by the
|
# icons to the generated iconset. They are used when a folder monitored by the
|
||||||
# application is dragged into Finder's sidebar. Since 5.4x.
|
# application is dragged into Finder's sidebar. Since 5.49.
|
||||||
#
|
#
|
||||||
# ``OUTFILE_BASE`` will be used as the basename for the icon file. If
|
# ``OUTFILE_BASENAME`` will be used as the basename for the icon file. If
|
||||||
# you specify it, the icon file will be called ``<OUTFILE_BASE>.icns`` on Mac OS X
|
# you specify it, the icon file will be called ``<OUTFILE_BASENAME>.icns`` on Mac OS X
|
||||||
# and ``<OUTFILE_BASE>.ico`` on Windows. If you don't specify it, it defaults
|
# and ``<OUTFILE_BASENAME>.ico`` on Windows. If you don't specify it, it defaults
|
||||||
# to ``<sources_var>.<ext>``. Since 5.4x.
|
# to ``<sources_var>.<ext>``. Since 5.49.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Windows notes
|
# Windows notes
|
||||||
# * Icons are compiled into the executable using a resource file.
|
# * Icons are compiled into the executable using a resource file.
|
||||||
# * Icons may not show up in Windows Explorer if the executable
|
# * Icons may not show up in Windows Explorer if the executable
|
||||||
# target does not have the ``WIN32_EXECUTABLE`` property set.
|
# target does not have the ``WIN32_EXECUTABLE`` property set.
|
||||||
# * The tool png2ico is required. See :find-module:`FindPng2Ico`.
|
# * One of the tools png2ico (See :find-module:`FindPng2Ico`) or
|
||||||
# * Supported sizes: 16, 32, 48, 64, 128.
|
# icotool (see :find-module:`FindIcoTool`) is required.
|
||||||
|
# * Supported sizes: 16, 24, 32, 48, 64, 128, 256, 512 and 1024.
|
||||||
#
|
#
|
||||||
# Mac OS X notes
|
# Mac OS X notes
|
||||||
# * The executable target must have the ``MACOSX_BUNDLE`` property set.
|
# * The executable target must have the ``MACOSX_BUNDLE`` property set.
|
||||||
@@ -101,7 +102,7 @@ include(CMakeParseArguments)
|
|||||||
|
|
||||||
function(ecm_add_app_icon appsources)
|
function(ecm_add_app_icon appsources)
|
||||||
set(options)
|
set(options)
|
||||||
set(oneValueArgs OUTFILE_BASE)
|
set(oneValueArgs OUTFILE_BASENAME)
|
||||||
set(multiValueArgs ICONS SIDEBAR_ICONS)
|
set(multiValueArgs ICONS SIDEBAR_ICONS)
|
||||||
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
|
||||||
@@ -138,9 +139,9 @@ function(ecm_add_app_icon appsources)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
_ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;32;48;64;128;256;512;1024")
|
_ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;24;32;48;64;128;256;512;1024")
|
||||||
if(ARG_SIDEBAR_ICONS)
|
if(ARG_SIDEBAR_ICONS)
|
||||||
_ecm_add_app_icon_categorize_icons("${ARG_SIDEBAR_ICONS}" "sidebar_icons" "16;18;32;36;64")
|
_ecm_add_app_icon_categorize_icons("${ARG_SIDEBAR_ICONS}" "sidebar_icons" "16;32;64;128;256")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(mac_icons
|
set(mac_icons
|
||||||
@@ -151,31 +152,37 @@ function(ecm_add_app_icon appsources)
|
|||||||
${icons_at_128px}
|
${icons_at_128px}
|
||||||
${icons_at_256px}
|
${icons_at_256px}
|
||||||
${icons_at_512px}
|
${icons_at_512px}
|
||||||
${icons_at_1024px}
|
${icons_at_1024px})
|
||||||
|
|
||||||
|
set(mac_sidebar_icons
|
||||||
# Sidebar Icons: https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Finder.html#//apple_ref/doc/uid/TP40014214-CH15-SW15
|
# Sidebar Icons: https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Finder.html#//apple_ref/doc/uid/TP40014214-CH15-SW15
|
||||||
${sidebar_icons_at_16px}
|
${sidebar_icons_at_16px}
|
||||||
${sidebar_icons_at_18px}
|
|
||||||
${sidebar_icons_at_32px}
|
${sidebar_icons_at_32px}
|
||||||
${sidebar_icons_at_36px}
|
${sidebar_icons_at_64px}
|
||||||
${sidebar_icons_at_64px})
|
${sidebar_icons_at_128px}
|
||||||
if (NOT icons_at_128px)
|
${sidebar_icons_at_256px})
|
||||||
message(AUTHOR_WARNING "No 128px icon provided; this will not work on Mac OS X")
|
|
||||||
|
if (NOT (mac_icons OR mac_sidebar_icons))
|
||||||
|
message(AUTHOR_WARNING "No icons suitable for use on macOS provided")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
set(windows_icons ${icons_at_16px}
|
set(windows_icons ${icons_at_16px}
|
||||||
${icons_at_32px}
|
${icons_at_24px}
|
||||||
${icons_at_48px}
|
${icons_at_32px}
|
||||||
${icons_at_64px}
|
${icons_at_48px}
|
||||||
${icons_at_128px}
|
${icons_at_64px}
|
||||||
${icons_at_256px})
|
${icons_at_128px}
|
||||||
if (NOT windows_icons)
|
${icons_at_256px}
|
||||||
|
${icons_at_512px}
|
||||||
|
${icons_at_1024px})
|
||||||
|
|
||||||
|
if (NOT (windows_icons))
|
||||||
message(AUTHOR_WARNING "No icons suitable for use on Windows provided")
|
message(AUTHOR_WARNING "No icons suitable for use on Windows provided")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ARG_OUTFILE_BASE)
|
if (ARG_OUTFILE_BASENAME)
|
||||||
set (_outfilebasename "${ARG_OUTFILE_BASE}")
|
set (_outfilebasename "${ARG_OUTFILE_BASENAME}")
|
||||||
else()
|
else()
|
||||||
set (_outfilebasename "${appsources}")
|
set (_outfilebasename "${appsources}")
|
||||||
endif()
|
endif()
|
||||||
@@ -185,26 +192,15 @@ function(ecm_add_app_icon appsources)
|
|||||||
set(saved_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}")
|
set(saved_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}")
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_FIND_MODULE_DIR})
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_FIND_MODULE_DIR})
|
||||||
find_package(Png2Ico)
|
find_package(Png2Ico)
|
||||||
|
find_package(IcoTool)
|
||||||
set(CMAKE_MODULE_PATH "${saved_CMAKE_MODULE_PATH}")
|
set(CMAKE_MODULE_PATH "${saved_CMAKE_MODULE_PATH}")
|
||||||
|
|
||||||
if (Png2Ico_FOUND)
|
function(create_windows_icon_and_rc command args deps)
|
||||||
if (Png2Ico_HAS_RCFILE_ARGUMENT)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${_outfilename}.rc" "${_outfilename}.ico"
|
|
||||||
COMMAND Png2Ico::Png2Ico
|
|
||||||
ARGS
|
|
||||||
--rcfile "${_outfilename}.rc"
|
|
||||||
"${_outfilename}.ico"
|
|
||||||
${windows_icons}
|
|
||||||
DEPENDS ${windows_icons}
|
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${_outfilename}.ico"
|
OUTPUT "${_outfilename}.ico"
|
||||||
COMMAND Png2Ico::Png2Ico
|
COMMAND ${command}
|
||||||
ARGS "${_outfilename}.ico" ${windows_icons}
|
ARGS ${args}
|
||||||
DEPENDS ${windows_icons}
|
DEPENDS ${deps}
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
)
|
)
|
||||||
# this bit's a little hacky to make the dependency stuff work
|
# this bit's a little hacky to make the dependency stuff work
|
||||||
@@ -216,12 +212,72 @@ function(ecm_add_app_icon appsources)
|
|||||||
DEPENDS "${_outfilename}.ico"
|
DEPENDS "${_outfilename}.ico"
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
)
|
)
|
||||||
endif()
|
endfunction()
|
||||||
|
|
||||||
|
if (IcoTool_FOUND)
|
||||||
|
list(APPEND icotool_args "-c" "-o" "${_outfilename}.ico")
|
||||||
|
|
||||||
|
# According to https://stackoverflow.com/a/40851713/2886832
|
||||||
|
# Windows always chooses the first icon above 255px, all other ones will be ignored
|
||||||
|
set(maxSize 0)
|
||||||
|
foreach(size 256 512 1024)
|
||||||
|
if(icons_at_${size}px)
|
||||||
|
set(maxSize "${size}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
foreach(size 16 24 32 48 64 128 ${maxSize})
|
||||||
|
if(NOT icons_at_${size}px)
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(icotool_icon_arg "")
|
||||||
|
if(size STREQUAL "${maxSize}")
|
||||||
|
# maxSize icon needs to be included as raw png
|
||||||
|
list(APPEND icotool_args "-r")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
foreach(icon ${icons_at_${size}px})
|
||||||
|
list(APPEND icotool_args "${icons_at_${size}px}")
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
create_windows_icon_and_rc(IcoTool::IcoTool "${icotool_args}" "${windows_icons_modern}")
|
||||||
set(${appsources} "${${appsources}};${_outfilename}.rc" PARENT_SCOPE)
|
set(${appsources} "${${appsources}};${_outfilename}.rc" PARENT_SCOPE)
|
||||||
|
|
||||||
|
# standard png2ico has no rcfile argument
|
||||||
|
# NOTE: We generally use https://github.com/hiiamok/png2ImageMagickICO
|
||||||
|
# or similar on windows, which is why we provide resolutions >= 256px here.
|
||||||
|
# Standard png2ico will fail with this.
|
||||||
|
elseif(Png2Ico_FOUND AND NOT Png2Ico_HAS_RCFILE_ARGUMENT AND windows_icons)
|
||||||
|
set(png2ico_args)
|
||||||
|
list(APPEND png2ico_args "${_outfilename}.ico")
|
||||||
|
list(APPEND png2ico_args "${windows_icons}")
|
||||||
|
create_windows_icon_and_rc(Png2Ico::Png2Ico "${png2ico_args}" "${windows_icons}")
|
||||||
|
|
||||||
|
set(${appsources} "${${appsources}};${_outfilename}.rc" PARENT_SCOPE)
|
||||||
|
|
||||||
|
# png2ico from kdewin provides rcfile argument
|
||||||
|
elseif(Png2Ico_FOUND AND windows_icons)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${_outfilename}.rc" "${_outfilename}.ico"
|
||||||
|
COMMAND Png2Ico::Png2Ico
|
||||||
|
ARGS
|
||||||
|
--rcfile "${_outfilename}.rc"
|
||||||
|
"${_outfilename}.ico"
|
||||||
|
${windows_icons}
|
||||||
|
DEPENDS ${windows_icons}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(${appsources} "${${appsources}};${_outfilename}.rc" PARENT_SCOPE)
|
||||||
|
|
||||||
|
# else none of the supported tools was found
|
||||||
else()
|
else()
|
||||||
message(WARNING "Unable to find the png2ico utility - application will not have an application icon!")
|
message(WARNING "Unable to find the png2ico or icotool utilities or icons in matching sizes - application will not have an application icon!")
|
||||||
endif()
|
endif()
|
||||||
elseif (APPLE AND mac_icons)
|
|
||||||
|
elseif (APPLE AND (mac_icons OR mac_sidebar_icons))
|
||||||
# first generate .iconset directory structure, then convert to .icns format using the Mac OS X "iconutil" utility,
|
# first generate .iconset directory structure, then convert to .icns format using the Mac OS X "iconutil" utility,
|
||||||
# to create retina compatible icon, you need png source files in pixel resolution 16x16, 32x32, 64x64, 128x128,
|
# to create retina compatible icon, you need png source files in pixel resolution 16x16, 32x32, 64x64, 128x128,
|
||||||
# 256x256, 512x512, 1024x1024
|
# 256x256, 512x512, 1024x1024
|
||||||
@@ -246,8 +302,11 @@ function(ecm_add_app_icon appsources)
|
|||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
)
|
)
|
||||||
list(APPEND iconset_icons
|
list(APPEND iconset_icons
|
||||||
"${_outfilename}.iconset/${type}_${sizename}.png")
|
"${_outfilename}.iconset/${type}_${sizename}.png")
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
# List of supported sizes and filenames taken from:
|
||||||
|
# https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40012302-CH7-SW4
|
||||||
foreach(size 16 32 128 256 512)
|
foreach(size 16 32 128 256 512)
|
||||||
math(EXPR double_size "2 * ${size}")
|
math(EXPR double_size "2 * ${size}")
|
||||||
foreach(file ${icons_at_${size}px})
|
foreach(file ${icons_at_${size}px})
|
||||||
@@ -258,14 +317,25 @@ function(ecm_add_app_icon appsources)
|
|||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(size 16 18 32)
|
# List of supported sizes and filenames taken from:
|
||||||
math(EXPR double_size "2 * ${size}")
|
# https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Finder.html#//apple_ref/doc/uid/TP40014214-CH15-SW15
|
||||||
foreach(file ${sidebar_icons_at_${size}px})
|
foreach(file ${sidebar_icons_at_16px})
|
||||||
copy_icon("${file}" "${size}x${size}" "sidebar")
|
copy_icon("${file}" "16x16" "sidebar")
|
||||||
endforeach()
|
endforeach()
|
||||||
foreach(file ${sidebar_icons_at_${double_size}px})
|
foreach(file ${sidebar_icons_at_32px})
|
||||||
copy_icon("${file}" "${size}x${size}@2x" "sidebar")
|
copy_icon("${file}" "16x16@2x" "sidebar")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
foreach(file ${sidebar_icons_at_32px})
|
||||||
|
copy_icon("${file}" "18x18" "sidebar")
|
||||||
|
endforeach()
|
||||||
|
foreach(file ${sidebar_icons_at_64px})
|
||||||
|
copy_icon("${file}" "18x18@2x" "sidebar")
|
||||||
|
endforeach()
|
||||||
|
foreach(file ${sidebar_icons_at_128px})
|
||||||
|
copy_icon("${file}" "32x32" "sidebar")
|
||||||
|
endforeach()
|
||||||
|
foreach(file ${sidebar_icons_at_256px})
|
||||||
|
copy_icon("${file}" "32x32@2x" "sidebar")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
# generate .icns icon file
|
# generate .icns icon file
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>@MIRALL_VERSION_STRING@</string>
|
<string>@MIRALL_VERSION_STRING@</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>(C) 2014-2018 @APPLICATION_VENDOR@</string>
|
<string>(C) 2014-2020 @APPLICATION_VENDOR@</string>
|
||||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>SUShowReleaseNotes</key>
|
<key>SUShowReleaseNotes</key>
|
||||||
|
|||||||
17
cmake/modules/SanitizerFlags.cmake
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
# Enable address sanitizer (gcc/clang only)
|
||||||
|
macro(ENABLE_SANITIZER)
|
||||||
|
|
||||||
|
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
|
message(FATAL_ERROR "Sanitizer supported only for gcc/clang")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SANITIZER_FLAGS "-fsanitize=address -fsanitize=leak -g")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FLAGS}")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZER_FLAGS}")
|
||||||
|
|
||||||
|
set(LINKER_FLAGS "-fsanitize=address,undefined -fuse-ld=gold")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
|
||||||
|
|
||||||
|
endmacro()
|
||||||
|
|
||||||
@@ -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@"
|
||||||
|
|||||||
@@ -13,11 +13,19 @@ desktop client.
|
|||||||
|
|
||||||
These instructions are updated to work with version |version| of the Nextcloud Client.
|
These instructions are updated to work with version |version| of the Nextcloud Client.
|
||||||
|
|
||||||
Getting Source Code
|
You have two possibilities to clone the repo.
|
||||||
-------------------
|
|
||||||
|
|
||||||
The :ref:`generic-build-instructions` pull the latest code directly from
|
First option is As [remote URL](https://help.github.com/en/articles/which-remote-url-should-i-use) you can choose between cloning with HTTPS URL's, which is recommended or cloning with SSH URL's.
|
||||||
GitHub, and work on Linux, macOS, and Windows.
|
|
||||||
|
[https://github.com/nextcloud/desktop.git](https://github.com/nextcloud/desktop.git)
|
||||||
|
|
||||||
|
When you don't have SSH key added to your GitHub account, than use HTTPS.
|
||||||
|
|
||||||
|
When you no part of the nextcloud organisation, clone with HTTPS:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git clone git@github.com:nextcloud/desktop.git
|
||||||
|
```
|
||||||
|
|
||||||
macOS
|
macOS
|
||||||
-----
|
-----
|
||||||
@@ -47,7 +55,7 @@ To set up your build environment for development using HomeBrew_:
|
|||||||
|
|
||||||
5. Install a Qt5 version with qtwebkit support::
|
5. Install a Qt5 version with qtwebkit support::
|
||||||
|
|
||||||
brew install qt5 --with-qtwebkit
|
brew install qt5
|
||||||
|
|
||||||
6. Install any missing dependencies::
|
6. Install any missing dependencies::
|
||||||
|
|
||||||
@@ -67,10 +75,23 @@ To set up your build environment for development using HomeBrew_:
|
|||||||
|
|
||||||
10. Install the Packages_ package creation tool.
|
10. Install the Packages_ package creation tool.
|
||||||
|
|
||||||
11. In the build directory, run ``admin/osx/create_mac.sh <build_dir> <install_dir>``.
|
11. Enable git submodules:
|
||||||
If you have a developer signing certificate, you can specify
|
```
|
||||||
its Common Name as a third parameter (use quotes) to have the package
|
$ cd desktop
|
||||||
signed automatically.
|
$ git submodule init
|
||||||
|
$ git submodule update
|
||||||
|
```
|
||||||
|
|
||||||
|
12. Generate the build files:
|
||||||
|
```
|
||||||
|
$ cd build
|
||||||
|
$ cmake .. -DCMAKE_INSTALL_PREFIX=~/nextcloud-desktop-client -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
|
||||||
|
```
|
||||||
|
|
||||||
|
13. Compile and install:
|
||||||
|
```
|
||||||
|
$ make install
|
||||||
|
```
|
||||||
|
|
||||||
.. note:: Contrary to earlier versions, Nextcloud 1.7 and later are packaged
|
.. note:: Contrary to earlier versions, Nextcloud 1.7 and later are packaged
|
||||||
as a ``pkg`` installer. Do not call "make package" at any time when
|
as a ``pkg`` installer. Do not call "make package" at any time when
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ Activity
|
|||||||
.. index:: activity, recent changes, sync activity
|
.. index:: activity, recent changes, sync activity
|
||||||
|
|
||||||
The Activity window, which can be invoked either from the main menu (``Recent
|
The Activity window, which can be invoked either from the main menu (``Recent
|
||||||
Changes -> Details…``) or the Activity tab on the left side of the settings
|
Changes -> View more activity…``) or the Activity tab on the left side of the settings
|
||||||
window, provides an in-depth account of the recent sync activity. It will show
|
window, provides an in-depth account of the recent sync activity. It will show
|
||||||
files that have not been synced because they are on the ignored files list, or
|
files that have not been synced because they are on the ignored files list, or
|
||||||
because they cannot be synced in a cross-platform manner due to containing
|
because they cannot be synced in a cross-platform manner due to containing
|
||||||
|
|||||||
1
resources/add-color.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewbox="0 0 16 16"><path fill="#00d400" d="M9.02 13.98h-2v-5h-5v-2h5v-5h2v5l5-.028V8.98h-5z"/></svg>
|
||||||
|
After Width: | Height: | Size: 179 B |
BIN
resources/add.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
1
resources/change.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" version="1.1" height="16"><path d="m8 2c-2.142 0-4.125 1.145-5.196 3l1.948 1.125c0.671-1.162 1.906-1.875 3.2476-1.875 1.1906 0 2.297 0.56157 3 1.5l-1.5 1.5h4.5v-4.5l-1.406 1.406c-1.129-1.348-2.802-2.1563-4.594-2.1563z"/><path d="m2 8.75v4.5l1.408-1.41c1.116 1.334 2.817 2.145 4.592 2.16 2.16 0.01827 4.116-1.132 5.196-3.002l-1.948-1.125c-0.677 1.171-1.9005 1.886-3.248 1.875-1.18-0.01-2.3047-0.572-3-1.5l1.5-1.5z"/></svg>
|
||||||
|
After Width: | Height: | Size: 493 B |
1
resources/delete-color.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16"><path d="m3.0503 4.4645 3.5355 3.5355-3.5355 3.536 1.4142 1.414 3.5355-3.5358 3.536 3.5358 1.414-1.414-3.5358-3.536 3.5358-3.5355-1.414-1.4142-3.536 3.5355-3.5355-3.5355-1.4142 1.4142z" fill="#d40000"/></svg>
|
||||||
|
After Width: | Height: | Size: 306 B |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 668 B |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
1
resources/state-info.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4.2333 4.2333" version="1.1" height="16" width="16"><g id="g3830" transform="matrix(.87498 0 0 .87498 .26458 -255.9)"><circle id="circle3818" stroke-width=".25066" fill="#2268ab" r="2.1167" cy="294.88" cx="2.1167" /><g id="g3828" stroke-linejoin="round" stroke-linecap="round" fill="none" /></g><path style="fill:#ffffff;stroke-width:0.17859235" d="m 1.6076619,2.1122981 c 0.027682,0.068222 0.058043,0.1232286 0.115014,0.043934 0.072686,-0.047862 0.314322,-0.2548509 0.29682,-0.061078 C 1.953774,2.4553739 1.8705497,2.8125586 1.8105428,3.1738508 1.7403561,3.3728027 1.9237704,3.5430012 2.1028984,3.4078068 2.295421,3.3181535 2.4582973,3.1779584 2.6256382,3.0488362 2.599921,2.9911507 2.5809903,2.9077482 2.5191973,2.9868644 2.4356161,3.0297263 2.2566665,3.2222491 2.2163047,3.07116 2.2725613,2.681829 2.3904322,2.3041062 2.4600833,1.9170966 2.5309844,1.7376113 2.3950755,1.5200858 2.210054,1.6736753 1.985742,1.7836882 1.8010774,1.9562083 1.6076619,2.1122981 Z M 2.4041839,0.77839186 C 2.1702279,0.77446305 2.0636081,1.1609366 2.2889917,1.2561264 2.4716917,1.3236342 2.659928,1.1286114 2.6086721,0.94358974 2.5911701,0.8467927 2.5018738,0.77035521 2.4038266,0.77749894 Z" /></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 596 B |
|
Before Width: | Height: | Size: 1.3 KiB |
@@ -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";
|
||||||
|
|||||||
@@ -35,11 +35,11 @@ public:
|
|||||||
|
|
||||||
QString contextMenuTitle() const
|
QString contextMenuTitle() const
|
||||||
{
|
{
|
||||||
return _strings.value("CONTEXT_MENU_TITLE", "ownCloud");
|
return _strings.value("CONTEXT_MENU_TITLE", "Nextcloud");
|
||||||
}
|
}
|
||||||
QString shareActionTitle() const
|
QString shareActionTitle() const
|
||||||
{
|
{
|
||||||
return _strings.value("SHARE_MENU_TITLE", "Share...");
|
return _strings.value("SHARE_MENU_TITLE", "Share …");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString copyPrivateLinkTitle() const { return _strings["COPY_PRIVATE_LINK_MENU_TITLE"]; }
|
QString copyPrivateLinkTitle() const { return _strings["COPY_PRIVATE_LINK_MENU_TITLE"]; }
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ macro(libcloudproviders_add_config _sources)
|
|||||||
endmacro(libcloudproviders_add_config _sources)
|
endmacro(libcloudproviders_add_config _sources)
|
||||||
|
|
||||||
|
|
||||||
|
find_package(Qt5 5.6 COMPONENTS DBus)
|
||||||
IF (UNIX AND Qt5DBus_FOUND AND LIBCLOUDPROVIDERS_FOUND)
|
IF (UNIX AND Qt5DBus_FOUND AND LIBCLOUDPROVIDERS_FOUND)
|
||||||
STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
|
STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
|
||||||
STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")
|
STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ IFACEMETHODIMP OCContextMenu::Initialize(
|
|||||||
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, NULL, 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];
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
512
src/3rdparty/kmessagewidget/kmessagewidget.cpp
vendored
Normal file
@@ -0,0 +1,512 @@
|
|||||||
|
/* This file is part of the KDE libraries
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Aurélien Gâteau <agateau@kde.org>
|
||||||
|
* Copyright (c) 2014 Dominik Haumann <dhaumann@kde.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301 USA
|
||||||
|
*/
|
||||||
|
#include "kmessagewidget.h"
|
||||||
|
|
||||||
|
#include <QAction>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QShowEvent>
|
||||||
|
#include <QTimeLine>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QStyle>
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
// KMessageWidgetPrivate
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
class KMessageWidgetPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void init(KMessageWidget *);
|
||||||
|
|
||||||
|
KMessageWidget *q;
|
||||||
|
QFrame *content = nullptr;
|
||||||
|
QLabel *iconLabel = nullptr;
|
||||||
|
QLabel *textLabel = nullptr;
|
||||||
|
QToolButton *closeButton = nullptr;
|
||||||
|
QTimeLine *timeLine = nullptr;
|
||||||
|
QIcon icon;
|
||||||
|
bool ignoreShowEventDoingAnimatedShow = false;
|
||||||
|
|
||||||
|
KMessageWidget::MessageType messageType;
|
||||||
|
bool wordWrap;
|
||||||
|
QList<QToolButton *> buttons;
|
||||||
|
QPixmap contentSnapShot;
|
||||||
|
|
||||||
|
void createLayout();
|
||||||
|
void applyStyleSheet();
|
||||||
|
void updateSnapShot();
|
||||||
|
void updateLayout();
|
||||||
|
void slotTimeLineChanged(qreal);
|
||||||
|
void slotTimeLineFinished();
|
||||||
|
|
||||||
|
int bestContentHeight() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::init(KMessageWidget *q_ptr)
|
||||||
|
{
|
||||||
|
q = q_ptr;
|
||||||
|
|
||||||
|
q->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
|
||||||
|
|
||||||
|
// Note: when changing the value 500, also update KMessageWidgetTest
|
||||||
|
timeLine = new QTimeLine(500, q);
|
||||||
|
QObject::connect(timeLine, SIGNAL(valueChanged(qreal)), q, SLOT(slotTimeLineChanged(qreal)));
|
||||||
|
QObject::connect(timeLine, SIGNAL(finished()), q, SLOT(slotTimeLineFinished()));
|
||||||
|
|
||||||
|
content = new QFrame(q);
|
||||||
|
content->setObjectName(QStringLiteral("contentWidget"));
|
||||||
|
content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
|
|
||||||
|
wordWrap = false;
|
||||||
|
|
||||||
|
iconLabel = new QLabel(content);
|
||||||
|
iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
|
iconLabel->hide();
|
||||||
|
|
||||||
|
textLabel = new QLabel(content);
|
||||||
|
textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
|
textLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
|
||||||
|
QObject::connect(textLabel, &QLabel::linkActivated, q, &KMessageWidget::linkActivated);
|
||||||
|
QObject::connect(textLabel, &QLabel::linkHovered, q, &KMessageWidget::linkHovered);
|
||||||
|
|
||||||
|
QAction *closeAction = new QAction(q);
|
||||||
|
closeAction->setText(KMessageWidget::tr("&Close"));
|
||||||
|
closeAction->setToolTip(KMessageWidget::tr("Close message"));
|
||||||
|
closeAction->setIcon(QIcon(":/client/resources/close.svg")); // ivan: NC customization
|
||||||
|
|
||||||
|
QObject::connect(closeAction, &QAction::triggered, q, &KMessageWidget::animatedHide);
|
||||||
|
|
||||||
|
closeButton = new QToolButton(content);
|
||||||
|
closeButton->setAutoRaise(true);
|
||||||
|
closeButton->setDefaultAction(closeAction);
|
||||||
|
|
||||||
|
q->setMessageType(KMessageWidget::Information);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::createLayout()
|
||||||
|
{
|
||||||
|
delete content->layout();
|
||||||
|
|
||||||
|
content->resize(q->size());
|
||||||
|
|
||||||
|
qDeleteAll(buttons);
|
||||||
|
buttons.clear();
|
||||||
|
|
||||||
|
Q_FOREACH (QAction *action, q->actions()) {
|
||||||
|
QToolButton *button = new QToolButton(content);
|
||||||
|
button->setDefaultAction(action);
|
||||||
|
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
||||||
|
buttons.append(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutoRaise reduces visual clutter, but we don't want to turn it on if
|
||||||
|
// there are other buttons, otherwise the close button will look different
|
||||||
|
// from the others.
|
||||||
|
closeButton->setAutoRaise(buttons.isEmpty());
|
||||||
|
|
||||||
|
if (wordWrap) {
|
||||||
|
QGridLayout *layout = new QGridLayout(content);
|
||||||
|
// Set alignment to make sure icon does not move down if text wraps
|
||||||
|
layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
|
layout->addWidget(textLabel, 0, 1);
|
||||||
|
|
||||||
|
if (buttons.isEmpty()) {
|
||||||
|
// Use top-vertical alignment like the icon does.
|
||||||
|
layout->addWidget(closeButton, 0, 2, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
|
} else {
|
||||||
|
// Use an additional layout in row 1 for the buttons.
|
||||||
|
QHBoxLayout *buttonLayout = new QHBoxLayout;
|
||||||
|
buttonLayout->addStretch();
|
||||||
|
Q_FOREACH (QToolButton *button, buttons) {
|
||||||
|
// For some reason, calling show() is necessary if wordwrap is true,
|
||||||
|
// otherwise the buttons do not show up. It is not needed if
|
||||||
|
// wordwrap is false.
|
||||||
|
button->show();
|
||||||
|
buttonLayout->addWidget(button);
|
||||||
|
}
|
||||||
|
buttonLayout->addWidget(closeButton);
|
||||||
|
layout->addItem(buttonLayout, 1, 0, 1, 2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QHBoxLayout *layout = new QHBoxLayout(content);
|
||||||
|
layout->addWidget(iconLabel);
|
||||||
|
layout->addWidget(textLabel);
|
||||||
|
|
||||||
|
for (QToolButton *button : qAsConst(buttons)) {
|
||||||
|
layout->addWidget(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
layout->addWidget(closeButton);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (q->isVisible()) {
|
||||||
|
q->setFixedHeight(content->sizeHint().height());
|
||||||
|
}
|
||||||
|
q->updateGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::applyStyleSheet()
|
||||||
|
{
|
||||||
|
QColor bgBaseColor;
|
||||||
|
|
||||||
|
// We have to hardcode colors here because KWidgetsAddons is a tier 1 framework
|
||||||
|
// and therefore can't depend on any other KDE Frameworks
|
||||||
|
// The following RGB color values come from the "default" scheme in kcolorscheme.cpp
|
||||||
|
switch (messageType) {
|
||||||
|
case KMessageWidget::Positive:
|
||||||
|
bgBaseColor.setRgb(39, 174, 96); // Window: ForegroundPositive
|
||||||
|
break;
|
||||||
|
case KMessageWidget::Information:
|
||||||
|
bgBaseColor.setRgb(61, 174, 233); // Window: ForegroundActive
|
||||||
|
break;
|
||||||
|
case KMessageWidget::Warning:
|
||||||
|
bgBaseColor.setRgb(246, 116, 0); // Window: ForegroundNeutral
|
||||||
|
break;
|
||||||
|
case KMessageWidget::Error:
|
||||||
|
bgBaseColor.setRgb(218, 68, 83); // Window: ForegroundNegative
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const qreal bgBaseColorAlpha = 0.2;
|
||||||
|
bgBaseColor.setAlphaF(bgBaseColorAlpha);
|
||||||
|
|
||||||
|
const QPalette palette = QGuiApplication::palette();
|
||||||
|
const QColor windowColor = palette.window().color();
|
||||||
|
const QColor textColor = palette.text().color();
|
||||||
|
const QColor border = bgBaseColor;
|
||||||
|
|
||||||
|
// Generate a final background color from overlaying bgBaseColor over windowColor
|
||||||
|
const int newRed = (bgBaseColor.red() * bgBaseColorAlpha) + (windowColor.red() * (1 - bgBaseColorAlpha));
|
||||||
|
const int newGreen = (bgBaseColor.green() * bgBaseColorAlpha) + (windowColor.green() * (1 - bgBaseColorAlpha));
|
||||||
|
const int newBlue = (bgBaseColor.blue() * bgBaseColorAlpha) + (windowColor.blue() * (1 - bgBaseColorAlpha));
|
||||||
|
|
||||||
|
const QColor bgFinalColor = QColor(newRed, newGreen, newBlue);
|
||||||
|
|
||||||
|
content->setStyleSheet(
|
||||||
|
QString::fromLatin1(".QFrame {"
|
||||||
|
"background-color: %1;"
|
||||||
|
"border-radius: 4px;"
|
||||||
|
"border: 2px solid %2;"
|
||||||
|
"margin: %3px;"
|
||||||
|
"}"
|
||||||
|
".QLabel { color: %4; }"
|
||||||
|
)
|
||||||
|
.arg(bgFinalColor.name())
|
||||||
|
.arg(border.name())
|
||||||
|
// DefaultFrameWidth returns the size of the external margin + border width. We know our border is 1px, so we subtract this from the frame normal QStyle FrameWidth to get our margin
|
||||||
|
.arg(q->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, q) - 1)
|
||||||
|
.arg(textColor.name())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::updateLayout()
|
||||||
|
{
|
||||||
|
if (content->layout()) {
|
||||||
|
createLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::updateSnapShot()
|
||||||
|
{
|
||||||
|
// Attention: updateSnapShot calls QWidget::render(), which causes the whole
|
||||||
|
// window layouts to be activated. Calling this method from resizeEvent()
|
||||||
|
// can lead to infinite recursion, see:
|
||||||
|
// https://bugs.kde.org/show_bug.cgi?id=311336
|
||||||
|
contentSnapShot = QPixmap(content->size() * q->devicePixelRatio());
|
||||||
|
contentSnapShot.setDevicePixelRatio(q->devicePixelRatio());
|
||||||
|
contentSnapShot.fill(Qt::transparent);
|
||||||
|
content->render(&contentSnapShot, QPoint(), QRegion(), QWidget::DrawChildren);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::slotTimeLineChanged(qreal value)
|
||||||
|
{
|
||||||
|
q->setFixedHeight(qMin(value * 2, qreal(1.0)) * content->height());
|
||||||
|
q->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::slotTimeLineFinished()
|
||||||
|
{
|
||||||
|
if (timeLine->direction() == QTimeLine::Forward) {
|
||||||
|
// Show
|
||||||
|
// We set the whole geometry here, because it may be wrong if a
|
||||||
|
// KMessageWidget is shown right when the toplevel window is created.
|
||||||
|
content->setGeometry(0, 0, q->width(), bestContentHeight());
|
||||||
|
|
||||||
|
// notify about finished animation
|
||||||
|
emit q->showAnimationFinished();
|
||||||
|
} else {
|
||||||
|
// hide and notify about finished animation
|
||||||
|
q->hide();
|
||||||
|
emit q->hideAnimationFinished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int KMessageWidgetPrivate::bestContentHeight() const
|
||||||
|
{
|
||||||
|
int height = content->heightForWidth(q->width());
|
||||||
|
if (height == -1) {
|
||||||
|
height = content->sizeHint().height();
|
||||||
|
}
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
// KMessageWidget
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
KMessageWidget::KMessageWidget(QWidget *parent)
|
||||||
|
: QFrame(parent)
|
||||||
|
, d(new KMessageWidgetPrivate)
|
||||||
|
{
|
||||||
|
d->init(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
KMessageWidget::KMessageWidget(const QString &text, QWidget *parent)
|
||||||
|
: QFrame(parent)
|
||||||
|
, d(new KMessageWidgetPrivate)
|
||||||
|
{
|
||||||
|
d->init(this);
|
||||||
|
setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
KMessageWidget::~KMessageWidget()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KMessageWidget::text() const
|
||||||
|
{
|
||||||
|
return d->textLabel->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setText(const QString &text)
|
||||||
|
{
|
||||||
|
d->textLabel->setText(text);
|
||||||
|
updateGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
KMessageWidget::MessageType KMessageWidget::messageType() const
|
||||||
|
{
|
||||||
|
return d->messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setMessageType(KMessageWidget::MessageType type)
|
||||||
|
{
|
||||||
|
d->messageType = type;
|
||||||
|
d->applyStyleSheet();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize KMessageWidget::sizeHint() const
|
||||||
|
{
|
||||||
|
ensurePolished();
|
||||||
|
return d->content->sizeHint();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize KMessageWidget::minimumSizeHint() const
|
||||||
|
{
|
||||||
|
ensurePolished();
|
||||||
|
return d->content->minimumSizeHint();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::event(QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::Polish && !d->content->layout()) {
|
||||||
|
d->createLayout();
|
||||||
|
} else if (event->type() == QEvent::PaletteChange) {
|
||||||
|
d->applyStyleSheet();
|
||||||
|
} else if (event->type() == QEvent::Show && !d->ignoreShowEventDoingAnimatedShow) {
|
||||||
|
if ((height() != d->content->height()) || (d->content->pos().y() != 0)) {
|
||||||
|
d->content->move(0, 0);
|
||||||
|
setFixedHeight(d->content->height());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QFrame::event(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
QFrame::resizeEvent(event);
|
||||||
|
|
||||||
|
if (d->timeLine->state() == QTimeLine::NotRunning) {
|
||||||
|
d->content->resize(width(), d->bestContentHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int KMessageWidget::heightForWidth(int width) const
|
||||||
|
{
|
||||||
|
ensurePolished();
|
||||||
|
return d->content->heightForWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
QFrame::paintEvent(event);
|
||||||
|
if (d->timeLine->state() == QTimeLine::Running) {
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.setOpacity(d->timeLine->currentValue() * d->timeLine->currentValue());
|
||||||
|
painter.drawPixmap(0, 0, d->contentSnapShot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::wordWrap() const
|
||||||
|
{
|
||||||
|
return d->wordWrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setWordWrap(bool wordWrap)
|
||||||
|
{
|
||||||
|
d->wordWrap = wordWrap;
|
||||||
|
d->textLabel->setWordWrap(wordWrap);
|
||||||
|
QSizePolicy policy = sizePolicy();
|
||||||
|
policy.setHeightForWidth(wordWrap);
|
||||||
|
setSizePolicy(policy);
|
||||||
|
d->updateLayout();
|
||||||
|
// Without this, when user does wordWrap -> !wordWrap -> wordWrap, a minimum
|
||||||
|
// height is set, causing the widget to be too high.
|
||||||
|
// Mostly visible in test programs.
|
||||||
|
if (wordWrap) {
|
||||||
|
setMinimumHeight(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::isCloseButtonVisible() const
|
||||||
|
{
|
||||||
|
return d->closeButton->isVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setCloseButtonVisible(bool show)
|
||||||
|
{
|
||||||
|
d->closeButton->setVisible(show);
|
||||||
|
updateGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::addAction(QAction *action)
|
||||||
|
{
|
||||||
|
QFrame::addAction(action);
|
||||||
|
d->updateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::removeAction(QAction *action)
|
||||||
|
{
|
||||||
|
QFrame::removeAction(action);
|
||||||
|
d->updateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::animatedShow()
|
||||||
|
{
|
||||||
|
// Test before styleHint, as there might have been a style change while animation was running
|
||||||
|
if (isHideAnimationRunning()) {
|
||||||
|
d->timeLine->stop();
|
||||||
|
emit hideAnimationFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)
|
||||||
|
|| (parentWidget() && !parentWidget()->isVisible())) {
|
||||||
|
show();
|
||||||
|
emit showAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isVisible() && (d->timeLine->state() == QTimeLine::NotRunning) && (height() == d->bestContentHeight()) && (d->content->pos().y() == 0)) {
|
||||||
|
emit showAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->ignoreShowEventDoingAnimatedShow = true;
|
||||||
|
show();
|
||||||
|
d->ignoreShowEventDoingAnimatedShow = false;
|
||||||
|
setFixedHeight(0);
|
||||||
|
int wantedHeight = d->bestContentHeight();
|
||||||
|
d->content->setGeometry(0, -wantedHeight, width(), wantedHeight);
|
||||||
|
|
||||||
|
d->updateSnapShot();
|
||||||
|
|
||||||
|
d->timeLine->setDirection(QTimeLine::Forward);
|
||||||
|
if (d->timeLine->state() == QTimeLine::NotRunning) {
|
||||||
|
d->timeLine->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::animatedHide()
|
||||||
|
{
|
||||||
|
// test this before isVisible, as animatedShow might have been called directly before,
|
||||||
|
// so the first timeline event is not yet done and the widget is still hidden
|
||||||
|
// And before styleHint, as there might have been a style change while animation was running
|
||||||
|
if (isShowAnimationRunning()) {
|
||||||
|
d->timeLine->stop();
|
||||||
|
emit showAnimationFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) {
|
||||||
|
hide();
|
||||||
|
emit hideAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isVisible()) {
|
||||||
|
// explicitly hide it, so it stays hidden in case it is only not visible due to the parents
|
||||||
|
hide();
|
||||||
|
emit hideAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->content->move(0, -d->content->height());
|
||||||
|
d->updateSnapShot();
|
||||||
|
|
||||||
|
d->timeLine->setDirection(QTimeLine::Backward);
|
||||||
|
if (d->timeLine->state() == QTimeLine::NotRunning) {
|
||||||
|
d->timeLine->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::isHideAnimationRunning() const
|
||||||
|
{
|
||||||
|
return (d->timeLine->direction() == QTimeLine::Backward)
|
||||||
|
&& (d->timeLine->state() == QTimeLine::Running);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::isShowAnimationRunning() const
|
||||||
|
{
|
||||||
|
return (d->timeLine->direction() == QTimeLine::Forward)
|
||||||
|
&& (d->timeLine->state() == QTimeLine::Running);
|
||||||
|
}
|
||||||
|
|
||||||
|
QIcon KMessageWidget::icon() const
|
||||||
|
{
|
||||||
|
return d->icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setIcon(const QIcon &icon)
|
||||||
|
{
|
||||||
|
d->icon = icon;
|
||||||
|
if (d->icon.isNull()) {
|
||||||
|
d->iconLabel->hide();
|
||||||
|
} else {
|
||||||
|
const int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize);
|
||||||
|
d->iconLabel->setPixmap(d->icon.pixmap(size));
|
||||||
|
d->iconLabel->show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "moc_kmessagewidget.cpp"
|
||||||
|
|
||||||
346
src/3rdparty/kmessagewidget/kmessagewidget.h
vendored
Normal file
@@ -0,0 +1,346 @@
|
|||||||
|
/* This file is part of the KDE libraries
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Aurélien Gâteau <agateau@kde.org>
|
||||||
|
* Copyright (c) 2014 Dominik Haumann <dhaumann@kde.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301 USA
|
||||||
|
*/
|
||||||
|
#ifndef KMESSAGEWIDGET_H
|
||||||
|
#define KMESSAGEWIDGET_H
|
||||||
|
|
||||||
|
#include <QFrame>
|
||||||
|
|
||||||
|
class KMessageWidgetPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class KMessageWidget kmessagewidget.h KMessageWidget
|
||||||
|
*
|
||||||
|
* @short A widget to provide feedback or propose opportunistic interactions.
|
||||||
|
*
|
||||||
|
* KMessageWidget can be used to provide inline positive or negative
|
||||||
|
* feedback, or to implement opportunistic interactions.
|
||||||
|
*
|
||||||
|
* As a feedback widget, KMessageWidget provides a less intrusive alternative
|
||||||
|
* to "OK Only" message boxes. If you want to avoid a modal KMessageBox,
|
||||||
|
* consider using KMessageWidget instead.
|
||||||
|
*
|
||||||
|
* Examples of KMessageWidget look as follows, all of them having an icon set
|
||||||
|
* with setIcon(), and the first three show a close button:
|
||||||
|
*
|
||||||
|
* \image html kmessagewidget.png "KMessageWidget with different message types"
|
||||||
|
*
|
||||||
|
* <b>Negative feedback</b>
|
||||||
|
*
|
||||||
|
* The KMessageWidget can be used as a secondary indicator of failure: the
|
||||||
|
* first indicator is usually the fact the action the user expected to happen
|
||||||
|
* did not happen.
|
||||||
|
*
|
||||||
|
* Example: User fills a form, clicks "Submit".
|
||||||
|
*
|
||||||
|
* @li Expected feedback: form closes
|
||||||
|
* @li First indicator of failure: form stays there
|
||||||
|
* @li Second indicator of failure: a KMessageWidget appears on top of the
|
||||||
|
* form, explaining the error condition
|
||||||
|
*
|
||||||
|
* When used to provide negative feedback, KMessageWidget should be placed
|
||||||
|
* close to its context. In the case of a form, it should appear on top of the
|
||||||
|
* form entries.
|
||||||
|
*
|
||||||
|
* KMessageWidget should get inserted in the existing layout. Space should not
|
||||||
|
* be reserved for it, otherwise it becomes "dead space", ignored by the user.
|
||||||
|
* KMessageWidget should also not appear as an overlay to prevent blocking
|
||||||
|
* access to elements the user needs to interact with to fix the failure.
|
||||||
|
*
|
||||||
|
* <b>Positive feedback</b>
|
||||||
|
*
|
||||||
|
* KMessageWidget can be used for positive feedback but it shouldn't be
|
||||||
|
* overused. It is often enough to provide feedback by simply showing the
|
||||||
|
* results of an action.
|
||||||
|
*
|
||||||
|
* Examples of acceptable uses:
|
||||||
|
*
|
||||||
|
* @li Confirm success of "critical" transactions
|
||||||
|
* @li Indicate completion of background tasks
|
||||||
|
*
|
||||||
|
* Example of unadapted uses:
|
||||||
|
*
|
||||||
|
* @li Indicate successful saving of a file
|
||||||
|
* @li Indicate a file has been successfully removed
|
||||||
|
*
|
||||||
|
* <b>Opportunistic interaction</b>
|
||||||
|
*
|
||||||
|
* Opportunistic interaction is the situation where the application suggests to
|
||||||
|
* the user an action he could be interested in perform, either based on an
|
||||||
|
* action the user just triggered or an event which the application noticed.
|
||||||
|
*
|
||||||
|
* Example of acceptable uses:
|
||||||
|
*
|
||||||
|
* @li A browser can propose remembering a recently entered password
|
||||||
|
* @li A music collection can propose ripping a CD which just got inserted
|
||||||
|
* @li A chat application may notify the user a "special friend" just connected
|
||||||
|
*
|
||||||
|
* @author Aurélien Gâteau <agateau@kde.org>
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
class KMessageWidget : public QFrame
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QString text READ text WRITE setText)
|
||||||
|
Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)
|
||||||
|
Q_PROPERTY(bool closeButtonVisible READ isCloseButtonVisible WRITE setCloseButtonVisible)
|
||||||
|
Q_PROPERTY(MessageType messageType READ messageType WRITE setMessageType)
|
||||||
|
Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available message types.
|
||||||
|
* The background colors are chosen depending on the message type.
|
||||||
|
*/
|
||||||
|
enum MessageType {
|
||||||
|
Positive,
|
||||||
|
Information,
|
||||||
|
Warning,
|
||||||
|
Error
|
||||||
|
};
|
||||||
|
Q_ENUM(MessageType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a KMessageWidget with the specified @p parent.
|
||||||
|
*/
|
||||||
|
explicit KMessageWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a KMessageWidget with the specified @p parent and
|
||||||
|
* contents @p text.
|
||||||
|
*/
|
||||||
|
explicit KMessageWidget(const QString &text, QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*/
|
||||||
|
~KMessageWidget() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the text of this message widget.
|
||||||
|
* @see setText()
|
||||||
|
*/
|
||||||
|
QString text() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether word wrap is enabled.
|
||||||
|
*
|
||||||
|
* If word wrap is enabled, the message widget wraps the displayed text
|
||||||
|
* as required to the available width of the widget. This is useful to
|
||||||
|
* avoid breaking widget layouts.
|
||||||
|
*
|
||||||
|
* @see setWordWrap()
|
||||||
|
*/
|
||||||
|
bool wordWrap() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the close button is visible.
|
||||||
|
*
|
||||||
|
* @see setCloseButtonVisible()
|
||||||
|
*/
|
||||||
|
bool isCloseButtonVisible() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the type of this message.
|
||||||
|
* By default, the type is set to KMessageWidget::Information.
|
||||||
|
*
|
||||||
|
* @see KMessageWidget::MessageType, setMessageType()
|
||||||
|
*/
|
||||||
|
MessageType messageType() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add @p action to the message widget.
|
||||||
|
* For each action a button is added to the message widget in the
|
||||||
|
* order the actions were added.
|
||||||
|
*
|
||||||
|
* @param action the action to add
|
||||||
|
* @see removeAction(), QWidget::actions()
|
||||||
|
*/
|
||||||
|
void addAction(QAction *action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove @p action from the message widget.
|
||||||
|
*
|
||||||
|
* @param action the action to remove
|
||||||
|
* @see KMessageWidget::MessageType, addAction(), setMessageType()
|
||||||
|
*/
|
||||||
|
void removeAction(QAction *action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the preferred size of the message widget.
|
||||||
|
*/
|
||||||
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the minimum size of the message widget.
|
||||||
|
*/
|
||||||
|
QSize minimumSizeHint() const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the required height for @p width.
|
||||||
|
* @param width the width in pixels
|
||||||
|
*/
|
||||||
|
int heightForWidth(int width) const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The icon shown on the left of the text. By default, no icon is shown.
|
||||||
|
* @since 4.11
|
||||||
|
*/
|
||||||
|
QIcon icon() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the hide animation started by calling animatedHide()
|
||||||
|
* is still running. If animations are disabled, this function always
|
||||||
|
* returns @e false.
|
||||||
|
*
|
||||||
|
* @see animatedHide(), hideAnimationFinished()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
bool isHideAnimationRunning() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the show animation started by calling animatedShow()
|
||||||
|
* is still running. If animations are disabled, this function always
|
||||||
|
* returns @e false.
|
||||||
|
*
|
||||||
|
* @see animatedShow(), showAnimationFinished()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
bool isShowAnimationRunning() const;
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
/**
|
||||||
|
* Set the text of the message widget to @p text.
|
||||||
|
* If the message widget is already visible, the text changes on the fly.
|
||||||
|
*
|
||||||
|
* @param text the text to display, rich text is allowed
|
||||||
|
* @see text()
|
||||||
|
*/
|
||||||
|
void setText(const QString &text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set word wrap to @p wordWrap. If word wrap is enabled, the text()
|
||||||
|
* of the message widget is wrapped to fit the available width.
|
||||||
|
* If word wrap is disabled, the message widget's minimum size is
|
||||||
|
* such that the entire text fits.
|
||||||
|
*
|
||||||
|
* @param wordWrap disable/enable word wrap
|
||||||
|
* @see wordWrap()
|
||||||
|
*/
|
||||||
|
void setWordWrap(bool wordWrap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the visibility of the close button. If @p visible is @e true,
|
||||||
|
* a close button is shown that calls animatedHide() if clicked.
|
||||||
|
*
|
||||||
|
* @see closeButtonVisible(), animatedHide()
|
||||||
|
*/
|
||||||
|
void setCloseButtonVisible(bool visible);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the message type to @p type.
|
||||||
|
* By default, the message type is set to KMessageWidget::Information.
|
||||||
|
* Appropriate colors are chosen to mimic the appearance of Kirigami's
|
||||||
|
* InlineMessage.
|
||||||
|
*
|
||||||
|
* @see messageType(), KMessageWidget::MessageType
|
||||||
|
*/
|
||||||
|
void setMessageType(KMessageWidget::MessageType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the widget using an animation.
|
||||||
|
*/
|
||||||
|
void animatedShow();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the widget using an animation.
|
||||||
|
*/
|
||||||
|
void animatedHide();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define an icon to be shown on the left of the text
|
||||||
|
* @since 4.11
|
||||||
|
*/
|
||||||
|
void setIcon(const QIcon &icon);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the user clicks a link in the text label.
|
||||||
|
* The URL referred to by the href anchor is passed in contents.
|
||||||
|
* @param contents text of the href anchor
|
||||||
|
* @see QLabel::linkActivated()
|
||||||
|
* @since 4.10
|
||||||
|
*/
|
||||||
|
void linkActivated(const QString &contents);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the user hovers over a link in the text label.
|
||||||
|
* The URL referred to by the href anchor is passed in contents.
|
||||||
|
* @param contents text of the href anchor
|
||||||
|
* @see QLabel::linkHovered()
|
||||||
|
* @since 4.11
|
||||||
|
*/
|
||||||
|
void linkHovered(const QString &contents);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the hide animation is finished, started by
|
||||||
|
* calling animatedHide(). If animations are disabled, this signal is
|
||||||
|
* emitted immediately after the message widget got hidden.
|
||||||
|
*
|
||||||
|
* @note This signal is @e not emitted if the widget was hidden by
|
||||||
|
* calling hide(), so this signal is only useful in conjunction
|
||||||
|
* with animatedHide().
|
||||||
|
*
|
||||||
|
* @see animatedHide()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
void hideAnimationFinished();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the show animation is finished, started by
|
||||||
|
* calling animatedShow(). If animations are disabled, this signal is
|
||||||
|
* emitted immediately after the message widget got shown.
|
||||||
|
*
|
||||||
|
* @note This signal is @e not emitted if the widget was shown by
|
||||||
|
* calling show(), so this signal is only useful in conjunction
|
||||||
|
* with animatedShow().
|
||||||
|
*
|
||||||
|
* @see animatedShow()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
void showAnimationFinished();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
|
||||||
|
bool event(QEvent *event) override;
|
||||||
|
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
KMessageWidgetPrivate *const d;
|
||||||
|
friend class KMessageWidgetPrivate;
|
||||||
|
|
||||||
|
Q_PRIVATE_SLOT(d, void slotTimeLineChanged(qreal))
|
||||||
|
Q_PRIVATE_SLOT(d, void slotTimeLineFinished())
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* KMESSAGEWIDGET_H */
|
||||||
2
src/3rdparty/libcrashreporter-qt
vendored
1
src/3rdparty/qtmacgoodies
vendored
@@ -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")
|
||||||
|
|||||||
@@ -499,7 +499,7 @@ restart_sync:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Cmd cmd;
|
Cmd cmd;
|
||||||
QString dbPath = options.source_dir + SyncJournalDb::makeDbName(options.source_dir, credentialFreeUrl, folder, user);
|
QString dbPath = options.source_dir + SyncJournalDb::makeDbName(credentialFreeUrl, folder, user);
|
||||||
SyncJournalDb db(dbPath);
|
SyncJournalDb db(dbPath);
|
||||||
|
|
||||||
if (!selectiveSyncList.empty()) {
|
if (!selectiveSyncList.empty()) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QStandardPaths>
|
||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
|
|
||||||
#include "common/syncjournaldb.h"
|
#include "common/syncjournaldb.h"
|
||||||
@@ -102,11 +103,15 @@ SyncJournalDb::SyncJournalDb(const QString &dbFilePath, QObject *parent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SyncJournalDb::makeDbName(const QString &localPath,
|
QString SyncJournalDb::makeDbName(const QUrl &remoteUrl,
|
||||||
const QUrl &remoteUrl,
|
|
||||||
const QString &remotePath,
|
const QString &remotePath,
|
||||||
const QString &user)
|
const QString &user)
|
||||||
{
|
{
|
||||||
|
const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
||||||
|
if (!QDir(dbPath).exists()) {
|
||||||
|
QDir().mkdir(dbPath);
|
||||||
|
}
|
||||||
|
|
||||||
QString journalPath = QLatin1String("._sync_");
|
QString journalPath = QLatin1String("._sync_");
|
||||||
|
|
||||||
QString key = QString::fromUtf8("%1@%2:%3").arg(user, remoteUrl.toString(), remotePath);
|
QString key = QString::fromUtf8("%1@%2:%3").arg(user, remoteUrl.toString(), remotePath);
|
||||||
@@ -115,17 +120,16 @@ QString SyncJournalDb::makeDbName(const QString &localPath,
|
|||||||
journalPath.append(ba.left(6).toHex());
|
journalPath.append(ba.left(6).toHex());
|
||||||
journalPath.append(".db");
|
journalPath.append(".db");
|
||||||
|
|
||||||
|
journalPath = dbPath + QLatin1Char('/') + journalPath;
|
||||||
|
|
||||||
// If the journal doesn't exist and we can't create a file
|
// If the journal doesn't exist and we can't create a file
|
||||||
// at that location, try again with a journal name that doesn't
|
// at that location, try again with a journal name that doesn't
|
||||||
// have the ._ prefix.
|
// have the ._ prefix.
|
||||||
//
|
//
|
||||||
// The disadvantage of that filename is that it will only be ignored
|
|
||||||
// by client versions >2.3.2.
|
|
||||||
//
|
|
||||||
// See #5633: "._*" is often forbidden on samba shared folders.
|
// See #5633: "._*" is often forbidden on samba shared folders.
|
||||||
|
|
||||||
// If it exists already, the path is clearly usable
|
// If it exists already, the path is clearly usable
|
||||||
QFile file(QDir(localPath).filePath(journalPath));
|
QFile file(QDir(dbPath).filePath(journalPath));
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
return journalPath;
|
return journalPath;
|
||||||
}
|
}
|
||||||
@@ -140,7 +144,7 @@ QString SyncJournalDb::makeDbName(const QString &localPath,
|
|||||||
|
|
||||||
// Can we create it if we drop the underscore?
|
// Can we create it if we drop the underscore?
|
||||||
QString alternateJournalPath = journalPath.mid(2).prepend(".");
|
QString alternateJournalPath = journalPath.mid(2).prepend(".");
|
||||||
QFile file2(QDir(localPath).filePath(alternateJournalPath));
|
QFile file2(QDir(dbPath).filePath(alternateJournalPath));
|
||||||
if (file2.open(QIODevice::ReadWrite)) {
|
if (file2.open(QIODevice::ReadWrite)) {
|
||||||
// The alternative worked, use it
|
// The alternative worked, use it
|
||||||
qCInfo(lcDb) << "Using alternate database path" << alternateJournalPath;
|
qCInfo(lcDb) << "Using alternate database path" << alternateJournalPath;
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ public:
|
|||||||
virtual ~SyncJournalDb();
|
virtual ~SyncJournalDb();
|
||||||
|
|
||||||
/// Create a journal path for a specific configuration
|
/// Create a journal path for a specific configuration
|
||||||
static QString makeDbName(const QString &localPath,
|
static QString makeDbName(const QUrl &remoteUrl,
|
||||||
const QUrl &remoteUrl,
|
|
||||||
const QString &remotePath,
|
const QString &remotePath,
|
||||||
const QString &user);
|
const QString &user);
|
||||||
|
|
||||||
@@ -103,6 +102,7 @@ public:
|
|||||||
: _chunk(0)
|
: _chunk(0)
|
||||||
, _transferid(0)
|
, _transferid(0)
|
||||||
, _size(0)
|
, _size(0)
|
||||||
|
, _modtime(0)
|
||||||
, _errorCount(0)
|
, _errorCount(0)
|
||||||
, _valid(false)
|
, _valid(false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ void Utility::usleep(int usec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This can be overriden from the tests
|
// This can be overriden from the tests
|
||||||
OCSYNC_EXPORT bool fsCasePreserving_override = []()-> bool {
|
OCSYNC_EXPORT bool fsCasePreserving_override = []() -> bool {
|
||||||
QByteArray env = qgetenv("OWNCLOUD_TEST_CASE_PRESERVING");
|
QByteArray env = qgetenv("OWNCLOUD_TEST_CASE_PRESERVING");
|
||||||
if (!env.isEmpty())
|
if (!env.isEmpty())
|
||||||
return env.toInt();
|
return env.toInt();
|
||||||
@@ -362,12 +362,12 @@ QString Utility::fileNameForGuiUse(const QString &fName)
|
|||||||
QByteArray Utility::normalizeEtag(QByteArray etag)
|
QByteArray Utility::normalizeEtag(QByteArray etag)
|
||||||
{
|
{
|
||||||
/* strip "XXXX-gzip" */
|
/* strip "XXXX-gzip" */
|
||||||
if(etag.startsWith('"') && etag.endsWith("-gzip\"")) {
|
if (etag.startsWith('"') && etag.endsWith("-gzip\"")) {
|
||||||
etag.chop(6);
|
etag.chop(6);
|
||||||
etag.remove(0, 1);
|
etag.remove(0, 1);
|
||||||
}
|
}
|
||||||
/* strip trailing -gzip */
|
/* strip trailing -gzip */
|
||||||
if(etag.endsWith("-gzip")) {
|
if (etag.endsWith("-gzip")) {
|
||||||
etag.chop(5);
|
etag.chop(5);
|
||||||
}
|
}
|
||||||
/* strip normal quotes */
|
/* strip normal quotes */
|
||||||
@@ -396,6 +396,26 @@ void Utility::crash()
|
|||||||
*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
|
||||||
@@ -445,7 +465,7 @@ QString Utility::timeAgoInWords(const QDateTime &dt, const QDateTime &from)
|
|||||||
|
|
||||||
if (floor(secs / 3600.0) > 0) {
|
if (floor(secs / 3600.0) > 0) {
|
||||||
int hours = floor(secs / 3600.0);
|
int hours = floor(secs / 3600.0);
|
||||||
if(hours == 1){
|
if (hours == 1) {
|
||||||
return (QObject::tr("%n hour ago", "", hours));
|
return (QObject::tr("%n hour ago", "", hours));
|
||||||
} else {
|
} else {
|
||||||
return (QObject::tr("%n hours ago", "", hours));
|
return (QObject::tr("%n hours ago", "", hours));
|
||||||
@@ -460,7 +480,7 @@ QString Utility::timeAgoInWords(const QDateTime &dt, const QDateTime &from)
|
|||||||
return QObject::tr("Less than a minute ago");
|
return QObject::tr("Less than a minute ago");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if(minutes == 1){
|
} else if (minutes == 1) {
|
||||||
return (QObject::tr("%n minute ago", "", minutes));
|
return (QObject::tr("%n minute ago", "", minutes));
|
||||||
} else {
|
} else {
|
||||||
return (QObject::tr("%n minutes ago", "", minutes));
|
return (QObject::tr("%n minutes ago", "", minutes));
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#ifndef UTILITY_H
|
#ifndef UTILITY_H
|
||||||
#define UTILITY_H
|
#define UTILITY_H
|
||||||
|
|
||||||
|
|
||||||
#include "ocsynclib.h"
|
#include "ocsynclib.h"
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
|
#include <QtQuick/QQuickImageProvider>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@@ -55,6 +57,12 @@ namespace Utility {
|
|||||||
OCSYNC_EXPORT QByteArray userAgentString();
|
OCSYNC_EXPORT QByteArray userAgentString();
|
||||||
OCSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName);
|
OCSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName);
|
||||||
OCSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString &guiName, bool launch);
|
OCSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString &guiName, bool launch);
|
||||||
|
OCSYNC_EXPORT uint convertSizeToUint(size_t &convertVar);
|
||||||
|
OCSYNC_EXPORT uint convertSizeToInt(size_t &convertVar);
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
OCSYNC_EXPORT DWORD convertSizeToDWORD(size_t &convertVar);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the amount of free space available.
|
* Return the amount of free space available.
|
||||||
|
|||||||
@@ -47,14 +47,18 @@ QString getUserAutostartDir_private()
|
|||||||
|
|
||||||
bool hasLaunchOnStartup_private(const QString &appName)
|
bool hasLaunchOnStartup_private(const QString &appName)
|
||||||
{
|
{
|
||||||
QString desktopFileLocation = getUserAutostartDir_private() + appName + QLatin1String(".desktop");
|
QString desktopFileLocation = getUserAutostartDir_private()
|
||||||
|
+ QLatin1String(LINUX_APPLICATION_ID)
|
||||||
|
+ QLatin1String(".desktop");
|
||||||
return QFile::exists(desktopFileLocation);
|
return QFile::exists(desktopFileLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setLaunchOnStartup_private(const QString &appName, const QString &guiName, bool enable)
|
void setLaunchOnStartup_private(const QString &appName, const QString &guiName, bool enable)
|
||||||
{
|
{
|
||||||
QString userAutoStartPath = getUserAutostartDir_private();
|
QString userAutoStartPath = getUserAutostartDir_private();
|
||||||
QString desktopFileLocation = userAutoStartPath + appName + QLatin1String(".desktop");
|
QString desktopFileLocation = userAutoStartPath
|
||||||
|
+ QLatin1String(LINUX_APPLICATION_ID)
|
||||||
|
+ QLatin1String(".desktop");
|
||||||
if (enable) {
|
if (enable) {
|
||||||
if (!QDir().exists(userAutoStartPath) && !QDir().mkpath(userAutoStartPath)) {
|
if (!QDir().exists(userAutoStartPath) && !QDir().mkpath(userAutoStartPath)) {
|
||||||
qCWarning(lcUtility) << "Could not create autostart folder" << userAutoStartPath;
|
qCWarning(lcUtility) << "Could not create autostart folder" << userAutoStartPath;
|
||||||
|
|||||||
@@ -87,9 +87,17 @@ void setLaunchOnStartup_private(const QString &appName, const QString &guiName,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Right now only detection on toggle/startup, not when windows theme is switched while nextcloud is running
|
||||||
static inline bool hasDarkSystray_private()
|
static inline bool hasDarkSystray_private()
|
||||||
{
|
{
|
||||||
return true;
|
if(Utility::registryGetKeyValue( HKEY_CURRENT_USER,
|
||||||
|
"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
|
||||||
|
"SystemUsesLightTheme" ) == 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant Utility::registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName)
|
QVariant Utility::registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName)
|
||||||
@@ -256,4 +264,13 @@ bool Utility::registryWalkSubKeys(HKEY hRootKey, const QString &subKey, const st
|
|||||||
return retCode != ERROR_NO_MORE_ITEMS;
|
return retCode != ERROR_NO_MORE_ITEMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD Utility::convertSizeToDWORD(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<DWORD>(convertVar);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace OCC
|
} // namespace OCC
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ static void csync_exclude_expand_escapes(QByteArray &input)
|
|||||||
line[o++] = line[i];
|
line[o++] = line[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
input.resize(o);
|
input.resize(OCC::Utility::convertSizeToUint(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
// See http://support.microsoft.com/kb/74496 and
|
// See http://support.microsoft.com/kb/74496 and
|
||||||
@@ -236,13 +236,29 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(const char *path, bool excludeC
|
|||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QByteArray leftIncludeLast(const QByteArray & arr, char c)
|
||||||
|
{
|
||||||
|
// left up to and including `c`
|
||||||
|
return arr.left(arr.lastIndexOf(c, arr.size() - 2) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
using namespace OCC;
|
using namespace OCC;
|
||||||
|
|
||||||
ExcludedFiles::ExcludedFiles()
|
ExcludedFiles::ExcludedFiles(QString localPath)
|
||||||
|
: _localPath(std::move(localPath))
|
||||||
{
|
{
|
||||||
|
Q_ASSERT(_localPath.endsWith("/"));
|
||||||
// Windows used to use PathMatchSpec which allows *foo to match abc/deffoo.
|
// Windows used to use PathMatchSpec which allows *foo to match abc/deffoo.
|
||||||
_wildcardsMatchSlash = Utility::isWindows();
|
_wildcardsMatchSlash = Utility::isWindows();
|
||||||
|
|
||||||
|
// We're in a detached exclude probably coming from a partial sync or test
|
||||||
|
if (_localPath.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Load exclude file from base dir
|
||||||
|
QFileInfo fi(_localPath + ".sync-exclude.lst");
|
||||||
|
if (fi.isReadable())
|
||||||
|
addInTreeExcludeFilePath(fi.absoluteFilePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
ExcludedFiles::~ExcludedFiles()
|
ExcludedFiles::~ExcludedFiles()
|
||||||
@@ -251,7 +267,13 @@ ExcludedFiles::~ExcludedFiles()
|
|||||||
|
|
||||||
void ExcludedFiles::addExcludeFilePath(const QString &path)
|
void ExcludedFiles::addExcludeFilePath(const QString &path)
|
||||||
{
|
{
|
||||||
_excludeFiles.insert(path);
|
_excludeFiles[_localPath.toUtf8()].append(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExcludedFiles::addInTreeExcludeFilePath(const QString &path)
|
||||||
|
{
|
||||||
|
BasePathByteArray basePath = leftIncludeLast(path.toUtf8(), '/');
|
||||||
|
_excludeFiles[basePath].append(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExcludedFiles::setExcludeConflictFiles(bool onoff)
|
void ExcludedFiles::setExcludeConflictFiles(bool onoff)
|
||||||
@@ -261,9 +283,22 @@ void ExcludedFiles::setExcludeConflictFiles(bool onoff)
|
|||||||
|
|
||||||
void ExcludedFiles::addManualExclude(const QByteArray &expr)
|
void ExcludedFiles::addManualExclude(const QByteArray &expr)
|
||||||
{
|
{
|
||||||
_manualExcludes.append(expr);
|
addManualExclude(expr, _localPath.toUtf8());
|
||||||
_allExcludes.append(expr);
|
}
|
||||||
prepare();
|
|
||||||
|
void ExcludedFiles::addManualExclude(const QByteArray &expr, const QByteArray &basePath)
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN)
|
||||||
|
Q_ASSERT(basePath.size() >= 2 && basePath.at(1) == ':');
|
||||||
|
#else
|
||||||
|
Q_ASSERT(basePath.startsWith('/'));
|
||||||
|
#endif
|
||||||
|
Q_ASSERT(basePath.endsWith('/'));
|
||||||
|
|
||||||
|
auto key = basePath;
|
||||||
|
_manualExcludes[key].append(expr);
|
||||||
|
_allExcludes[key].append(expr);
|
||||||
|
prepare(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExcludedFiles::clearManualExcludes()
|
void ExcludedFiles::clearManualExcludes()
|
||||||
@@ -278,26 +313,51 @@ void ExcludedFiles::setWildcardsMatchSlash(bool onoff)
|
|||||||
prepare();
|
prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ExcludedFiles::loadExcludeFile(const QByteArray & basePath, const QString & file)
|
||||||
|
{
|
||||||
|
QFile f(file);
|
||||||
|
if (!f.open(QIODevice::ReadOnly))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
while (!f.atEnd()) {
|
||||||
|
QByteArray line = f.readLine().trimmed();
|
||||||
|
if (line.isEmpty() || line.startsWith('#'))
|
||||||
|
continue;
|
||||||
|
csync_exclude_expand_escapes(line);
|
||||||
|
_allExcludes[basePath].append(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nothing to prepare if the user decided to not exclude anything
|
||||||
|
if(_allExcludes.size())
|
||||||
|
prepare(basePath);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ExcludedFiles::reloadExcludeFiles()
|
bool ExcludedFiles::reloadExcludeFiles()
|
||||||
{
|
{
|
||||||
_allExcludes.clear();
|
_allExcludes.clear();
|
||||||
|
// clear all regex
|
||||||
|
_bnameTraversalRegexFile.clear();
|
||||||
|
_bnameTraversalRegexDir.clear();
|
||||||
|
_fullTraversalRegexFile.clear();
|
||||||
|
_fullTraversalRegexDir.clear();
|
||||||
|
_fullRegexFile.clear();
|
||||||
|
_fullRegexDir.clear();
|
||||||
|
|
||||||
bool success = true;
|
bool success = true;
|
||||||
foreach (const QString &file, _excludeFiles) {
|
for (const auto& basePath : _excludeFiles.keys()) {
|
||||||
QFile f(file);
|
for (const auto& file : _excludeFiles.value(basePath)) {
|
||||||
if (!f.open(QIODevice::ReadOnly)) {
|
success = loadExcludeFile(basePath, file);
|
||||||
success = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
while (!f.atEnd()) {
|
|
||||||
QByteArray line = f.readLine().trimmed();
|
|
||||||
if (line.isEmpty() || line.startsWith('#'))
|
|
||||||
continue;
|
|
||||||
csync_exclude_expand_escapes(line);
|
|
||||||
_allExcludes.append(line);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_allExcludes.append(_manualExcludes);
|
|
||||||
prepare();
|
auto endManual = _manualExcludes.cend();
|
||||||
|
for (auto kv = _manualExcludes.cbegin(); kv != endManual; ++kv) {
|
||||||
|
_allExcludes[kv.key()].append(kv.value());
|
||||||
|
prepare(kv.key());
|
||||||
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,13 +371,15 @@ bool ExcludedFiles::isExcluded(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO this seems a waste, hidden files are ignored before hitting this function it seems
|
||||||
if (excludeHidden) {
|
if (excludeHidden) {
|
||||||
QString path = filePath;
|
QString path = filePath;
|
||||||
// Check all path subcomponents, but to *not* check the base path:
|
// Check all path subcomponents, but to *not* check the base path:
|
||||||
// We do want to be able to sync with a hidden folder as the target.
|
// We do want to be able to sync with a hidden folder as the target.
|
||||||
while (path.size() > basePath.size()) {
|
while (path.size() > basePath.size()) {
|
||||||
QFileInfo fi(path);
|
QFileInfo fi(path);
|
||||||
if (fi.isHidden() || fi.fileName().startsWith(QLatin1Char('.'))) {
|
if (fi.fileName() != ".sync-exclude.lst"
|
||||||
|
&& (fi.isHidden() || fi.fileName().startsWith(QLatin1Char('.')))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,7 +402,7 @@ bool ExcludedFiles::isExcluded(
|
|||||||
return fullPatternMatch(relativePath.toUtf8(), type) != CSYNC_NOT_EXCLUDED;
|
return fullPatternMatch(relativePath.toUtf8(), type) != CSYNC_NOT_EXCLUDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSYNC_EXCLUDE_TYPE ExcludedFiles::traversalPatternMatch(const char *path, ItemType filetype) const
|
CSYNC_EXCLUDE_TYPE ExcludedFiles::traversalPatternMatch(const char *path, ItemType filetype)
|
||||||
{
|
{
|
||||||
auto match = _csync_excluded_common(path, _excludeConflictFiles);
|
auto match = _csync_excluded_common(path, _excludeConflictFiles);
|
||||||
if (match != CSYNC_NOT_EXCLUDED)
|
if (match != CSYNC_NOT_EXCLUDED)
|
||||||
@@ -348,6 +410,15 @@ CSYNC_EXCLUDE_TYPE ExcludedFiles::traversalPatternMatch(const char *path, ItemTy
|
|||||||
if (_allExcludes.isEmpty())
|
if (_allExcludes.isEmpty())
|
||||||
return CSYNC_NOT_EXCLUDED;
|
return CSYNC_NOT_EXCLUDED;
|
||||||
|
|
||||||
|
// Directories are guaranteed to be visited before their files
|
||||||
|
if (filetype == ItemTypeDirectory) {
|
||||||
|
QFileInfo fi = QFileInfo(_localPath + path + "/.sync-exclude.lst");
|
||||||
|
if (fi.isReadable()) {
|
||||||
|
addInTreeExcludeFilePath(fi.absoluteFilePath());
|
||||||
|
loadExcludeFile(fi.absolutePath().toUtf8(), fi.absoluteFilePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check the bname part of the path to see whether the full
|
// Check the bname part of the path to see whether the full
|
||||||
// regex should be run.
|
// regex should be run.
|
||||||
|
|
||||||
@@ -359,35 +430,53 @@ CSYNC_EXCLUDE_TYPE ExcludedFiles::traversalPatternMatch(const char *path, ItemTy
|
|||||||
}
|
}
|
||||||
QString bnameStr = QString::fromUtf8(bname);
|
QString bnameStr = QString::fromUtf8(bname);
|
||||||
|
|
||||||
QRegularExpressionMatch m;
|
QByteArray basePath(_localPath.toUtf8() + path);
|
||||||
if (filetype == ItemTypeDirectory) {
|
while (basePath.size() > _localPath.size()) {
|
||||||
m = _bnameTraversalRegexDir.match(bnameStr);
|
basePath = leftIncludeLast(basePath, '/');
|
||||||
} else {
|
QRegularExpressionMatch m;
|
||||||
m = _bnameTraversalRegexFile.match(bnameStr);
|
if (filetype == ItemTypeDirectory
|
||||||
}
|
&& _bnameTraversalRegexDir.contains(basePath)) {
|
||||||
if (!m.hasMatch())
|
m = _bnameTraversalRegexDir[basePath].match(bnameStr);
|
||||||
return CSYNC_NOT_EXCLUDED;
|
} else if (filetype == ItemTypeFile
|
||||||
if (m.capturedStart(QStringLiteral("exclude")) != -1) {
|
&& _bnameTraversalRegexFile.contains(basePath)) {
|
||||||
return CSYNC_FILE_EXCLUDE_LIST;
|
m = _bnameTraversalRegexFile[basePath].match(bnameStr);
|
||||||
} else if (m.capturedStart(QStringLiteral("excluderemove")) != -1) {
|
} else {
|
||||||
return CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// third capture: full path matching is triggered
|
if (!m.hasMatch())
|
||||||
QString pathStr = QString::fromUtf8(path);
|
return CSYNC_NOT_EXCLUDED;
|
||||||
|
|
||||||
if (filetype == ItemTypeDirectory) {
|
|
||||||
m = _fullTraversalRegexDir.match(pathStr);
|
|
||||||
} else {
|
|
||||||
m = _fullTraversalRegexFile.match(pathStr);
|
|
||||||
}
|
|
||||||
if (m.hasMatch()) {
|
|
||||||
if (m.capturedStart(QStringLiteral("exclude")) != -1) {
|
if (m.capturedStart(QStringLiteral("exclude")) != -1) {
|
||||||
return CSYNC_FILE_EXCLUDE_LIST;
|
return CSYNC_FILE_EXCLUDE_LIST;
|
||||||
} else if (m.capturedStart(QStringLiteral("excluderemove")) != -1) {
|
} else if (m.capturedStart(QStringLiteral("excluderemove")) != -1) {
|
||||||
return CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
return CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// third capture: full path matching is triggered
|
||||||
|
QString pathStr = QString::fromUtf8(path);
|
||||||
|
basePath = _localPath.toUtf8() + path;
|
||||||
|
while (basePath.size() > _localPath.size()) {
|
||||||
|
basePath = leftIncludeLast(basePath, '/');
|
||||||
|
QRegularExpressionMatch m;
|
||||||
|
if (filetype == ItemTypeDirectory
|
||||||
|
&& _fullTraversalRegexDir.contains(basePath)) {
|
||||||
|
m = _fullTraversalRegexDir[basePath].match(pathStr);
|
||||||
|
} else if (filetype == ItemTypeFile
|
||||||
|
&& _fullTraversalRegexFile.contains(basePath)) {
|
||||||
|
m = _fullTraversalRegexFile[basePath].match(pathStr);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.hasMatch()) {
|
||||||
|
if (m.capturedStart(QStringLiteral("exclude")) != -1) {
|
||||||
|
return CSYNC_FILE_EXCLUDE_LIST;
|
||||||
|
} else if (m.capturedStart(QStringLiteral("excluderemove")) != -1) {
|
||||||
|
return CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return CSYNC_NOT_EXCLUDED;
|
return CSYNC_NOT_EXCLUDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,23 +489,38 @@ CSYNC_EXCLUDE_TYPE ExcludedFiles::fullPatternMatch(const char *path, ItemType fi
|
|||||||
return CSYNC_NOT_EXCLUDED;
|
return CSYNC_NOT_EXCLUDED;
|
||||||
|
|
||||||
QString p = QString::fromUtf8(path);
|
QString p = QString::fromUtf8(path);
|
||||||
QRegularExpressionMatch m;
|
// `path` seems to always be relative to `_localPath`, the tests however have not been
|
||||||
if (filetype == ItemTypeDirectory) {
|
// written that way... this makes the tests happy for now. TODO Fix the tests at some point
|
||||||
m = _fullRegexDir.match(p);
|
if (path[0] == '/')
|
||||||
} else {
|
++path;
|
||||||
m = _fullRegexFile.match(p);
|
|
||||||
}
|
QByteArray basePath(_localPath.toUtf8() + path);
|
||||||
if (m.hasMatch()) {
|
while (basePath.size() > _localPath.size()) {
|
||||||
if (m.capturedStart(QStringLiteral("exclude")) != -1) {
|
basePath = leftIncludeLast(basePath, '/');
|
||||||
return CSYNC_FILE_EXCLUDE_LIST;
|
QRegularExpressionMatch m;
|
||||||
} else if (m.capturedStart(QStringLiteral("excluderemove")) != -1) {
|
if (filetype == ItemTypeDirectory
|
||||||
return CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
&& _fullRegexDir.contains(basePath)) {
|
||||||
|
m = _fullRegexDir[basePath].match(p);
|
||||||
|
} else if (filetype == ItemTypeFile
|
||||||
|
&& _fullRegexFile.contains(basePath)) {
|
||||||
|
m = _fullRegexFile[basePath].match(p);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.hasMatch()) {
|
||||||
|
if (m.capturedStart(QStringLiteral("exclude")) != -1) {
|
||||||
|
return CSYNC_FILE_EXCLUDE_LIST;
|
||||||
|
} else if (m.capturedStart(QStringLiteral("excluderemove")) != -1) {
|
||||||
|
return CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CSYNC_NOT_EXCLUDED;
|
return CSYNC_NOT_EXCLUDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ExcludedFiles::csyncTraversalMatchFun() const
|
auto ExcludedFiles::csyncTraversalMatchFun()
|
||||||
-> std::function<CSYNC_EXCLUDE_TYPE(const char *path, ItemType filetype)>
|
-> std::function<CSYNC_EXCLUDE_TYPE(const char *path, ItemType filetype)>
|
||||||
{
|
{
|
||||||
return [this](const char *path, ItemType filetype) { return this->traversalPatternMatch(path, filetype); };
|
return [this](const char *path, ItemType filetype) { return this->traversalPatternMatch(path, filetype); };
|
||||||
@@ -555,6 +659,22 @@ static QString extractBnameTrigger(const QString &exclude, bool wildcardsMatchSl
|
|||||||
|
|
||||||
void ExcludedFiles::prepare()
|
void ExcludedFiles::prepare()
|
||||||
{
|
{
|
||||||
|
// clear all regex
|
||||||
|
_bnameTraversalRegexFile.clear();
|
||||||
|
_bnameTraversalRegexDir.clear();
|
||||||
|
_fullTraversalRegexFile.clear();
|
||||||
|
_fullTraversalRegexDir.clear();
|
||||||
|
_fullRegexFile.clear();
|
||||||
|
_fullRegexDir.clear();
|
||||||
|
|
||||||
|
for (auto const & basePath : _allExcludes.keys())
|
||||||
|
prepare(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExcludedFiles::prepare(const BasePathByteArray & basePath)
|
||||||
|
{
|
||||||
|
Q_ASSERT(_allExcludes.contains(basePath));
|
||||||
|
|
||||||
// Build regular expressions for the different cases.
|
// Build regular expressions for the different cases.
|
||||||
//
|
//
|
||||||
// To compose the _bnameTraversalRegex, _fullTraversalRegex and _fullRegex
|
// To compose the _bnameTraversalRegex, _fullTraversalRegex and _fullRegex
|
||||||
@@ -596,7 +716,7 @@ void ExcludedFiles::prepare()
|
|||||||
pattern.append(appendMe);
|
pattern.append(appendMe);
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto exclude : _allExcludes) {
|
for (auto exclude : _allExcludes.value(basePath)) {
|
||||||
if (exclude[0] == '\n')
|
if (exclude[0] == '\n')
|
||||||
continue; // empty line
|
continue; // empty line
|
||||||
if (exclude[0] == '\r')
|
if (exclude[0] == '\r')
|
||||||
@@ -618,6 +738,15 @@ void ExcludedFiles::prepare()
|
|||||||
auto &fullFileDir = removeExcluded ? fullFileDirRemove : fullFileDirKeep;
|
auto &fullFileDir = removeExcluded ? fullFileDirRemove : fullFileDirKeep;
|
||||||
auto &fullDir = removeExcluded ? fullDirRemove : fullDirKeep;
|
auto &fullDir = removeExcluded ? fullDirRemove : fullDirKeep;
|
||||||
|
|
||||||
|
if (fullPath) {
|
||||||
|
// The full pattern is matched against a path relative to _localPath, however exclude is
|
||||||
|
// relative to basePath at this point.
|
||||||
|
// We know for sure that both _localPath and basePath are absolute and that basePath is
|
||||||
|
// contained in _localPath. So we can simply remove it from the begining.
|
||||||
|
auto relPath = basePath.mid(_localPath.size());
|
||||||
|
// Make exclude relative to _localPath
|
||||||
|
exclude.prepend(relPath);
|
||||||
|
}
|
||||||
auto regexExclude = convertToRegexpSyntax(QString::fromUtf8(exclude), _wildcardsMatchSlash);
|
auto regexExclude = convertToRegexpSyntax(QString::fromUtf8(exclude), _wildcardsMatchSlash);
|
||||||
if (!fullPath) {
|
if (!fullPath) {
|
||||||
regexAppend(bnameFileDir, bnameDir, regexExclude, matchDirOnly);
|
regexAppend(bnameFileDir, bnameDir, regexExclude, matchDirOnly);
|
||||||
@@ -654,11 +783,11 @@ void ExcludedFiles::prepare()
|
|||||||
// (exclude)|(excluderemove)|(bname triggers).
|
// (exclude)|(excluderemove)|(bname triggers).
|
||||||
// If the third group matches, the fullActivatedRegex needs to be applied
|
// If the third group matches, the fullActivatedRegex needs to be applied
|
||||||
// to the full path.
|
// to the full path.
|
||||||
_bnameTraversalRegexFile.setPattern(
|
_bnameTraversalRegexFile[basePath].setPattern(
|
||||||
"^(?P<exclude>" + bnameFileDirKeep + ")$|"
|
"^(?P<exclude>" + bnameFileDirKeep + ")$|"
|
||||||
+ "^(?P<excluderemove>" + bnameFileDirRemove + ")$|"
|
+ "^(?P<excluderemove>" + bnameFileDirRemove + ")$|"
|
||||||
+ "^(?P<trigger>" + bnameTriggerFileDir + ")$");
|
+ "^(?P<trigger>" + bnameTriggerFileDir + ")$");
|
||||||
_bnameTraversalRegexDir.setPattern(
|
_bnameTraversalRegexDir[basePath].setPattern(
|
||||||
"^(?P<exclude>" + bnameFileDirKeep + "|" + bnameDirKeep + ")$|"
|
"^(?P<exclude>" + bnameFileDirKeep + "|" + bnameDirKeep + ")$|"
|
||||||
+ "^(?P<excluderemove>" + bnameFileDirRemove + "|" + bnameDirRemove + ")$|"
|
+ "^(?P<excluderemove>" + bnameFileDirRemove + "|" + bnameDirRemove + ")$|"
|
||||||
+ "^(?P<trigger>" + bnameTriggerFileDir + "|" + bnameTriggerDir + ")$");
|
+ "^(?P<trigger>" + bnameTriggerFileDir + "|" + bnameTriggerDir + ")$");
|
||||||
@@ -667,13 +796,13 @@ void ExcludedFiles::prepare()
|
|||||||
// the bname regex matches. Its basic form is (exclude)|(excluderemove)".
|
// the bname regex matches. Its basic form is (exclude)|(excluderemove)".
|
||||||
// This pattern can be much simpler than fullRegex since we can assume a traversal
|
// This pattern can be much simpler than fullRegex since we can assume a traversal
|
||||||
// situation and doesn't need to look for bname patterns in parent paths.
|
// situation and doesn't need to look for bname patterns in parent paths.
|
||||||
_fullTraversalRegexFile.setPattern(
|
_fullTraversalRegexFile[basePath].setPattern(
|
||||||
QLatin1String("")
|
QLatin1String("")
|
||||||
// Full patterns are anchored to the beginning
|
// Full patterns are anchored to the beginning
|
||||||
+ "^(?P<exclude>" + fullFileDirKeep + ")(?:$|/)"
|
+ "^(?P<exclude>" + fullFileDirKeep + ")(?:$|/)"
|
||||||
+ "|"
|
+ "|"
|
||||||
+ "^(?P<excluderemove>" + fullFileDirRemove + ")(?:$|/)");
|
+ "^(?P<excluderemove>" + fullFileDirRemove + ")(?:$|/)");
|
||||||
_fullTraversalRegexDir.setPattern(
|
_fullTraversalRegexDir[basePath].setPattern(
|
||||||
QLatin1String("")
|
QLatin1String("")
|
||||||
+ "^(?P<exclude>" + fullFileDirKeep + "|" + fullDirKeep + ")(?:$|/)"
|
+ "^(?P<exclude>" + fullFileDirKeep + "|" + fullDirKeep + ")(?:$|/)"
|
||||||
+ "|"
|
+ "|"
|
||||||
@@ -681,7 +810,7 @@ void ExcludedFiles::prepare()
|
|||||||
|
|
||||||
// The full regex is applied to the full path and incorporates both bname and
|
// The full regex is applied to the full path and incorporates both bname and
|
||||||
// full-path patterns. It has the form "(exclude)|(excluderemove)".
|
// full-path patterns. It has the form "(exclude)|(excluderemove)".
|
||||||
_fullRegexFile.setPattern(
|
_fullRegexFile[basePath].setPattern(
|
||||||
QLatin1String("(?P<exclude>")
|
QLatin1String("(?P<exclude>")
|
||||||
// Full patterns are anchored to the beginning
|
// Full patterns are anchored to the beginning
|
||||||
+ "^(?:" + fullFileDirKeep + ")(?:$|/)" + "|"
|
+ "^(?:" + fullFileDirKeep + ")(?:$|/)" + "|"
|
||||||
@@ -697,7 +826,7 @@ void ExcludedFiles::prepare()
|
|||||||
+ "(?:^|/)(?:" + bnameFileDirRemove + ")(?:$|/)" + "|"
|
+ "(?:^|/)(?:" + bnameFileDirRemove + ")(?:$|/)" + "|"
|
||||||
+ "(?:^|/)(?:" + bnameDirRemove + ")/"
|
+ "(?:^|/)(?:" + bnameDirRemove + ")/"
|
||||||
+ ")");
|
+ ")");
|
||||||
_fullRegexDir.setPattern(
|
_fullRegexDir[basePath].setPattern(
|
||||||
QLatin1String("(?P<exclude>")
|
QLatin1String("(?P<exclude>")
|
||||||
+ "^(?:" + fullFileDirKeep + "|" + fullDirKeep + ")(?:$|/)" + "|"
|
+ "^(?:" + fullFileDirKeep + "|" + fullDirKeep + ")(?:$|/)" + "|"
|
||||||
+ "(?:^|/)(?:" + bnameFileDirKeep + "|" + bnameDirKeep + ")(?:$|/)"
|
+ "(?:^|/)(?:" + bnameFileDirKeep + "|" + bnameDirKeep + ")(?:$|/)"
|
||||||
@@ -711,16 +840,16 @@ void ExcludedFiles::prepare()
|
|||||||
QRegularExpression::PatternOptions patternOptions = QRegularExpression::NoPatternOption;
|
QRegularExpression::PatternOptions patternOptions = QRegularExpression::NoPatternOption;
|
||||||
if (OCC::Utility::fsCasePreserving())
|
if (OCC::Utility::fsCasePreserving())
|
||||||
patternOptions |= QRegularExpression::CaseInsensitiveOption;
|
patternOptions |= QRegularExpression::CaseInsensitiveOption;
|
||||||
_bnameTraversalRegexFile.setPatternOptions(patternOptions);
|
_bnameTraversalRegexFile[basePath].setPatternOptions(patternOptions);
|
||||||
_bnameTraversalRegexFile.optimize();
|
_bnameTraversalRegexFile[basePath].optimize();
|
||||||
_bnameTraversalRegexDir.setPatternOptions(patternOptions);
|
_bnameTraversalRegexDir[basePath].setPatternOptions(patternOptions);
|
||||||
_bnameTraversalRegexDir.optimize();
|
_bnameTraversalRegexDir[basePath].optimize();
|
||||||
_fullTraversalRegexFile.setPatternOptions(patternOptions);
|
_fullTraversalRegexFile[basePath].setPatternOptions(patternOptions);
|
||||||
_fullTraversalRegexFile.optimize();
|
_fullTraversalRegexFile[basePath].optimize();
|
||||||
_fullTraversalRegexDir.setPatternOptions(patternOptions);
|
_fullTraversalRegexDir[basePath].setPatternOptions(patternOptions);
|
||||||
_fullTraversalRegexDir.optimize();
|
_fullTraversalRegexDir[basePath].optimize();
|
||||||
_fullRegexFile.setPatternOptions(patternOptions);
|
_fullRegexFile[basePath].setPatternOptions(patternOptions);
|
||||||
_fullRegexFile.optimize();
|
_fullRegexFile[basePath].optimize();
|
||||||
_fullRegexDir.setPatternOptions(patternOptions);
|
_fullRegexDir[basePath].setPatternOptions(patternOptions);
|
||||||
_fullRegexDir.optimize();
|
_fullRegexDir[basePath].optimize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class OCSYNC_EXPORT ExcludedFiles : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ExcludedFiles();
|
ExcludedFiles(QString localPath = "/");
|
||||||
~ExcludedFiles();
|
~ExcludedFiles();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,6 +75,7 @@ public:
|
|||||||
* Does not load the file. Use reloadExcludeFiles() afterwards.
|
* Does not load the file. Use reloadExcludeFiles() afterwards.
|
||||||
*/
|
*/
|
||||||
void addExcludeFilePath(const QString &path);
|
void addExcludeFilePath(const QString &path);
|
||||||
|
void addInTreeExcludeFilePath(const QString &path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether conflict files shall be excluded.
|
* Whether conflict files shall be excluded.
|
||||||
@@ -95,12 +96,13 @@ public:
|
|||||||
bool excludeHidden) const;
|
bool excludeHidden) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an exclude pattern.
|
* Adds an exclude pattern anchored to base path
|
||||||
*
|
*
|
||||||
* Primarily used in tests. Patterns added this way are preserved when
|
* Primarily used in tests. Patterns added this way are preserved when
|
||||||
* reloadExcludeFiles() is called.
|
* reloadExcludeFiles() is called.
|
||||||
*/
|
*/
|
||||||
void addManualExclude(const QByteArray &expr);
|
void addManualExclude(const QByteArray &expr);
|
||||||
|
void addManualExclude(const QByteArray &expr, const QByteArray &basePath);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all manually added exclude patterns.
|
* Removes all manually added exclude patterns.
|
||||||
@@ -121,7 +123,7 @@ public:
|
|||||||
* Careful: The function will only be valid for as long as this
|
* Careful: The function will only be valid for as long as this
|
||||||
* ExcludedFiles instance stays alive.
|
* ExcludedFiles instance stays alive.
|
||||||
*/
|
*/
|
||||||
auto csyncTraversalMatchFun() const
|
auto csyncTraversalMatchFun()
|
||||||
-> std::function<CSYNC_EXCLUDE_TYPE(const char *path, ItemType filetype)>;
|
-> std::function<CSYNC_EXCLUDE_TYPE(const char *path, ItemType filetype)>;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
@@ -129,6 +131,10 @@ public slots:
|
|||||||
* Reloads the exclude patterns from the registered paths.
|
* Reloads the exclude patterns from the registered paths.
|
||||||
*/
|
*/
|
||||||
bool reloadExcludeFiles();
|
bool reloadExcludeFiles();
|
||||||
|
/**
|
||||||
|
* Loads the exclude patterns from file the registered base paths.
|
||||||
|
*/
|
||||||
|
bool loadExcludeFile(const QByteArray & basePath, const QString & file);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
@@ -156,10 +162,32 @@ private:
|
|||||||
* Note that this only matches patterns. It does not check whether the file
|
* Note that this only matches patterns. It does not check whether the file
|
||||||
* or directory pointed to is hidden (or whether it even exists).
|
* or directory pointed to is hidden (or whether it even exists).
|
||||||
*/
|
*/
|
||||||
CSYNC_EXCLUDE_TYPE traversalPatternMatch(const char *path, ItemType filetype) const;
|
CSYNC_EXCLUDE_TYPE traversalPatternMatch(const char *path, ItemType filetype);
|
||||||
|
|
||||||
|
// Our BasePath need to end with '/'
|
||||||
|
class BasePathByteArray : public QByteArray
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BasePathByteArray(QByteArray && other)
|
||||||
|
: QByteArray(std::move(other))
|
||||||
|
{
|
||||||
|
Q_ASSERT(this->endsWith('/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
BasePathByteArray(const QByteArray & other)
|
||||||
|
: QByteArray(other)
|
||||||
|
{
|
||||||
|
Q_ASSERT(this->endsWith('/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
BasePathByteArray(const char * data, int size = -1)
|
||||||
|
: BasePathByteArray(QByteArray(data, size))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate optimized regular expressions for the exclude patterns.
|
* Generate optimized regular expressions for the exclude patterns anchored to basePath.
|
||||||
*
|
*
|
||||||
* The optimization works in two steps: First, all supported patterns are put
|
* The optimization works in two steps: First, all supported patterns are put
|
||||||
* into _fullRegexFile/_fullRegexDir. These regexes can be applied to the full
|
* into _fullRegexFile/_fullRegexDir. These regexes can be applied to the full
|
||||||
@@ -187,24 +215,28 @@ private:
|
|||||||
* full matcher would exclude. Example: "b" is excluded. traversal("b/c")
|
* full matcher would exclude. Example: "b" is excluded. traversal("b/c")
|
||||||
* returns not-excluded because "c" isn't a bname activation pattern.
|
* returns not-excluded because "c" isn't a bname activation pattern.
|
||||||
*/
|
*/
|
||||||
|
void prepare(const BasePathByteArray & basePath);
|
||||||
|
|
||||||
void prepare();
|
void prepare();
|
||||||
|
|
||||||
|
|
||||||
|
QString _localPath;
|
||||||
/// Files to load excludes from
|
/// Files to load excludes from
|
||||||
QSet<QString> _excludeFiles;
|
QMap<BasePathByteArray, QList<QString>> _excludeFiles;
|
||||||
|
|
||||||
/// Exclude patterns added with addManualExclude()
|
/// Exclude patterns added with addManualExclude()
|
||||||
QList<QByteArray> _manualExcludes;
|
QMap<BasePathByteArray, QList<QByteArray>> _manualExcludes;
|
||||||
|
|
||||||
/// List of all active exclude patterns
|
/// List of all active exclude patterns
|
||||||
QList<QByteArray> _allExcludes;
|
QMap<BasePathByteArray, QList<QByteArray>> _allExcludes;
|
||||||
|
|
||||||
/// see prepare()
|
/// see prepare()
|
||||||
QRegularExpression _bnameTraversalRegexFile;
|
QMap<BasePathByteArray, QRegularExpression> _bnameTraversalRegexFile;
|
||||||
QRegularExpression _bnameTraversalRegexDir;
|
QMap<BasePathByteArray, QRegularExpression> _bnameTraversalRegexDir;
|
||||||
QRegularExpression _fullTraversalRegexFile;
|
QMap<BasePathByteArray, QRegularExpression> _fullTraversalRegexFile;
|
||||||
QRegularExpression _fullTraversalRegexDir;
|
QMap<BasePathByteArray, QRegularExpression> _fullTraversalRegexDir;
|
||||||
QRegularExpression _fullRegexFile;
|
QMap<BasePathByteArray, QRegularExpression> _fullRegexFile;
|
||||||
QRegularExpression _fullRegexDir;
|
QMap<BasePathByteArray, QRegularExpression> _fullRegexDir;
|
||||||
|
|
||||||
bool _excludeConflictFiles = true;
|
bool _excludeConflictFiles = true;
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,9 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
|
|||||||
* because it's a hidden file that should not be synced.
|
* because it's a hidden file that should not be synced.
|
||||||
* This code should probably be in csync_exclude, but it does not have the fs parameter.
|
* This code should probably be in csync_exclude, but it does not have the fs parameter.
|
||||||
* Keep it here for now */
|
* Keep it here for now */
|
||||||
if (ctx->ignore_hidden_files && (fs->is_hidden)) {
|
if (ctx->ignore_hidden_files
|
||||||
|
&& fs->is_hidden
|
||||||
|
&& !fs->path.endsWith(".sync-exclude.lst")) {
|
||||||
qCInfo(lcUpdate, "file excluded because it is a hidden file: %s", fs->path.constData());
|
qCInfo(lcUpdate, "file excluded because it is a hidden file: %s", fs->path.constData());
|
||||||
excluded = CSYNC_FILE_EXCLUDE_HIDDEN;
|
excluded = CSYNC_FILE_EXCLUDE_HIDDEN;
|
||||||
}
|
}
|
||||||
@@ -722,7 +724,8 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
if (ctx->current == LOCAL_REPLICA) {
|
if (ctx->current == LOCAL_REPLICA) {
|
||||||
ASSERT(dirent->path.startsWith(ctx->local.uri)); // path is relative to uri
|
ASSERT(dirent->path.startsWith(ctx->local.uri)); // path is relative to uri
|
||||||
// "len + 1" to include the slash in-between.
|
// "len + 1" to include the slash in-between.
|
||||||
dirent->path = dirent->path.mid(strlen(ctx->local.uri) + 1);
|
size_t uriLength = strlen(ctx->local.uri);
|
||||||
|
dirent->path = dirent->path.mid(OCC::Utility::convertSizeToInt(uriLength) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
previous_fs = ctx->current_fs;
|
previous_fs = ctx->current_fs;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#include "c_alloc.h"
|
#include "c_alloc.h"
|
||||||
#include "c_string.h"
|
#include "c_string.h"
|
||||||
#include "common/filesystembase.h"
|
#include "common/filesystembase.h"
|
||||||
|
#include "common/utility.h"
|
||||||
|
|
||||||
/* Convert a locale String to UTF8 */
|
/* Convert a locale String to UTF8 */
|
||||||
QByteArray c_utf8_from_locale(const mbchar_t *wstr)
|
QByteArray c_utf8_from_locale(const mbchar_t *wstr)
|
||||||
@@ -52,10 +53,10 @@ QByteArray c_utf8_from_locale(const mbchar_t *wstr)
|
|||||||
size_t len;
|
size_t len;
|
||||||
len = wcslen(wstr);
|
len = wcslen(wstr);
|
||||||
/* Call once to get the required size. */
|
/* Call once to get the required size. */
|
||||||
size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr, len, NULL, 0, NULL, NULL);
|
size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr, OCC::Utility::convertSizeToInt(len), NULL, 0, NULL, NULL);
|
||||||
if (size_needed > 0) {
|
if (size_needed > 0) {
|
||||||
dst.resize(size_needed);
|
dst.resize(size_needed);
|
||||||
WideCharToMultiByte(CP_UTF8, 0, wstr, len, dst.data(), size_needed, NULL, NULL);
|
WideCharToMultiByte(CP_UTF8, 0, wstr, OCC::Utility::convertSizeToInt(len), dst.data(), size_needed, NULL, NULL);
|
||||||
}
|
}
|
||||||
return dst;
|
return dst;
|
||||||
#else
|
#else
|
||||||
@@ -95,7 +96,7 @@ mbchar_t* c_utf8_string_to_locale(const char *str)
|
|||||||
int size_needed;
|
int size_needed;
|
||||||
|
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
size_needed = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);
|
size_needed = MultiByteToWideChar(CP_UTF8, 0, str, OCC::Utility::convertSizeToInt(len), NULL, 0);
|
||||||
if (size_needed > 0) {
|
if (size_needed > 0) {
|
||||||
int size_char = (size_needed + 1) * sizeof(mbchar_t);
|
int size_char = (size_needed + 1) * sizeof(mbchar_t);
|
||||||
dst = (mbchar_t*)c_malloc(size_char);
|
dst = (mbchar_t*)c_malloc(size_char);
|
||||||
@@ -114,7 +115,8 @@ mbchar_t* c_utf8_string_to_locale(const char *str)
|
|||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
QByteArray unc_str = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(str, strlen(str)));
|
size_t strLength = strlen(str);
|
||||||
|
QByteArray unc_str = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(str, OCC::Utility::convertSizeToInt(strLength)));
|
||||||
mbchar_t *dst = c_utf8_string_to_locale(unc_str);
|
mbchar_t *dst = c_utf8_string_to_locale(unc_str);
|
||||||
return dst;
|
return dst;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
|||||||
handle = (dhandle_t*)c_malloc(sizeof(dhandle_t));
|
handle = (dhandle_t*)c_malloc(sizeof(dhandle_t));
|
||||||
|
|
||||||
// the file wildcard has to be attached
|
// the file wildcard has to be attached
|
||||||
int len_name = strlen(name);
|
size_t len_name = strlen(name);
|
||||||
if( len_name ) {
|
if( len_name ) {
|
||||||
char *h = NULL;
|
char *h = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project(gui)
|
project(gui)
|
||||||
find_package(Qt5 REQUIRED COMPONENTS Widgets)
|
find_package(Qt5 REQUIRED COMPONENTS Widgets Svg)
|
||||||
set(CMAKE_AUTOMOC TRUE)
|
set(CMAKE_AUTOMOC TRUE)
|
||||||
set(CMAKE_AUTOUIC TRUE)
|
set(CMAKE_AUTOUIC TRUE)
|
||||||
set(CMAKE_AUTORCC TRUE)
|
set(CMAKE_AUTORCC TRUE)
|
||||||
@@ -22,8 +22,8 @@ set(client_UI_SRCS
|
|||||||
generalsettings.ui
|
generalsettings.ui
|
||||||
legalnotice.ui
|
legalnotice.ui
|
||||||
ignorelisteditor.ui
|
ignorelisteditor.ui
|
||||||
|
ignorelisttablewidget.ui
|
||||||
networksettings.ui
|
networksettings.ui
|
||||||
activitywidget.ui
|
|
||||||
synclogdialog.ui
|
synclogdialog.ui
|
||||||
settingsdialog.ui
|
settingsdialog.ui
|
||||||
sharedialog.ui
|
sharedialog.ui
|
||||||
@@ -34,6 +34,9 @@ set(client_UI_SRCS
|
|||||||
addcertificatedialog.ui
|
addcertificatedialog.ui
|
||||||
proxyauthdialog.ui
|
proxyauthdialog.ui
|
||||||
mnemonicdialog.ui
|
mnemonicdialog.ui
|
||||||
|
tray/Window.qml
|
||||||
|
tray/UserLine.qml
|
||||||
|
wizard/flow2authwidget.ui
|
||||||
wizard/owncloudadvancedsetuppage.ui
|
wizard/owncloudadvancedsetuppage.ui
|
||||||
wizard/owncloudconnectionmethoddialog.ui
|
wizard/owncloudconnectionmethoddialog.ui
|
||||||
wizard/owncloudhttpcredspage.ui
|
wizard/owncloudhttpcredspage.ui
|
||||||
@@ -59,6 +62,7 @@ set(client_SRCS
|
|||||||
generalsettings.cpp
|
generalsettings.cpp
|
||||||
legalnotice.cpp
|
legalnotice.cpp
|
||||||
ignorelisteditor.cpp
|
ignorelisteditor.cpp
|
||||||
|
ignorelisttablewidget.cpp
|
||||||
lockwatcher.cpp
|
lockwatcher.cpp
|
||||||
logbrowser.cpp
|
logbrowser.cpp
|
||||||
navigationpanehelper.cpp
|
navigationpanehelper.cpp
|
||||||
@@ -70,10 +74,6 @@ set(client_SRCS
|
|||||||
openfilemanager.cpp
|
openfilemanager.cpp
|
||||||
owncloudgui.cpp
|
owncloudgui.cpp
|
||||||
owncloudsetupwizard.cpp
|
owncloudsetupwizard.cpp
|
||||||
activitydata.cpp
|
|
||||||
activitylistmodel.cpp
|
|
||||||
activitywidget.cpp
|
|
||||||
activityitemdelegate.cpp
|
|
||||||
selectivesyncdialog.cpp
|
selectivesyncdialog.cpp
|
||||||
settingsdialog.cpp
|
settingsdialog.cpp
|
||||||
sharedialog.cpp
|
sharedialog.cpp
|
||||||
@@ -96,13 +96,20 @@ set(client_SRCS
|
|||||||
synclogdialog.cpp
|
synclogdialog.cpp
|
||||||
tooltipupdater.cpp
|
tooltipupdater.cpp
|
||||||
notificationconfirmjob.cpp
|
notificationconfirmjob.cpp
|
||||||
servernotificationhandler.cpp
|
|
||||||
guiutility.cpp
|
guiutility.cpp
|
||||||
elidedlabel.cpp
|
elidedlabel.cpp
|
||||||
|
headerbanner.cpp
|
||||||
iconjob.cpp
|
iconjob.cpp
|
||||||
|
remotewipe.cpp
|
||||||
|
tray/ActivityData.cpp
|
||||||
|
tray/ActivityListModel.cpp
|
||||||
|
tray/UserModel.cpp
|
||||||
|
tray/NotificationHandler.cpp
|
||||||
creds/credentialsfactory.cpp
|
creds/credentialsfactory.cpp
|
||||||
creds/httpcredentialsgui.cpp
|
creds/httpcredentialsgui.cpp
|
||||||
creds/oauth.cpp
|
creds/oauth.cpp
|
||||||
|
creds/flow2auth.cpp
|
||||||
|
creds/keychainchunk.cpp
|
||||||
creds/webflowcredentials.cpp
|
creds/webflowcredentials.cpp
|
||||||
creds/webflowcredentialsdialog.cpp
|
creds/webflowcredentialsdialog.cpp
|
||||||
wizard/postfixlineedit.cpp
|
wizard/postfixlineedit.cpp
|
||||||
@@ -111,6 +118,8 @@ set(client_SRCS
|
|||||||
wizard/owncloudconnectionmethoddialog.cpp
|
wizard/owncloudconnectionmethoddialog.cpp
|
||||||
wizard/owncloudhttpcredspage.cpp
|
wizard/owncloudhttpcredspage.cpp
|
||||||
wizard/owncloudoauthcredspage.cpp
|
wizard/owncloudoauthcredspage.cpp
|
||||||
|
wizard/flow2authcredspage.cpp
|
||||||
|
wizard/flow2authwidget.cpp
|
||||||
wizard/owncloudsetuppage.cpp
|
wizard/owncloudsetuppage.cpp
|
||||||
wizard/owncloudwizardcommon.cpp
|
wizard/owncloudwizardcommon.cpp
|
||||||
wizard/owncloudwizard.cpp
|
wizard/owncloudwizard.cpp
|
||||||
@@ -137,8 +146,6 @@ set(updater_SRCS
|
|||||||
|
|
||||||
IF( APPLE )
|
IF( APPLE )
|
||||||
list(APPEND client_SRCS cocoainitializer_mac.mm)
|
list(APPEND client_SRCS cocoainitializer_mac.mm)
|
||||||
list(APPEND client_SRCS settingsdialogmac.cpp)
|
|
||||||
list(REMOVE_ITEM client_SRCS settingsdialog.cpp)
|
|
||||||
list(APPEND client_SRCS socketapisocket_mac.mm)
|
list(APPEND client_SRCS socketapisocket_mac.mm)
|
||||||
list(APPEND client_SRCS systray.mm)
|
list(APPEND client_SRCS systray.mm)
|
||||||
|
|
||||||
@@ -165,16 +172,9 @@ set(3rdparty_SRC
|
|||||||
../3rdparty/qtsingleapplication/qtlocalpeer.cpp
|
../3rdparty/qtsingleapplication/qtlocalpeer.cpp
|
||||||
../3rdparty/qtsingleapplication/qtsingleapplication.cpp
|
../3rdparty/qtsingleapplication/qtsingleapplication.cpp
|
||||||
../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp
|
../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp
|
||||||
|
../3rdparty/kmessagewidget/kmessagewidget.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
list(APPEND 3rdparty_SRC
|
|
||||||
../3rdparty/qtmacgoodies/src/macpreferenceswindow.mm
|
|
||||||
../3rdparty/qtmacgoodies/src/macstandardicon.mm
|
|
||||||
../3rdparty/qtmacgoodies/src/macwindow.mm
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
list(APPEND 3rdparty_SRC ../3rdparty/qtlockedfile/qtlockedfile_unix.cpp)
|
list(APPEND 3rdparty_SRC ../3rdparty/qtlockedfile/qtlockedfile_unix.cpp)
|
||||||
else()
|
else()
|
||||||
@@ -243,7 +243,7 @@ if(APPLE)
|
|||||||
file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*")
|
file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*")
|
||||||
MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}")
|
MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}")
|
||||||
endif()
|
endif()
|
||||||
ecm_add_app_icon(final_src ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASE "${APPLICATION_ICON_NAME}")
|
ecm_add_app_icon(final_src ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}")
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
|
||||||
@@ -265,6 +265,9 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
|
|||||||
endforeach(_file)
|
endforeach(_file)
|
||||||
install(FILES ${client_I18N} DESTINATION ${SHAREDIR}/${APPLICATION_EXECUTABLE}/i18n)
|
install(FILES ${client_I18N} DESTINATION ${SHAREDIR}/${APPLICATION_EXECUTABLE}/i18n)
|
||||||
else()
|
else()
|
||||||
|
file(GLOB_RECURSE VISUAL_ELEMENTS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-w10startmenu*")
|
||||||
|
install(FILES ${VISUAL_ELEMENTS} DESTINATION bin/visualelements)
|
||||||
|
install(FILES "${theme_dir}/${APPLICATION_EXECUTABLE}.VisualElementsManifest.xml" DESTINATION bin)
|
||||||
install(FILES ${client_I18N} DESTINATION i18n)
|
install(FILES ${client_I18N} DESTINATION i18n)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -295,7 +298,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(updater STATIC ${updater_SRCS})
|
add_library(updater STATIC ${updater_SRCS})
|
||||||
target_link_libraries(updater ${synclib_NAME} Qt5::Widgets Qt5::Network Qt5::Xml Qt5::WebEngineWidgets)
|
target_link_libraries(updater ${synclib_NAME} Qt5::Widgets Qt5::Svg Qt5::Network Qt5::Xml Qt5::WebEngineWidgets)
|
||||||
target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
|
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
|
||||||
@@ -305,7 +308,7 @@ set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
|
|||||||
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
|
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
|
||||||
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE};${CMAKE_INSTALL_RPATH}" )
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE};${CMAKE_INSTALL_RPATH}" )
|
||||||
|
|
||||||
target_link_libraries( ${APPLICATION_EXECUTABLE} Qt5::Widgets Qt5::Network Qt5::Xml)
|
target_link_libraries( ${APPLICATION_EXECUTABLE} Qt5::Widgets Qt5::Svg Qt5::Network Qt5::Xml)
|
||||||
target_link_libraries( ${APPLICATION_EXECUTABLE} ${synclib_NAME} )
|
target_link_libraries( ${APPLICATION_EXECUTABLE} ${synclib_NAME} )
|
||||||
target_link_libraries( ${APPLICATION_EXECUTABLE} updater )
|
target_link_libraries( ${APPLICATION_EXECUTABLE} updater )
|
||||||
target_link_libraries( ${APPLICATION_EXECUTABLE} ${OS_SPECIFIC_LINK_LIBRARIES} )
|
target_link_libraries( ${APPLICATION_EXECUTABLE} ${OS_SPECIFIC_LINK_LIBRARIES} )
|
||||||
@@ -327,8 +330,8 @@ ENDIF()
|
|||||||
target_include_directories(${APPLICATION_EXECUTABLE} PRIVATE
|
target_include_directories(${APPLICATION_EXECUTABLE} PRIVATE
|
||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator
|
${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator
|
||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
|
${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
|
||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/qtmacgoodies/src
|
|
||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
|
${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
|
||||||
|
${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -385,7 +388,7 @@ endif()
|
|||||||
|
|
||||||
if(NOT BUILD_OWNCLOUD_OSX_BUNDLE AND NOT WIN32)
|
if(NOT BUILD_OWNCLOUD_OSX_BUNDLE AND NOT WIN32)
|
||||||
configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in
|
configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.desktop)
|
${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop)
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.desktop DESTINATION ${DATADIR}/applications )
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${DATADIR}/applications )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -342,9 +342,6 @@ AccountPtr AccountManager::createAccount()
|
|||||||
connect(acc.data(), &Account::proxyAuthenticationRequired,
|
connect(acc.data(), &Account::proxyAuthenticationRequired,
|
||||||
ProxyAuthHandler::instance(), &ProxyAuthHandler::handleProxyAuthenticationRequired);
|
ProxyAuthHandler::instance(), &ProxyAuthHandler::handleProxyAuthenticationRequired);
|
||||||
|
|
||||||
connect(acc.data()->e2e(), &ClientSideEncryption::mnemonicGenerated,
|
|
||||||
&AccountManager::displayMnemonic);
|
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,12 +361,14 @@ void AccountManager::displayMnemonic(const QString& mnemonic)
|
|||||||
widget->exec();
|
widget->exec();
|
||||||
widget->resize(widget->sizeHint());
|
widget->resize(widget->sizeHint());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::shutdown()
|
void AccountManager::shutdown()
|
||||||
{
|
{
|
||||||
auto accountsCopy = _accounts;
|
auto accountsCopy = _accounts;
|
||||||
_accounts.clear();
|
_accounts.clear();
|
||||||
foreach (const auto &acc, accountsCopy) {
|
foreach (const auto &acc, accountsCopy) {
|
||||||
emit accountRemoved(acc.data());
|
emit accountRemoved(acc.data());
|
||||||
|
emit removeAccountFolders(acc.data());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
void deleteAccount(AccountState *account);
|
void deleteAccount(AccountState *account);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an account and sets up some basic handlers.
|
* Creates an account and sets up some basic handlers.
|
||||||
* Does *not* add the account to the account manager just yet.
|
* Does *not* add the account to the account manager just yet.
|
||||||
@@ -90,6 +89,9 @@ private:
|
|||||||
// Adds an account to the tracked list, emitting accountAdded()
|
// Adds an account to the tracked list, emitting accountAdded()
|
||||||
void addAccountState(AccountState *accountState);
|
void addAccountState(AccountState *accountState);
|
||||||
|
|
||||||
|
AccountManager() {}
|
||||||
|
QList<AccountStatePtr> _accounts;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/// Saves account data, not including the credentials
|
/// Saves account data, not including the credentials
|
||||||
void saveAccount(Account *a);
|
void saveAccount(Account *a);
|
||||||
@@ -104,9 +106,6 @@ public slots:
|
|||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void accountAdded(AccountState *account);
|
void accountAdded(AccountState *account);
|
||||||
void accountRemoved(AccountState *account);
|
void accountRemoved(AccountState *account);
|
||||||
|
void removeAccountFolders(AccountState *account);
|
||||||
private:
|
|
||||||
AccountManager() {}
|
|
||||||
QList<AccountStatePtr> _accounts;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||