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

Compare commits

...

187 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
allexzander
5e6c31b262 Merge pull request #3072 from nextcloud/bump-version-3.2.0
Bump version to 3.2.0.
2021-04-08 10:47:24 +03:00
allexzander
8550bfa8f1 Bump version to 3.2.0.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-08 10:38:10 +03:00
allexzander
f6afb62a53 Merge pull request #3069 from nextcloud/feature/user-status
User status bug fixing...
2021-04-08 10:18:13 +03:00
Camila
1ca0ea49dd Remove unnecessary local variable.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
29f4a3857b Reposition qml elements for the folder status icon.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
050bd49373 Rename enumToUserString => enumToString.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
8986975a17 Use enum class instead of enum.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
50de12b3c3 Undo unnecessary removal of lines.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
163015492a Fix #3067: missing apps icon.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
c8ac99c8cf Align status text with server url.
Cleans the space in the beginning of the string when there is no emoji
set.

Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
e51dad79a2 Refactor UserStatus.
- Make preDefinedStatus a local var.
- Add function to get the status user string.

Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
d2b762aa66 Move curly brackets to the correct line.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:59 +00:00
Camila
98cfc362f7 Remove const and reference of base types.
Signed-off-by: Camila <hello@camila.codes>
2021-04-08 07:10:58 +00:00
Nextcloud bot
835a61c5ee [tx-robot] updated from transifex 2021-04-08 03:55:06 +00:00
allexzander
5eb6834167 Merge pull request #3057 from nextcloud/bugfix/vfs-windows-lnk-files-freeze-issue
Fix VFX Windows .lnk files freeze/crash issue
2021-04-07 12:28:05 +03:00
allexzander
4b58c2b7b7 Fix review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
82953d0601 Fix review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
de85b79bb8 Address review comments.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
cb8b6ccd9b Ignore *.lnk files on Windows.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
13f4bb541d Treat .lnk files as normal files without hydrating them or creating a placeholder.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
3906ae0922 Another way to fix this.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
7235c708dc Added .lnk file placeholder creation fix.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
allexzander
d5b6d93978 Fix VFS freeze when syncing '.lnk' files on Windows.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-07 09:08:02 +00:00
Matthieu Gallien
4a7145f1f3 Merge pull request #3068 from nextcloud/bug/fixAssertEditIgnoredFiles
use QFileInfo to check if path is absolute to avoid assert on windows
2021-04-07 10:06:29 +02:00
Matthieu Gallien
d6752c96b1 use QFileInfo to check if path is absolute to avoid assert on windows
on windos absolute path does not have to start with / . Remove failing assert
when editing ignored files list.

Signed-off-by: Matthieu Gallien <matthieu_gallien@yahoo.fr>
2021-04-07 07:40:07 +00:00
Nextcloud bot
77681ff5b5 [tx-robot] updated from transifex 2021-04-07 03:55:50 +00:00
allexzander
4c8378030d Merge pull request #3061 from nextcloud/bugfix/vfs-syncroot-reg-params-non-temp
Create std::wstrings out of const wchar_t* so a copy is created every time
2021-04-06 15:46:06 +03:00
allexzander
0a33e99053 Create std::wstrings out of const wchar_t* so a copy is created every time.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-06 10:03:22 +03:00
allexzander
454226b3ea Merge pull request #3060 from nextcloud/bugfix/reduce-socketapi-logging
Reduce Socket API logging.
2021-04-06 09:49:21 +03:00
allexzander
e15045977e Reduce Socket API logging.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-06 09:34:20 +03:00
Nextcloud bot
a599cd2c3f [tx-robot] updated from transifex 2021-04-06 03:54:22 +00:00
Nextcloud bot
487f29cf80 [tx-robot] updated from transifex 2021-04-04 03:53:11 +00:00
Nextcloud bot
2268facd9d [tx-robot] updated from transifex 2021-04-03 04:11:49 +00:00
Nextcloud bot
57aeeca172 [tx-robot] updated from transifex 2021-04-02 03:55:01 +00:00
Nextcloud bot
962bbf3043 [tx-robot] updated from transifex 2021-04-01 03:55:02 +00:00
Felix Weilbach
6e147a7a8c Merge pull request #3052 from nextcloud/bugfix/remove-html-tags-from-notifications
Remove html tags from strings that may appear in notifications
2021-03-31 17:36:15 +02:00
Felix Weilbach
b2377ff64f Remove html tags from strings that may appear in notifications
The content of notifications on MacOS are not allowed to contain HTML
tags in it. Linux (Free Desktop) notifications may contain HTML tags
in their content. However, it is optional that the notification daemon
interprets the tags. The GNOME notification daemon does not interpret
HTML tags and even does not strip them off. KDE's daemon interprets
the tags. For now I think it's the best solution to remove the HTML
tags. In the future we should fire a action if the user clicks on the
notification and react on it and open the link then. This should work
on all platforms. But as this change involves working with the native
MacOS api and I don't have hardware for that at the moment for that I
will postpone it.

