1
0
mirror of https://github.com/chylex/Nextcloud-Desktop.git synced 2026-04-03 09:11:33 +02:00

Compare commits

...

150 Commits

Author SHA1 Message Date
Matthieu Gallien
e5447b5beb Merge pull request #3517 from nextcloud/bump-version-3.2.4
Bump version to 3.2.4
2021-07-06 17:39:42 +02:00
allexzander
94946c76db Bump version to 3.2.4
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-07-06 18:22:23 +03:00
Camila
0fd793d4a6 Merge pull request #3514 from nextcloud/backport/3501/stable-3.2
[stable-3.2] avoid error when doing hydration when data socket is closed too early
2021-07-06 16:34:15 +02:00
Matthieu Gallien
bb07a790d9 address review comments
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-07-06 14:26:35 +00:00
Matthieu Gallien
af12973a5f avoid error when doing hydration when data socket is closed too early
when data is received, if we close the socket they cannot be read

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-07-06 14:26:35 +00:00
Nextcloud bot
61cd31b44a [tx-robot] updated from transifex 2021-07-06 03:53:26 +00:00
Nextcloud bot
d6c1fc85fb [tx-robot] updated from transifex 2021-07-04 03:49:44 +00:00
Nextcloud bot
9c79aabdef [tx-robot] updated from transifex 2021-07-03 03:50:43 +00:00
Nextcloud bot
ad74cf9a83 [tx-robot] updated from transifex 2021-07-02 03:52:01 +00:00
Nextcloud bot
29faf92d73 [tx-robot] updated from transifex 2021-07-01 03:50:15 +00:00
Nextcloud bot
21100f7cbc [tx-robot] updated from transifex 2021-06-30 03:52:44 +00:00
Nextcloud bot
4a44ac168c [tx-robot] updated from transifex 2021-06-29 03:51:39 +00:00
Nextcloud bot
82ab76c4e4 [tx-robot] updated from transifex 2021-06-28 03:55:06 +00:00
Nextcloud bot
568e25a817 [tx-robot] updated from transifex 2021-06-27 03:52:57 +00:00
Nextcloud bot
0b90bc0464 [tx-robot] updated from transifex 2021-06-26 03:51:51 +00:00
István Váradi
aa1d76b780 Merge pull request #3485 from nextcloud/backport/3475/stable-3.2
[stable-3.2] Use the full GPG key ID for signing Debian packages
2021-06-25 08:08:04 +02:00
István Váradi
ed19515885 Use the full GPG key ID for signing Debian packages
Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
2021-06-25 05:59:52 +00:00
István Váradi
4e0f7d443f Merge pull request #3484 from nextcloud/backport/3464/stable-3.2
[stable-3.2] Add building for Ubuntu Impish
2021-06-25 07:58:12 +02:00
István Váradi
fd89e9a1e2 Add building for Ubuntu Impish
Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
2021-06-25 05:49:48 +00:00
Nextcloud bot
690d9803af [tx-robot] updated from transifex 2021-06-25 03:53:11 +00:00
allexzander
58cd94e636 Merge pull request #3480 from nextcloud/backport/3352/stable-3.2
[stable-3.2] Bugfix. Crash when printing OpenSSL decryption errors with no e2ee mnemonic,
2021-06-24 14:41:01 +03:00
Matthieu Gallien
bd337320e3 Merge pull request #3482 from nextcloud/bump-version-3.2.3
Bump versio to 3.2.3
2021-06-24 12:04:33 +02:00
Felix Weilbach
8b6c86a305 Bump versio to 3.2.3
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-06-24 12:01:34 +02:00
allexzander
b16cc929de Fix review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-24 09:05:57 +00:00
allexzander
6a6c22d34d Bugfix. Crash when printing OpenSSL decryption errors with no e2ee mnemonic.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-24 09:05:57 +00:00
Nextcloud bot
81e3474f84 [tx-robot] updated from transifex 2021-06-24 03:53:10 +00:00
Nextcloud bot
9b8b1bf5c8 [tx-robot] updated from transifex 2021-06-23 03:53:53 +00:00
Nextcloud bot
385468d4b2 [tx-robot] updated from transifex 2021-06-22 03:55:27 +00:00
Felix Weilbach
4585411400 Merge pull request #3466 from nextcloud/backport/3395/stable-3.2
[stable-3.2] Generate png icons with inkscape
2021-06-21 13:38:57 +02:00
Felix Weilbach
1f3e1dce1c Generate application png icons from svg icons
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-06-21 12:13:02 +02:00
Felix Weilbach
cdb2647cbf Remove conditional logic for OEM.cmake
This file is not used in Brander and in the desktop client and just
confused people.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-06-21 07:22:13 +00:00
Nextcloud bot
871b07ca70 [tx-robot] updated from transifex 2021-06-21 03:57:01 +00:00
Nextcloud bot
9ce279b68a [tx-robot] updated from transifex 2021-06-20 03:57:09 +00:00
Nextcloud bot
b009c287c4 [tx-robot] updated from transifex 2021-06-19 04:19:56 +00:00
Felix Weilbach
4bbd96de14 Merge pull request #3453 from nextcloud/backport/3420/stable-3.2
[stable-3.2] Cfapi: Make sure no data is transfered after cancellation
2021-06-18 15:22:53 +02:00
Felix Weilbach
aa5c1837fc Cfapi: Make sure no data is transfered after cancellation
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-06-18 07:12:52 +00:00
Nextcloud bot
e44d6555fa [tx-robot] updated from transifex 2021-06-18 04:00:57 +00:00
Nextcloud bot
ad5d8430e9 [tx-robot] updated from transifex 2021-06-17 03:58:12 +00:00
Nextcloud bot
5743354315 [tx-robot] updated from transifex 2021-06-16 03:56:32 +00:00
Felix Weilbach
a79d9f58ca Merge pull request #3439 from nextcloud/backport/3432/stable-3.2
[stable-3.2] Set pin state correct after rename
2021-06-14 16:40:42 +02:00
Felix Weilbach
958e4e08d9 Mark placeholder in sync after updating the placeholder
Fixes #3403 #3082 #3391

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-06-14 14:11:39 +00:00
Nextcloud bot
edf1615942 [tx-robot] updated from transifex 2021-06-14 03:54:57 +00:00
Nextcloud bot
60f66a63ae [tx-robot] updated from transifex 2021-06-13 03:55:18 +00:00
Nextcloud bot
e9749e31a4 [tx-robot] updated from transifex 2021-06-12 03:56:05 +00:00
Nextcloud bot
678466109f [tx-robot] updated from transifex 2021-06-11 04:01:23 +00:00
Nextcloud bot
490d682934 [tx-robot] updated from transifex 2021-06-10 04:12:03 +00:00
Nextcloud bot
1bcf989189 [tx-robot] updated from transifex 2021-06-09 04:00:44 +00:00
allexzander
33fc880b44 Merge pull request #3415 from nextcloud/backport/3390/stable-3.2
[stable-3.2] VFS freeze fix. Treat .sync-exclude.lst as a non-virtual file always.
2021-06-08 14:55:00 +03:00
allexzander
83e5d2025b Fix review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-08 10:25:45 +00:00
allexzander
8ca35d977e Fix review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-08 10:25:45 +00:00
allexzander
9bd0af6ef2 Fix review comments. Also consider exclude.lst.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-08 10:25:45 +00:00
allexzander
29da163107 VFS freeze fix. Treat .sync-exclude.lst as a non-virtual file always.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-08 10:25:45 +00:00
Nextcloud bot
f027f7c9f9 [tx-robot] updated from transifex 2021-06-08 04:01:59 +00:00
allexzander
f3b8d29bc7 Merge pull request #3359 from nextcloud/backport/3290/stable-3.2
[stable-3.2] Temporary! Windows. VFS. Block Virtual Files for partition root sync folders.
2021-06-07 18:06:53 +03:00
allexzander
16a58db75d Temporary! Windows. VFS. Block Virtual Files for partition root sync folders.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-07 14:14:16 +00:00
Nextcloud bot
22c3ce1c1e [tx-robot] updated from transifex 2021-06-06 03:59:35 +00:00
Nextcloud bot
1646e7b461 [tx-robot] updated from transifex 2021-06-05 04:02:26 +00:00
Nextcloud bot
f53d24a703 [tx-robot] updated from transifex 2021-06-04 04:06:55 +00:00
Nextcloud bot
fb260d6560 [tx-robot] updated from transifex 2021-06-02 04:01:16 +00:00
Matthieu Gallien
4658c0ba84 Merge pull request #3375 from nextcloud/backport/3311/stable-3.2
[stable-3.2] Add remote folder prefix for renaming in a non-root local folder.
2021-06-01 15:13:03 +02:00
allexzander
0d77d7d850 Add remote folder prefix for renaming in a non-root local folder.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-01 11:50:28 +00:00
Nextcloud bot
24f80f14bd [tx-robot] updated from transifex 2021-06-01 04:00:53 +00:00
Nextcloud bot
095ca9e6d2 [tx-robot] updated from transifex 2021-05-30 03:59:03 +00:00
Nextcloud bot
35cb8dac79 [tx-robot] updated from transifex 2021-05-29 04:15:37 +00:00
Nextcloud bot
cd682817cb [tx-robot] updated from transifex 2021-05-28 04:02:42 +00:00
Matthieu Gallien
04afaa1fe6 Merge pull request #3373 from nextcloud/bump-version-3.2.2
Bump version to 3.2.2
2021-05-27 14:18:17 +02:00
Felix Weilbach
60f3b7781e Bump version to 3.2.2
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-05-27 14:14:50 +02:00
Nextcloud bot
c626033445 [tx-robot] updated from transifex 2021-05-27 04:00:48 +00:00
Nextcloud bot
76687ce8fd [tx-robot] updated from transifex 2021-05-26 04:04:32 +00:00
allexzander
7c987281cc Merge pull request #3357 from nextcloud/backport/3239/stable-3.2
[stable-3.2] VFS. Display local file name clash error when syncing in VFS mode.
2021-05-25 14:27:17 +03:00
allexzander
91dd481f1a VFS. Display local file name clash error when syncing in VFS mode.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-05-25 10:34:35 +00:00
allexzander
7b725f04e0 Merge pull request #3358 from nextcloud/backport/3246/stable-3.2
[stable-3.2] VFS. Allow dehydartion of readonly files. Preserve 'readonly' flag when creating a placeholder.
2021-05-25 13:33:28 +03:00
allexzander
0b776d2be2 Fix review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-05-25 07:58:00 +00:00
allexzander
7960aca617 VFS. Allow dehydartion of readonly files. Preserve 'readonly' flag when creating a placeholder.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-05-25 07:58:00 +00:00
Nextcloud bot
da4b016b7c [tx-robot] updated from transifex 2021-05-25 04:04:00 +00:00
Nextcloud bot
c82491ebe3 [tx-robot] updated from transifex 2021-05-24 03:57:52 +00:00
Nextcloud bot
025e4a600a [tx-robot] updated from transifex 2021-05-23 03:59:29 +00:00
Nextcloud bot
cb52e36e08 [tx-robot] updated from transifex 2021-05-22 04:03:25 +00:00
Nextcloud bot
f8b7d5bc84 [tx-robot] updated from transifex 2021-05-21 04:05:49 +00:00
Nextcloud bot
0b703ed518 [tx-robot] updated from transifex 2021-05-20 04:17:02 +00:00
Nextcloud bot
19aa80116f [tx-robot] updated from transifex 2021-05-19 04:17:29 +00:00
Nextcloud bot
faa5b2ef54 [tx-robot] updated from transifex 2021-05-18 03:59:47 +00:00
Matthieu Gallien
0778b2178f Merge pull request #3327 from nextcloud/backport/3308/stable-3.2
[stable-3.2] upgrade SQLite3 to 3.35.5
2021-05-17 12:18:02 +02:00
Matthieu Gallien
4f0a8995c2 upgrade SQLite3 to 3.35.5
Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-05-17 09:59:02 +00:00
Nextcloud bot
b5e5985fcb [tx-robot] updated from transifex 2021-05-17 03:58:32 +00:00
Nextcloud bot
705990291b [tx-robot] updated from transifex 2021-05-16 04:01:18 +00:00
Nextcloud bot
364e02bdb0 [tx-robot] updated from transifex 2021-05-15 04:02:31 +00:00
Nextcloud bot
981d94c139 [tx-robot] updated from transifex 2021-05-14 03:52:07 +00:00
Nextcloud bot
14ccfe831a [tx-robot] updated from transifex 2021-05-13 03:49:12 +00:00
Nextcloud bot
0e31d6fe57 [tx-robot] updated from transifex 2021-05-12 03:53:51 +00:00
Nextcloud bot
79128c51b7 [tx-robot] updated from transifex 2021-05-11 03:53:29 +00:00
Nextcloud bot
abf75cc80d [tx-robot] updated from transifex 2021-05-09 03:53:11 +00:00
Nextcloud bot
dd3e6a6ad0 [tx-robot] updated from transifex 2021-05-08 03:55:50 +00:00
Nextcloud bot
aaf4b1d2be [tx-robot] updated from transifex 2021-05-07 03:59:00 +00:00
Matthieu Gallien
9c6c6d82f0 Merge pull request #3273 from nextcloud/backport/3267/stable-3.2
[stable-3.2] send OS name and version to auto updater to allow selective upgrades
2021-05-06 14:28:57 +02:00
Matthieu Gallien
a559513912 send OS name and version to auto updater to allow selective upgrades
in order to be able to suuport legacy OS, also sends the OS name and
version

will be used to detect Windows 8.1 and similar legacy versions

Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-05-06 10:15:12 +00:00
Nextcloud bot
741231f3df [tx-robot] updated from transifex 2021-05-06 03:59:04 +00:00
Felix Weilbach
6cb5bdf2d1 Merge pull request #3264 from nextcloud/backport/3263/stable-3.2
[stable-3.2] Fallback to primary screen if screen under pointer not found
2021-05-05 12:26:58 +02:00
Felix Weilbach
104941e4bb Fallback to primary screen if screen under pointer not found
Fixes #3252

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-05-05 10:13:14 +00:00
Nextcloud bot
d7fb1ebc51 [tx-robot] updated from transifex 2021-05-05 04:07:32 +00:00
Nextcloud bot
c4fec24b23 [tx-robot] updated from transifex 2021-05-04 03:56:18 +00:00
Nextcloud bot
59595152c7 [tx-robot] updated from transifex 2021-05-03 03:54:12 +00:00
Nextcloud bot
5644fcb332 [tx-robot] updated from transifex 2021-05-02 03:53:14 +00:00
Nextcloud bot
d4322ed003 [tx-robot] updated from transifex 2021-05-01 03:56:59 +00:00
Nextcloud bot
046e19465f [tx-robot] updated from transifex 2021-04-30 03:58:24 +00:00
Nextcloud bot
28ccaff866 [tx-robot] updated from transifex 2021-04-29 03:58:27 +00:00
Matthieu Gallien
0a36214189 Merge pull request #3226 from nextcloud/release-3.2.1
update version to 3.2.1
2021-04-28 10:08:41 +02:00
Matthieu Gallien
5901a0f983 update version to 3.2.1
Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-28 09:38:14 +02:00
Nextcloud bot
7825cf7f86 [tx-robot] updated from transifex 2021-04-28 03:56:37 +00:00
Matthieu Gallien
d65611bcb7 Merge pull request #3219 from nextcloud/backport/3214/stable-3.2
[stable-3.2] update the news part of documentation with improvements from 3.2 release
2021-04-27 10:01:24 +02:00
Matthieu Gallien
c5f17a7f77 update the versions and date used in the doc generation
should no longer be necessary when this will come from cmake until that,
let's update it

Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-27 07:31:02 +00:00
Matthieu Gallien
4637ce7526 update the news part of documentation with improvements from 3.2 release
Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-27 07:31:02 +00:00
Nextcloud bot
c3ed9a9d65 [tx-robot] updated from transifex 2021-04-27 03:58:26 +00:00
Matthieu Gallien
6da0650c61 Merge pull request #3213 from nextcloud/backport/3170/stable-3.2
[stable-3.2] status wrong for directories when using vfs and nextcloud desktop 3.2.0
2021-04-26 16:27:43 +02:00
Matthieu Gallien
031f7c48a3 when files get hydrated indirectly through pinning, sets correct state
files that get downloaded not through an hydration request need to be
converted to placeholder

sets the expected state when converting them to placeholder files

 #3082

Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-26 13:57:23 +00:00
Matthieu Gallien
abb57d6202 prevent progress bar to appear after a download is finished with CfApi
when using Cloud Filter API with enabled VFS on Windows, a progress bar
stays visible for some time after hydration is completed. Not updating a
last time the progress bar prevents that.

Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-26 13:57:23 +00:00
Matthieu Gallien
1e309b71a6 Merge pull request #3212 from nextcloud/backport/3209/stable-3.2
[stable-3.2] add info in the installation page about the supported server versions
2021-04-26 15:56:02 +02:00
Matthieu Gallien
5a159d49d0 add info in the installation page about the supported server versions
Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-26 13:32:44 +00:00
Matthieu Gallien
1cc082cec5 Merge pull request #3211 from nextcloud/backport/3187/stable-3.2
[stable-3.2] fix errors when calling CfRegisterSyncRoot by setting more fields
2021-04-26 15:31:15 +02:00
Matthieu Gallien
149bfa9001 fix errors when calling CfRegisterSyncRoot by setting more fields
sets a reasonable size of the StructSize members in the struct passed to
CfRegisterSyncRoot function

Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-26 11:57:06 +00:00
Nextcloud bot
f660f923a3 [tx-robot] updated from transifex 2021-04-26 03:55:47 +00:00
Nextcloud bot
f7c4030463 [tx-robot] updated from transifex 2021-04-25 03:57:25 +00:00
Nextcloud bot
55c0cbde36 [tx-robot] updated from transifex 2021-04-24 03:57:30 +00:00
Nextcloud bot
3deb08a7fc [tx-robot] updated from transifex 2021-04-23 03:57:35 +00:00
Nextcloud bot
594b13ed6a [tx-robot] updated from transifex 2021-04-22 03:55:41 +00:00
Nextcloud bot
9cda48e0a6 [tx-robot] updated from transifex 2021-04-21 11:24:08 +00:00
Nextcloud bot
03117c0dcf [tx-robot] updated from transifex 2021-04-21 04:02:57 +00:00
Nextcloud bot
96dab4ff84 [tx-robot] updated from transifex 2021-04-21 03:56:21 +00:00
Nextcloud bot
7dfb6c300f [tx-robot] updated from transifex 2021-04-20 03:55:44 +00:00
Nextcloud bot
9a75fa5db5 [tx-robot] updated from transifex 2021-04-19 03:58:13 +00:00
Nextcloud bot
2272cb6c3a [tx-robot] updated from transifex 2021-04-18 03:52:06 +00:00
Nextcloud bot
e909add969 [tx-robot] updated from transifex 2021-04-17 03:54:02 +00:00
allexzander
33ea9ba00e Merge pull request #3151 from nextcloud/backport/3138/stable-3.2
[stable-3.2] Windows MSI. Do not allow installing Nextcloud client on < Windows 10 or < 1709
2021-04-16 17:15:05 +03:00
allexzander
f86fcc94d8 Minimum supported Windows 10, build 1709.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-16 13:44:03 +00:00
allexzander
443d8baf3a Merge pull request #3149 from nextcloud/backport/3125/stable-3.2
[stable-3.2] Display VFS sync folder within the navigation panel on Windows.
2021-04-16 16:42:12 +03:00
allexzander
c2e217352f Display VFS sync folder within the navigation panel on Windows.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-16 13:10:09 +00:00
Nextcloud bot
555c157cda [tx-robot] updated from transifex 2021-04-16 03:58:42 +00:00
allexzander
03466431be Merge pull request #3123 from nextcloud/backport/3066/stable-3.2
[stable-3.2] Temporary solution for file restoration issue due to failing the data…
2021-04-15 11:02:43 +03:00
allexzander
9b8115558d Temporary solution for file restoration issue due to failing the dataFingerprint on client.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-15 07:39:28 +00:00
Matthieu Gallien
8344969549 Merge pull request #3122 from nextcloud/backport/3046/stable-3.2
[stable-3.2] Do not schedule reboot when installing MSI in silent mode unless 'SCHEDULE_REBOOT is set.
2021-04-15 09:38:19 +02:00
allexzander
eed7fd73a3 Do not schedule reboot when installing MSI in silent mode unless 'SCHEDULE_REBOOT' is set.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-15 07:26:26 +00:00
Nextcloud bot
4c50ba294e [tx-robot] updated from transifex 2021-04-15 03:56:08 +00:00
Nextcloud bot
ec5be0f29a [tx-robot] updated from transifex 2021-04-14 03:58:28 +00:00
Nextcloud bot
f79f4f6783 [tx-robot] updated from transifex 2021-04-13 03:55:05 +00:00
Nextcloud bot
89919b6b33 [tx-robot] updated from transifex 2021-04-12 03:54:03 +00:00
Nextcloud bot
86e0ad4ec6 [tx-robot] updated from transifex 2021-04-11 03:52:34 +00:00
Nextcloud bot
328877c70b [tx-robot] updated from transifex 2021-04-10 04:05:30 +00:00
Matthieu Gallien
14fbf1b106 Merge pull request #3077 from nextcloud/backport/3075/stable-3.2
[stable-3.2] Embed version and icon into windows executable
2021-04-09 15:10:16 +02:00
Felix Weilbach
5f6236bd73 Embed version and icon into windows executable
These changes are necessary because of changing the compilation
process for the gui from a single executable to static lib +
executable in commit 0521dce174.
Otherwise the version and icon information will be lost.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-04-09 12:30:47 +00:00
Nextcloud bot
a3968bcc87 [tx-robot] updated from transifex 2021-04-09 03:54:31 +00:00
159 changed files with 83369 additions and 56083 deletions

View File