Fixes #2200

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-03-31 16:23:42 +02:00
173 changed files with 86364 additions and 58502 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@

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,7 +1,7 @@
set( MIRALL_VERSION_MAJOR 3 )
set( MIRALL_VERSION_MINOR 1 )
set( MIRALL_VERSION_PATCH 83 )
set( MIRALL_VERSION_YEAR 2020 )
set( MIRALL_VERSION_MINOR 2 )
set( MIRALL_VERSION_PATCH 4 )
set( MIRALL_VERSION_YEAR 2021 )
set( MIRALL_SOVERSION 0 )
# Minimum supported server version according to https://docs.nextcloud.com/server/latest/admin_manual/release_schedule.html

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

@@ -163,7 +163,8 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
file_stat->type = ItemTypeDirectory;
} else {
file_stat->type = ItemTypeFile;
// exclude ".lnk" files as they are not essential, but, causing troubles when enabling the VFS due to QFileInfo::isDir() and other methods are freezing, which causes the ".lnk" files to start hydrating and freezing the app eventually.
file_stat->type = !OCC::FileSystem::isLnkFile(path) ? ItemTypeFile : ItemTypeSoftLink;
}
/* Check for the hidden flag */

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

@@ -385,8 +385,7 @@ void AccountSettings::slotEditCurrentLocalIgnoredFiles()
void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath)
{
Q_ASSERT(absFolderPath.startsWith('/'));
Q_ASSERT(absFolderPath.endsWith('/'));
Q_ASSERT(QFileInfo(absFolderPath).isAbsolute());
const QString ignoreFile = absFolderPath + ".sync-exclude.lst";
auto layout = new QVBoxLayout();
@@ -572,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

@@ -227,7 +227,7 @@ bool AccountState::isDesktopNotificationsAllowed() const
return _isDesktopNotificationsAllowed;
}
void AccountState::setDesktopNotificationsAllowed(const bool isAllowed)
void AccountState::setDesktopNotificationsAllowed(bool isAllowed)
{
_isDesktopNotificationsAllowed = isAllowed;
}

View File

@@ -182,7 +182,7 @@ public:
/** Set desktop notifications status retrieved by the notificatons endpoint
*/
void setDesktopNotificationsAllowed(const bool isAllowed);
void setDesktopNotificationsAllowed(bool isAllowed);
/** Fetch the user status (status, icon, message)
*/

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