@@ -3,7 +3,7 @@ name: qt-5.12
steps:
- name: cmake
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -11,7 +11,7 @@ steps:
- cd /drone/build
- cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
- name: compile
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -19,7 +19,7 @@ steps:
- cd /drone/build
- make -j$(nproc)
- name: test
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -47,7 +47,7 @@ name: qt-5.12-clang
steps:
- name: cmake
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -55,7 +55,7 @@ steps:
- cd /drone/build
- cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
- name: compile
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -63,7 +63,7 @@ steps:
- cd /drone/build
- ninja
- name: test
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -73,7 +73,7 @@ steps:
- chown -R test:test .
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
- name: clang-tidy
image: nextcloudci/client-5.12:client-5.12-11
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
volumes:
- name: build
path: /drone/build
@@ -98,7 +98,7 @@ name: AppImage
steps:
- name: build
image: nextcloudci/client-5.12:client-5.12-9
image: ghcr.io/nextcloud/continuous-integration-client-appimage:client-appimage-1
environment:
CI_UPLOAD_GIT_TOKEN:
from_secret: CI_UPLOAD_GIT_TOKEN
@@ -120,7 +120,7 @@ name: Debian
steps:
- name: build
image: nextcloudci/client-debian-ci:client-debian-ci-2
image: ghcr.io/nextcloud/continuous-integration-client-debian:client-debian-3
commands:
- /bin/bash -c "./admin/linux/debian/drone-build.sh" || echo "[WARNING] Debian build failed but this is a non-blocking CI event"
environment:

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[bg_BG]=@APPLICATION_ICON_NAME@
Name[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
Comment[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
GenericName[bg_BG]=Синхронизиране на папка

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[br]=@APPLICATION_ICON_NAME@
Name[br]=@APPLICATION_NAME@ burev kempreet an implijer
Comment[br]=@APPLICATION_NAME@ burev kempreet an implijer
GenericName[br]=Tuliad kemprenan

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ca]=@APPLICATION_ICON_NAME@
Name[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
Name[ca]=@APPLICATION_NAME@ per a escriptori
Comment[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
GenericName[ca]=Sincronització de carpetes

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[cs_CZ]=@APPLICATION_ICON_NAME@
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
Name[cs_CZ]=@APPLICATION_NAME@ Desktop
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
GenericName[cs_CZ]=Synchronizace složek

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# 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

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[da]=@APPLICATION_ICON_NAME@
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
Name[da]=Skrivebordsklient til @APPLICATION_NAME@
Comment[da]=Klient til @APPLICATION_NAME@-skrivebordssynkronisering
GenericName[da]=Mappesynkronisering

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,7 +21,7 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[de]=@APPLICATION_ICON_NAME@
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
GenericName[de]=Ordner-Synchronisation
Icon[de_DE]=@APPLICATION_ICON_NAME@
Name[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
Comment[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
GenericName[de_DE]=Ordnersynchronisierung

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[el]=@APPLICATION_ICON_NAME@
Name[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
Comment[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
GenericName[el]=Συγχρονισμός φακέλου

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[en_GB]=@APPLICATION_ICON_NAME@
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
GenericName[en_GB]=Folder Sync

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[eo]=@APPLICATION_ICON_NAME@
Name[eo]=@APPLICATION_NAME@ sinkroniga kliento
Comment[eo]=@APPLICATION_NAME@ sinkroniga kliento
GenericName[eo]=Dosieruja sinkronigo

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# 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

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_CL]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_CO]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_CR]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[es_DO]=@APPLICATION_ICON_NAME@
Name[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_DO]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_EC]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_GT]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_MX]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Name[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Comment[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_SV]=Sincronización de carpeta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[es]=@APPLICATION_ICON_NAME@
Name[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
Comment[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
Name[es]=@APPLICATION_NAME@ Desktop
Comment[es]=@APPLICATION_NAME@ desktop synchronization client
GenericName[es]=Sincronización de carpetas

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[et_EE]=@APPLICATION_ICON_NAME@
Name[et_EE]=@APPLICATION_NAME@ töölaua sünkimise klient
Comment[et_EE]=@APPLICATION_NAME@ töölaua sünkroniseerimise klient
GenericName[et_EE]=Kausta Sünkroonimine

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[eu]=@APPLICATION_ICON_NAME@
Name[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
Name[eu]=@APPLICATION_NAME@ Mahaigaina
Comment[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
GenericName[eu]=Karpeta-sinkronizazioa

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[fi_FI]=@APPLICATION_ICON_NAME@
Name[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
Comment[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
GenericName[fi_FI]=Kansio synkronointi

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[fr]=@APPLICATION_ICON_NAME@
Name[fr]=Client de synchro @APPLICATION_NAME@
Name[fr]=@APPLICATION_NAME@ Bureau
Comment[fr]=Client de synchronisation @APPLICATION_NAME@
GenericName[fr]=Synchronisation du dossier

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[gl]=@APPLICATION_ICON_NAME@
Name[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
GenericName[gl]=Sincronización de cartafol

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[he]=@APPLICATION_ICON_NAME@
Name[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
GenericName[he]=סנכרון תיקיות

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[hr]=@APPLICATION_ICON_NAME@
Name[hr]=@APPLICATION_NAME@ klijent za sink. računala
Comment[hr]=@APPLICATION_NAME@ klijent za sinkronizaciju računala
GenericName[hr]=Sinkronizacija mapa

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[hu_HU]=@APPLICATION_ICON_NAME@
Name[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
Name[hu_HU]=@APPLICATION_NAME@ Desktop
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
GenericName[hu_HU]=Mappaszinkronizálás

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[is]=@APPLICATION_ICON_NAME@
Name[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
Comment[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
GenericName[is]=Samstilling á möppum

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[it]=@APPLICATION_ICON_NAME@
Name[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
Name[it]=@APPLICATION_NAME@ Desktop
Comment[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
GenericName[it]=Sincronizzazione cartelle

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ja_JP]=@APPLICATION_ICON_NAME@
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
GenericName[ja_JP]=フォルダーを同期する

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ko]=@APPLICATION_ICON_NAME@
Name[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
GenericName[ko]=폴더 동기화

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[lt_LT]=@APPLICATION_ICON_NAME@
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
GenericName[lt_LT]=Aplankų sinchronizavimas

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[lv]=@APPLICATION_ICON_NAME@
Name[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
Comment[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
GenericName[lv]=Mapju Sinhronizēšana

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[mk]=@APPLICATION_ICON_NAME@
Name[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
Comment[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
GenericName[mk]=Папка за синхронизација

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[nb_NO]=@APPLICATION_ICON_NAME@
Name[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
GenericName[nb_NO]=Mappe synkroinisering

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[nl]=@APPLICATION_ICON_NAME@
Name[nl]=@APPLICATION_NAME@ desktop sync client
Name[nl]=@APPLICATION_NAME@ Desktop
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
GenericName[nl]=Map synchronisatie

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[oc]=@APPLICATION_ICON_NAME@
Name[oc]=@APPLICATION_NAME@ client de sincronizacion
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
GenericName[oc]=Sincro. dossièr

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[pl]=@APPLICATION_ICON_NAME@
Name[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
Comment[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
Name[pl]=@APPLICATION_NAME@ Desktop
Comment[pl]=Desktopowy klient synchronizacji @APPLICATION_NAME@
GenericName[pl]=Katalog synchronizacji

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[pt_BR]=@APPLICATION_ICON_NAME@
Name[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
Name[pt_BR]=@APPLICATION_NAME@ Desktop
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
GenericName[pt_BR]=Sincronizar pasta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[pt_PT]=@APPLICATION_ICON_NAME@
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
GenericName[pt_PT]=Sincronização de Pasta

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ro]=@APPLICATION_ICON_NAME@
Name[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
GenericName[ro]=Sincronizare director

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ru]=@APPLICATION_ICON_NAME@
Name[ru]=@APPLICATION_NAME@ для ПК
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
GenericName[ru]=Синхронизация папок

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[sc]=@NÙMENE_ICONA_APLICATZIONE@
Name[sc]=@NÙMENE_APLICATZIONE@ cliente sicronizadore de iscrivania
Comment[sc]=@NÙMENE_APLICATZIONE@ cliente de sincronizatzione iscrivania
GenericName[sc]=Sincronizadore de cartellas

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[sk_SK]=@APPLICATION_ICON_NAME@
Name[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
Name[sk_SK]=@APPLICATION_NAME@ Desktop
Comment[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
GenericName[sk_SK]=Synchronizácia priečinkov

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[sl]=@APPLICATION_ICON_NAME@
Name[sl]=@APPLICATION_NAME@ program za usklajevanje
Comment[sl]=@APPLICATION_NAME@ program za usklajevanje
Name[sl]=Namizni program @APPLICATION_NAME@
Comment[sl]=Program za usklajevanje @APPLICATION_NAME@
GenericName[sl]=Usklajevanje map

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[sr]=@APPLICATION_ICON_NAME@
Name[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
GenericName[sr]=Синхронизација фасцикли

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[sv]=@APPLICATION_ICON_NAME@
Name[sv]=@APPLICATION_NAME@ desktopssynkklient
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
GenericName[sv]=Mappsynkronisering

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# 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

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[tr]=@APPLICATION_ICON_NAME@
Name[tr]=@APPLICATION_NAME@ masaüstü eşiteme istemcisi
Name[tr]=@APPLICATION_NAME@ Masaüstü
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
GenericName[tr]=Klasör Eşitleme
GenericName[tr]=Klasör eşitleme

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[uk]=@APPLICATION_ICON_NAME@
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
GenericName[uk]=Синхронізація тек

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[zh_CN]=@APPLICATION_ICON_NAME@
Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
Name[zh_CN]=@APPLICATION_NAME@ 桌面
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
GenericName[zh_CN]=文件夹同步

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[zh_HK]=@APPLICATION_ICON_NAME@
Name[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
Name[zh_HK]=@APPLICATION_NAME@ 桌面電腦
Comment[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
GenericName[zh_HK]=資料夾同步

View File

@@ -2,7 +2,7 @@
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[zh_TW]=@APPLICATION_ICON_NAME@
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
Name[zh_TW]=@APPLICATION_NAME@ 桌面
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
GenericName[zh_TW]=資料夾同步

View File

@@ -10,13 +10,7 @@ endif()
set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(OEM_THEME_DIR "" CACHE STRING "Define directory containing a custom theme")
if ( EXISTS ${OEM_THEME_DIR}/OEM.cmake )
include ( ${OEM_THEME_DIR}/OEM.cmake )
else ()
include ( ${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake )
endif()
include(${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake)
# Default suffix if the theme doesn't define one
if(NOT DEFINED APPLICATION_VIRTUALFILE_SUFFIX)

View File

@@ -9,13 +9,8 @@ endif(CPACK_GENERATOR MATCHES "NSIS")
set( CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@ )
set( CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@ )
set( OEM_THEME_DIR @OEM_THEME_DIR@ )
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
include ( ${OEM_THEME_DIR}/OEM.cmake )
else ()
include ( "${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake" )
endif()
include("${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake")
set( CRASHREPORTER_EXECUTABLE @CRASHREPORTER_EXECUTABLE@)

View File

@@ -2,11 +2,7 @@ include( InstallRequiredSystemLibraries )
set( CPACK_PACKAGE_CONTACT "Dominik Schmidt <domme@tomahawk-player.org>" )
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
include ( "${OEM_THEME_DIR}/OEM.cmake" )
else ()
include ( "${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake" )
endif()
include("${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake")
include( VERSION.cmake )
set( CPACK_PACKAGE_VERSION_MAJOR ${MIRALL_VERSION_MAJOR} )

View File

@@ -1,6 +1,6 @@
set( MIRALL_VERSION_MAJOR 3 )
set( MIRALL_VERSION_MINOR 2 )
set( MIRALL_VERSION_PATCH 0 )
set( MIRALL_VERSION_PATCH 4 )
set( MIRALL_VERSION_YEAR 2021 )
set( MIRALL_SOVERSION 0 )

View File

@@ -6,7 +6,7 @@ mkdir /app
mkdir /build
#Set Qt-5.12
export QT_BASE_DIR=/opt/qt5.12.9
export QT_BASE_DIR=/opt/qt5.12.10
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:$LD_LIBRARY_PATH

View File

@@ -15,10 +15,10 @@ OBS_PROJECT_BETA=home:ivaradi:beta
OBS_PACKAGE=nextcloud-desktop
if test "${DRONE_TARGET_BRANCH}" = "stable-2.6"; then
UBUNTU_DISTRIBUTIONS="bionic focal groovy hirsute"
UBUNTU_DISTRIBUTIONS="bionic focal groovy hirsute impish"
DEBIAN_DISTRIBUTIONS="buster stretch testing"
else
UBUNTU_DISTRIBUTIONS="focal groovy hirsute"
UBUNTU_DISTRIBUTIONS="focal groovy hirsute impish"
DEBIAN_DISTRIBUTIONS="testing"
fi
@@ -88,7 +88,7 @@ for distribution in ${UBUNTU_DISTRIBUTIONS} ${DEBIAN_DISTRIBUTIONS}; do
dpkg-genchanges -S -sa > "../nextcloud-desktop_${fullver}_source.changes"
if test -f ~/.has_ppa_keys; then
debsign -k7D14AA7B -S
debsign -k2265D8767D14AA7B -S
fi
done
cd ..

View File

@@ -1,7 +1,5 @@
# Check if varialbe MAC_INSTALLER_BACKGROUND_FILE is defined. That might come
# from the OEM.cmake for branded clients or from NEXTCLOUD.cmake for the non
# branded client.
# Check if varialbe MAC_INSTALLER_BACKGROUND_FILE is defined.
# Make sure that the MAC_INSTALLER_BACKGROUND_FILE contains the full path, ie.
# includes CMAKE_SOURCE_DIR or so.

View File

@@ -52,6 +52,9 @@
<Property Id="INSTALLDIR">
<RegistrySearch Id="RegistryInstallDir" Type="raw" Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" Win64="no" />
</Property>
<Property Id="WINDOWSRELEASEID">
<RegistrySearch Id="RegistryWindowsReleaseId" Type="raw" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion" Name="ReleaseId"/>
</Property>
<!-- Detect legacy NSIS installation -->
<Property Id="NSIS_UNINSTALLEXE">
@@ -77,8 +80,8 @@
<!-- Uninstall: Remove sync folders from Explorer's Navigation Pane, only effective for the current user (home users) -->
<Custom Action="RemoveNavigationPaneEntries" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<!-- Schedule Reboot for the Shell Extensions -->
<ScheduleReboot After="InstallFinalize">NOT (DO_NOT_SCHEDULE_REBOOT=1)</ScheduleReboot>
<!-- Schedule Reboot for the Shell Extensions (in silent installation mode only, or if SCHEDULE_REBOOT argument is set-->
<ScheduleReboot After="InstallFinalize">(SCHEDULE_REBOOT=1) OR NOT (UILevel=2)</ScheduleReboot>
</InstallExecuteSequence>
<!-- "Add or Remove" Programs Entries -->
@@ -214,6 +217,6 @@
<Condition Level="0">(NO_DESKTOP_SHORTCUT=1)</Condition>
</Feature>
</Feature>
<Condition Message="This application only runs on Windows 10, version 1709 or higher!">(VersionNT>=603 AND WINDOWSRELEASEID>=1709)</Condition>
</Product>
</Wix>

View File

@@ -41,16 +41,16 @@ master_doc = 'index'
# General information about the project.
project = u'Nextcloud Client Manual'
copyright = u'2013-2020, The Nextcloud developers'
copyright = u'2013-2021, The Nextcloud developers'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '3.0'
version = '3.2'
# The full version, including alpha/beta/rc tags.
release = '3.0'
release = '3.2.4'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@@ -6,6 +6,10 @@ You can download the latest version of the Nextcloud Desktop Synchronization
Client from the `Nextcloud download page`_.
There are clients for Linux, macOs, and Microsoft Windows.
The currently supported server releases are the latest three stable versions
at time of publication. It means that the |version| release series is supporting
server major version 19, 20 and 21.
Installation on Mac OS X and Windows is the same as for any software
application: download the program and then double-click it to launch the
installation, and then follow the installation wizard. After it is installed and

View File

@@ -18,10 +18,8 @@ Improvements and New Features
The |version| release of the Nextcloud desktop sync client has many new features and
improvements.
* Show server notifications on the client
* Improved sync speed
* Improved handling of Win32 file locks and network files
* Improved user notifications about ignored files and conflicts
* Add warnings for old server versions
* Update of QtKeyChain to support Windows credential store
* Packaging of dolphin overlay icon module for bleeding edge distributions
* Virtual Files on Windows
* Support for the user status from the server
* Many improvements to the sync engine
* Make the end-to-end encryption work more reliable
* Improve sync performance

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -480,6 +480,14 @@ bool FileSystem::isLnkFile(const QString &filename)
return filename.endsWith(QLatin1String(".lnk"));
}
bool FileSystem::isExcludeFile(const QString &filename)
{
return filename.compare(QStringLiteral(".sync-exclude.lst"), Qt::CaseInsensitive) == 0
|| filename.compare(QStringLiteral("exclude.lst"), Qt::CaseInsensitive) == 0
|| filename.endsWith(QStringLiteral("/.sync-exclude.lst"), Qt::CaseInsensitive)
|| filename.endsWith(QStringLiteral("/exclude.lst"), Qt::CaseInsensitive);
}
bool FileSystem::isJunction(const QString &filename)
{
#ifdef Q_OS_WIN

View File

@@ -153,6 +153,11 @@ namespace FileSystem {
*/
bool OCSYNC_EXPORT isLnkFile(const QString &filename);
/**
* Returns whether the file is an exclude file (contains patterns to exclude from sync)
*/
bool OCSYNC_EXPORT isExcludeFile(const QString &filename);
/**
* Returns whether the file is a junction (windows only)
*/

View File

@@ -676,6 +676,26 @@ QByteArray Utility::conflictFileBaseNameFromPattern(const QByteArray &conflictNa
return conflictName.left(tagStart) + conflictName.mid(tagEnd);
}
bool Utility::isPathWindowsDrivePartitionRoot(const QString &path)
{
Q_UNUSED(path)
#ifdef Q_OS_WIN
// should be 2 or 3 characters length
if (!(path.size() >= 2 && path.size() <= 3)) {
return false;
}
// must mutch a pattern "[A-Za-z]:"
if (!(path.at(1) == QLatin1Char(':') && path.at(0).isLetter())) {
return false;
}
// final check - last character should be either slash/backslash, or, it should be missing
return path.size() < 3 || path.at(2) == QLatin1Char('/') || path.at(2) == QLatin1Char('\\');
#endif
return false;
}
QString Utility::sanitizeForFileName(const QString &name)
{
const auto invalid = QStringLiteral(R"(/?<>\:*|")");

View File

@@ -235,6 +235,11 @@ namespace Utility {
*/
OCSYNC_EXPORT QByteArray conflictFileBaseNameFromPattern(const QByteArray &conflictName);
/**
* @brief Check whether the path is a root of a Windows drive partition ([c:/, d:/, e:/, etc.)
*/
OCSYNC_EXPORT bool isPathWindowsDrivePartitionRoot(const QString &path);
#ifdef Q_OS_WIN
OCSYNC_EXPORT bool registryKeyExists(HKEY hRootKey, const QString &subKey);
OCSYNC_EXPORT QVariant registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName);

View File

@@ -9,16 +9,11 @@ IF(BUILD_UPDATER)
add_subdirectory(updater)
endif()
set(MIRALL_RC_SRC ../../resources.qrc)
if (EXISTS "${OEM_THEME_DIR}/theme.qrc")
list(APPEND MIRALL_RC_SRC ${OEM_THEME_DIR}/theme.qrc)
set(theme_dir ${OEM_THEME_DIR}/theme)
else()
list(APPEND MIRALL_RC_SRC ../../theme.qrc)
set(theme_dir ${CMAKE_SOURCE_DIR}/theme)
endif()
configure_file(${CMAKE_SOURCE_DIR}/theme.qrc.in ${CMAKE_SOURCE_DIR}/theme.qrc)
#set (QML_IMPORT_PATH "${CMAKE_SOURCE_DIR}/src/gui/tray" CACHE STRING "Extra qml module import paths" FORCE)
set(MIRALL_RC_SRC ../../resources.qrc)
list(APPEND MIRALL_RC_SRC ${CMAKE_SOURCE_DIR}/theme.qrc)
set(theme_dir ${CMAKE_SOURCE_DIR}/theme)
set(client_UI_SRCS
accountsettings.ui
@@ -223,8 +218,6 @@ set( final_src
${MIRALL_RC_SRC}
${client_SRCS}
${client_UI_SRCS}
${client_version}
${client_manifest}
${guiMoc}
${client_I18N}
${3rdparty_SRC}
@@ -248,12 +241,81 @@ if (NOT DEFINED APPLICATION_ICON_NAME)
set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME})
endif()
# Generate png icons from svg
find_program(INKSCAPE
NAMES inkscape inkscape.exe
REQUIRED
HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV INKSCAPE_DIR)
# REQUIRED keyword is only supported on CMake 3.18 and above
if (NOT INKSCAPE)
message(FATAL_ERROR "Could not find inkscape. Set INKSCAPE_DIR to the path of executable.")
endif()
function(generate_sized_png_from_svg icon_path size)
get_filename_component(icon_name_dir ${icon_path} DIRECTORY)
get_filename_component(icon_name_wle ${icon_path} NAME_WLE)
if (EXISTS "${icon_name_dir}/${size}-${icon_name_wle}.png")
return()
endif()
set(icon_output_name "${size}-${icon_name_wle}.png")
message(STATUS "Generate ${icon_output_name}")
execute_process(COMMAND
"${INKSCAPE}" -w ${size} -h ${size} "${icon_path}" -o "${icon_output_name}"
WORKING_DIRECTORY "${icon_name_dir}"
RESULT_VARIABLE
INKSCAPE_SIDEBAR_ERROR
OUTPUT_QUIET
ERROR_QUIET)
if (INKSCAPE_SIDEBAR_ERROR)
message(FATAL_ERROR
"inkscape could not generate icon: ${INKSCAPE_SIDEBAR_ERROR}")
else()
endif()
endfunction()
if ((APPLICATION_ICON_SET MATCHES "PNG")
AND
(NOT EXISTS "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg"))
# We may have no svg application icon in when customers use PNG
# icons in brander, but theme.qrc expects a svg icon.
file(TOUCH "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg")
endif()
if(APPLE)
set(MACOS_SIDEBAR_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-sidebar.svg")
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 16)
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 32)
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 64)
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 128)
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 256)
endif()
if(WIN32)
set(STARTMENU_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-w10startmenu.svg")
generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 70)
generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 150)
endif()
set(APP_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg")
generate_sized_png_from_svg(${APP_ICON_SVG} 16)
generate_sized_png_from_svg(${APP_ICON_SVG} 24)
generate_sized_png_from_svg(${APP_ICON_SVG} 32)
generate_sized_png_from_svg(${APP_ICON_SVG} 48)
generate_sized_png_from_svg(${APP_ICON_SVG} 64)
generate_sized_png_from_svg(${APP_ICON_SVG} 128)
generate_sized_png_from_svg(${APP_ICON_SVG} 256)
generate_sized_png_from_svg(${APP_ICON_SVG} 512)
generate_sized_png_from_svg(${APP_ICON_SVG} 1024)
file(GLOB_RECURSE OWNCLOUD_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon*")
if(APPLE)
file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*")
MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}")
endif()
ecm_add_app_icon(final_src ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}")
ecm_add_app_icon(APP_ICON ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}")
if(UNIX AND NOT APPLE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
@@ -315,13 +377,13 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
endif()
# we may not add MACOSX_BUNDLE here, if not building one
add_executable(${APPLICATION_EXECUTABLE} WIN32 main.cpp)
add_executable(${APPLICATION_EXECUTABLE} WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON})
else()
# set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf.
set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns")
# we must add MACOSX_BUNDLE only if building a bundle
add_executable(${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp)
add_executable(${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON})
set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations)
install(FILES ${client_I18N} DESTINATION ${QM_DIR})

View File

@@ -571,6 +571,9 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
const auto mode = bestAvailableVfsMode();
if (mode == Vfs::WindowsCfApi || ConfigFile().showExperimentalOptions()) {
ac = menu->addAction(tr("Enable virtual file support %1 …").arg(mode == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
// TODO: remove when UX decision is made
ac->setEnabled(!Utility::isPathWindowsDrivePartitionRoot(folder->path()));
//
connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableVfsCurrentFolder);
}
}

View File

@@ -536,6 +536,21 @@ void FolderWizardSelectiveSync::initializePage()
initialBlacklist = QStringList("/");
}
_selectiveSync->setFolderInfo(targetPath, alias, initialBlacklist);
if (_virtualFilesCheckBox) {
// TODO: remove when UX decision is made
if (Utility::isPathWindowsDrivePartitionRoot(wizard()->field(QStringLiteral("sourceFolder")).toString())) {
_virtualFilesCheckBox->setChecked(false);
_virtualFilesCheckBox->setEnabled(false);
_virtualFilesCheckBox->setText(tr("Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter."));
} else {
_virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi);
_virtualFilesCheckBox->setEnabled(true);
_virtualFilesCheckBox->setText(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
}
//
}
QWizardPage::initializePage();
}

View File

@@ -86,9 +86,6 @@ void NavigationPaneHelper::updateCloudStorageRegistry()
// We currently don't distinguish between new and existing CLSIDs, if it's there we just
// save over it. We at least need to update the tile in case we are suddently using multiple accounts.
foreach (Folder *folder, _folderMan->map()) {
if (folder->vfs().mode() == Vfs::WindowsCfApi) {
continue;
}
if (!folder->navigationPaneClsid().isNull()) {
// If it already exists, unmark it for removal, this is a valid sync root.
entriesToRemove.removeOne(folder->navigationPaneClsid());

View File

@@ -28,6 +28,8 @@
#include "config.h"
#include "configfile.h"
#include <QSysInfo>
namespace OCC {
Q_LOGGING_CATEGORY(lcUpdater, "nextcloud.gui.updater", QtInfoMsg)
@@ -88,6 +90,9 @@ QUrlQuery Updater::getQueryParams()
}
query.addQueryItem(QStringLiteral("version"), clientVersion());
query.addQueryItem(QStringLiteral("platform"), platform);
query.addQueryItem(QStringLiteral("osRelease"), QSysInfo::productType());
query.addQueryItem(QStringLiteral("osVersion"), QSysInfo::productVersion());
query.addQueryItem(QStringLiteral("kernelVersion"), QSysInfo::kernelVersion());
query.addQueryItem(QStringLiteral("oem"), theme->appName());
query.addQueryItem(QStringLiteral("buildArch"), QSysInfo::buildCpuArchitecture());
query.addQueryItem(QStringLiteral("currentArch"), QSysInfo::currentCpuArchitecture());

View File

@@ -221,6 +221,24 @@ void OwncloudAdvancedSetupPage::fetchUserData()
_ui.userNameLabel->setText(userName);
}
void OwncloudAdvancedSetupPage::refreshVirtualFilesAvailibility(const QString &path)
{
// TODO: remove when UX decision is made
if (!_ui.rVirtualFileSync->isVisible()) {
return;
}
if (Utility::isPathWindowsDrivePartitionRoot(path)) {
_ui.rVirtualFileSync->setText(tr("Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter."));
setRadioChecked(_ui.rSyncEverything);
_ui.rVirtualFileSync->setEnabled(false);
} else {
_ui.rVirtualFileSync->setText(tr("Use &virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
_ui.rVirtualFileSync->setEnabled(true);
}
//
}
void OwncloudAdvancedSetupPage::setServerAddressLabelUrl(const QUrl &url)
{
if (!url.isValid()) {
@@ -411,6 +429,9 @@ void OwncloudAdvancedSetupPage::slotSelectFolder()
{
QString dir = QFileDialog::getExistingDirectory(nullptr, tr("Local Sync Folder"), QDir::homePath());
if (!dir.isEmpty()) {
// TODO: remove when UX decision is made
refreshVirtualFilesAvailibility(dir);
setLocalFolderPushButtonPath(dir);
wizard()->setProperty("localFolder", dir);
updateStatus();

View File

@@ -84,6 +84,9 @@ private:
void fetchUserAvatar();
void fetchUserData();
// TODO: remove when UX decision is made
void refreshVirtualFilesAvailibility(const QString &path);
Ui_OwncloudAdvancedSetupPage _ui;
bool _checking = false;
bool _created = false;

View File

@@ -116,7 +116,10 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
void OwncloudWizard::centerWindow()
{
const auto wizardWindow = window();
const auto screenGeometry = QGuiApplication::screenAt(wizardWindow->pos())->geometry();
const auto screen = QGuiApplication::screenAt(wizardWindow->pos())
? QGuiApplication::screenAt(wizardWindow->pos())
: QGuiApplication::primaryScreen();
const auto screenGeometry = screen->geometry();
const auto windowGeometry = wizardWindow->geometry();
const auto newWindowPosition = screenGeometry.center() - QPoint(windowGeometry.width() / 2, windowGeometry.height() / 2);
wizardWindow->move(newWindowPosition);

View File

@@ -706,8 +706,8 @@ QByteArray decryptStringAsymmetric(EVP_PKEY *privateKey, const QByteArray& data)
QByteArray out(outlen, '\0');
if (EVP_PKEY_decrypt(ctx, unsignedData(out), &outlen, (unsigned char *)data.constData(), data.size()) <= 0) {
qCInfo(lcCseDecryption()) << "Could not decrypt the data.";
ERR_print_errors_fp(stdout); // This line is not printing anything.
const auto error = handleErrors();
qCCritical(lcCseDecryption()) << "Could not decrypt the data." << error;
return {};
} else {
qCInfo(lcCseDecryption()) << "data decrypted successfully";

View File

@@ -513,7 +513,8 @@ void ProcessDirectoryJob::processFileAnalyzeRemoteInfo(
if (!localEntry.isValid()
&& item->_type == ItemTypeFile
&& opts._vfs->mode() != Vfs::Off
&& _pinState != PinState::AlwaysLocal) {
&& _pinState != PinState::AlwaysLocal
&& !FileSystem::isExcludeFile(item->_file)) {
item->_type = ItemTypeVirtualFile;
if (isVfsWithSuffix())
addVirtualFileSuffix(tmp_path._original);
@@ -1045,7 +1046,7 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo(
} else {
// We must query the server to know if the etag has not changed
_pendingAsyncJobs++;
QString serverOriginalPath = _discoveryData->adjustRenamedPath(originalPath, SyncFileItem::Down);
QString serverOriginalPath = _discoveryData->_remoteFolder +_discoveryData->adjustRenamedPath(originalPath, SyncFileItem::Down);
if (base.isVirtualFile() && isVfsWithSuffix())
chopVirtualFileSuffix(serverOriginalPath);
auto job = new RequestEtagJob(_discoveryData->_account, serverOriginalPath, this);

View File

@@ -344,11 +344,13 @@ void GETFileJob::slotReadyRead()
void GETFileJob::cancel()
{
if (reply()->isRunning()) {
reply()->abort();
const auto networkReply = reply();
if (networkReply && networkReply->isRunning()) {
networkReply->abort();
}
if (_device && _device->isOpen()) {
_device->close();
}
emit canceled();
}
void GETFileJob::onTimedOut()
@@ -427,6 +429,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
}
propagator()->_journal->deleteFileRecord(_item->_originalFile);
updateMetadata(false);
if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) {
// make sure ReadOnly flag is preserved for placeholder, similarly to regular files
FileSystem::setFileReadOnly(propagator()->fullLocalPath(_item->_file), true);
}
return;
}
if (vfs->mode() == Vfs::Off && _item->_type == ItemTypeVirtualFile) {
@@ -434,6 +442,11 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
_item->_type = ItemTypeFile;
}
if (_item->_type == ItemTypeVirtualFile) {
if (propagator()->localFileNameClash(_item->_file)) {
done(SyncFileItem::NormalError, tr("File %1 cannot be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
return;
}
qCDebug(lcPropagateDownload) << "creating virtual file" << _item->_file;
auto r = vfs->createPlaceholder(*_item);
if (!r) {
@@ -441,6 +454,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
return;
}
updateMetadata(false);
if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) {
// make sure ReadOnly flag is preserved for placeholder, similarly to regular files
FileSystem::setFileReadOnly(propagator()->fullLocalPath(_item->_file), true);
}
return;
}

View File

@@ -110,7 +110,6 @@ public:
void setExpectedContentLength(qint64 size) { _expectedContentLength = size; }
signals:
void canceled();
void finishedSignal();
void downloadProgress(qint64, qint64);
private slots:

View File

@@ -795,8 +795,55 @@ void SyncEngine::slotPropagationFinished(bool success)
_anotherSyncNeeded = ImmediateFollowUp;
}
// TODO: Remove this when the file restoration problem is fixed for a user
bool shouldStartSyncAgain = false;
const auto checkAndOverrideSetDataFingerprint = [this, &shouldStartSyncAgain] {
const int dataFingerprintOverrideThreshold = 9;
const QString dataFingerprintOverrideHostHash = QStringLiteral("63debc9ef6d217649ea70632ca573a1db7a237ba61c48cdd2bf797f7060233db");
const auto accountHost = account()->url().host();
const auto accountDisplayName = account()->displayName();
if (_dataFingerprintSetFailCount >= 0) {
qCWarning(lcEngine) << "setDataFingerprint has failed for account" << accountDisplayName << "on host" << accountHost << "due to sync errors. Checking the possibility for override...";
if (_dataFingerprintSetFailCount > 0) {
if (_dataFingerprintSetFailCount >= dataFingerprintOverrideThreshold) {
qCWarning(lcEngine) << "All sync attempts failed for account" << accountDisplayName << "on host" << accountHost << "setting the dataFingerprint anyway.";
_journal->setDataFingerprint(_discoveryPhase->_dataFingerprint);
// this mechanism should only run once per app launch
_dataFingerprintSetFailCount = -1;
} else {
++_dataFingerprintSetFailCount;
// request to start sync again as it won't happen by itself unless the file has changed on the server or in the local folder
shouldStartSyncAgain = true;
}
} else {
// only compare hash once
// if it matches - we don't need to calculate it again while _dataFingerprintSetFailCount is greater than 0
const auto accountHostHash = QString::fromUtf8(QCryptographicHash::hash(accountHost.toUtf8(), QCryptographicHash::Sha256).toHex());
if (accountHostHash == dataFingerprintOverrideHostHash) {
qCInfo(lcEngine) << "accountHostHash" << accountHostHash << "equals to dataFingerprintOverrideHostHash" << dataFingerprintOverrideHostHash << "_dataFingerprintSetFailCount" << _dataFingerprintSetFailCount;
++_dataFingerprintSetFailCount;
// request to start sync again as it won't happen by itself unless the file has changed on the server or in the local folder
shouldStartSyncAgain = true;
} else {
qCInfo(lcEngine) << "accountHostHash" << accountHostHash << "differs from dataFingerprintOverrideHostHash" << dataFingerprintOverrideHostHash;
// give up on calculating the has next time, as it's not the host we are looking for
_dataFingerprintSetFailCount = -1;
}
}
} else {
qCWarning(lcEngine) << "setDataFingerprint was overridden already for account" << accountDisplayName << "on host" << accountHost << "but is failing again! Or, it's not the host that we are looking for.";
}
};
//
if (success && _discoveryPhase) {
_journal->setDataFingerprint(_discoveryPhase->_dataFingerprint);
} else if (_discoveryPhase) {
// TODO: Remove this when the file restoration problem is fixed for a user
checkAndOverrideSetDataFingerprint();
}
conflictRecordMaintenance();
@@ -812,6 +859,12 @@ void SyncEngine::slotPropagationFinished(bool success)
emit transmissionProgress(*_progressInfo);
finalize(success);
if (shouldStartSyncAgain) {
// TODO: Remove this when the file restoration problem is fixed for a user
qCWarning(lcEngine) << "Starting sync again for account" << account()->displayName() << "on host" << account()->url().host() << "due to setDataFingerprint override is running.";
startSync();
}
}
void SyncEngine::finalize(bool success)

View File

@@ -289,6 +289,9 @@ private:
LocalDiscoveryStyle _lastLocalDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
LocalDiscoveryStyle _localDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
std::set<QString> _localDiscoveryPaths;
// TODO: Remove this when the file restoration problem is fixed for a user
int _dataFingerprintSetFailCount = 0;
};
}

View File

@@ -23,6 +23,7 @@
#include <QFileInfo>
#include <QLocalSocket>
#include <QLoggingCategory>
#include <QUuid>
#include <sddl.h>
#include <cfapi.h>
@@ -58,6 +59,11 @@ void cfApiSendTransferInfo(const CF_CONNECTION_KEY &connectionKey, const CF_TRAN
qCCritical(lcCfApiWrapper) << "Couldn't send transfer info" << QString::number(transferKey.QuadPart, 16) << ":" << cfExecuteresult << QString::fromWCharArray(_com_error(cfExecuteresult).ErrorMessage());
}
const auto isDownloadFinished = ((offset + currentBlockLength) == totalLength);
if (isDownloadFinished) {
return;
}
// refresh Windows Copy Dialog progress
LARGE_INTEGER progressTotal;
progressTotal.QuadPart = totalLength;
@@ -141,6 +147,22 @@ void CALLBACK cfApiFetchDataCallback(const CF_CALLBACK_INFO *callbackInfo, const
return;
}
QLocalSocket signalSocket;
const QString signalSocketName = requestId + ":cancellation";
signalSocket.connectToServer(signalSocketName);
const auto cancellationSocketConnectResult = signalSocket.waitForConnected();
if (!cancellationSocketConnectResult) {
qCWarning(lcCfApiWrapper) << "Couldn't connect the socket" << signalSocketName
<< signalSocket.error() << signalSocket.errorString();
sendTransferError();
return;
}
auto hydrationRequestCancelled = false;
QObject::connect(&signalSocket, &QLocalSocket::readyRead, &loop, [&] {
hydrationRequestCancelled = true;
});
// CFAPI expects sent blocks to be of a multiple of a block size.
// Only the last sent block is allowed to be of a different size than
// a multiple of a block size
@@ -165,6 +187,11 @@ void CALLBACK cfApiFetchDataCallback(const CF_CALLBACK_INFO *callbackInfo, const
};
QObject::connect(&socket, &QLocalSocket::readyRead, &loop, [&] {
if (hydrationRequestCancelled) {
qCDebug(lcCfApiWrapper) << "Don't transfer data because request" << requestId << "was cancelled";
return;
}
const auto receivedData = socket.readAll();
if (receivedData.isEmpty()) {
qCWarning(lcCfApiWrapper) << "Unexpected empty data received" << requestId;
@@ -176,24 +203,32 @@ void CALLBACK cfApiFetchDataCallback(const CF_CALLBACK_INFO *callbackInfo, const
alignAndSendData(receivedData);
});
QObject::connect(vfs, &OCC::VfsCfApi::hydrationRequestFinished, &loop, [&](const QString &id, int s) {
QObject::connect(vfs, &OCC::VfsCfApi::hydrationRequestFinished, &loop, [&](const QString &id) {
qDebug(lcCfApiWrapper) << "Hydration finished for request" << id;
if (requestId == id) {
const auto status = static_cast<OCC::HydrationJob::Status>(s);
qCInfo(lcCfApiWrapper) << "Hydration done for" << path << requestId << status;
if (status != OCC::HydrationJob::Success) {
sendTransferError();
}
loop.quit();
}
});
loop.exec();
if (!protrudingData.isEmpty()) {
if (!hydrationRequestCancelled && !protrudingData.isEmpty()) {
qDebug(lcCfApiWrapper) << "Send remaining protruding data. Size:" << protrudingData.size();
sendTransferInfo(protrudingData, dataOffset);
}
int hydrationJobResult = OCC::HydrationJob::Status::Error;
const auto invokeFinalizeResult = QMetaObject::invokeMethod(
vfs, [=] { vfs->finalizeHydrationJob(requestId); }, Qt::BlockingQueuedConnection,
&hydrationJobResult);
if (!invokeFinalizeResult) {
qCritical(lcCfApiWrapper) << "Failed to finalize hydration job for" << path << requestId;
}
if (static_cast<OCC::HydrationJob::Status>(hydrationJobResult) == OCC::HydrationJob::Success) {
sendTransferError();
}
}
}
void CALLBACK cfApiCancelFetchData(const CF_CALLBACK_INFO *callbackInfo, const CF_CALLBACK_PARAMETERS * /*callbackParameters*/)
@@ -213,7 +248,6 @@ void CALLBACK cfApiCancelFetchData(const CF_CALLBACK_INFO *callbackInfo, const C
}
}
CF_CALLBACK_REGISTRATION cfApiCallbacks[] = {
{ CF_CALLBACK_TYPE_FETCH_DATA, cfApiFetchDataCallback },
{ CF_CALLBACK_TYPE_CANCEL_FETCH_DATA, cfApiCancelFetchData },
@@ -288,8 +322,6 @@ CF_SET_PIN_FLAGS pinRecurseModeToCfSetPinFlags(OCC::CfApiWrapper::SetPinRecurseM
}
}
}
OCC::CfApiWrapper::ConnectionKey::ConnectionKey()
: _data(new CF_CONNECTION_KEY, [](void *p) { delete reinterpret_cast<CF_CONNECTION_KEY *>(p); })
{
@@ -467,14 +499,17 @@ OCC::Result<void, QString> OCC::CfApiWrapper::registerSyncRoot(const QString &pa
const auto version = std::wstring(providerVersion.toStdWString().data());
CF_SYNC_REGISTRATION info;
info.StructSize = sizeof(info) + (name.length() + version.length()) * sizeof(wchar_t);
info.ProviderName = name.data();
info.ProviderVersion = version.data();
info.SyncRootIdentity = nullptr;
info.SyncRootIdentityLength = 0;
info.FileIdentity = nullptr;
info.FileIdentityLength = 0;
info.ProviderId = QUuid::createUuid();
CF_SYNC_POLICIES policies;
policies.StructSize = sizeof(policies);
policies.Hydration.Primary = CF_HYDRATION_POLICY_FULL;
policies.Hydration.Modifier = CF_HYDRATION_POLICY_MODIFIER_NONE;
policies.Population.Primary = CF_POPULATION_POLICY_ALWAYS_FULL;
@@ -670,7 +705,7 @@ OCC::Result<void, QString> OCC::CfApiWrapper::updatePlaceholderInfo(const FileHa
const qint64 result = CfUpdatePlaceholder(handle.get(), &metadata,
fileIdentity.data(), sizeToDWORD(fileIdentitySize),
nullptr, 0, CF_UPDATE_FLAG_NONE, nullptr, nullptr);
nullptr, 0, CF_UPDATE_FLAG_MARK_IN_SYNC, nullptr, nullptr);
if (result != S_OK) {
qCWarning(lcCfApiWrapper) << "Couldn't update placeholder info for" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();
@@ -694,7 +729,7 @@ OCC::Result<void, QString> OCC::CfApiWrapper::convertToPlaceholder(const FileHan
const auto fileIdentity = QString::fromUtf8(fileId).toStdWString();
const auto fileIdentitySize = (fileIdentity.length() + 1) * sizeof(wchar_t);
const qint64 result = CfConvertToPlaceholder(handle.get(), fileIdentity.data(), sizeToDWORD(fileIdentitySize), CF_CONVERT_FLAG_NONE, nullptr, nullptr);
const qint64 result = CfConvertToPlaceholder(handle.get(), fileIdentity.data(), sizeToDWORD(fileIdentitySize), CF_CONVERT_FLAG_MARK_IN_SYNC, nullptr, nullptr);
Q_ASSERT(result == S_OK);
if (result != S_OK) {
qCCritical(lcCfApiWrapper) << "Couldn't convert to placeholder" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();

View File

@@ -16,6 +16,7 @@
#include "common/syncjournaldb.h"
#include "propagatedownload.h"
#include "vfs/cfapi/vfs_cfapi.h"
#include <QLocalServer>
#include <QLocalSocket>
@@ -25,7 +26,6 @@ Q_LOGGING_CATEGORY(lcHydration, "nextcloud.sync.vfs.hydrationjob", QtInfoMsg)
OCC::HydrationJob::HydrationJob(QObject *parent)
: QObject(parent)
{
connect(this, &HydrationJob::finished, this, &HydrationJob::deleteLater);
}
OCC::AccountPtr OCC::HydrationJob::account() const
@@ -104,90 +104,133 @@ void OCC::HydrationJob::start()
Q_ASSERT(_localPath.endsWith('/'));
Q_ASSERT(!_folderPath.startsWith('/'));
_server = new QLocalServer(this);
const auto listenResult = _server->listen(_requestId);
if (!listenResult) {
qCCritical(lcHydration) << "Couldn't get server to listen" << _requestId << _localPath << _folderPath;
emitFinished(Error);
const auto startServer = [this](const QString &serverName) -> QLocalServer * {
const auto server = new QLocalServer(this);
const auto listenResult = server->listen(serverName);
if (!listenResult) {
qCCritical(lcHydration) << "Couldn't get server to listen" << serverName
<< _localPath << _folderPath;
if (!_isCancelled) {
emitFinished(Error);
}
return nullptr;
}
qCInfo(lcHydration) << "Server ready, waiting for connections" << serverName
<< _localPath << _folderPath;
return server;
};
// Start cancellation server
_signalServer = startServer(_requestId + ":cancellation");
Q_ASSERT(_signalServer);
if (!_signalServer) {
return;
}
connect(_signalServer, &QLocalServer::newConnection, this, &HydrationJob::onCancellationServerNewConnection);
qCInfo(lcHydration) << "Server ready, waiting for connections" << _requestId << _localPath << _folderPath;
connect(_server, &QLocalServer::newConnection, this, &HydrationJob::onNewConnection);
// Start transfer data server
_transferDataServer = startServer(_requestId);
Q_ASSERT(_transferDataServer);
if (!_transferDataServer) {
return;
}
connect(_transferDataServer, &QLocalServer::newConnection, this, &HydrationJob::onNewConnection);
}
void OCC::HydrationJob::cancel()
{
if (!_job) {
return;
Q_ASSERT(_signalSocket);
_isCancelled = true;
if (_job) {
_job->cancel();
}
_job->cancel();
_signalSocket->write("cancelled");
_signalSocket->close();
_transferDataSocket->close();
emitFinished(Cancelled);
}
void OCC::HydrationJob::emitFinished(Status status)
{
_status = status;
_signalSocket->close();
if (status == Success) {
connect(_socket, &QLocalSocket::disconnected, this, [=]{
_socket->close();
connect(_transferDataSocket, &QLocalSocket::disconnected, this, [=] {
_transferDataSocket->close();
emit finished(this);
});
_socket->disconnectFromServer();
} else {
_socket->close();
emit finished(this);
_transferDataSocket->disconnectFromServer();
return;
}
_transferDataSocket->close();
emit finished(this);
}
void OCC::HydrationJob::emitCanceled()
void OCC::HydrationJob::onCancellationServerNewConnection()
{
connect(_socket, &QLocalSocket::disconnected, this, [=] {
_socket->close();
});
_socket->disconnectFromServer();
Q_ASSERT(!_signalSocket);
emit canceled(this);
qCInfo(lcHydration) << "Got new connection on cancellation server" << _requestId << _folderPath;
_signalSocket = _signalServer->nextPendingConnection();
}
void OCC::HydrationJob::onNewConnection()
{
Q_ASSERT(!_socket);
Q_ASSERT(!_transferDataSocket);
Q_ASSERT(!_job);
qCInfo(lcHydration) << "Got new connection starting GETFileJob" << _requestId << _folderPath;
_socket = _server->nextPendingConnection();
_job = new GETFileJob(_account, _remotePath + _folderPath, _socket, {}, {}, 0, this);
_transferDataSocket = _transferDataServer->nextPendingConnection();
_job = new GETFileJob(_account, _remotePath + _folderPath, _transferDataSocket, {}, {}, 0, this);
connect(_job, &GETFileJob::finishedSignal, this, &HydrationJob::onGetFinished);
connect(_job, &GETFileJob::canceled, this, &HydrationJob::onGetCanceled);
_job->start();
}
void OCC::HydrationJob::onGetCanceled()
void OCC::HydrationJob::finalize(OCC::VfsCfApi *vfs)
{
qCInfo(lcHydration) << "GETFileJob canceled" << _requestId << _folderPath << _job->reply()->error();
emitCanceled();
// Mark the file as hydrated in the sync journal
SyncJournalFileRecord record;
_journal->getFileRecord(_folderPath, &record);
Q_ASSERT(record.isValid());
if (!record.isValid()) {
qCWarning(lcHydration) << "Couldn't find record to update after hydration" << _requestId << _folderPath;
// emitFinished(Error);
return;
}
if (_isCancelled) {
// Remove placeholder file because there might be already pumped
// some data into it
QFile::remove(_localPath + _folderPath);
// Create a new placeholder file
const auto item = SyncFileItem::fromSyncJournalFileRecord(record);
vfs->createPlaceholder(*item);
return;
}
record._type = ItemTypeFile;
_journal->setFileRecord(record);
}
void OCC::HydrationJob::onGetFinished()
{
qCInfo(lcHydration) << "GETFileJob finished" << _requestId << _folderPath << _job->reply()->error();
if (_job->reply()->error()) {
emitFinished(Error);
const auto isGetJobResultError = _job->reply()->error();
// GETFileJob deletes itself after this signal was handled
_job = nullptr;
if (_isCancelled) {
return;
}
SyncJournalFileRecord record;
_journal->getFileRecord(_folderPath, &record);
Q_ASSERT(record.isValid());
if (!record.isValid()) {
qCWarning(lcHydration) << "Couldn't find record to update after hydration" << _requestId << _folderPath;
if (isGetJobResultError) {
emitFinished(Error);
return;
}
record._type = ItemTypeFile;
_journal->setFileRecord(record);
emitFinished(Success);
}

View File

@@ -23,6 +23,7 @@ class QLocalSocket;
namespace OCC {
class GETFileJob;
class SyncJournalDb;
class VfsCfApi;
class OWNCLOUDSYNC_EXPORT HydrationJob : public QObject
{
@@ -31,6 +32,7 @@ public:
enum Status {
Success = 0,
Error,
Cancelled,
};
Q_ENUM(Status)
@@ -58,29 +60,31 @@ public:
void start();
void cancel();
void finalize(OCC::VfsCfApi *vfs);
signals:
void finished(HydrationJob *job);
void canceled(HydrationJob *job);
private:
void emitFinished(Status status);
void emitCanceled();
void onNewConnection();
void onCancellationServerNewConnection();
void onGetFinished();
void onGetCanceled();
AccountPtr _account;
QString _remotePath;
QString _localPath;
SyncJournalDb *_journal = nullptr;
bool _isCancelled = false;
QString _requestId;
QString _folderPath;
QLocalServer *_server = nullptr;
QLocalSocket *_socket = nullptr;
QLocalServer *_transferDataServer = nullptr;
QLocalServer *_signalServer = nullptr;
QLocalSocket *_transferDataSocket = nullptr;
QLocalSocket *_signalSocket = nullptr;
GETFileJob *_job = nullptr;
Status _status = Success;
};

View File

@@ -129,7 +129,7 @@ Result<void, QString> VfsCfApi::dehydratePlaceholder(const SyncFileItem &item)
{
const auto previousPin = pinState(item._file);
if (!QFile::remove(_setupParams.filesystemPath + item._file)) {
if (!FileSystem::remove(_setupParams.filesystemPath + item._file)) {
return QStringLiteral("Couldn't remove %1 to fulfill dehydration").arg(item._file);
}
@@ -186,6 +186,8 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
const auto isWindowsShortcut = !isDirectory && FileSystem::isLnkFile(stat->path);
const auto isExcludeFile = !isDirectory && FileSystem::isExcludeFile(stat->path);
// It's a dir with a reparse point due to the placeholder info (hence the cloud tag)
// if we don't remove the reparse point flag the discovery will end up thinking
// it is a file... let's prevent it
@@ -197,7 +199,7 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
} else if (isSparseFile && isPinned) {
stat->type = ItemTypeVirtualFileDownload;
return true;
} else if (!isSparseFile && isUnpinned && !isWindowsShortcut){
} else if (!isSparseFile && isUnpinned && !isWindowsShortcut && !isExcludeFile) {
stat->type = ItemTypeVirtualFileDehydration;
return true;
} else if (isSparseFile) {
@@ -266,16 +268,28 @@ Vfs::AvailabilityResult VfsCfApi::availability(const QString &folderPath)
return AvailabilityError::NoSuchItem;
}
void VfsCfApi::cancelHydration(const QString &requestId, const QString & /*path*/)
HydrationJob *VfsCfApi::findHydrationJob(const QString &requestId) const
{
// Find matching hydration job for request id
const auto hydrationJobsIter = std::find_if(d->hydrationJobs.cbegin(), d->hydrationJobs.cend(), [&](const HydrationJob *job) {
return job->requestId() == requestId;
});
// If found, cancel it
if (hydrationJobsIter != d->hydrationJobs.cend()) {
(*hydrationJobsIter)->cancel();
return *hydrationJobsIter;
}
return nullptr;
}
void VfsCfApi::cancelHydration(const QString &requestId, const QString & /*path*/)
{
// Find matching hydration job for request id
const auto hydrationJob = findHydrationJob(requestId);
// If found, cancel it
if (hydrationJob) {
qCInfo(lcCfApi) << "Cancel hydration";
hydrationJob->cancel();
}
}
@@ -346,7 +360,6 @@ void VfsCfApi::scheduleHydrationJob(const QString &requestId, const QString &fol
job->setRequestId(requestId);
job->setFolderPath(folderPath);
connect(job, &HydrationJob::finished, this, &VfsCfApi::onHydrationJobFinished);
connect(job, &HydrationJob::canceled, this, &VfsCfApi::onHydrationJobCanceled);
d->hydrationJobs << job;
job->start();
emit hydrationRequestReady(requestId);
@@ -356,30 +369,27 @@ void VfsCfApi::onHydrationJobFinished(HydrationJob *job)
{
Q_ASSERT(d->hydrationJobs.contains(job));
qCInfo(lcCfApi) << "Hydration job finished" << job->requestId() << job->folderPath() << job->status();
emit hydrationRequestFinished(job->requestId(), job->status());
d->hydrationJobs.removeAll(job);
if (d->hydrationJobs.isEmpty()) {
emit doneHydrating();
}
emit hydrationRequestFinished(job->requestId());
}
void VfsCfApi::onHydrationJobCanceled(HydrationJob *job)
int VfsCfApi::finalizeHydrationJob(const QString &requestId)
{
const auto folderRelativePath = job->folderPath();
SyncJournalFileRecord record;
if (!params().journal->getFileRecord(folderRelativePath, &record)) {
qCWarning(lcCfApi) << "Could not read file record from journal for canceled hydration request.";
return;
qCDebug(lcCfApi) << "Finalize hydration job" << requestId;
// Find matching hydration job for request id
const auto hydrationJob = findHydrationJob(requestId);
// If found, finalize it
if (hydrationJob) {
hydrationJob->finalize(this);
d->hydrationJobs.removeAll(hydrationJob);
hydrationJob->deleteLater();
if (d->hydrationJobs.isEmpty()) {
emit doneHydrating();
}
return hydrationJob->status();
}
// Remove placeholder file because there might be already pumped
// some data into it
const auto folderPath = job->localPath();
QFile::remove(folderPath + folderRelativePath);
// Create a new placeholder file
const auto item = SyncFileItem::fromSyncJournalFileRecord(record);
createPlaceholder(*item);
return HydrationJob::Status::Error;
}
VfsCfApi::HydratationAndPinStates VfsCfApi::computeRecursiveHydrationAndPinStates(const QString &folderPath, const Optional<PinState> &basePinState)

View File

@@ -55,6 +55,8 @@ public:
void cancelHydration(const QString &requestId, const QString &path);
int finalizeHydrationJob(const QString &requestId);
public slots:
void requestHydration(const QString &requestId, const QString &path);
void fileStatusChanged(const QString &systemFileName, SyncFileStatus fileStatus) override;
@@ -62,7 +64,7 @@ public slots:
signals:
void hydrationRequestReady(const QString &requestId);
void hydrationRequestFailed(const QString &requestId);
void hydrationRequestFinished(const QString &requestId, int status);
void hydrationRequestFinished(const QString &requestId);
protected:
void startImpl(const VfsSetupParams &params) override;
@@ -70,7 +72,7 @@ protected:
private:
void scheduleHydrationJob(const QString &requestId, const QString &folderPath);
void onHydrationJobFinished(HydrationJob *job);
void onHydrationJobCanceled(HydrationJob *job);
HydrationJob *findHydrationJob(const QString &requestId) const;
struct HasHydratedDehydrated {
bool hasHydrated = false;

View File

@@ -190,7 +190,6 @@
<file>theme/colored/add.svg</file>
<file>theme/colored/delete.svg</file>
<file>theme/colored/Nextcloud-icon.svg</file>
<file>theme/colored/Nextcloud-sidebar.svg</file>
<file>theme/add.svg</file>
<file>theme/share.svg</file>
<file>theme/reply.svg</file>

202
theme.qrc.in Normal file
View File

@@ -0,0 +1,202 @@
<RCC>
<qresource prefix="/client">
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-16.png">theme/colored/16-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-24.png">theme/colored/24-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-32.png">theme/colored/32-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-48.png">theme/colored/48-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-64.png">theme/colored/64-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-128.png">theme/colored/128-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-256.png">theme/colored/256-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-512.png">theme/colored/512-@APPLICATION_ICON_NAME@-icon.png</file>
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-1024.png">theme/colored/1024-@APPLICATION_ICON_NAME@-icon.png</file>
<file>theme/colored/state-error-32.png</file>
<file>theme/colored/state-error-64.png</file>
<file>theme/colored/state-error-128.png</file>
<file>theme/colored/state-error-256.png</file>
<file>theme/colored/state-ok-32.png</file>
<file>theme/colored/state-ok-64.png</file>
<file>theme/colored/state-ok-128.png</file>
<file>theme/colored/state-ok-256.png</file>
<file>theme/colored/state-pause-32.png</file>
<file>theme/colored/state-pause-64.png</file>
<file>theme/colored/state-pause-128.png</file>
<file>theme/colored/state-pause-256.png</file>
<file>theme/colored/state-sync-32.png</file>
<file>theme/colored/state-sync-64.png</file>
<file>theme/colored/state-sync-128.png</file>
<file>theme/colored/state-sync-256.png</file>
<file>theme/colored/wizard_logo.png</file>
<file>theme/colored/wizard_logo@2x.png</file>
<file>theme/colored/wizard_logo.svg</file>
<file>theme/white/state-error-32.png</file>
<file>theme/white/state-error-64.png</file>
<file>theme/white/state-error-128.png</file>
<file>theme/white/state-error-256.png</file>
<file>theme/white/state-ok-32.png</file>
<file>theme/white/state-ok-64.png</file>
<file>theme/white/state-ok-128.png</file>
<file>theme/white/state-ok-256.png</file>
<file>theme/white/state-pause-32.png</file>
<file>theme/white/state-pause-64.png</file>
<file>theme/white/state-pause-128.png</file>
<file>theme/white/state-pause-256.png</file>
<file>theme/white/state-sync-32.png</file>
<file>theme/white/state-sync-64.png</file>
<file>theme/white/state-sync-128.png</file>
<file>theme/white/state-sync-256.png</file>
<file>theme/black/state-error-32.png</file>
<file>theme/black/state-error-64.png</file>
<file>theme/black/state-error-128.png</file>
<file>theme/black/state-error-256.png</file>
<file>theme/black/state-ok-32.png</file>
<file>theme/black/state-ok-64.png</file>
<file>theme/black/state-ok-128.png</file>
<file>theme/black/state-ok-256.png</file>
<file>theme/black/state-pause-32.png</file>
<file>theme/black/state-pause-64.png</file>
<file>theme/black/state-pause-128.png</file>
<file>theme/black/state-pause-256.png</file>
<file>theme/black/state-sync-32.png</file>
<file>theme/black/state-sync-64.png</file>
<file>theme/black/state-sync-128.png</file>
<file>theme/black/state-sync-256.png</file>
<file>theme/colored/state-error.svg</file>
<file>theme/colored/state-error-16.png</file>
<file>theme/colored/state-offline.svg</file>
<file>theme/colored/state-offline-16.png</file>
<file>theme/colored/state-offline-32.png</file>
<file>theme/colored/state-offline-64.png</file>
<file>theme/colored/state-offline-128.png</file>
<file>theme/colored/state-offline-256.png</file>
<file>theme/colored/state-ok.svg</file>
<file>theme/colored/state-ok-16.png</file>
<file>theme/colored/state-pause.svg</file>
<file>theme/colored/state-pause-16.png</file>
<file>theme/colored/state-sync.svg</file>
<file>theme/colored/state-sync-16.png</file>
<file>theme/colored/state-warning.svg</file>
<file>theme/colored/state-warning-16.png</file>
<file>theme/colored/state-warning-32.png</file>
<file>theme/colored/state-warning-64.png</file>
<file>theme/colored/state-warning-128.png</file>
<file>theme/colored/state-warning-256.png</file>
<file>theme/black/folder.png</file>
<file>theme/black/folder@2x.png</file>
<file>theme/white/folder.png</file>
<file>theme/white/folder@2x.png</file>
<file>theme/colored/folder.png</file>
<file>theme/colored/folder@2x.png</file>
<file>theme/black/control-next.svg</file>
<file>theme/black/control-prev.svg</file>
<file>theme/black/state-error.svg</file>
<file>theme/black/state-error-16.png</file>
<file>theme/black/state-offline.svg</file>
<file>theme/black/state-offline-16.png</file>
<file>theme/black/state-offline-32.png</file>
<file>theme/black/state-offline-64.png</file>
<file>theme/black/state-offline-128.png</file>
<file>theme/black/state-offline-256.png</file>
<file>theme/black/state-ok.svg</file>
<file>theme/black/state-ok-16.png</file>
<file>theme/black/state-pause.svg</file>
<file>theme/black/state-pause-16.png</file>
<file>theme/black/state-sync.svg</file>
<file>theme/black/state-sync-16.png</file>
<file>theme/black/state-warning.svg</file>
<file>theme/black/state-warning-16.png</file>
<file>theme/black/state-warning-32.png</file>
<file>theme/black/state-warning-64.png</file>
<file>theme/black/state-warning-128.png</file>
<file>theme/black/state-warning-256.png</file>
<file>theme/white/control-next.svg</file>
<file>theme/white/control-prev.svg</file>
<file>theme/white/state-error.svg</file>
<file>theme/white/state-error-16.png</file>
<file>theme/white/state-offline.svg</file>
<file>theme/white/state-offline-16.png</file>
<file>theme/white/state-offline-32.png</file>
<file>theme/white/state-offline-64.png</file>
<file>theme/white/state-offline-128.png</file>
<file>theme/white/state-offline-256.png</file>
<file>theme/white/state-ok.svg</file>
<file>theme/white/state-ok-16.png</file>
<file>theme/white/state-pause.svg</file>
<file>theme/white/state-pause-16.png</file>
<file>theme/white/state-sync.svg</file>
<file>theme/white/state-sync-16.png</file>
<file>theme/white/state-warning.svg</file>
<file>theme/white/state-warning-16.png</file>
<file>theme/white/state-warning-32.png</file>
<file>theme/white/state-warning-64.png</file>
<file>theme/white/state-warning-128.png</file>
<file>theme/white/state-warning-256.png</file>
<file>theme/white/wizard-files.png</file>
<file>theme/white/wizard-files@2x.png</file>
<file>theme/white/wizard-groupware.png</file>
<file>theme/white/wizard-groupware@2x.png</file>
<file>theme/white/wizard-nextcloud.png</file>
<file>theme/white/wizard-nextcloud@2x.png</file>
<file>theme/white/wizard-talk.png</file>
<file>theme/white/wizard-talk@2x.png</file>
<file>theme/black/wizard-files.png</file>
<file>theme/black/wizard-files@2x.png</file>
<file>theme/black/wizard-groupware.png</file>
<file>theme/black/wizard-groupware@2x.png</file>
<file>theme/black/wizard-nextcloud.png</file>
<file>theme/black/wizard-nextcloud@2x.png</file>
<file>theme/black/wizard-talk.png</file>
<file>theme/black/wizard-talk@2x.png</file>
<file>theme/black/wizard-files.png</file>
<file>theme/colored/wizard-files.png</file>
<file>theme/colored/wizard-files@2x.png</file>
<file>theme/colored/wizard-groupware.png</file>
<file>theme/colored/wizard-groupware@2x.png</file>
<file>theme/colored/wizard-nextcloud.png</file>
<file>theme/colored/wizard-nextcloud@2x.png</file>
<file>theme/colored/wizard-talk.png</file>
<file>theme/colored/wizard-talk@2x.png</file>
<file>theme/sync-arrow.svg</file>
<file>theme/white/external.png</file>
<file>theme/white/external@2x.png</file>
<file>theme/black/external.png</file>
<file>theme/black/external@2x.png</file>
<file>theme/colored/external.png</file>
<file>theme/colored/external@2x.png</file>
<file>theme/white/folder.svg</file>
<file>theme/white/more-apps.svg</file>
<file>theme/white/talk-app.svg</file>
<file>theme/white/caret-down.svg</file>
<file>theme/black/caret-down.svg</file>
<file>theme/white/user.svg</file>
<file>theme/black/user.svg</file>
<file>theme/white/add.svg</file>
<file>theme/black/add.svg</file>
<file>theme/black/activity.svg</file>
<file>theme/black/bell.svg</file>
<file>theme/black/state-info.svg</file>
<file>theme/close.svg</file>
<file>theme/files.svg</file>
<file>theme/public.svg</file>
<file>theme/settings.svg</file>
<file>theme/confirm.svg</file>
<file>theme/copy.svg</file>
<file>theme/more.svg</file>
<file>theme/change.svg</file>
<file>theme/lock-http.svg</file>
<file>theme/lock-https.svg</file>
<file>theme/lock-broken.svg</file>
<file>theme/network.svg</file>
<file>theme/account.svg</file>
<file>theme/colored/add.svg</file>
<file>theme/colored/delete.svg</file>
<file>theme/colored/@APPLICATION_ICON_NAME@-icon.svg</file>
<file>theme/add.svg</file>
<file>theme/share.svg</file>
<file>theme/reply.svg</file>
<file>theme/magnifying-glass.svg</file>
<file>theme/colored/user-status-online.svg</file>
<file>theme/colored/user-status-invisible.svg</file>
<file>theme/colored/user-status-away.svg</file>
<file>theme/colored/user-status-dnd.svg</file>
</qresource>
</RCC>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 968 B

Some files were not shown because too many files have changed in this diff Show More