@@ -180,11 +180,11 @@ Q_LOGGING_CATEGORY(lcPublicLink, "nextcloud.gui.socketapi.publiclink", QtInfoMsg
void SocketListener::sendMessage(const QString &message, bool doWait) const
{
if (!socket) {
qCInfo(lcSocketApi) << "Not sending message to dead socket:" << message;
qCWarning(lcSocketApi) << "Not sending message to dead socket:" << message;
return;
}
qCInfo(lcSocketApi) << "Sending SocketAPI message -->" << message << "to" << socket;
qCDebug(lcSocketApi) << "Sending SocketAPI message -->" << message << "to" << socket;
QString localMessage = message;
if (!localMessage.endsWith(QLatin1Char('\n'))) {
localMessage.append(QLatin1Char('\n'));
@@ -313,6 +313,7 @@ void SocketApi::slotNewConnection()
foreach (Folder *f, FolderMan::instance()->map()) {
if (f->canSync()) {
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener.socket;
listener.sendMessage(message);
}
}
@@ -417,6 +418,7 @@ void SocketApi::slotRegisterPath(const QString &alias)
if (f) {
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
foreach (auto &listener, _listeners) {
qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener.socket;
listener.sendMessage(message);
}
}

View File

@@ -64,7 +64,7 @@ void ServerNotificationHandler::slotEtagResponseHeaderReceived(const QByteArray
}
}
void ServerNotificationHandler::slotAllowDesktopNotificationsChanged(const bool isAllowed)
void ServerNotificationHandler::slotAllowDesktopNotificationsChanged(bool isAllowed)
{
auto *account = qvariant_cast<AccountState *>(sender()->property(propertyAccountStateC));
if (account != nullptr) {

View File

@@ -26,7 +26,7 @@ private slots:
void slotNotificationsReceived(const QJsonDocument &json, int statusCode);
void slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode);
void slotIconDownloaded(QByteArray iconData);
void slotAllowDesktopNotificationsChanged(const bool isAllowed);
void slotAllowDesktopNotificationsChanged(bool isAllowed);
private:
QPointer<JsonApiJob> _notificationJob;

View File

@@ -219,7 +219,8 @@ void User::slotRefreshActivities()
_activityModel->slotRefreshActivity();
}
void User::slotRefreshUserStatus() {
void User::slotRefreshUserStatus()
{
// TODO: check for _account->account()->capabilities().userStatus()
if (_account.data() && _account.data()->isConnected()) {
_account.data()->fetchUserStatus();
@@ -698,7 +699,7 @@ Q_INVOKABLE bool UserModel::isUserConnected(const int &id)
return _users[id]->isConnected();
}
Q_INVOKABLE QUrl UserModel::statusIcon(const int &id)
Q_INVOKABLE QUrl UserModel::statusIcon(int id)
{
if (id < 0 || id >= _users.size()) {
return {};

View File

@@ -140,7 +140,7 @@ public:
Q_INVOKABLE bool currentUserHasLocalFolder();
int currentUserId() const;
Q_INVOKABLE bool isUserConnected(const int &id);
Q_INVOKABLE QUrl statusIcon(const int &id);
Q_INVOKABLE QUrl statusIcon(int id);
Q_INVOKABLE void switchCurrentUser(const int &id);
Q_INVOKABLE void login(const int &id);
Q_INVOKABLE void logout(const int &id);

View File

@@ -403,67 +403,57 @@ Window {
}
}
// Filler between account dropdown and header app buttons
Item {
id: trayWindowHeaderSpacer
Layout.fillWidth: true
}
RowLayout {
id: openLocalFolderRowLayout
spacing: 0
Layout.preferredWidth: Style.trayWindowHeaderHeight
Layout.preferredHeight: Style.trayWindowHeaderHeight
HeaderButton {
id: openLocalFolderButton
visible: UserModel.currentUser.hasLocalFolder
icon.source: "qrc:///client/theme/white/folder.svg"
onClicked: UserModel.openCurrentAccountLocalFolder()
Rectangle {
id: folderStateIndicatorBackground
width: Style.folderStateIndicatorSize
height: width
anchors.top: openLocalFolderButton.verticalCenter
anchors.left: openLocalFolderButton.horizontalCenter
color: Style.ncBlue
radius: width*0.5
z: 1
}
}
HeaderButton {
id: openLocalFolderButton
visible: UserModel.currentUser.hasLocalFolder
icon.source: "qrc:///client/theme/white/folder.svg"
onClicked: UserModel.openCurrentAccountLocalFolder()
Image {
id: folderStateIndicator
source: UserModel.isUserConnected(UserModel.currentUserId)
? Style.stateOnlineImageSource
: Style.stateOfflineImageSource
cache: false
anchors.top: openLocalFolderButton.verticalCenter
anchors.left: openLocalFolderButton.horizontalCenter
sourceSize.width: Style.folderStateIndicatorSize
sourceSize.height: Style.folderStateIndicatorSize
Accessible.role: Accessible.Indicator
Accessible.name: UserModel.isUserConnected(UserModel.currentUserId()) ? qsTr("Connected") : qsTr("Disconnected")
}
Accessible.role: Accessible.Button
Accessible.name: qsTr("Open local folder of current account")
Accessible.onPressAction: openLocalFolderButton.clicked()
}
Rectangle {
id: folderStateIndicatorBackground
width: Style.folderStateIndicatorSize
height: width
anchors.top: openLocalFolderButton.verticalCenter
anchors.left: openLocalFolderButton.horizontalCenter
color: Style.ncBlue
radius: width*0.5
}
Rectangle {
id: folderStateRectangle
width: Style.folderStateIndicatorSize
height: width
anchors.bottom: openLocalFolderButton.bottom
anchors.right: openLocalFolderButton.right
color: openLocalFolderButton.containsMouse ? "white" : "transparent"
opacity: 0.2
radius: width*0.5
}
Image {
id: folderStateIndicator
source: UserModel.isUserConnected(UserModel.currentUserId)
? Style.stateOnlineImageSource
: Style.stateOfflineImageSource
cache: false
x: folderStateIndicatorBackground.x
y: folderStateIndicatorBackground.y
sourceSize.width: Style.folderStateIndicatorSize
sourceSize.height: Style.folderStateIndicatorSize
Accessible.role: Accessible.Indicator
Accessible.name: UserModel.isUserConnected(UserModel.currentUserId()) ? qsTr("Connected") : qsTr("Disconnected")
}
HeaderButton {
id: trayWindowTalkButton
visible: UserModel.currentUser.serverHasTalk
icon.source: "qrc:///client/theme/white/talk-app.svg"
onClicked: UserModel.openCurrentAccountTalk()
Accessible.role: Accessible.Button
Accessible.name: qsTr("Open Nextcloud Talk in browser")
Accessible.onPressAction: trayWindowTalkButton.clicked()
@@ -472,6 +462,7 @@ Window {
HeaderButton {
id: trayWindowAppsButton
icon.source: "qrc:///client/theme/white/more-apps.svg"
onClicked: {
if(appsMenu.count <= 0) {
UserModel.openCurrentAccountServer()

View File

@@ -149,11 +149,11 @@ QString OCUpdater::statusString() const
case DownloadComplete:
return tr("%1 available. Restart application to start the update.").arg(updateVersion);
case DownloadFailed:
return tr("Could not download update. Please click <a href='%1'>here</a> to download the update manually.").arg(_updateInfo.web());
return tr("Could not download update. Please open %1 to download the update manually.").arg(_updateInfo.web());
case DownloadTimedOut:
return tr("Could not check for new updates.");
case UpdateOnlyAvailableThroughSystem:
return tr("New %1 is available. Please click <a href='%2'>here</a> to download the update.").arg(updateVersion, _updateInfo.web());
return tr("New %1 is available. Please open %2 to download the update.").arg(updateVersion, _updateInfo.web());
case CheckingServer:
return tr("Checking update server …");
case Unknown:

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

@@ -30,16 +30,37 @@ Q_LOGGING_CATEGORY(lcUserStatus, "nextcloud.gui.userstatus", QtInfoMsg)
UserStatus::UserStatus(QObject *parent)
: QObject(parent)
, _message("")
{
}
UserStatus::Status UserStatus::stringToEnum(const QString &status) const
{
// it needs to match the Status enum
const QHash<QString, Status> preDefinedStatus{{"online", Status::Online},
{"dnd", Status::DoNotDisturb}, //DoNotDisturb
{"away", Status::Away},
{"offline", Status::Offline},
{"invisible", Status::Invisible}};
// api should return invisible, dnd,... toLower() it is to make sure
// it matches _preDefinedStatus, otherwise the default is online (0)
const auto statusEnum = _preDefinedStatus.value(status.isEmpty()? "online" : status.toLower(), 0);
return static_cast<Status>(statusEnum);
const auto statusKey = status.isEmpty() ? QStringLiteral("online") : status.toLower();
return preDefinedStatus.value(statusKey, Status::Online);
}
QString UserStatus::enumToString(Status status) const
{
switch (status) {
case Status::Away:
return tr("Away");
case Status::DoNotDisturb:
return tr("Do not disturb");
case Status::Invisible:
case Status::Offline:
return tr("Offline");
default:
return tr("Online");
}
}
void UserStatus::fetchUserStatus(AccountPtr account)
@@ -53,10 +74,9 @@ void UserStatus::fetchUserStatus(AccountPtr account)
_job->start();
}
void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode)
void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode)
{
const QJsonObject defaultValues
{
const QJsonObject defaultValues {
{"icon", ""},
{"message", ""},
{"status", "online"}
@@ -66,19 +86,13 @@ void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const in
qCInfo(lcUserStatus) << "Slot fetch UserStatus finished with status code" << statusCode;
qCInfo(lcUserStatus) << "Using then default values as if user has not set any status" << defaultValues;
}
const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject(defaultValues);
const auto emoji = retrievedData.value("icon").toString();
const auto message = retrievedData.value("message").toString();
auto statusString = retrievedData.value("status").toString();
_status = stringToEnum(statusString);
// to display it to the user like 'Invisible' instead of 'invisible'
statusString.replace(0, 1, statusString.at(0).toUpper());
const auto visibleStatusText = message.isEmpty()
? _status == DoNotDisturb? tr("Do not disturb")
: tr(qPrintable(statusString))
: message;
_status = stringToEnum(retrievedData.value("status").toString());
const auto visibleStatusText = message.isEmpty() ? enumToString(_status) : message;
_message = QString("%1 %2").arg(emoji, visibleStatusText);
emit fetchUserStatusFinished();
@@ -91,20 +105,18 @@ UserStatus::Status UserStatus::status() const
QString UserStatus::message() const
{
return _message;
return _message.trimmed();
}
QUrl UserStatus::icon() const
{
switch (_status) {
case Online:
return Theme::instance()->statusOnlineImageSource();
case Away:
case Status::Away:
return Theme::instance()->statusAwayImageSource();
case DoNotDisturb:
case Status::DoNotDisturb:
return Theme::instance()->statusDoNotDisturbImageSource();
case Invisible:
case Offline:
case Status::Invisible:
case Status::Offline:
return Theme::instance()->statusInvisibleImageSource();
default:
return Theme::instance()->statusOnlineImageSource();

View File

@@ -28,7 +28,7 @@ class UserStatus : public QObject
public:
explicit UserStatus(QObject *parent = nullptr);
enum Status {
enum class Status {
Online,
DoNotDisturb,
Away,
@@ -42,23 +42,16 @@ public:
QUrl icon() const;
private slots:
void slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode);
void slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode);
signals:
void fetchUserStatusFinished();
private:
Status stringToEnum(const QString &status) const;
// it needs to match the Status enum
const QHash<QString, int> _preDefinedStatus{{"online", 0},
{"dnd", 1}, //DoNotDisturb
{"away", 2},
{"offline", 3},
{"invisible", 4}};
QString enumToString(Status status) const;
QPointer<JsonApiJob> _job; // the currently running job
Status _status{Status::Online};
Status _status = Status::Online;
QString _message;
};

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

@@ -13,6 +13,7 @@
*/
#include "discovery.h"
#include "common/filesystembase.h"
#include "common/syncjournaldb.h"
#include "syncfileitem.h"
#include <QDebug>
@@ -177,9 +178,15 @@ void ProcessDirectoryJob::process()
// local stat function.
// Recall file shall not be ignored (#4420)
bool isHidden = e.localEntry.isHidden || (f.first[0] == '.' && f.first != QLatin1String(".sys.admin#recall#"));
#ifdef Q_OS_WIN
// exclude ".lnk" files as they are not essential, but, causing troubles when enabling the VFS due to QFileInfo::isDir() and other methods are freezing, which causes the ".lnk" files to start hydrating and freezing the app eventually.
const bool isServerEntryWindowsShortcut = !e.localEntry.isValid() && e.serverEntry.isValid() && !e.serverEntry.isDirectory && FileSystem::isLnkFile(e.serverEntry.name);
#else
const bool isServerEntryWindowsShortcut = false;
#endif
if (handleExcluded(path._target, e.localEntry.name,
e.localEntry.isDirectory || e.serverEntry.isDirectory, isHidden,
e.localEntry.isSymLink))
e.localEntry.isSymLink || isServerEntryWindowsShortcut))
continue;
if (_queryServer == InBlackList || _discoveryData->isInSelectiveSyncBlackList(path._original)) {
@@ -506,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);
@@ -1038,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

@@ -425,7 +425,7 @@ signals:
* @brief desktopNotificationStatusReceived - signal to report if notifications are allowed
* @param status - set desktop notifications allowed status
*/
void allowDesktopNotificationsChanged(const bool isAllowed);
void allowDesktopNotificationsChanged(bool isAllowed);
private:
QUrlQuery _additionalParams;

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)

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