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

Compare commits

..

631 Commits

Author SHA1 Message Date
Nextcloud bot
dda6f14e7b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-06 03:51:36 +00:00
Nextcloud bot
b97ac8c638 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-05 03:51:54 +00:00
Nextcloud bot
a289f46b45 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-04 03:53:06 +00:00
allexzander
59a8ff50ef Merge pull request #4245 from nextcloud/backport/4218/stable-3.4
[stable-3.4] Cmake option to disable proxy
2022-02-03 15:05:10 +02:00
alex-z
a4a13a98d3 Cmake option to disable proxy
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-02-03 12:28:06 +00:00
Nextcloud bot
65c1f5eb88 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-02 03:53:20 +00:00
István Váradi
fe5c6f5758 Merge pull request #4238 from nextcloud/backport/4212/stable-3.4
[stable-3.4] Remove Hirsute, add Jammy
2022-02-01 17:19:38 +01:00
István Váradi
898427da27 Remove Hirsute, add Jammy
Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
2022-02-01 15:19:13 +00:00
Nextcloud bot
a96a38b214 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-01 03:53:19 +00:00
Nextcloud bot
cde199a432 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-31 03:53:17 +00:00
Nextcloud bot
463c534ca2 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-30 03:51:39 +00:00
Nextcloud bot
7f6523b17b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-29 03:54:04 +00:00
Nextcloud bot
9f939ce6ed [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-28 03:52:37 +00:00
allexzander
b0791e51ce Merge pull request #4208 from nextcloud/bump-version-3.4.2
Bump version 3.4.2
2022-01-27 10:55:36 +02:00
alex-z
11a36158ad Bump version to 3.4.2
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-27 10:53:36 +02:00
allexzander
d74024baf4 Merge pull request #4203 from nextcloud/backport/4167/stable-3.4
[stable-3.4] Add macOS *.textClipping files to ignore list
2022-01-27 10:51:17 +02:00
Nextcloud bot
f95ff45c16 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-27 03:53:22 +00:00
Claudio Cambra
d6d8132b36 Add macOS *.textClipping files to ignore list
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
2022-01-26 13:46:28 +00:00
Nextcloud bot
b426ca3579 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-26 03:53:20 +00:00
Nextcloud bot
4aabf339ea [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-25 03:53:42 +00:00
allexzander
f3c5081c38 Merge pull request #4197 from nextcloud/backport/4191/stable-3.4
[stable-3.4] use proper API to dehydrate a placeholder file
2022-01-24 17:19:02 +02:00
Matthieu Gallien
63863d15ad use proper API to dehydrate a placeholder file
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2022-01-24 14:51:30 +00:00
Nextcloud bot
e5690d77f6 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-24 03:50:40 +00:00
Nextcloud bot
cbc3cfb8ab [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-21 03:49:51 +00:00
Nextcloud bot
eae2e0075f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-20 03:52:12 +00:00
Nextcloud bot
c875ebecda [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-19 03:50:57 +00:00
Nextcloud bot
ac114950ed [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-18 04:09:38 +00:00
Nextcloud bot
869b3f5f81 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-17 03:47:43 +00:00
Nextcloud bot
60fc03acb5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-16 03:51:26 +00:00
Nextcloud bot
34c782c81d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-15 03:49:56 +00:00
Matthieu Gallien
a668cb123f Merge pull request #4179 from nextcloud/backport/4102/stable-3.4
[stable-3.4] Show only filenames in tray activity items, with full path in tooltip
2022-01-14 15:00:04 +01:00
Claudio Cambra
4b2dbd54d2 Show only filenames in tray activity items, with full path in tooltip
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
2022-01-14 10:46:38 +00:00
Nextcloud bot
7947b31d64 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-14 03:52:49 +00:00
allexzander
318bc32a06 Merge pull request #4174 from nextcloud/backport/4171/stable-3.4
[stable-3.4] Bugfix. Re-init sharing manager to enable link sharing UI when receivng sharing permissions.
2022-01-13 11:40:34 +02:00
alex-z
985eba8fa3 Bugfix. Re-init sharing manager to enable link sharing UI when receiving sharing permissions.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-13 09:37:52 +00:00
Nextcloud bot
ebf41b181b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-13 03:51:12 +00:00
Matthieu Gallien
eefdb04277 Merge pull request #4170 from nextcloud/backport/4137/stable-3.4
[stable-3.4] Display error message when creating a link share with compromised password.
2022-01-12 14:57:49 +01:00
alex-z
ac4435aa86 Fix review comments.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-12 12:25:43 +00:00
alex-z
1d85963551 Fix review comments.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-12 12:25:43 +00:00
alex-z
269be3cb4f Fix review comments.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-12 12:25:43 +00:00
alex-z
866a1da899 Display error message when creating a link share with compromised password.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-12 12:25:43 +00:00
Matthieu Gallien
9f075be5c4 Merge pull request #4169 from nextcloud/backport/4090/stable-3.4
[stable-3.4] Hide share button for deleted files and ignored files in tray activity
2022-01-12 13:24:30 +01:00
Claudio Cambra
c1e5a0a890 Hide share button for deleted and ignored files in tray activity
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
2022-01-12 10:39:38 +00:00
Nextcloud bot
1035bca4ae [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-12 03:50:48 +00:00
Nextcloud bot
195218e0a3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-11 03:51:28 +00:00
Nextcloud bot
bc1bd64ece [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-10 03:53:46 +00:00
Matthieu Gallien
586afaacb6 Merge pull request #4156 from nextcloud/backport/4022/stable-3.4
[stable-3.4] Unbreak loading translations
2022-01-08 19:37:49 +01:00
Antonio Rojas
b4690f5721 Unbreak loading translations
Commit 18ddb9df4a changed SHAREDIR to point to CMAKE_INSTALL_DATADIR, which is a relative path by default. This prevents the C++ code from finding the translations at runtime.

Signed-off-by: Antonio Rojas <arojas@archlinux.org>
2022-01-08 17:32:03 +00:00
Nextcloud bot
5ceb98c266 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-08 03:48:31 +00:00
Matthieu Gallien
0c92cfc644 Merge pull request #4151 from nextcloud/backport/4115/stable-3.4
[stable-3.4] Windows. MSI. Unregister Nextcloud folders in SyncRootManager on uninstall.
2022-01-07 23:32:25 +01:00
alex-z
ba4f53679a Windows. MSI. Unregister Nextcloud folders in SyncRootManager on uninstall.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-07 17:46:36 +00:00
Matthieu Gallien
820f22ba0d Merge pull request #4150 from nextcloud/backport/4111/stable-3.4
[stable-3.4] Do not display 'Conflict when uploading some files to a folder
2022-01-07 18:43:10 +01:00
alex-z
80df113fd2 Do not display 'Conflict when uploading some files to a folder
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-07 17:02:05 +00:00
Nextcloud bot
4abeda01b7 [tx-robot] updated from transifex 2022-01-07 14:02:58 +00:00
Nextcloud bot
42f6606d52 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-07 03:51:24 +00:00
Nextcloud bot
b17d03c0ab [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-06 03:51:38 +00:00
allexzander
4ace64f1d7 Merge pull request #4140 from nextcloud/backport/4116/stable-3.4
[stable-3.4] Bugfix/force re-login on SSL Handshake error
2022-01-05 16:04:55 +02:00
alex-z
5e26d76d2b Try to sign-in after being signed-out due to SslHandshakeFailedError
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-05 13:26:05 +00:00
Nextcloud bot
689ecbcb5b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-05 03:51:19 +00:00
Nextcloud bot
de6aa7be02 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-04 03:50:40 +00:00
Nextcloud bot
d0957fc071 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-03 03:50:31 +00:00
Nextcloud bot
fe6d126443 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-02 03:50:19 +00:00
Nextcloud bot
645688ae20 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-31 03:51:16 +00:00
Nextcloud bot
d3d2500807 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-30 03:51:14 +00:00
Nextcloud bot
a4493606e0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-29 03:51:39 +00:00
Nextcloud bot
6d2ef0b410 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-28 03:51:10 +00:00
Nextcloud bot
05c731c4c1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-24 03:53:12 +00:00
Nextcloud bot
1915ab7989 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-23 03:51:27 +00:00
Nextcloud bot
54d0351b42 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-22 03:53:10 +00:00
Nextcloud bot
282e47d266 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-21 03:52:06 +00:00
Nextcloud bot
07c81c02da [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-20 03:54:16 +00:00
Nextcloud bot
2ef6a20edc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-19 03:57:03 +00:00
Nextcloud bot
79ffdac989 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-18 03:51:37 +00:00
Matthieu Gallien
fa32c10014 Merge pull request #4097 from nextcloud/bumpVersion
Bump version
2021-12-17 16:52:51 +01:00
Matthieu Gallien
fe67d66d3d Release 3.4.1
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-17 16:46:27 +01:00
Nextcloud bot
3a3a6dd6b8 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-17 03:55:43 +00:00
Matthieu Gallien
328c673c29 Merge pull request #4094 from nextcloud/backport/4092/stable-3.4
[stable-3.4] ensure any errors after calling FileSystem::getModTime are handled
2021-12-16 18:52:03 +01:00
Matthieu Gallien
49afad0474 ensure any errors after calling FileSystem::getModTime are handled
be sure that even in release mode no errors when calling getModTime
could be ignored

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-16 15:01:20 +00:00
allexzander
7c3e91202e Merge pull request #4083 from nextcloud/backport/4058/stable-3.4
[stable-3.4] Do not crash on findAndCancelDeletedJob
2021-12-16 15:37:07 +02:00
alex-z
e94b18f97f Added sync stop when failed to cancel delete jobs.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-16 13:09:41 +00:00
alex-z
79a0b937f5 Do not crash on findAndCancelDeletedJob.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-16 13:09:41 +00:00
Nextcloud bot
e5fbc8c2dd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-16 03:51:22 +00:00
Matthieu Gallien
3632cc659b Merge pull request #4080 from nextcloud/backport/4076/stable-3.4
[stable-3.4] Bugfix/avoid sync getting stuck
2021-12-15 11:51:55 +01:00
Matthieu Gallien
1731bf7c86 fix review comment
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-15 10:01:02 +00:00
Matthieu Gallien
936d37fd0b ensure bulk upload jobs finished after an error
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-15 10:01:02 +00:00
Nextcloud bot
7259a0bc0d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-15 03:50:48 +00:00
allexzander
06de878b4b Merge pull request #4081 from nextcloud/backport/4079/stable-3.4
[stable-3.4] Fix CMake error in ECMAddAppIcon for mac
2021-12-14 22:59:39 +02:00
alex-z
179ff27ab6 Fix CMake error in ECMAddAppIcon for mac.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-14 18:18:01 +00:00
allexzander
44da2f2ce2 Merge pull request #4078 from nextcloud/backport/4073/stable-3.4
[stable-3.4] Enforce VFS. Disable 'Make always available locally'.
2021-12-14 18:20:56 +02:00
alex-z
92b302fb37 Save folder settings to config when force-switching VFS.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-14 16:07:19 +00:00
alex-z
d2febdf17c Enforce VFS. Disable 'Make always available locally'.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-14 16:07:19 +00:00
Matthieu Gallien
9c4b4c6183 Merge pull request #4075 from nextcloud/backport/4074/stable-3.4
[stable-3.4] Bugfix/force download local invalid files
2021-12-14 16:27:31 +01:00
Matthieu Gallien
45029e9012 force download from server for local files that have invalid dates
will trigger if local state is incoherent
like the file itself haveing 0 or negative modtime and the database not

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-14 10:15:55 +00:00
Nextcloud bot
969b0e8e2e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-14 03:50:21 +00:00
Nextcloud bot
4b46da9370 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-13 03:50:36 +00:00
Nextcloud bot
8b5dd53519 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-12 03:52:44 +00:00
Nextcloud bot
5ee5b19406 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-11 03:51:31 +00:00
Matthieu Gallien
8e1c62cc70 Merge pull request #4066 from nextcloud/backport/4064/stable-3.4
[stable-3.4] Bugfix/sync stuck on error
2021-12-10 15:01:00 +01:00
Matthieu Gallien
151e9300cd do not get stuck forever in sync in case of errors
when a local file has invalid date and we try to upload it, properly
handle the error such that we are not stuck forever in sync state

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-10 12:37:54 +00:00
Nextcloud bot
efc3116f30 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-10 03:54:52 +00:00
Matthieu Gallien
4296a6041a Merge pull request #4057 from nextcloud/backport/4055/stable-3.4
[stable-3.4] Bugfix/3.4.1 rc1
2021-12-09 12:13:11 +01:00
Matthieu Gallien
0d1e0057b3 remove files which gets downloaded with an invalid modified time
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-09 09:09:22 +00:00
Nextcloud bot
5aadc7a62d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-09 03:54:43 +00:00
allexzander
3c28e38089 Merge pull request #4050 from nextcloud/backport/4014/stable-3.4
[stable-3.4] Feature/folder logo variations
2021-12-08 14:41:12 +02:00
alex-z
dba8fd7c76 Use different icon for a sync folder on Windows depending on zoom level.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-08 11:36:40 +00:00
Camila
39c2bb555a Merge pull request #4051 from nextcloud/backport/4031/stable-3.4
[stable-3.4] Always prefill username from Windows login name based on server version
2021-12-08 11:15:39 +01:00
alex-z
39fc86cbcf Always prefill username from Windows login name based on server version
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-12-08 09:13:33 +00:00
Matthieu Gallien
8d574c11e8 Merge pull request #4049 from nextcloud/backport/4045/stable-3.4
[stable-3.4] Bugfix/assert invalid modtime
2021-12-08 09:10:25 +01:00
Matthieu Gallien
c02d87f283 add log statements for each new assert about invalid modified time
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
ddb5375c68 recover from local invalid modifie time: force download from server
force file download if local modified time is invalid and server has
valid modified time

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
bd78604468 prevent cases where desktop client would store invalid modified time
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
4920b4d4af prevent injecting invalid modified time through CfApi calls
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
d12d00562f do not consider that a file has changed if its mtime is invalid
a mtime should never be 0 or negative

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
b17bbb2b22 avoid downloading a file from server when modified time is invalid
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
fc64edba11 prevent invalid modified time from being propagated
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Matthieu Gallien
b6c7581414 assert on invalid modtime
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-08 08:01:27 +00:00
Nextcloud bot
962850f307 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-08 04:03:04 +00:00
Matthieu Gallien
88ab5557bd Merge pull request #4046 from nextcloud/backport/4033/stable-3.4
[stable-3.4] do not forget the path when renaming files with invalid names
2021-12-07 16:28:07 +01:00
Matthieu Gallien
e3fb3bbe73 do not forget the path when renaming files with invalid names
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-07 12:42:44 +00:00
Matthieu Gallien
a86a1b4c17 test files that should be renamed in sub-directory
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-12-07 12:42:44 +00:00
Nextcloud bot
4326a70ede [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-07 05:07:03 +00:00
Nextcloud bot
2880bd62ce [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-06 03:59:01 +00:00
Nextcloud bot
b49633a9f7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-05 04:06:08 +00:00
Nextcloud bot
adfe7ad953 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-04 04:01:04 +00:00
Nextcloud bot
e45a01bc03 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-03 03:56:48 +00:00
Nextcloud bot
9bcbc15834 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-02 03:56:35 +00:00
Nextcloud bot
b4a19bb6d3 [tx-robot] updated from transifex 2021-12-01 18:45:48 +00:00
Nextcloud bot
52db45c2b1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-01 03:59:02 +00:00
Nextcloud bot
b3d8cacf8c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-30 03:56:41 +00:00
Camila
c004db2070 Merge pull request #4013 from nextcloud/backport/4012/stable-3.4
[stable-3.4] fix random error when updating CfApi metadata
2021-11-29 18:26:00 +01:00
Matthieu Gallien
48ada55e77 fix random error when updating CfApi metadata
initialiazing all fields in a structure is required to not have random
behavior

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-29 17:24:46 +00:00
Camila
fd60e60541 Merge pull request #4010 from nextcloud/bump-version
Bump VERSION.cmake to 3.4.0.
2021-11-29 14:46:29 +01:00
Camila
fb833ed311 Bump VERSION.cmake to 3.4.0.
Signed-off-by: Camila <hello@camila.codes>
2021-11-29 14:33:29 +01:00
Nextcloud bot
1440c53ed6 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-29 03:52:09 +00:00
Nextcloud bot
bd42c35e80 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-28 03:50:40 +00:00
Nextcloud bot
a5c82670c9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-27 03:53:51 +00:00
Matthieu Gallien
3c966a77df Merge pull request #4006 from nextcloud/bugfix/speedUpBulkUpload
Bugfix/speed up bulk upload
2021-11-26 17:50:01 +01:00
Matthieu Gallien
1a9aade28e use the error message sent by the server for bulk upload
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 16:32:08 +01:00
Matthieu Gallien
34c4c28879 allow sending parallel batch of files: curretly disabled
can allow to send a new batch before the reply to a previous one is
received

due to concerns with the reliability on the server side this is disabled

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 16:32:08 +01:00
Matthieu Gallien
a272b34809 really check that this is a valid answer when receiving batch upload
we could somehow miss that the reply is missing proper fields

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 15:49:25 +01:00
Matthieu Gallien
05b8d1e40d batch upload: only handle file that are in the reply
do not handle all files sent but only received ones

should allow to submit more than one request in parallel

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 15:49:25 +01:00
Matthieu Gallien
18ef471332 let auto tests of batch upload return proper file paths
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 15:49:25 +01:00
Matthieu Gallien
e14502606c make sure we do not start a new batch when the previous one is not sent
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 15:49:25 +01:00
Matthieu Gallien
59953d857b use a proper constant for the size of batch
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 15:49:25 +01:00
Matthieu Gallien
436eced9fb Merge pull request #4003 from nextcloud/bugfix/errorBulkUpload
if BulkPropagatorJob abort after an error emit finished signal
2021-11-26 15:31:15 +01:00
Matthieu Gallien
f56985938d if BulkPropagatorJob abort after an error emit finished signal
prevent sync engine being stuck because of an error when preparing bulk
upload

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-26 12:48:38 +01:00
Nextcloud bot
56f4198b28 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-26 04:14:39 +00:00
Nextcloud bot
6b22081f61 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-25 03:52:56 +00:00
Matthieu Gallien
a5fa53c460 Merge pull request #4001 from nextcloud/bumpVersion
release 3.4.0 RC2
2021-11-24 18:04:18 +01:00
Matthieu Gallien
426e0af8cd release 3.4.0 RC2
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-24 17:46:10 +01:00
Matthieu Gallien
e2f1854b1e Merge pull request #3887 from nextcloud/feature/bulkUpload
Feature/bulk upload
2021-11-24 17:42:25 +01:00
Matthieu Gallien
c194605c35 implement bulk upload
add PutMultiFileJob to send many files at once

use it in BulkPropagatorJob to implement bulk upload feature

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-24 16:17:47 +01:00
Matthieu Gallien
112be18635 read capabilities for bulk upload from server
use it in dedicated tests

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-24 16:17:47 +01:00
Matthieu Gallien
802c7ac906 make AbstractNetworkJob::errorString virtual: it is already overriden
in practice AbstractNetworkJob::errorString is already overriden but the
overrided code is probably never called while the intention looked like
the opposite

fix that by making the method virtual in base class

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-24 16:17:47 +01:00
allexzander
f575cc1860 Merge pull request #3930 from nextcloud/feature/additional-features-for-initial-setup-config
Pass username from Windows to login page.
2021-11-24 13:26:29 +02:00
alex-z
b03bf1c1f0 Pass username from Windows to login page.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-24 10:04:22 +00:00
Matthieu Gallien
9bebda057a Merge pull request #3993 from nextcloud/bugfix/variousVfsFixes
Bugfix/various vfs fixes
2021-11-23 17:11:07 +01:00
Matthieu Gallien
83a8058b51 improve logging for CfApi
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-23 13:41:29 +00:00
Matthieu Gallien
072e9d44bd gracefully handle one case of invalid handles
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-23 13:41:29 +00:00
Matthieu Gallien
a3013de6ea fix OCC::CfApiWrapper::handleForPath when path does not exist
sometime it can be called with a path that is already deleted

ensure we always go to the correct code path

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-23 13:41:29 +00:00
Matthieu Gallien
9eed62a854 remove too noisy log print
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-23 13:41:29 +00:00
Camila
79282a8df9 Merge pull request #3983 from nextcloud/bugfix/only-build-app-bundle-if-needed
Only build app bundle if requested
2021-11-23 14:13:45 +01:00
Felix Weilbach
ec64246dc7 Only build app bundle if requested
For development a app bundle is not needed. The app bundle is only
needed for distribution and macdeployqt takes a lot of time.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-23 11:41:29 +00:00
Matthieu Gallien
c89d2abf5a Merge pull request #3994 from nextcloud/bugfix/reset-syncfolder-icon
Cleanup system bindings from Windows when removing a local sync folder
2021-11-23 10:58:06 +01:00
alex-z
b3914f627d Cleanup system bindings from Windows when removing a local sync folder
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-23 08:32:55 +00:00
Nextcloud bot
998236dcc5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-23 03:55:50 +00:00
Matthieu Gallien
d9626bf311 Merge pull request #3989 from nextcloud/bugfix/forceVFS
fix button that should be disabled when force VFS
2021-11-22 15:52:19 +01:00
Matthieu Gallien
684d70985e fix button that should be disabled when force VFS
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-22 14:22:59 +01:00
Matthieu Gallien
e92842d837 Merge pull request #3982 from nextcloud/addUserAgentQml
add a network access factory to qml engine
2021-11-22 13:51:55 +01:00
Matthieu Gallien
12c6d6e3bd add a network access factory to qml engine
ensure network access made via qml are using our user agent

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-22 12:21:58 +00:00
Matthieu Gallien
1d704d9352 Merge pull request #3971 from nextcloud/fix/scrolling-activiy-list
Make scrolling with a touchpad in activity list and search result more natural
2021-11-22 13:20:27 +01:00
Carl Schwan
38ac585e7c Add WheelHandler to the Search result list too
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2021-11-22 11:18:18 +00:00
Carl Schwan
892d289f38 [tray] Makes scrolling with a touchpad in activiy list more natural
This basically use the same method that is used in Kirigami and Plasma
Components3.

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2021-11-22 11:18:18 +00:00
allexzander
5294c5135c Merge pull request #3987 from nextcloud/bugfix/upload-new-folder-with-vfs
Quick fix! Disable VFS folders removal for non-Windows VFS.
2021-11-22 12:39:01 +02:00
alex-z
8e6896ba03 Quick fix! Disable VFS folders removal for non-Windows VFS.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-22 12:37:18 +02:00
Nextcloud bot
b2e86c2ea3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-21 03:52:24 +00:00
Nextcloud bot
8cc58dd8b0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-20 04:12:29 +00:00
Matthieu Gallien
ca1620ef42 Merge pull request #3988 from nextcloud/bugfix/runVfsFixOnlyOnce
properly query sync journal DB to know when to run fix for VFS
2021-11-19 14:38:03 +01:00
Matthieu Gallien
f1d834df8e properly query sync journal DB to know when to run fix for VFS
the new method added to query the db is not working and so the fix for
vfs is executed at each sync run

the new method for bool was not really needed so let's just remove it
(and that will make the usage of SqlQuery be correct

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-19 14:19:04 +01:00
allexzander
502ffc62ef Merge pull request #3984 from nextcloud/bugfix/vfs-folder-upload-conflict
Added more logs to 'postProcessLocalNew'.
2021-11-19 11:48:05 +02:00
alex-z
73db636361 Added more logs to 'postProcessLocalNew'.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-19 09:10:20 +00:00
Nextcloud bot
b222785dc2 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-19 04:35:47 +00:00
Nextcloud bot
5454004ef9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-18 13:37:40 +00:00
Matthieu Gallien
ed9671c2a6 Merge pull request #3985 from nextcloud/bugfix/unified-search-open-local-file
Use QUrl::fromLocalFile to open local files in Unified Search results
2021-11-18 10:58:50 +01:00
alex-z
911e35bc50 Use QUrl::fromLocalFile to open local files in Unified Search results.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-18 09:34:54 +00:00
Nextcloud bot
898949d1bc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-18 09:08:38 +00:00
Matthieu Gallien
ef8fe58245 Merge pull request #3978 from nextcloud/bugfix/correct-placeholder-files
Correct virtual files placeholder files if needed
2021-11-17 11:31:29 +01:00
Felix Weilbach
9e792369b2 Refactor key-value store query code
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-17 09:53:26 +00:00
Felix Weilbach
c76a77e431 Correct virtual files placeholder files if needed
In the past not all files were converted to placeholder files when
converting an existing sync folder to a virtual files folder. Because
some files were not converted to placeholder files, the status would
be wrong on the files. This code makes sure that every file in a
virtual files folder is a placeholder file. It could be removed in the
future.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-17 09:53:26 +00:00
Felix Weilbach
2308c9da49 Merge pull request #3979 from nextcloud/bugfix/avoidUselessIconDownloads
avoid adding icon data in a cache we never use
2021-11-17 10:17:27 +01:00
Matthieu Gallien
c59f88ca82 avoid adding icon data in a cache we never use
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-16 16:11:44 +01:00
Matthieu Gallien
3edfcff1a0 Merge pull request #3972 from nextcloud/fix/accessibility-keyboard
Fix focus indicator
2021-11-16 14:53:35 +01:00
Carl Schwan
d84673376d More fixes to the menu implementation
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2021-11-16 09:27:10 +00:00
Carl Schwan
69def04ec2 Fix focus indicator
This improve considerably the keyboard navigation in the SystemTray.
But this is still not as good as the golden standard that is recommended
by this article: https://www.sarasoueidan.com/blog/focus-indicators/

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2021-11-16 09:27:10 +00:00
Matthieu Gallien
3e1a46f2de Merge pull request #3969 from nextcloud/bugfix/finder-arch
Compile Finder extensions for arm and x86
2021-11-16 10:25:58 +01:00
Felix Weilbach
113ba716e6 Compile finder extensions for arm and x86
Fix: https://github.com/nextcloud/desktop/issues/3967

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-16 08:54:48 +00:00
Matthieu Gallien
703037cbfb Merge pull request #3968 from nextcloud/bugfix/user-status-disabled
Check if the server has user status app enabled
2021-11-16 09:53:37 +01:00
Felix Weilbach
07a8e8c91d Check if the server has user status app enabled
According to
https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-status-api.html#user-status-retrieve-statuses
we should check the user status capability, not the the end points.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-15 16:20:58 +00:00
Matthieu Gallien
df745ef39c Merge pull request #3970 from nextcloud/updateDoc
we run on Windows 8.1+
2021-11-15 17:19:24 +01:00
Matthieu Gallien
2665c8fc16 we run on Windows 8.1+
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-15 13:40:51 +00:00
Matthieu Gallien
cb34fec596 Merge pull request #3959 from Minoru/bugifx/detect-missing-guiprivate
CMake: fail if `Qt5::GuiPrivate` is not found
2021-11-15 13:18:30 +01:00
Alexander Batischev
d8560dcb19 CMake: fail if Qt5::GuiPrivate is not found
`nextcloud` and `nextcloudCore` depend on three Qt5 components which
aren't mentioned in `find_library`: `Xml`, `Network`, and `GuiPrivate`.
The first two are omitted by mistake, apparently, so this commit just
adds them.

`GuiPrivate` is a special case: it doesn't have its own CMake config, so
adding it to "required components" in `find_package` will always fail
the build. Thus, we implement our own check instead.

Signed-off-by: Alexander Batischev <eual.jp@gmail.com>
2021-11-15 13:57:18 +03:00
Felix Weilbach
0e5f1d9a30 Merge pull request #3966 from nextcloud/bugfix/macos-installer-universal
Let the macOS installer know that the application can run on Arm64
2021-11-15 09:43:55 +01:00
Felix Weilbach
ad814f175e Let the macOS installer know that the application can run on Arm64
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-12 01:42:37 +01:00
Felix Weilbach
94dec9d9bb Merge pull request #3964 from nextcloud/bump-3.4.0-rc1
Bump to version 3.4.0-rc1
2021-11-11 09:42:18 +01:00
Felix Weilbach
56bb3e7938 Bump to version 3.4.0-rc1
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-11 10:39:51 +01:00
Felix Weilbach
263cdd3c8b Merge pull request #3956 from nextcloud/feature/macos-universal
Add a script to create a universal app package
2021-11-10 18:53:40 +01:00
Felix Weilbach
6d5597e93e Add a script to create a universal app package
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-10 13:57:47 +00:00
Matthieu Gallien
41b2d7744d Merge pull request #3961 from nextcloud/bugfix/examplecloud
Take branding for vfs plugins into account
2021-11-10 14:32:55 +01:00
Felix Weilbach
7e45dd9d14 Take branding for vfs plugins into account
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-10 15:13:25 +01:00
Felix Weilbach
48a8085453 Merge pull request #3935 from nextcloud/feature/profile-page
Add profile page
2021-11-10 14:02:23 +01:00
Felix Weilbach
3e368ee4df IconJob: Send request through the accounts NAS
This helps tracking requests on the server

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-10 13:11:49 +01:00
Felix Weilbach
db337c4457 Add profile page
Fix: #3889

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-10 13:11:47 +01:00
Matthieu Gallien
4bd9972d46 Merge pull request #3955 from nextcloud/feature/enforceVFS
add an option to enforce use of virtual files sync folder
2021-11-08 14:26:32 +01:00
Matthieu Gallien
5ab13b2adc add an option to enforce use of virtual files sync folder
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-05 16:56:24 +01:00
Matthieu Gallien
845e258031 Merge pull request #3945 from nextcloud/rakekniven-patch-1
Make argument singular to fix i18n issue
2021-11-05 11:25:31 +01:00
rakekniven
416d98716f Make argument singular to fix i18n issue
Reported at Transifex.
See https://www.transifex.com/nextcloud/nextcloud/translate/#hu_HU/client/309577611

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-11-05 10:00:17 +01:00
Matthieu Gallien
30d4a62707 Merge pull request #3938 from nextcloud/bugfix/unified-search-bug-fixes
Bugfix/unified search bug fixes
2021-11-04 22:36:44 +01:00
alex-z
2f3c58daac Fix review comments. Use QImage for QML and QPixmap for rest of code. Do not cache images for QML. Fix tests. Use signal in QML.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-04 20:50:51 +00:00
alex-z
0b8ab5c079 Use SvgRenderer for Unified Search input icons. Refactor IconUtils. Extend unit tests.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-04 20:50:51 +00:00
alex-z
0d8375e798 Clear Unified Search Input Field in a proper way
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-04 20:50:51 +00:00
Matthieu Gallien
7dd09b8d8a Merge pull request #3948 from nextcloud/bugfix/pn-connection-check
Don't do a connection checks when using push notifications
2021-11-04 21:49:28 +01:00
Felix Weilbach
d661e91a58 Don't do a connection checks when using push notifications
When using push notifications, it is not necessary to do regular
connection checks because the push notifications will take care of it.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-04 18:07:22 +00:00
Matthieu Gallien
d11935b6fc Merge pull request #3612 from nextcloud/bugfix/fixVfsPinState
Bugfix/fix vfs pin state
2021-11-04 18:53:25 +01:00
Felix Weilbach
650578ee64 Don't convert exclude file to placeholder file
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-04 18:18:50 +01:00
Matthieu Gallien
43ec429fe4 improve logs when place holder info cannot be read
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-04 15:02:27 +01:00
Matthieu Gallien
9658aea963 on switch to VFS real plugin, convert existing files to placeholders
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-04 15:02:27 +01:00
allexzander
6ad63fb770 Merge pull request #3946 from nextcloud/feature/implement-expiration-date-for-federated-shares
Implement expiration date for federated shares
2021-11-03 13:23:30 +02:00
alex-z
d88e086b94 ShareLinkWidget. Fix incorrect calendar mindate.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-03 13:23:00 +02:00
alex-z
6c3c45dadd Implement expiration date for federated shares
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-03 10:54:18 +00:00
Nextcloud bot
f3af4ce098 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-03 03:49:21 +00:00
allexzander
511da0f3c7 Merge pull request #3940 from nextcloud/refactoring/replace-deprecated-qregexp
Replace deprecated QRegExp with QRegularExpression.
2021-11-02 11:21:25 +02:00
alex-z
c52718c104 Replace deprecated QRegExp with QRegularExpression.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-11-02 08:54:06 +00:00
Matthieu Gallien
e4eaf9d88d Merge pull request #3928 from nextcloud/bugfix/fixE2EEMetaData
properly extract the file id when querying server
2021-11-02 09:46:38 +01:00
Matthieu Gallien
a62905f17a properly extract the file id when querying server
use the proper local file id to get the e2ee meta data

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-11-02 08:15:54 +00:00
Nextcloud bot
3a98abb6ba [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-02 03:48:08 +00:00
Nextcloud bot
dd4d7e3162 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-01 03:46:52 +00:00
Nextcloud bot
ce062aeb3b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-31 03:47:37 +00:00
Nextcloud bot
78301c6f83 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-30 03:49:10 +00:00
Nextcloud bot
487cc7e9c0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-29 03:48:26 +00:00
Matthieu Gallien
7dacabf07c Merge pull request #3929 from nextcloud/bugfix/debugLogsByDefault
by default we produce debug logs because we need them
2021-10-28 17:01:33 +02:00
Matthieu Gallien
8226c30d84 by default we produce debug logs because we need them
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-28 13:48:55 +00:00
Matthieu Gallien
9281350b4c Merge pull request #3863 from nextcloud/bugfix/share-dialog
ShareLinkWidget
2021-10-28 15:47:37 +02:00
Camila
d68b8604ac Refactor toggleButtonAnimation function.
Signed-off-by: Camila <hello@camila.codes>
2021-10-28 12:59:28 +00:00
Camila
ab524d2392 Fix display of deleted note.
Even after removing note from share link,
the previous text was being displayed.

Signed-off-by: Camila <hello@camila.codes>
2021-10-28 12:59:28 +00:00
Camila
72c91362f2 Refactor ShareLinkWidget show/hide widgets functions.
- Remove unecessary call to setupUiOptions after saving share password.
- Slot to create label: do not set it if nothing changed.
- Refactor showPasswordOptions, toggle/PasswordOptions/ExpireDateOptions/NoteOptions.
- Add const, auto and {} whenever possible.
- Refactor slotToggleButtonAnimation => toggleButtonAnimation.

Signed-off-by: Camila <hello@camila.codes>
2021-10-28 12:59:28 +00:00
Matthieu Gallien
c13668c0e9 Merge pull request #2723 from nextcloud/fix-issue-2632
Skip sync exclude file from list of exclude files if it doesn't exist.
2021-10-28 14:57:09 +02:00
Camila
5decbd0b21 Expand ExcludedFiles tests.
Signed-off-by: Camila <hello@camila.codes>
2021-10-28 11:38:03 +02:00
Camila
5788f35e82 Skip sync exclude file from list of exclude files if it doesn't exist.
The file might not exist anymore because the user deleted it by hand or
the folder where it was located got unchecked in the selective sync
view. It is a fix for #2632.

Signed-off-by: Camila <hello@camila.codes>
2021-10-28 11:37:56 +02:00
Nextcloud bot
5d08936e37 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-28 03:49:34 +00:00
allexzander
acd8553be9 Merge pull request #3924 from nextcloud/feature/request-ocsp-data-for-peer-certificates
Request OCSP data for peer certificates
2021-10-27 10:36:10 +03:00
alex-z
db4e54025a Forbid trusting the untrusted certificate.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-10-27 07:23:42 +00:00
alex-z
907ebc1959 Request OCSP validation data from the server during the SSL handshake.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-10-27 07:23:42 +00:00
Nextcloud bot
f760d610e9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-27 03:53:42 +00:00
Matthieu Gallien
2a108b86c7 Merge pull request #3785 from nextcloud/feature/nextGenerationPropagator
Feature/next generation propagator
2021-10-26 16:06:10 +02:00
Matthieu Gallien
87c583dcb6 schedule files upload after all other jobs have been completed
should allow smarter policy dedicated to optimizing files upload

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-26 14:26:28 +02:00
Matthieu Gallien
c6344c05be add test to check the order of actions when uploading new files
should allow to check that uploads are delayed after directories are
created

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-26 12:45:15 +02:00
Matthieu Gallien
24428d9980 add missing Q_ENUM macro to improve logging
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-26 12:45:15 +02:00
Matthieu Gallien
b0ef5e0635 no oneliner if: a bug waiting to happen
it is much too easy to get a bug because one could miss the lask of {
and }

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-26 12:45:15 +02:00
allexzander
51a77bac28 Merge pull request #3920 from nextcloud/rakekniven-patch-1
Changed triple dot to ellipsis
2021-10-26 13:01:11 +03:00
rakekniven
c39b97adb3 Update UnifiedSearchInputContainer.qml
Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-10-26 10:44:07 +02:00
rakekniven
beffd63512 Changed triple dot to ellipsis
Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-10-26 07:35:47 +02:00
Nextcloud bot
856d269657 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-26 03:48:59 +00:00
Matthieu Gallien
28248f3332 Merge pull request #3919 from nextcloud/ci/lowerCaseSouceCodeFileNames
our source code files have lower case names
2021-10-25 16:33:52 +02:00
Matthieu Gallien
69d6f4acec our source code files have lower case names
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-25 15:38:21 +02:00
allexzander
a71bf73e4d Merge pull request #3807 from nextcloud/feature/unified-search
Feature/unified search
2021-10-25 15:35:00 +03:00
alex-z
1b8448402a Fix JsonApiJob incorrect 'statuscode' parsing.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-10-25 14:45:05 +03:00
alex-z
c1dab7e4cb Unified Search via Tray window
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-10-25 14:45:05 +03:00
Nextcloud bot
b8e2dc24f3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-25 03:45:48 +00:00
Nextcloud bot
31e278ffb6 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-24 03:47:52 +00:00
allexzander
a444eb8d44 Merge pull request #3898 from nextcloud/rakekniven-patch-1
Changed wording of status message
2021-10-23 10:57:47 +03:00
rakekniven
91884eef4a Changed wording to suggestion
Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-10-23 07:06:23 +00:00
rakekniven
fb3c740129 Changed wording of status message
The files themselves have no problem. The sync process has problems. 

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-10-23 07:06:23 +00:00
Nextcloud bot
359d85dd66 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-23 03:51:47 +00:00
Matthieu Gallien
b5462e1059 Merge branch 'Thatoo-AutoUpdateAppImage' 2021-10-22 12:42:27 +02:00
Thatoo
37a64ab19b upload-appimage.sh correction
Signed-off-by: Thatoo <thatoo@users.noreply.github.com>
2021-10-22 12:42:04 +02:00
Nextcloud bot
0ee6eb8bbb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-22 03:48:08 +00:00
Nextcloud bot
4e48837b91 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-21 03:51:17 +00:00
allexzander
33cb02e416 Merge pull request #3908 from nextcloud/bugfix/fix-folder-creation-issues
Fix folder creation issues.
2021-10-21 00:11:14 +03:00
alex-z
da03acc656 Fix folder creation issues.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-10-20 19:47:41 +00:00
Felix Weilbach
ed7abc4a93 Merge pull request #3736 from Thatoo/AutoUpdateAppImage
Auto update app image
2021-10-20 16:00:46 +02:00
Thatoo
3ab698a0c5 To allow auto update of AppImage package
Signed-off-by: Thatoo <thatoo@users.noreply.github.com>

docker image 4

Signed-off-by: Thatoo <thatoo@users.noreply.github.com>
2021-10-20 15:50:38 +02:00
Matthieu Gallien
c2dd75df12 Merge pull request #3891 from nextcloud/bugfix/update-sync-state-no-folders
Also update sync state summary based on connectivity
2021-10-20 15:12:56 +02:00
Felix Weilbach
9f35fa6d3d Also update sync state summary based on connectivity
Otherwise, with zero folders configured, the state will stay at
offline.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-20 12:31:55 +02:00
Matthieu Gallien
d14be7c2c0 Merge pull request #3903 from nextcloud/feature/codeCoverageSonarCloud
let sonarcloud takes automated tests into account
2021-10-20 12:14:51 +02:00
Matthieu Gallien
7a6bc830dd let sonarcloud takes automated tests into account and report coverage
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-20 08:09:23 +00:00
Nextcloud bot
a10ffb1676 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-20 04:09:16 +00:00
Matthieu Gallien
597e29ebe9 Merge pull request #3902 from nextcloud/feature/log-filename-linenum
Log file name and line number
2021-10-19 21:33:22 +02:00
Felix Weilbach
1156d82594 Log file name and line number
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-19 17:10:44 +00:00
Felix Weilbach
6b32d9a694 Merge pull request #3892 from nextcloud/sonarcloud-improvements
Sonarcloud improvements
2021-10-19 19:09:15 +02:00
Felix Weilbach
3d795b0547 SonarCloud: Change workflow name
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-19 14:05:55 +00:00
Felix Weilbach
daa205bcef Sonarcloud: Enable caching
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-19 14:05:55 +00:00
Felix Weilbach
4008bdd295 Sonarcloud: Ignore 3rdparty folder
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-19 14:05:55 +00:00
allexzander
426fd2238d Merge pull request #3901 from nextcloud/bugfix/win-remove-cwd-from-dll-search-path
Windows. Remove CWD from DLL search paths.
2021-10-19 10:27:28 +03:00
alex-z
bd731a9cda Windows. Remove CWD from DLL search paths.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-10-19 06:40:56 +00:00
Nextcloud bot
fb74fdf114 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-19 03:49:47 +00:00
Felix Weilbach
3c749bd383 Merge pull request #3885 from nextcloud/bugfix/saml-login
Only use basic authentication if needed
2021-10-18 15:38:11 +02:00
Felix Weilbach
24f6bc5203 Only use basic authentication if needed
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-18 12:20:20 +02:00
Matthieu Gallien
e5b3e9ed18 Merge pull request #2724 from nextcloud/aborted
Give the user a more descriptive error message when syncing is aborted.
2021-10-18 11:29:46 +02:00
Camila
c6e629c30d Give the user a more descriptive error message when syncing is aborted.
Signed-off-by: Camila <hello@camila.codes>
2021-10-18 09:50:02 +02:00
Nextcloud bot
62af1fa4e6 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-18 03:50:00 +00:00
Nextcloud bot
101c2ba10d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-17 03:49:12 +00:00
Nextcloud bot
d8d0886d44 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-16 03:49:21 +00:00
Matthieu Gallien
3b1f1952ab Merge pull request #3897 from nextcloud/fixBrandedMacOS
target names are not changed in branded builds only the output filenames
2021-10-15 15:30:41 +02:00
Matthieu Gallien
f8a8e3f2f9 target names are not changed in branded builds only the output filenames
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-15 15:22:29 +02:00
Valdnet
2a68abfc6d Merge pull request #3895 from nextcloud/Valdnet-patch-2
Correct typo and remove apostrophe
2021-10-15 10:40:39 +02:00
Valdnet
22b0a2e196 i18n: Correct typo and remove apostrophe
Signed-off-by: Valdnet <47037905+Valdnet@users.noreply.github.com>
2021-10-15 08:44:02 +02:00
Nextcloud bot
00dab13b39 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-15 03:55:02 +00:00
Matthieu Gallien
bc53c3454c Merge pull request #3884 from nextcloud/bugfix/user-status-selector-dialog-resize
Set dialog max and min width and height before width and height
2021-10-14 23:37:16 +02:00
Felix Weilbach
d51bfec61d Remove unnecessary braces
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-14 19:56:39 +00:00
Felix Weilbach
f27ef02273 Set dialog max and min width and height before width and height
Otherwise, resize events will not be processed correctly.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-14 19:56:39 +00:00
Matthieu Gallien
7206d626ee Merge pull request #3882 from nextcloud/bugfix/sync-exclude
Add .sync-exclude.lst to exclude files
2021-10-14 21:52:27 +02:00
Felix Weilbach
a663d235ef Add .sync-exclude.lst to exclude files
Previously the .sync-exclude.lst file of the sync root directory was
not added to the exclude files, because the current logic did only
recognize .sync-exclude.lst files when their containing directory was
discovered during the discovery phase. Therefore the sync root
.sync-exclude.lst file was never discovered. See also
ExcludedFiles::traversalPatternMatch().

Fix: #3830, #2728

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-14 14:02:29 +00:00
Matthieu Gallien
f2811ea027 Merge pull request #3778 from nextcloud/feature/trim-trailing-spaces
Trim trailing spaces before uploading files
2021-10-14 16:00:15 +02:00
Felix Weilbach
df11424596 Trim trailing spaces before uploading files
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-14 11:22:59 +00:00
Matthieu Gallien
af3021913b Merge pull request #3861 from nextcloud/feature/sonarcloud
Enable Sonarcloud
2021-10-14 13:21:47 +02:00
Felix Weilbach
51b6d5e28f Enable Sonarcloud
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-14 09:23:44 +00:00
Nextcloud bot
81c5c81cb5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-14 03:49:24 +00:00
Matthieu Gallien
ddf2dd657c Merge pull request #3886 from nextcloud/bugfix/betterLogsOnSslErrors
provide logs of SSL errors including the certificate chain
2021-10-13 20:59:24 +02:00
Matthieu Gallien
46bc0452c7 provide logs of SSL errors including the certificate chain
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-13 15:20:52 +00:00
Matthieu Gallien
4296eb3571 Merge pull request #3888 from nextcloud/bugfix/crash-sync-summary
Check if current user exists before getting it's account state
2021-10-13 17:18:44 +02:00
Felix Weilbach
0792dc36c2 Check if current user exists before getting it's account state
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-13 11:25:13 +02:00
Nextcloud bot
1fb5eadbd2 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-13 03:48:31 +00:00
Matthieu Gallien
0861be0937 Merge pull request #3811 from nextcloud/feature/sync-progress-in-main-dialog
Sync progress in main dialog
2021-10-12 18:30:09 +02:00
Felix Weilbach
4c11f6763e Show sync progress in main dialog
Fixes #3662

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-12 16:14:24 +00:00
Matthieu Gallien
375dc92454 Merge pull request #3880 from madpilot78/Fix_Test_Build_Non_Linux
Fix BUILD_TESTING on non Linux unices
2021-10-12 18:12:31 +02:00
Guido Falsi
5667a6aad2 Fix BUILD_TESTING on non Linux unices
vfs_xattr is build only if LINUX is defined, but when building tests it is depended upon when UNIX is defined.

This patch requires it only when LINUX is defined.

Signed-off-by: Guido Falsi <mad@madpilot.net>
2021-10-12 16:32:24 +02:00
Matthieu Gallien
bfc7c862e6 Merge pull request #3842 from philips/ignore-Spotlight-V100
sync-exclude: add .Spotlight-V100
2021-10-12 13:39:32 +02:00
Nextcloud bot
34b12b7420 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-12 03:51:17 +00:00
Matthieu Gallien
de2b25b563 Merge pull request #3876 from nextcloud/bugfix/macOsBuildFailure
fix macOs build after targets name are not changed by branding
2021-10-11 15:52:35 +02:00
Matthieu Gallien
d76778e3ee fix macOs build after targets name are not changed by branding
target names used to be variable depending on branding
now the target names are always constant but generated output file names
are set according to active branding

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-11 07:41:29 +00:00
Nextcloud bot
59b3971d37 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-11 03:48:47 +00:00
Nextcloud bot
57a74eabcc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-10 03:50:02 +00:00
Nextcloud bot
b6530a3992 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-09 04:06:55 +00:00
Matthieu Gallien
14e294e574 Merge pull request #3878 from nextcloud/bugfix/missing-copyright-headers
Add missing copyright headers
2021-10-08 17:43:27 +02:00
Felix Weilbach
2da6dab403 Add missing copyright headers
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-08 13:19:10 +02:00
Nextcloud bot
18b8693c43 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-08 03:49:52 +00:00
Brandon Philips
98a3682ac3 sync-exclude: add .Spotlight-V100
The .Spotlight-V100 is added by macOS's Spotlight indexer to external
volumes. NextCloud fails to sync when this file exists. So, ignore it.

Signed-off-by: Brandon Philips <brandon@ifup.org>
2021-10-07 08:11:59 -07:00
Nextcloud bot
0b2a055c79 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-07 03:51:25 +00:00
Kevin Ottens
91a9e82fc8 Merge pull request #3871 from nextcloud/display_proper_endpoint_in_warning
Display the right endpoint in the warning in case of error
2021-10-06 13:12:36 +02:00
Kevin Ottens
5fe63a4d9a Display the right endpoint in the warning in case of error
At that point in time _pollEndpoint isn't set yet. All the checks are
against pollEndpoint so display that one in the warning. Otherwise one
always end up with an empty URL in the logs which is not very useful for
debugging purposes.

Signed-off-by: Kevin Ottens <kevin.ottens@enioka.com>
2021-10-06 10:17:38 +00:00
Matthieu Gallien
820ca38270 Merge pull request #3870 from nextcloud/bugfix/brandedDllNames
ensure DLL are generated with branded names
2021-10-06 11:51:09 +02:00
Matthieu Gallien
833237b2e4 use alias target for internal libraries
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-06 07:56:33 +00:00
Matthieu Gallien
c751fd5672 ensure DLL are generated with branded names
cmake distinct runtime and library

on unix dynamic shared libraries are library kind of objects
on windows they are runtime kind of objects

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-10-06 07:56:33 +00:00
Nextcloud bot
f7a34b8bdc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-06 03:48:28 +00:00
Matthieu Gallien
a2a08ebd21 Merge pull request #3737 from nextcloud/feature/file-activity-dialog
Add file activity dialog
2021-10-05 15:08:45 +02:00
Felix Weilbach
0c9dce1154 Add file activity dialog
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-05 12:41:34 +00:00
Nextcloud bot
883c78ea61 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-05 03:48:52 +00:00
Felix Weilbach
db3a38751f Merge pull request #3682 from nextcloud/bugfix/use-build-app-image-from-brander
Use build-appimage.sh from Brander
2021-10-04 15:36:58 +02:00
Felix Weilbach
ae3d10d3a7 Use build-appimage.sh from Brander
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-10-04 12:51:17 +00:00
Nextcloud bot
087b908445 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-04 03:52:27 +00:00
Nextcloud bot
40ffc3fd44 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-03 03:54:04 +00:00
Nextcloud bot
d86f349dad [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-01 03:52:13 +00:00
Matthieu Gallien
19f3f11b8d Merge pull request #3844 from nextcloud/bugfix/remove-temporary-solution-for-file-restoration-via-datafingerprint
Remove Temporary solution for file restoration issue due to set the data-fingerprint.
2021-09-30 13:40:33 +02:00
alex-z
6cafcc1124 Remove Temporary solution for file restoration issue due to failing to set the data-fingerprint.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-09-30 08:39:47 +00:00
Matthieu Gallien
a7be4044bc Merge pull request #3823 from madpilot78/argp_cleanup
Fix argp references on FreeBSD
2021-09-30 09:21:19 +02:00
Nextcloud bot
b566f19538 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-30 04:17:00 +00:00
Guido Falsi
b0b70d1e77 Check for argp library before depending on it.
Signed-off-by: Guido Falsi <madpilot@freebsd.org>
2021-09-29 15:46:07 +02:00
Guido Falsi
5f036641b9 Add -largp on non linux systems.
Signed-off-by: Guido Falsi <madpilot@freebsd.org>
2021-09-29 15:46:07 +02:00
Nextcloud bot
5fa0828724 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-29 03:54:18 +00:00
Matthieu Gallien
fe344462a3 Merge branch 'Trafo-fix/WindowsPlaceholderShortCutMenu' 2021-09-28 11:21:41 +02:00
Mathias Eggert
51cfe76d65 add ContextMenuOptIn to COM registration, to allow Placeholder support. Issue #3584
Signed-off-by: Mathias Eggert <mathias.eggert@nexenio.com>
2021-09-28 11:20:30 +02:00
Nextcloud bot
155f686c4f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-28 03:55:51 +00:00
Matthieu Gallien
739a5f5fdc Merge pull request #3841 from nextcloud/bugfix/vfs-docs
Make virtual files feature documentation more understandable
2021-09-27 23:35:43 +02:00
Felix Weilbach
b6108cb9fe Make virtual files feature documentation more understandable
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-27 20:42:19 +00:00
Matthieu Gallien
6f03a9ffe1 Merge pull request #3827 from nextcloud/bugfix/dont-log-encryption
Don't log encryption data in release mode
2021-09-27 22:28:33 +02:00
Felix Weilbach
d6e60cd8d4 Don't log encryption data in release mode
We deliver our builds to users with debug logging enabled to have an
easier time finding problems. However, logging all the encryption data
in this loop is too much and should not be done in release mode.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-27 19:50:38 +00:00
Matthieu Gallien
26a361973c Merge pull request #3825 from nextcloud/clang-format-cpp11-uni
Setup clang-format for cpp11 universal init
2021-09-27 21:49:24 +02:00
Felix Weilbach
b10be3e52e Set maximum line length in clang-format
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-27 15:40:55 +00:00
Felix Weilbach
2a6886dc70 Use C++11 brace style in clang-format
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-27 15:40:55 +00:00
Matthieu Gallien
8af4d905f1 Merge pull request #3713 from nextcloud/feature/share-server-permissions
Use default sharing permissions from server
2021-09-27 12:52:31 +02:00
Camila
1de38a13f3 Extend TestCapabilities with shareDefaultPermissions tests.
Signed-off-by: Camila <hello@camila.codes>
2021-09-27 08:53:45 +00:00
Camila
df38e5c08b Apply server default permissions for federated file sharing too.
See nextcloud/server#24729 comments.

Signed-off-by: Camila <hello@camila.codes>
2021-09-27 08:53:45 +00:00
Camila
8f847906c6 Check server capabilities for file sharing default permissions.
Signed-off-by: Camila <hello@camila.codes>
2021-09-27 08:53:45 +00:00
Matthieu Gallien
c521ca0949 Merge pull request #3832 from nextcloud/bugfix/incorrect-cmd-client-dbname
Fix incorrect db name for nextcloud command line client.
2021-09-27 10:36:16 +02:00
alex-z
dc22307a42 Fix review comments + also check against trailing bakslash.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-09-27 08:13:29 +00:00
alex-z
e16402a102 Fix incorrect db name for nextcloud command line client.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-09-27 08:13:29 +00:00
Matthieu Gallien
ef3afd741a Merge pull request #3833 from nextcloud/rakekniven-patch-1
Fixed grammar
2021-09-27 10:12:13 +02:00
rakekniven
68e02bc62d Fixed context
Reported at Transifex.

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-09-27 07:25:08 +00:00
rakekniven
49e1b12eb1 Fixed grammar
Reported at Transifex.

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-09-27 07:25:08 +00:00
Nextcloud bot
e1b9d7ecdb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-27 03:56:28 +00:00
Nextcloud bot
dcf7905bcd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-26 03:57:20 +00:00
Nextcloud bot
295a5a376e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-25 03:56:04 +00:00
Nextcloud bot
da076cf6bf [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-24 03:59:47 +00:00
Felix Weilbach
3caef6e1a6 Merge pull request #3760 from nextcloud/feature/invalid-filenames-dialog
Add dialog to resolve invalid filenames
2021-09-23 15:03:35 +02:00
Felix Weilbach
d3d8b1c631 Add dialog to resolve invalid filenames
Fixes #3751

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-23 10:45:15 +00:00
Nextcloud bot
8a411bd640 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-23 04:14:24 +00:00
Matthieu Gallien
71a5e2d477 Merge pull request #3805 from nextcloud/bugfix/fixQmlContextLossEvents
set default format for QSurface to handle NVidia context loss events
2021-09-22 11:19:15 +02:00
Matthieu Gallien
ac28cc1cf5 set default format for QSurface to handle NVidia context loss events
should fix wrong OpenGL rendering after suspend on Linux with NVidia
binary OpenGL driver

close #3759

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-09-22 08:56:16 +00:00
Nextcloud bot
ae5b1e9d10 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-22 03:58:14 +00:00
allexzander
856f64a766 Merge pull request #3821 from nextcloud/feature/general-settings-open-update-url-in-browser
General Settings window. Allow opening the update URL via mouse.
2021-09-21 23:49:46 +03:00
alex-z
59199fc907 General Settings window. Allow opening the update URL via mouse.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-09-21 16:21:38 +02:00
Matthieu Gallien
4992977167 Merge pull request #3793 from nextcloud/feature/link-share-label
Feature/Share link label
2021-09-21 14:08:05 +02:00
Camila
db447c4676 Refactor OcsShareJob creation.
Signed-off-by: Camila <hello@camila.codes>
2021-09-21 10:01:20 +00:00
Camila
ba8ec56e65 Add option to create label for share link.
Signed-off-by: Camila <hello@camila.codes>
2021-09-21 10:01:20 +00:00
Matthieu Gallien
d0d4b08a09 Merge pull request #3815 from nextcloud/selectStatusTextByMouse
TextInput by default do not allow selecting text by mouse
2021-09-21 11:59:35 +02:00
Matthieu Gallien
19b77416da TextInput by default do not allow selecting text by mouse
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-09-21 08:07:19 +00:00
Nextcloud bot
6342451937 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-21 03:58:40 +00:00
Felix Weilbach
76a80fc974 Merge pull request #3813 from nextcloud/rakekniven-patch-1
Fixed placeholder numbering
2021-09-20 16:55:02 +02:00
rakekniven
af49a7993a Fixed placeholder numbering
Fix for #3812 

Reported at Transifex.

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-09-20 11:39:51 +02:00
Nextcloud bot
63a5f7e348 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-20 03:54:26 +00:00
Nextcloud bot
039b579d3e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-19 03:55:01 +00:00
Nextcloud bot
be0d7a6444 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-18 03:59:36 +00:00
Felix Weilbach
b816c0e507 Merge pull request #3780 from nextcloud/bugfix/more-warnings
Fix more warnings and enable warnings as errors
2021-09-17 16:09:31 +02:00
Felix Weilbach
88e7861239 Enable warnings as errors when compiling with Clang and GCC
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-17 13:32:26 +00:00
Felix Weilbach
0074d6c40a Disable Qt deprecation warnings
They don't help us during regular development and some of them are not
fixable (e.g. QNetworkMangerConfiguration) in the open source variant
of Qt5.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-17 13:32:26 +00:00
Felix Weilbach
fb1b3481d1 Fix warnings
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-17 13:32:26 +00:00
Felix Weilbach
1eb9c6f993 Merge pull request #3779 from nextcloud/feature/add-user-status-docs
Add documentation for user status selector dialog
2021-09-17 11:05:09 +02:00
Felix Weilbach
65f2fd2450 Add documentation for user status selector dialog
Fixes #3770

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-17 08:22:52 +00:00
allexzander
c1b404952a Merge pull request #3794 from nextcloud/bugfix/share-note
Display share note
2021-09-17 10:23:33 +03:00
Camila
e4e74ff38f Display share note when there is one associated with a share link.
Signed-off-by: Camila <hello@camila.codes>
2021-09-17 06:57:08 +00:00
Camila
4581279d23 Fix indentation sharelinkwidget.h.
Signed-off-by: Camila <hello@camila.codes>
2021-09-17 06:57:08 +00:00
Nextcloud bot
0d5084468e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-17 03:54:28 +00:00
Nextcloud bot
cdbea182b4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-16 03:57:24 +00:00
Nextcloud bot
dc0954d653 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-15 03:57:08 +00:00
Matthieu Gallien
cc05e474cd Merge pull request #3773 from nextcloud/bugfix/provider-page-accept-nc
Accept nc scheme in provider page
2021-09-14 16:33:18 +02:00
Felix Weilbach
8370c9c1ca Accept nc scheme in provider page
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-14 09:01:18 +00:00
Felix Weilbach
5dabb3a36f Merge pull request #3777 from nextcloud/bugfix/clear-user-status-main-dialog
Clear user status in main dialog after clearing it in user status selector dialog
2021-09-14 10:27:05 +02:00
Felix Weilbach
86da74908a Emit user status changed after clear user status
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-14 07:26:46 +00:00
Felix Weilbach
9aee46b3a4 Remove unnecessary logging statements
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-14 07:26:46 +00:00
Nextcloud bot
be8f60fa8e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-14 04:01:45 +00:00
Matthieu Gallien
d3ea46ece9 Merge pull request #3331 from Dimon4eg/fix_warnings
Fix warnings
2021-09-13 17:06:09 +02:00
Dmytro Korchynskyi
cffceaae1f Fixed warning: extra ';' in Q_ENUM_NS(PinState);
Signed-off-by: Dmytro Korchynskyi <kdl.dima@gmail.com>
2021-09-13 13:05:41 +03:00
Dmytro Korchynskyi
5f232c30be Fixed warnings from ntstatus.h on Windows
Signed-off-by: Dmytro Korchynskyi <kdl.dima@gmail.com>
2021-09-13 13:05:41 +03:00
Dmytro Korchynskyi
8351c398bc Fixed warnings in RemotePathChecker on Windows
Signed-off-by: Dmytro Korchynskyi <kdl.dima@gmail.com>
2021-09-13 13:05:41 +03:00
Dmytro Korchynskyi
608fc5fb3a Fixed warnings by using static_cast
Signed-off-by: Dmytro Korchynskyi <kdl.dima@gmail.com>
2021-09-13 13:05:41 +03:00
Nextcloud bot
229aefba2a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-13 03:57:15 +00:00
Nextcloud bot
4aba80e58a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-12 03:58:57 +00:00
Nextcloud bot
53c2516bae [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-11 03:55:52 +00:00
Valdnet
a5c9b80add Merge pull request #3775 from nextcloud/Valdnet-patch-1
l10n: Correct a typo
2021-09-10 14:07:26 +02:00
Valdnet
a441d733dc l10n: Correct two typo
Signed-off-by: Valdnet <47037905+Valdnet@users.noreply.github.com>
2021-09-10 12:25:34 +02:00
Nextcloud bot
06f37234dc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-10 04:07:18 +00:00
Felix Weilbach
49f41b813c Merge pull request #3765 from Dimon4eg/remove_theme.qrc
remove theme.qrc as it will be generated during build
2021-09-09 13:03:57 +02:00
Dmytro Korchynskyi
bccca235a2 remove theme.qrc as it will be generated during build
Signed-off-by: Dmytro Korchynskyi <kdl.dima@gmail.com>
2021-09-09 09:53:34 +00:00
Felix Weilbach
ea6a56d9f6 Merge pull request #3639 from nextcloud/feature/set-user-status
Set user status
2021-09-09 11:52:27 +02:00
Felix Weilbach
8a8d488454 Add dialog to set user status
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-09 11:18:22 +02:00
Matthieu Gallien
f34d663029 Merge pull request #3764 from nextcloud/bugfix/stuck-with-no-explorer-after-autoupdate
Prompt reboot when runing the auto update.
2021-09-09 09:43:40 +02:00
alex-z
4018f8d554 Prompt reboot when runing the auto update.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-09-09 07:20:19 +00:00
Nextcloud bot
d649865bce [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-09 03:56:02 +00:00
Felix Weilbach
3fd4d5cd4b Merge pull request #3747 from nextcloud/bugfix/deprecated-warnings
Fix most of the deprecation warnings
2021-09-08 14:59:12 +02:00
Felix Weilbach
5622c33f40 Fix various deprecated warnings
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Felix Weilbach
93f590c6de Replace deprecated use of QProcess::execute()
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Felix Weilbach
c9863dc225 Use QRecursiveMutex
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Felix Weilbach
45f59e7eca Use QDateTime::startOfDay()
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Felix Weilbach
b6e3c6d718 Replace deprecated use of QProcess::start()
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Felix Weilbach
0af83dd1b6 Use QRandomGenerator instead of qrand
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Felix Weilbach
2fe3a7947e endl has been deprecated
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-08 08:54:00 +00:00
Nextcloud bot
c7c05173b5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-08 03:53:01 +00:00
Matthieu Gallien
127b8c0b2d Merge pull request #3746 from nextcloud/bugfix/doNotCrashPushNotifications
prevent infinte recursion when closing a websocket in case of SSL errors
2021-09-07 09:33:09 +02:00
Matthieu Gallien
95e3ecfd3c prevent infinte recursion when closing a websocket in case of SSL errors
the slots connected to the web socket can be called even during close
and lead to infinite calls to close -> error slot -> close -> ...

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-09-07 07:09:43 +00:00
Matthieu Gallien
46f7d07889 Merge pull request #3753 from nextcloud/bugfix/close-wizard-after-done
Close wizard if done
2021-09-07 09:08:09 +02:00
Felix Weilbach
6fd0adda52 Close wizard if done
This is needed because of the changes in 02bb5db544

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-07 06:43:27 +00:00
Nextcloud bot
68a433d9bc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-07 03:56:34 +00:00
allexzander
17044317ba Merge pull request #3754 from nextcloud/bugfix/remove-assert
Remove assert that causes crashes
2021-09-06 18:54:58 +03:00
Felix Weilbach
031b2e0683 Remove assert that caues crashes
This assert does not add value. Utility::concatUrlPath() takes care of
appending paths correctly.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-06 15:54:44 +00:00
allexzander
8385eeeab2 Merge pull request #3688 from nextcloud/feature/share-via-talk
Sharing to Talk/Email
2021-09-06 18:53:31 +03:00
alex-z
24ad43a208 Enable Xvfb for graphical tests on Linux.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2021-09-06 13:27:39 +00:00
allexzander
a3fc812539 Enable share to Talk and Email. Display correct icon. Added unit tests.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-09-06 13:27:39 +00:00
allexzander
3f6defe594 Merge pull request #3750 from nextcloud/remove-autoupdate-section-macos
macOS client is not able to do auto updates
2021-09-06 16:26:27 +03:00
Felix Weilbach
41ecb2c160 macOS client is not able to do auto updates
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-06 11:39:08 +02:00
Nextcloud bot
e5517c343d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-06 03:55:31 +00:00
Nextcloud bot
e56e9acf79 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-05 03:55:00 +00:00
Nextcloud bot
0b14c340f2 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-04 03:53:11 +00:00
Felix Weilbach
1274959434 Merge pull request #3689 from nextcloud/bugfix/removeObsoleteWizardPage
Remove wizard page that has been dead for 4 years
2021-09-03 20:26:26 +02:00
Hannah von Reth
02bb5db544 Remove wizard page that has been dead for 4 years 2021-09-03 16:08:37 +02:00
Felix Weilbach
f396c58b5f Merge pull request #3701 from nextcloud/bugfix/fix-qml-warnings
Fix qml warnings
2021-09-03 14:03:27 +02:00
Felix Weilbach
fa37f5c2bc Don't create binding loop
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-03 11:48:42 +00:00
Felix Weilbach
8a2097e7b9 Implicitly defined onFoo properties in Connections are deprecated
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-03 11:48:42 +00:00
Matthieu Gallien
c07aec320a Merge pull request #3727 from nextcloud/bugfix/only-set-dav-user-after-login
Only set dav user after login
2021-09-03 11:23:37 +02:00
Felix Weilbach
ba2d8e8201 Only set dav user after login.
Setting the credentials of the account inside the auth widget is not a
good idea as that will destroy the previous credentials object which
may wait for a signal to be emitted by the credentials dialog that
was created by the credentials that are going to be deleted. Uff.

It should be enough to set the dav user only after login because the
dav user will never change.

See also the discussion here
https://github.com/nextcloud/desktop/issues/3677#issuecomment-907976839

Fixes #3677

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-09-03 08:32:15 +00:00
Nextcloud bot
9e6e4095a8 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-03 03:56:30 +00:00
Nextcloud bot
d8618d2447 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-02 03:53:42 +00:00
Felix Weilbach
19ee6560a9 Merge pull request #3729 from nextcloud/cmakecleanup
CMake cleanup
2021-09-01 15:16:21 +02:00
Nicolas Fella
bc3eb7845d Remove unneeded target_link_libraries
OS_SPECIFIC_LINK_LIBRARIES is always empty here

Signed-off-by: Nicolas Fella <nicolas.fella@gmx.de>
2021-09-01 11:43:03 +00:00
Nicolas Fella
72277726a3 Remove unneeded include_directories
Signed-off-by: Nicolas Fella <nicolas.fella@gmx.de>
2021-09-01 11:43:03 +00:00
Nicolas Fella
18ddb9df4a Use CMAKE_INSTALL_DATADIR instead of custom DATADIR
CMake provides what we wan out of the box

Signed-off-by: Nicolas Fella <nicolas.fella@gmx.de>
2021-09-01 11:43:03 +00:00
Nicolas Fella
d247e4791a Remove copy of GNUInstallDirs
It is provided by CMake itself

Signed-off-by: Nicolas Fella <nicolas.fella@gmx.de>
2021-09-01 11:43:03 +00:00
Nextcloud bot
49a3a7d7c7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-01 03:53:21 +00:00
Felix Weilbach
9ce161679a Merge pull request #3719 from pprkut/svg
Allow using rsvg-convert to generate pngs instead of inkscape
2021-08-31 15:30:32 +02:00
Heinz Wiesinger
727de34879 Allow using rsvg-convert to generate pngs instead of inkscape
Signed-off-by: Heinz Wiesinger <pprkut@liwjatan.org>
2021-08-31 14:52:46 +02:00
Matthieu Gallien
8b71a1f305 Merge pull request #3683 from nextcloud/ci/fixClangTidyConfigFile
fix name of one clang-tidy check
2021-08-31 11:38:19 +02:00
Matthieu Gallien
d17d831205 switch from Q_DECL_OVERRIDE to plain override
our requirements guarantee availability of override keyword so we just
use it

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-31 08:35:57 +00:00
Matthieu Gallien
25669938fd let clang-tidy add missing override after enabling again the check
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-31 08:35:56 +00:00
Matthieu Gallien
0c3f5cde12 fix name of one clang-tidy check
allow modernize-use-override to work fine

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-31 08:35:56 +00:00
Nextcloud bot
843b9d45f4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-31 03:54:33 +00:00
Nextcloud bot
494e100b0f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-30 03:53:26 +00:00
Nextcloud bot
02e518381c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-29 03:52:22 +00:00
Nextcloud bot
1d4f6ab19d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-28 04:24:43 +00:00
Nextcloud bot
6ae83c25ed [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-27 03:55:02 +00:00
Matthieu Gallien
e83d441d42 Merge pull request #3697 from nextcloud/bugfix/warnings2
Fix more warnings
2021-08-26 18:44:12 +02:00
Felix Weilbach
44df9283fe Handle every enum value in switch statement
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-26 15:52:25 +00:00
Felix Weilbach
23fca8019b Add parens around && in || statement
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-26 15:52:25 +00:00
Felix Weilbach
4d72d375f2 Fix warnings related to wrong ordering of ctor init
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-26 15:52:25 +00:00
Matthieu Gallien
210e736bf5 Merge pull request #3715 from nextcloud/i18n/fixUnecessaryTrCall
remove a tr call where translator cannot do anything meaningful
2021-08-26 17:51:04 +02:00
Matthieu Gallien
601c4fb3c0 remove a tr call where translator cannot do anything meaningful
close #3708

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-26 15:26:54 +00:00
Matthieu Gallien
fbe39db773 Merge pull request #3698 from nextcloud/bugfix/nextcloud-cmd-documentation-update
Update nextcloudcmd documentation.
2021-08-26 09:48:37 +02:00
allexzander
4927e48bf3 Update nextcloudcmd documentation.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-26 10:38:06 +03:00
Nextcloud bot
3feba08965 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-26 03:54:45 +00:00
Matthieu Gallien
c263c8b8ca Merge pull request #3712 from nextcloud/ci/fixMacCompilation
fix build socket api Mac specific file is now in a subdirectory
2021-08-25 16:55:52 +02:00
Matthieu Gallien
23bd4675fd fix build socket api Mac specific file is now in a subdirectory
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-25 14:02:05 +00:00
Valdnet
99c022cb00 Merge pull request #3627 from nextcloud/Valdnet-patch-1
l10n: Remove line break
2021-08-25 11:48:08 +02:00
Valdnet
86cb56757e l10n: Remove line break
A line break is unnecessary in this message.

Signed-off-by: Valdnet <47037905+Valdnet@users.noreply.github.com>
2021-08-25 09:11:06 +00:00
Nextcloud bot
89cb1f437c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-25 03:52:44 +00:00
Matthieu Gallien
df36c97bb5 Merge pull request #3709 from nextcloud/bugfix/updateServerSupportedVersions
support server versions for one year after it is end of life
2021-08-24 16:48:03 +02:00
Matthieu Gallien
ecb13d36f3 support server versions for one year after it is end of life
according to https://github.com/nextcloud/server/wiki/Maintenance-and-Release-Schedule

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-24 14:51:31 +02:00
Nextcloud bot
df1bc519b7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-24 03:53:34 +00:00
Matthieu Gallien
9c01989370 Merge pull request #3705 from nextcloud/bugfix/removeBrokenAssert
remove broken assert that is not needed and break account setup
2021-08-23 15:02:09 +02:00
Matthieu Gallien
22a5fadc13 remove broken assert that is not needed and break account setup
it has been also removed from the original branch so no problem removing
it

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-23 14:13:58 +02:00
Matthieu Gallien
1bbb09a7ef Merge pull request #3619 from nextcloud/feat/workflow-auto-update-command-rebase.yml
Updating command-rebase.yml workflow from template
2021-08-23 12:19:55 +02:00
Nextcloud bot
f00c27b4f3 Updating command-rebase.yml workflow from template
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-23 08:50:42 +00:00
Matthieu Gallien
138323b79d Merge pull request #3669 from nextcloud/bugfix/variousFixesV2
Bugfix/various fixes v2
2021-08-23 10:40:32 +02:00
Matthieu Gallien
0456cacd79 fix clang-tidy check for usage of =default
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-23 09:44:34 +02:00
Hannah von Reth
c273c8f71b Ensure the socket listener still exists 2021-08-23 09:44:34 +02:00
Hannah von Reth
4b0122093a Add socket command to upload a selection of files based on a regex
(cherry picked from commit 0ded3a56a9f3470a951b18eaa9d3c1b5e8db1135)
2021-08-23 09:44:34 +02:00
Hannah von Reth
010fccb4fa Remove dead code 2021-08-23 09:44:34 +02:00
Christian Kamm
ebaa98fa7a owncloudcmd: Use env vars for chunk sizes #7078
Moves a bunch of env var reading from Folder into SyncOptions.
2021-08-23 09:44:34 +02:00
Hannah von Reth
10e02b0031 Don't create QStringList copy first 2021-08-23 09:44:34 +02:00
Hannah von Reth
44fa4aad88 Always call doLog to ensure we get a crash log 2021-08-23 09:44:34 +02:00
Hannah von Reth
d16b2bd369 Send crash log as comment 2021-08-23 09:44:34 +02:00
Hannah von Reth
1ff3a0f8b6 Remove anchient debug msg that mutated to a warning over the year 2021-08-23 09:44:34 +02:00
Hannah von Reth
6324ac9cac Cleanup members 2021-08-23 09:44:34 +02:00
Hannah von Reth
df567efd37 Remove dead code 2021-08-23 09:44:34 +02:00
Hannah von Reth
990ce6ed05 Dump the last 20 lines of logs to a file when we crash
Fixes: #8467
2021-08-23 09:44:34 +02:00
Hannah von Reth
48f4c1e9e1 Log fallback result 2021-08-23 09:44:34 +02:00
Hannah von Reth
acd83a2998 Ensure unit test are using absolute paths 2021-08-23 09:44:34 +02:00
Hannah von Reth
1eee5c849e Add assert to ensure we used _remotePath as base 2021-08-23 09:44:34 +02:00
Hannah von Reth
6c1073db92 Fix another url for etag request
Fixes: #7838
2021-08-23 09:44:34 +02:00
Hannah von Reth
5b457a1663 Use byte array for etag 2021-08-23 09:44:33 +02:00
Hannah von Reth
5a7fd3f316 testlockedfiles use long file path 2021-08-23 09:40:27 +02:00
Hannah von Reth
d16befd1fd Align MkColJob finish signal with the other jobs 2021-08-23 09:40:27 +02:00
Hannah von Reth
c4f4fb48a4 Minor cleanup of socket api 2021-08-23 09:40:27 +02:00
Hannah von Reth
cb57d8e54c Add missing Q_EMIT 2021-08-23 09:40:27 +02:00
Hannah von Reth
baa571018e Log invocation, useful for debugging startup issues 2021-08-23 09:40:27 +02:00
Hannah von Reth
8ca5035c42 Add test for csync_vio_local_stat with long path 2021-08-23 09:40:27 +02:00
Hannah von Reth
789e0e45d5 Fix Windows long path issue introduced in dd641fae997d71c8396b77def2fa25ad96fdf47f 2021-08-23 09:40:27 +02:00
Hannah von Reth
56364f1c70 Fix unittests 2021-08-23 09:40:27 +02:00
Hannah von Reth
a72ff9ea7f Set permissions for new folder 2021-08-23 09:40:26 +02:00
Hannah von Reth
90b733801e Simplify uuid handling 2021-08-23 09:40:26 +02:00
Klaas Freitag
73549a0529 Ignore the desktop.ini file in every directory, not only in top dir. (#8299)
* Ignore the desktop.ini file in every directory, not only in top dir.

See https://github.com/owncloud/client/issues/8298  for reasons.

* Fix test for ignoring desktop.ini everywhere.

Co-authored-by: Hannah von Reth <hannah.vonreth@owncloud.com>
2021-08-23 09:40:26 +02:00
Hannah von Reth
7715583b14 Correctly use indexOf 2021-08-23 09:40:26 +02:00
Hannah von Reth
3a87067348 Cleanup 2021-08-23 09:40:26 +02:00
Hannah von Reth
557b11aca7 Include os version 'windows-10.0.19042' in about dialog 2021-08-23 09:40:26 +02:00
Hannah von Reth
324d5a04c6 Align type used for getPHash 2021-08-23 09:40:26 +02:00
Hannah von Reth
de2d11125b Move Prepared sql queries to seperate class to manage access 2021-08-23 09:40:26 +02:00
Nextcloud bot
5e6ab82094 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-23 03:50:43 +00:00
Nextcloud bot
ad06b8ca67 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-21 03:55:58 +00:00
Felix Weilbach
f522cd66a0 Merge pull request #3692 from nextcloud/feature/color-compile-output-ninja
Color compile ouput when using Ninja build file generator
2021-08-20 16:43:40 +02:00
Felix Weilbach
b5b235c75f Color compile ouput when using Ninja build file generator
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-20 13:20:55 +00:00
allexzander
fce4e8cedb Merge pull request #3348 from nextcloud/feature/vfs-hydration-with-decrypt-file
Allow hydration of VFS placeholders that are E2E encrypted.
2021-08-20 16:07:20 +03:00
allexzander
ba73b6d914 VFS + E2EE. Improved data alignment and unit tests for StreamingDecryptor. Refactoring and renaming for readability.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-20 12:57:22 +00:00
allexzander
289df252b5 VFS + E2EE. Handle scenario of sync journal deleted.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-20 12:57:22 +00:00
allexzander
c28cac8479 VFS + E2EE placeholder size migration from old versions.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-20 12:57:22 +00:00
allexzander
2c78925acb VFS + E2EE VFS implicit hydration of E2EE files.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-20 12:57:22 +00:00
Matthieu Gallien
154d47565d Merge pull request #3621 from nextcloud/bugfix/nextcloud-cmd-dav-fix
Bugfix/nextcloud cmd dav fix
2021-08-20 14:08:34 +02:00
allexzander
b6d216b794 Use separate arguments for a remote root and do not use dav or webdav in the server's URL
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-20 13:30:35 +03:00
Nextcloud bot
0b2b076712 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-20 03:53:44 +00:00
Felix Weilbach
ef6bd0e7a9 Merge pull request #3671 from nextcloud/feature/update-qt5.15
Update to Qt 5.15
2021-08-19 14:59:23 +02:00
Felix Weilbach
332a48e6a1 Update to Qt 5.15
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-19 14:01:46 +02:00
Felix Weilbach
748521e4fe Merge pull request #3583 from nextcloud/targetname
Don't use variables for CMake target identifiers
2021-08-19 13:04:14 +02:00
Felix Weilbach
3d72e24bb8 Brand name of vfs plugins
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-19 10:30:24 +00:00
Nicolas Fella
43cccb0a73 Don't use variables for CMake target identifiers
This makes the code a bit nicer to read and maybe a bit more robust.

Set the relevant OUTPUT_NAME target properties to keep the ability to
customize the names of the installed binaries.

Signed-off-by: Nicolas Fella <nicolas.fella@gmx.de>
2021-08-19 10:30:23 +00:00
Nextcloud bot
3d5d78f7a7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-19 03:51:40 +00:00
Felix Weilbach
079a4f65d6 Merge pull request #3680 from znerol-forks/bug/master/macos-packaging-scripts-capitalization
Fix macOS app bundle name in packaging scripts
2021-08-18 09:52:00 +02:00
znerol
547c1f57d9 Fix macOS app bundle name in packaging scripts
Signed-off-by: znerol <lo+github@znerol.ch>
2021-08-18 09:43:50 +02:00
Nextcloud bot
b808a4e087 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-18 03:53:43 +00:00
Matthieu Gallien
d241c21c28 Merge pull request #3681 from nextcloud/bugfix/fixVfsPluginsAppimage
put VFS plugins into the correct path
2021-08-17 13:14:24 +02:00
Matthieu Gallien
65d22c08b7 put VFS plugins into the correct path
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-17 10:18:25 +00:00
Nextcloud bot
473553b3eb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-17 03:54:28 +00:00
Nextcloud bot
440a32b697 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-16 03:52:55 +00:00
Nextcloud bot
ef78b9d9ea [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-15 03:52:29 +00:00
Nextcloud bot
4d5f3d42e1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-14 03:54:19 +00:00
Nextcloud bot
55d732cce8 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-13 03:52:43 +00:00
Matthieu Gallien
30d1c707a9 Merge pull request #3655 from nextcloud/bugfix/store-login-name-in-webdav_user
Return the login name instead of user id
2021-08-12 15:17:16 +02:00
Felix Weilbach
d706125b15 Return the login name instead of user id
App password and login name need to match. If authResult() returns the
user id the user id will be stored in webdav_user

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-12 14:32:07 +02:00
Nextcloud bot
35f91945b7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-12 03:54:24 +00:00
Matthieu Gallien
fe65715b97 Merge pull request #3589 from nextcloud/bugfix/warnings
Don't ignore setPinState() results and fix some other warnings
2021-08-11 23:56:47 +02:00
Felix Weilbach
ccd27870a7 Don't compare integers with different signs
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-11 20:20:39 +00:00
Felix Weilbach
acf6cc0527 Remove unused functions and variables
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-11 20:20:39 +00:00
Felix Weilbach
d72f7e9109 Check result of setPinState()
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-11 20:20:39 +00:00
Matthieu Gallien
b7f67c0adf Merge pull request #3400 from nextcloud/bugfix/variousFixes
Bugfix/various fixes
2021-08-11 22:16:56 +02:00
Hannah von Reth
9ffa7bcd4d Add workaround for issue discovered in https://github.com/owncloud/core/pull/38304 2021-08-11 17:13:44 +00:00
Hannah von Reth
3b99b11849 Always reset prepared sql statements
This allow the creation of checkpoints and fixes the growing wal issue

Fixes: #7646
2021-08-11 17:13:44 +00:00
Hannah von Reth
6e0a43b570 Fix clash detection with virtual files
Fixes: #8323
2021-08-11 17:13:44 +00:00
Hannah von Reth
45f3a97997 Small cleanup 2021-08-11 17:13:44 +00:00
Hannah von Reth
989390bc41 Don't shadow 2021-08-11 17:13:44 +00:00
Hannah von Reth
3bc026a557 Make findBestChecksum case insensitive
Especially the casing of ADLER32 did not match the server.
2021-08-11 17:13:44 +00:00
Hannah von Reth
f977a54694 Finish is already called in the destructor 2021-08-11 17:13:44 +00:00
Hannah von Reth
d60eb67c2e Also prepend appName if id is empty 2021-08-11 17:13:44 +00:00
Hannah von Reth
8468e70cba Use QKeychain:: explicitly 2021-08-11 17:13:44 +00:00
Hannah von Reth
926a52b33d Remove unused computation 2021-08-11 17:13:44 +00:00
Hannah von Reth
1284d78599 Fix testblacklist.cpp
The test was broken because we now actually have X-Request-ID set
2021-08-11 17:13:44 +00:00
Hannah von Reth
b01973f95f Enable httplogger on unittests 2021-08-11 17:13:44 +00:00
Hannah von Reth
ec0466ed73 Allow to add and remove log rules 2021-08-11 17:13:44 +00:00
Hannah von Reth
1b3502bd5a Fix httplogger in unittests with lambdas 2021-08-11 17:13:44 +00:00
Matthieu Gallien
556baae087 Merge pull request #3646 from nextcloud/bugfix/fetch-user-id-always
Enforce fetching of user id
2021-08-11 18:42:30 +02:00
Felix Weilbach
f9daa27a5d Enforce fetching of user id
With the change of commit 3e61bdc431 and
the relase of v3.3.0 users that had their email address used as login
are not able to login anymore. The dav_user should be empty if users
tried to create a account in the meantime. Therefore we fetch the user
id in the case dav_user (and then Account::_davUser) is empty. We then
store the user id in dav_user.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-11 16:16:12 +00:00
Felix Weilbach
b4d1d98868 Merge pull request #3632 from nextcloud/bugfix/always-use-userid-after-login
Ensure that the users id is used for accessing webdav
2021-08-11 16:17:18 +02:00
Felix Weilbach
5195264a20 Ensure that the users id is used for accessing webdav
https://docs.nextcloud.com/server/latest/developer_manual/client_apis/LoginFlow/index.html#obtaining-the-login-credentials
states that the email address can be used for login but it's not
allowed to use the email address to access webdav.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-08-11 15:26:39 +02:00
Nextcloud bot
f932638054 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-11 03:54:49 +00:00
Matthieu Gallien
b80e2b7e00 Merge pull request #3640 from nextcloud/doNotStoreAppveyorArtifcatsInAppveyor
no longer produce installers that would be stored by appveyor
2021-08-10 23:26:48 +02:00
Matthieu Gallien
188b06b7bb no longer produce installers that would be stored by appveyor
appveyor storage is limited and we ran into trouble with that

plan is to directly use github to do that and have links directly in PRs

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-08-10 14:59:51 +00:00
Nextcloud bot
5f0ac9a1f3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-10 04:10:12 +00:00
Nextcloud bot
1f8840cab0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-09 03:54:20 +00:00
Nextcloud bot
f241e44da0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-08 03:49:32 +00:00
Nextcloud bot
1d543ccf9a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-07 03:58:07 +00:00
Nextcloud bot
199c6b07a7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-06 04:02:28 +00:00
Nextcloud bot
3bab989aad [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-05 03:54:36 +00:00
allexzander
30a2f6ac71 Merge pull request #3626 from nextcloud/bugfix/incorrect-activity-message-invalid-char
Fix incorrect activity message on invalid char in the file name.
2021-08-04 13:46:07 +03:00
allexzander
4106c646f9 Fix incorrect activity message on invalid char in the file name.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-04 13:22:17 +03:00
allexzander
a92d28988a Merge pull request #3611 from nextcloud/feature/delete-apptoken
Delete apptoken after account removal.
2021-08-04 13:00:11 +03:00
allexzander
c930d8e30f Delete apptoken after account removal.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-08-04 09:37:40 +00:00
Nextcloud bot
376a730146 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-04 03:54:13 +00:00
allexzander
31e16f2620 Merge pull request #3620 from nextcloud/Valdnet-patch-3
l10n: Replace apostrophe with double quotation
2021-08-03 15:16:12 +03:00
Valdnet
dbd061c44b l10n: Replace apostrophe with double quotation. Remove double space and sort sentence.
Signed-off-by: Valdnet <47037905+Valdnet@users.noreply.github.com>
2021-08-03 15:00:53 +03:00
Nextcloud bot
60c0e5e97a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-03 03:53:48 +00:00
Felix Weilbach
2855f89e53 Merge pull request #3618 from nextcloud/rakekniven-patch-1
Changed grammar
2021-08-02 10:09:38 +02:00
rakekniven
37b012fcbd Changed grammar
Reported at Transifex.

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2021-08-02 06:40:50 +00:00
Nextcloud bot
4c5f12200d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-02 03:27:11 +00:00
Nextcloud bot
2857c16c61 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-01 03:28:19 +00:00
Nextcloud bot
7cc71deec7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-31 03:33:50 +00:00
allexzander
ca4b4cde61 Merge pull request #3600 from nextcloud/enh/rais-maxchunk-size
Set default maxChunkSize to 1000MB
2021-07-30 10:35:28 +03:00
szaimen
2c95b9519c Set default maxChunkSize to 1000MB
Signed-off-by: szaimen <szaimen@e.mail.de>
2021-07-30 07:00:09 +00:00
allexzander
f02b8f4a15 Merge pull request #3604 from nextcloud/Valdnet-patch-3
l10n: Replace apostrophe with double quotation
2021-07-30 09:59:38 +03:00
allexzander
fc75b94524 Fix clang-tidy errors.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-07-30 06:21:05 +00:00
allexzander
71b2b73881 Fix tests.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-07-30 06:21:05 +00:00
Valdnet
7ebbb499e0 l10n: Replace apostrophe with double quotation
Signed-off-by: Valdnet <47037905+Valdnet@users.noreply.github.com>
2021-07-30 06:21:05 +00:00
Nextcloud bot
10b7907fa2 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-30 03:25:23 +00:00
Matthieu Gallien
417fd44cb2 Merge pull request #3609 from nextcloud/update-supp-server-versions
Update supported server versions
2021-07-29 12:02:05 +02:00
Felix Weilbach
22b10e20e4 Update supported server versions
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-07-29 10:00:45 +00:00
Felix Weilbach
78d92f4425 Merge pull request #3608 from nextcloud/bump-version-3.3.50
Bump version to 3.3.50
2021-07-29 10:48:51 +02:00
Felix Weilbach
efd9c6ef45 Bump version to 3.3.50
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-07-29 10:47:24 +02:00
428 changed files with 88939 additions and 38901 deletions

View File

@@ -12,7 +12,7 @@
BasedOnStyle: WebKit
Standard: Cpp11
ColumnLimit: 0
ColumnLimit: 120
# Disable reflow of qdoc comments: indentation rules are different.
# Translation comments are also excluded
@@ -61,3 +61,5 @@ ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCH
MaxEmptyLinesToKeep: 2
KeepEmptyLinesAtTheStartOfBlocks: false
SpaceBeforeCpp11BracedList: false
Cpp11BracedListStyle: true

View File

@@ -24,7 +24,7 @@ Checks: '-*,
modernize-use-nodiscard,
modernize-use-equals-default,
modernize-use-noexcept,
modernize-user-override,
modernize-use-override,
modernize-use-nullptr,
modernize-use-transparent-functors,
modernize-use-uncaught-exceptions,

View File

@@ -1,17 +1,17 @@
kind: pipeline
name: qt-5.12
name: qt-5.15
steps:
- name: cmake
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
commands:
- cd /drone/build
- cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address ../src
- cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address -DCMAKE_CXX_FLAGS=-Werror ../src
- name: compile
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
@@ -19,7 +19,7 @@ steps:
- cd /drone/build
- make -j$(nproc)
- name: test
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
@@ -27,7 +27,7 @@ steps:
- cd /drone/build
- useradd -m -s /bin/bash test
- chown -R test:test .
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
- su -c 'ASAN_OPTIONS=detect_leaks=0 xvfb-run ctest --output-on-failure' test
volumes:
- name: build
@@ -43,27 +43,27 @@ trigger:
---
kind: pipeline
name: qt-5.12-clang
name: qt-5.15-clang
steps:
- name: cmake
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
commands:
- cd /drone/build
- cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clazy -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address ../src
- 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 -DECM_ENABLE_SANITIZERS=address -DCMAKE_CXX_FLAGS=-Werror ../src
- name: compile
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
commands:
- cd /drone/build
- ninja 2>1 | /drone/src/admin/linux/count_compiler_warnings.py /drone/src
- ninja
- name: test
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
@@ -71,9 +71,9 @@ steps:
- cd /drone/build
- useradd -m -s /bin/bash test
- chown -R test:test .
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
- su -c 'ASAN_OPTIONS=detect_leaks=0 xvfb-run ctest --output-on-failure' test
- name: clang-tidy
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
volumes:
- name: build
path: /drone/build
@@ -98,14 +98,14 @@ name: AppImage
steps:
- name: build
image: ghcr.io/nextcloud/continuous-integration-client-appimage:client-appimage-1
image: ghcr.io/nextcloud/continuous-integration-client-appimage:client-appimage-3
environment:
CI_UPLOAD_GIT_TOKEN:
from_secret: CI_UPLOAD_GIT_TOKEN
CI_UPLOAD_GIT_USERNAME:
from_secret: CI_UPLOAD_GIT_USERNAME
commands:
- /bin/bash -c "./admin/linux/build-appimage.sh"
- BUILDNR=$DRONE_BUILD_NUMBER VERSION_SUFFIX=$DRONE_PULL_REQUEST BUILD_UPDATER=ON DESKTOP_CLIENT_ROOT=$DRONE_WORKSPACE /bin/bash -c "./admin/linux/build-appimage.sh"
- /bin/bash -c "./admin/linux/upload-appimage.sh" || echo "Upload failed, however this is an optional step."
trigger:
branch:

View File

@@ -3,25 +3,44 @@
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Rebase command
on:
issue_comment:
types: [ created ]
name: Automatic Rebase
types: created
jobs:
rebase:
name: Rebase
# On pull requests and if the comment starts with `/rebase`
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase')
runs-on: ubuntu-latest
# On pull requests and if the comment starts with `/rebase`
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase')
steps:
- name: Add reaction on start
uses: peter-evans/create-or-update-comment@v1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "+1"
- name: Checkout the latest code
uses: actions/checkout@v2
with:
fetch-depth: 0
token: ${{ secrets.COMMAND_BOT_PAT }}
- name: Automatic Rebase
uses: cirrus-actions/rebase@1.5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
- name: Add reaction on failure
uses: peter-evans/create-or-update-comment@v1
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "-1"

50
.github/workflows/sonarcloud.yml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: SonarCloud analysis
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
name: Build
runs-on: ubuntu-latest
container: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4
env:
SONAR_SERVER_URL: "https://sonarcloud.io"
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Restore cache
uses: actions/cache@v2
with:
path: /cache
key: ${{ runner.os }}
- name: Run build-wrapper
run: |
mkdir build
cd build
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DBUILD_COVERAGE=ON
build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make -j 2
- name: Run tests
run: |
cd build
useradd -m -s /bin/bash test
chown -R test:test .
su -c 'xvfb-run ctest --output-on-failure --output-junit testResult.xml' test
- name: Generate coverage report
run: |
cd build
su -c 'ctest -T Coverage' test
- name: Run sonar-scanner
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
cp sonar-project.properties build
cd build
sonar-scanner --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"

1
.gitignore vendored
View File

@@ -184,6 +184,7 @@ compile_commands.json
convert.exe
.dir-locals.el
*-icon.png
*-icon-win-folder.png
*-sidebar.png
*-w10startmenu.png
theme.qrc

View File

@@ -22,5 +22,6 @@ 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

@@ -22,5 +22,6 @@ 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

@@ -22,5 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[en_GB]=@APPLICATION_ICON_NAME@
Name[en_GB]=@APPLICATION_NAME@ Desktop
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
GenericName[en_GB]=Folder Sync

View File

@@ -0,0 +1,24 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
MimeType=application/vnd.@APPLICATION_EXECUTABLE@;
Actions=Quit;
# Translations
[Desktop Action Quit]
Exec=@APPLICATION_EXECUTABLE@ --quit
Name=Quit @APPLICATION_NAME@
Icon=@APPLICATION_EXECUTABLE@
# Translations
GenericName[id]=Sinkronisasi Folder

View File

@@ -22,5 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ko]=@APPLICATION_ICON_NAME@
Name[ko]=@APPLICATION_NAME@ 데스크탑
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
GenericName[ko]=폴더 동기화

View File

@@ -22,5 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[nb_NO]=@APPLICATION_ICON_NAME@
Name[nb_NO]=@APPLICATION_NAME@ skrivebord
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
GenericName[nb_NO]=Mappe synkroinisering

View File

@@ -22,5 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[oc]=@APPLICATION_ICON_NAME@
Name[oc]=@APPLICATION_NAME@ Burèu
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
GenericName[oc]=Sincro. dossièr

View File

@@ -22,5 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[ru]=@APPLICATION_ICON_NAME@
Name[ru]=@APPLICATION_NAME@ Desktop
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
GenericName[ru]=Синхронизация папок

View File

@@ -22,5 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[sv]=@APPLICATION_ICON_NAME@
Name[sv]=@APPLICATION_NAME@ Skrivbord
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
GenericName[sv]=Mappsynkronisering

View File

@@ -0,0 +1,27 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ Desktop
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
MimeType=application/vnd.@APPLICATION_EXECUTABLE@;
Actions=Quit;
# Translations
[Desktop Action Quit]
Exec=@APPLICATION_EXECUTABLE@ --quit
Name=Quit @APPLICATION_NAME@
Icon=@APPLICATION_EXECUTABLE@
# Translations
Icon[vi]=@APPLICATION_ICON_NAME@
Name[vi]=@APPLICATION_NAME@ Máy tính
Comment[vi]=Ứng dụng đồng bộ @APPLICATION_NAME@ cho máy tính
GenericName[vi]=Đồng bộ thư mục

View File

@@ -42,11 +42,14 @@ if(NOT CRASHREPORTER_EXECUTABLE)
set(CRASHREPORTER_EXECUTABLE "${APPLICATION_EXECUTABLE}_crash_reporter")
endif()
set(synclib_NAME "${APPLICATION_EXECUTABLE}sync")
set(csync_NAME "${APPLICATION_EXECUTABLE}_csync")
include(Warnings)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=always)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options(-fcolor-diagnostics)
endif()
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
# For config.h
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
@@ -74,9 +77,9 @@ include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
add_definitions(
-DQT_DISABLE_DEPRECATED_BEFORE=0x000000
-DQT_USE_QSTRINGBUILDER
-DQT_MESSAGELOGCONTEXT #enable function name and line number in debug output
-DQT_DEPRECATED_WARNINGS
)
# if we cannot get it from git, directly try .tag (packages)
@@ -93,30 +96,15 @@ endif()
message(STATUS "GIT_SHA1 ${GIT_SHA1}")
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
set(DATADIR ${DATA_INSTALL_DIR})
if(WIN32)
set(DATADIR "share")
endif(WIN32)
set(SHAREDIR ${DATADIR})
set(SHAREDIR ${CMAKE_INSTALL_FULL_DATADIR})
#####
## handle BUILD_OWNCLOUD_OSX_BUNDLE
# BUILD_OWNCLOUD_OSX_BUNDLE was not initialized OR set to true on OSX
if(APPLE AND (NOT DEFINED BUILD_OWNCLOUD_OSX_BUNDLE OR BUILD_OWNCLOUD_OSX_BUNDLE))
set(BUILD_OWNCLOUD_OSX_BUNDLE ON)
# Build MacOS app bundle if wished
if(APPLE AND BUILD_OWNCLOUD_OSX_BUNDLE)
message(STATUS "Build MacOS app bundle")
set(OWNCLOUD_OSX_BUNDLE "${APPLICATION_NAME}.app")
set(LIB_INSTALL_DIR "${APPLICATION_NAME}.app/Contents/MacOS")
set(BIN_INSTALL_DIR "${APPLICATION_NAME}.app/Contents/MacOS")
# BUILD_OWNCLOUD_OSX_BUNDLE was disabled on OSX
elseif(APPLE AND NOT BUILD_OWNCLOUD_OSX_BUNDLE)
message(FATAL_ERROR "Building in non-bundle mode on OSX is currently not supported. Comment this error out if you want to work on/test it.")
# any other platform
else()
set(BUILD_OWNCLOUD_OSX_BUNDLE OFF)
endif()
#####
# this option removes Http authentication, keychain, shibboleth etc and is intended for
# external authentication mechanisms

View File

@@ -11,6 +11,8 @@ set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If enter
set( APPLICATION_SERVER_URL_ENFORCE ON ) # If set and APPLICATION_SERVER_URL is defined, the server can only connect to the pre-defined URL
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
set( APPLICATION_VIRTUALFILE_SUFFIX "nextcloud" CACHE STRING "Virtual file suffix (not including the .)")
set( APPLICATION_OCSP_STAPLING_ENABLED OFF )
set( APPLICATION_FORBID_BAD_SSL OFF )
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
set( LINUX_APPLICATION_ID "${APPLICATION_REV_DOMAIN}.${LINUX_PACKAGE_SHORTNAME}")
@@ -32,6 +34,9 @@ option( BUILD_UPDATER "Build updater" OFF )
option( WITH_PROVIDERS "Build with providers list" ON )
option( ENFORCE_VIRTUAL_FILES_SYNC_FOLDER "Enforce use of virtual files sync folder when available" OFF )
option( DO_NOT_USE_PROXY "Do not use system wide proxy, instead always do a direct connection to server" OFF )
## Theming options
set(NEXTCLOUD_BACKGROUND_COLOR "#0082c9" CACHE STRING "Default Nextcloud background color")

View File

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

View File

@@ -2,78 +2,88 @@
set -xe
mkdir /app
mkdir /build
export APPNAME=${APPNAME:-nextcloud}
export BUILD_UPDATER=${BUILD_UPDATER:-OFF}
export BUILDNR=${BUILDNR:-0000}
export DESKTOP_CLIENT_ROOT=${DESKTOP_CLIENT_ROOT:-/home/user}
#Set Qt-5.15
export QT_BASE_DIR=/opt/qt5.15
#Set Qt-5.12
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
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
#Set APPID for .desktop file processing
export LINUX_APPLICATION_ID=com.nextcloud.desktopclient.nextcloud
#set defaults
# Set defaults
export SUFFIX=${DRONE_PULL_REQUEST:=master}
if [ $SUFFIX != "master" ]; then
SUFFIX="PR-$SUFFIX"
fi
if [ "$BUILD_UPDATER" != "OFF" ]; then
BUILD_UPDATER=ON
fi
#QtKeyChain v0.10.0
cd /build
mkdir /app
# QtKeyChain
git clone https://github.com/frankosterfeld/qtkeychain.git
cd qtkeychain
git checkout v0.10.0
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr ../
make -j4
make install
cmake -G Ninja -D CMAKE_INSTALL_PREFIX=/app/usr ..
cmake --build . --target all
cmake --build . --target install
#Build client
cd /build
# Build client
mkdir build-client
cd build-client
cmake -D CMAKE_INSTALL_PREFIX=/usr \
cmake \
-G Ninja \
-D CMAKE_INSTALL_PREFIX=/app/usr \
-D BUILD_TESTING=OFF \
-D BUILD_UPDATER=ON \
-DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \
-DMIRALL_VERSION_BUILD=$DRONE_BUILD_NUMBER \
$DRONE_WORKSPACE
make -j4
make DESTDIR=/app install
-D BUILD_UPDATER=$BUILD_UPDATER \
-D MIRALL_VERSION_BUILD=$BUILDNR \
-D MIRALL_VERSION_SUFFIX="$VERSION_SUFFIX" \
${DESKTOP_CLIENT_ROOT}
cmake --build . --target all
cmake --build . --target install
# Move stuff around
cd /app
mv ./usr/lib/x86_64-linux-gnu/* ./usr/lib/
rm -rf ./usr/lib/cmake
rm -rf ./usr/include
rm -rf ./usr/mkspecs
rm -rf ./usr/lib/x86_64-linux-gnu/
mv usr/lib/x86_64-linux-gnu/* usr/lib/
# Don't bundle nextcloudcmd as we don't run it anyway
rm -rf ./usr/bin/nextcloudcmd
mkdir usr/plugins
mv usr/lib/${APPNAME}sync_vfs_suffix.so usr/plugins
mv usr/lib/${APPNAME}sync_vfs_xattr.so usr/plugins
rm -rf usr/lib/cmake
rm -rf usr/include
rm -rf usr/mkspecs
rm -rf usr/lib/x86_64-linux-gnu/
# Don't bundle the explorer extentions as we can't do anything with them in the AppImage
rm -rf ./usr/share/caja-python/
rm -rf ./usr/share/nautilus-python/
rm -rf ./usr/share/nemo-python/
rm -rf usr/share/caja-python/
rm -rf usr/share/nautilus-python/
rm -rf usr/share/nemo-python/
# Move sync exclude to right location
mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/
rm -rf ./etc
mv usr/etc/*/sync-exclude.lst usr/bin/
rm -rf etc
DESKTOP_FILE=/app/usr/share/applications/${LINUX_APPLICATION_ID}.desktop
# com.nextcloud.desktopclient.nextcloud.desktop
DESKTOP_FILE=$(ls /app/usr/share/applications/*.desktop)
sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' ${DESKTOP_FILE} # Bug in desktop file?
cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME
# Because distros need to get their shit together
cp -R /lib/x86_64-linux-gnu/libssl.so* ./usr/lib/
cp -R /lib/x86_64-linux-gnu/libcrypto.so* ./usr/lib/
cp -R /usr/lib/x86_64-linux-gnu/libssl.so* ./usr/lib/
cp -R /usr/lib/x86_64-linux-gnu/libcrypto.so* ./usr/lib/
cp -P /usr/local/lib/libssl.so* ./usr/lib/
cp -P /usr/local/lib/libcrypto.so* ./usr/lib/
@@ -81,19 +91,23 @@ cp -P /usr/local/lib/libcrypto.so* ./usr/lib/
cp -P -r /usr/lib/x86_64-linux-gnu/nss ./usr/lib/
# Use linuxdeployqt to deploy
cd /build
wget --ca-directory=/etc/ssl/certs/ -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
wget --ca-directory=/etc/ssl/certs -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
chmod a+x linuxdeployqt*.AppImage
./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
rm ./linuxdeployqt-continuous-x86_64.AppImage
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/app/usr/lib/
./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs -qmldir=$DRONE_WORKSPACE/src/gui
./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs -qmldir=${DESKTOP_CLIENT_ROOT}/src/gui
# Set origin
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/lib${APPNAME}sync.so.0
# Build AppImage
./squashfs-root/AppRun ${DESKTOP_FILE} -appimage
./squashfs-root/AppRun ${DESKTOP_FILE} -appimage -updateinformation="gh-releases-zsync|nextcloud-releases|desktop|latest|Nextcloud-*-x86_64.AppImage.zsync"
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
#move AppImage
if [ ! -z "$DRONE_COMMIT" ]
then
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
fi
mv *.AppImage ${DESKTOP_CLIENT_ROOT}/

View File

@@ -1,40 +0,0 @@
#!/usr/bin/env python3
# Small script that counts the warnings which the compiler emits
# and takes care that not more warnings are added.
import sys
import re
import requests
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} REPOSITORY_PATH")
sys.exit(1)
repository_path = sys.argv[1]
warning_regex = re.compile(r'warning:', re.M)
max_allowed_warnings_count_response = requests.get(
"https://nextclouddesktopwarningscount.felixweilbach.de")
if max_allowed_warnings_count_response.status_code != 200:
print('Can not get maximum number of allowed warnings')
sys.exit(1)
max_allowed_warnings_count = int(max_allowed_warnings_count_response.content)
print("Max number of allowed warnings:", max_allowed_warnings_count)
warnings_count = 0
for line in sys.stdin:
if warning_regex.findall(line):
warnings_count += 1
print(line, end="")
if warnings_count > max_allowed_warnings_count:
print("Error: Too many warnings! You probably introduced a new warning!")
sys.exit(1)
print("Total number of warnings:", warnings_count)

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 hirsute impish"
UBUNTU_DISTRIBUTIONS="bionic focal impish jammy"
DEBIAN_DISTRIBUTIONS="buster stretch testing"
else
UBUNTU_DISTRIBUTIONS="focal hirsute impish"
UBUNTU_DISTRIBUTIONS="focal impish jammy"
DEBIAN_DISTRIBUTIONS="testing"
fi

View File

@@ -24,6 +24,7 @@ cd /build
# AppImage
export APPIMAGE=$(readlink -f ./Nextcloud*.AppImage)
export UPDATE=$(readlink -f ./Nextcloud*.AppImage.zsync)
export BASENAME=$(basename ${APPIMAGE})
if ! test -e $APPIMAGE ; then
@@ -70,6 +71,7 @@ upload_release_asset()
{
uploadUrl=$1
echo $(curl --max-time 900 -u $GIT_USERNAME:$GIT_TOKEN -X POST $uploadUrl --header "Content-Type: application/octet-stream" --upload-file $APPIMAGE)
echo $(curl --max-time 900 -u $GIT_USERNAME:$GIT_TOKEN -X POST $uploadUrl --header "Content-Type: application/octet-stream" --upload-file $UPDATE)
}
delete_release_asset()
@@ -132,4 +134,4 @@ if [ $TAG_NAME != "master" ]; then
fi
echo
echo "AppImage link: $browserDownloadUrl"
echo "AppImage link: $browserDownloadUrl"

View File

@@ -9,7 +9,7 @@ else()
set(MAC_INSTALLER_DO_CUSTOM_BACKGROUND "0")
endif()
find_package(Qt5 5.12 COMPONENTS Core REQUIRED)
find_package(Qt5 5.15 COMPONENTS Core REQUIRED)
configure_file(create_mac.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/create_mac.sh)
configure_file(macosx.pkgproj.cmake ${CMAKE_CURRENT_BINARY_DIR}/macosx.pkgproj)
configure_file(pre_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh)

View File

@@ -695,7 +695,12 @@
<key>PROJECT_SETTINGS</key>
<dict>
<key>ADVANCED_OPTIONS</key>
<dict/>
<dict>
<key>installer-script.options:hostArchitectures</key>
<array>
<string>x86_64,arm64</string>
</array>
</dict>
<key>BUILD_FORMAT</key>
<integer>0</integer>
<key>BUILD_PATH</key>

82
admin/osx/make_universal.py Executable file
View File

@@ -0,0 +1,82 @@
#!/usr/bin/env python
import sys
import os
import subprocess
# A general note: We first produce a x86_64 and a arm64 app package
# and then merge them together instead of compiling the desktop client
# with the CMake option CMAKE_OSX_ARCHITECTURES="x86_64;arm64" because
# macdeployqt can not handle universal binaries well. In the future
# with Qt6 this might change and this script will become obsolete.
def usage(program_name):
print("Creates a universal app package from a x86_64 and a arm64 app package.")
print("Usage: {} x86_64_app_file arm64_app_file output_directory".format(program_name))
print("Example: {} some_dir/Nextcloud.app some_other_dir/Nextcloud.app output_dir".format(program_name))
def execute(command):
return subprocess.check_output(command)
def path_relative_to_package(app_package_file_path, file_path):
if file_path.startswith(app_package_file_path):
relative_path = file_path[len(app_package_file_path):]
if relative_path.startswith("/"):
return relative_path[1:]
return relative_path
return file_path
def is_executable(file_path):
output = str(execute(["file", file_path]))
if (("Mach-O 64-bit dynamically linked shared library" in output)
or ("Mach-O 64-bit executable" in output)):
return True
return False
if __name__ == "__main__":
if len(sys.argv) != 4:
usage(sys.argv[0])
sys.exit(1)
x86_64_app_file = sys.argv[1]
if not os.path.exists(x86_64_app_file):
print("Can't create universal: Path {} already exists".format(x86_64_app_file))
sys.exit(1)
arm64_app_file = sys.argv[2]
if not os.path.exists(arm64_app_file):
print("Can't create universal: Path {} already exists".format(arm64_app_file))
sys.exit(1)
output_dir = sys.argv[3]
# Copy the Arm64 variant to the output location if possible
if not os.path.exists(output_dir):
os.makedirs(output_dir)
app_file_name = os.path.basename(arm64_app_file)
universal_app_file = os.path.join(output_dir, app_file_name)
if os.path.exists(universal_app_file):
print("Can't create universal: Path {} already exists".format(universal_app_file))
sys.exit(1)
execute(["cp", "-a", arm64_app_file, output_dir])
# Now walk through the copied arm64 version and replace the binaries
for root, dirs, files in os.walk(universal_app_file):
for f in files:
absoulte_file_path = os.path.join(root, f)
root_relative = path_relative_to_package(universal_app_file, root)
x86_64_absolute_path = os.path.join(x86_64_app_file, root_relative, f)
arm64_absolute_path = os.path.join(arm64_app_file, root_relative, f)
if os.path.islink(absoulte_file_path) or not is_executable(absoulte_file_path):
continue
try:
execute(["lipo", "-create", "-output", absoulte_file_path, arm64_absolute_path, x86_64_absolute_path])
except:
print("Could not merge {} with {} into {}!".format(arm64_absolute_path, x86_64_absolute_path, absoulte_file_path))
print("Finished :)")

View File

@@ -26,6 +26,8 @@ install(FILES
${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat
Platform.wxi
Nextcloud.wxs
RegistryCleanup.vbs
RegistryCleanupCustomAction.wxs
gui/banner.bmp
gui/dialog.bmp
DESTINATION msi/)

View File

@@ -76,12 +76,16 @@
<!-- 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>
<!-- Uninstall: Cleanup the Registry -->
<Custom Action="RegistryCleanupCustomAction" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<!-- 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 -->
<Property Id="APPNAME">$(var.AppName)</Property>
<Property Id="ARPPRODUCTICON">$(var.AppIcon)</Property>
<Property Id="ARPHELPLINK">$(var.AppHelpLink)</Property>
<Property Id="ARPURLINFOABOUT">$(var.AppInfoLink)</Property>

View File

@@ -0,0 +1,54 @@
On Error goto 0
Const HKEY_LOCAL_MACHINE = &H80000002
Const strObjRegistry = "winmgmts:\\.\root\default:StdRegProv"
Function RegistryDeleteKeyRecursive(regRoot, strKeyPath)
Set objRegistry = GetObject(strObjRegistry)
objRegistry.EnumKey regRoot, strKeyPath, arrSubkeys
If IsArray(arrSubkeys) Then
For Each strSubkey In arrSubkeys
RegistryDeleteKeyRecursive regRoot, strKeyPath & "\" & strSubkey
Next
End If
objRegistry.DeleteKey regRoot, strKeyPath
End Function
Function RegistryListSubkeys(regRoot, strKeyPath)
Set objRegistry = GetObject(strObjRegistry)
objRegistry.EnumKey regRoot, strKeyPath, arrSubkeys
RegistryListSubkeys = arrSubkeys
End Function
Function GetUserSID()
Dim objWshNetwork, objUserAccount
Set objWshNetwork = CreateObject("WScript.Network")
Set objUserAccount = GetObject("winmgmts://" & objWshNetwork.UserDomain & "/root/cimv2").Get("Win32_UserAccount.Domain='" & objWshNetwork.ComputerName & "',Name='" & objWshNetwork.UserName & "'")
GetUserSID = objUserAccount.SID
End Function
Function RegistryCleanupSyncRootManager()
strSyncRootManagerKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager"
arrSubKeys = RegistryListSubkeys(HKEY_LOCAL_MACHINE, strSyncRootManagerKeyPath)
If IsArray(arrSubkeys) Then
arrSubkeys=Filter(arrSubkeys, Session.Property("APPNAME"))
End If
If IsArray(arrSubkeys) Then
arrSubkeys=Filter(arrSubkeys, GetUserSID())
End If
If IsArray(arrSubkeys) Then
For Each strSubkey In arrSubkeys
RegistryDeleteKeyRecursive HKEY_LOCAL_MACHINE, strSyncRootManagerKeyPath & "\" & strSubkey
Next
End If
End Function
Function RegistryCleanup()
RegistryCleanupSyncRootManager()
End Function

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<Binary Id="RegistryCleanup" SourceFile="RegistryCleanup.vbs"/>
<CustomAction Id='RegistryCleanupCustomAction' BinaryKey="RegistryCleanup" VBScriptCall="RegistryCleanup" Return="ignore" Execute="immediate"/>
</Fragment>
</Wix>

View File

@@ -17,10 +17,10 @@ Rem Generate collect.wxs
if %ERRORLEVEL% neq 0 exit %ERRORLEVEL%
Rem Compile en-US (https://www.firegiant.com/wix/tutorial/transforms/morphing-installers/)
"%WIX%\bin\candle.exe" -dcodepage=1252 -dPlatform=%BuildArch% -arch %BuildArch% -dHarvestAppDir="%HarvestAppDir%" -ext WixUtilExtension NCMsiHelper.wxs WinShellExt.wxs collect.wxs Nextcloud.wxs
"%WIX%\bin\candle.exe" -dcodepage=1252 -dPlatform=%BuildArch% -arch %BuildArch% -dHarvestAppDir="%HarvestAppDir%" -ext WixUtilExtension NCMsiHelper.wxs WinShellExt.wxs collect.wxs Nextcloud.wxs RegistryCleanupCustomAction.wxs
if %ERRORLEVEL% neq 0 exit %ERRORLEVEL%
Rem Link MSI package
"%WIX%\bin\light.exe" -sw1076 -ext WixUIExtension -ext WixUtilExtension -cultures:en-us NCMsiHelper.wixobj WinShellExt.wixobj collect.wixobj Nextcloud.wixobj -out "@MSI_INSTALLER_FILENAME@"
"%WIX%\bin\light.exe" -sw1076 -ext WixUIExtension -ext WixUtilExtension -cultures:en-us NCMsiHelper.wixobj WinShellExt.wixobj collect.wixobj Nextcloud.wixobj RegistryCleanupCustomAction.wixobj -out "@MSI_INSTALLER_FILENAME@"
exit %ERRORLEVEL%

View File

@@ -32,9 +32,6 @@ install:
build_script:
- ps: |
craft --src-dir $env:APPVEYOR_BUILD_FOLDER nextcloud-client
craft --package --src-dir $env:APPVEYOR_BUILD_FOLDER nextcloud-client
cp C:\CraftMaster\windows-msvc2019_64-cl\tmp\*.7z $env:APPVEYOR_BUILD_FOLDER
cp C:\CraftMaster\windows-msvc2019_64-cl\tmp\*.exe $env:APPVEYOR_BUILD_FOLDER
test_script:
- ps: |
@@ -43,7 +40,3 @@ test_script:
environment:
matrix:
- TARGET: windows-msvc2019_64-cl
artifacts:
- path: '*.7z'
- path: '*.exe'

View File

@@ -41,7 +41,7 @@
# target does not have the ``WIN32_EXECUTABLE`` property set.
# * One of the tools png2ico (See :find-module:`FindPng2Ico`) or
# icotool (see :find-module:`FindIcoTool`) is required.
# * Supported sizes: 16, 24, 32, 48, 64, 128, 256, 512 and 1024.
# * Supported sizes: 16, 20, 24, 32, 40, 48, 64, 128, 256, 512 and 1024.
#
# Mac OS X notes
# * The executable target must have the ``MACOSX_BUNDLE`` property set.
@@ -102,9 +102,12 @@ include(CMakeParseArguments)
function(ecm_add_app_icon appsources)
set(options)
set(oneValueArgs OUTFILE_BASENAME)
set(multiValueArgs ICONS SIDEBAR_ICONS)
set(oneValueArgs OUTFILE_BASENAME ICON_INDEX)
set(multiValueArgs ICONS SIDEBAR_ICONS RC_DEPENDENCIES)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if (NOT ARG_ICON_INDEX)
set(ARG_ICON_INDEX 1)
endif()
if(NOT ARG_ICONS)
message(FATAL_ERROR "No ICONS argument given to ecm_add_app_icon")
@@ -138,8 +141,11 @@ function(ecm_add_app_icon appsources)
endforeach()
endif()
_ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;24;32;48;64;128;256;512;1024")
if (WIN32)
_ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;20;24;32;40;48;64;128;256;512;1024")
else()
_ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;24;32;48;64;128;256;512;1024")
endif()
if(ARG_SIDEBAR_ICONS)
_ecm_add_app_icon_categorize_icons("${ARG_SIDEBAR_ICONS}" "sidebar_icons" "16;32;64;128;256")
endif()
@@ -168,8 +174,10 @@ function(ecm_add_app_icon appsources)
set(windows_icons ${icons_at_16px}
${icons_at_20px}
${icons_at_24px}
${icons_at_32px}
${icons_at_40px}
${icons_at_48px}
${icons_at_64px}
${icons_at_128px}
@@ -204,12 +212,12 @@ function(ecm_add_app_icon appsources)
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
# this bit's a little hacky to make the dependency stuff work
file(WRITE "${_outfilename}.rc.in" "IDI_ICON1 ICON DISCARDABLE \"${_outfilename}.ico\"\n")
file(WRITE "${_outfilename}.rc.in" "IDI_ICON${ARG_ICON_INDEX} ICON DISCARDABLE \"${_outfilename}.ico\"\n")
add_custom_command(
OUTPUT "${_outfilename}.rc"
COMMAND ${CMAKE_COMMAND}
ARGS -E copy "${_outfilename}.rc.in" "${_outfilename}.rc"
DEPENDS "${_outfilename}.ico"
DEPENDS ${ARG_RC_DEPENDENCIES} "${_outfilename}.ico"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
endfunction()
@@ -226,7 +234,7 @@ function(ecm_add_app_icon appsources)
endif()
endforeach()
foreach(size 16 24 32 48 64 128 ${maxSize})
foreach(size 16 20 24 32 40 48 64 128 ${maxSize})
if(NOT icons_at_${size}px)
continue()
endif()

View File

@@ -1,253 +0,0 @@
#.rst:
# GNUInstallDirs
# --------------
#
# Define GNU standard installation directories
#
# Provides install directory variables as defined for GNU software:
#
# ::
#
# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html
#
# Inclusion of this module defines the following variables:
#
# ::
#
# CMAKE_INSTALL_<dir> - destination for files of a given type
# CMAKE_INSTALL_FULL_<dir> - corresponding absolute path
#
# where <dir> is one of:
#
# ::
#
# BINDIR - user executables (bin)
# SBINDIR - system admin executables (sbin)
# LIBEXECDIR - program executables (libexec)
# SYSCONFDIR - read-only single-machine data (etc)
# SHAREDSTATEDIR - modifiable architecture-independent data (com)
# LOCALSTATEDIR - modifiable single-machine data (var)
# LIBDIR - object code libraries (lib or lib64 or lib/<multiarch-tuple> on Debian)
# INCLUDEDIR - C header files (include)
# OLDINCLUDEDIR - C header files for non-gcc (/usr/include)
# DATAROOTDIR - read-only architecture-independent data root (share)
# DATADIR - read-only architecture-independent data (DATAROOTDIR)
# INFODIR - info documentation (DATAROOTDIR/info)
# LOCALEDIR - locale-dependent data (DATAROOTDIR/locale)
# MANDIR - man documentation (DATAROOTDIR/man)
# DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME)
#
# Each CMAKE_INSTALL_<dir> value may be passed to the DESTINATION
# options of install() commands for the corresponding file type. If the
# includer does not define a value the above-shown default will be used
# and the value will appear in the cache for editing by the user. Each
# CMAKE_INSTALL_FULL_<dir> value contains an absolute path constructed
# from the corresponding destination by prepending (if necessary) the
# value of CMAKE_INSTALL_PREFIX.
#=============================================================================
# Copyright 2011 Nikita Krupen'ko <krnekit@gmail.com>
# Copyright 2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# Installation directories
#
if(NOT DEFINED CMAKE_INSTALL_BINDIR)
set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)")
endif()
if(NOT DEFINED CMAKE_INSTALL_SBINDIR)
set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)")
endif()
if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR)
set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)")
endif()
if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)")
endif()
if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR)
set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)")
endif()
if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)
set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)")
endif()
# We check if the variable was manually set and not cached, in order to
# allow projects to set the values as normal variables before including
# GNUInstallDirs to avoid having the entries cached or user-editable. It
# replaces the "if(NOT DEFINED CMAKE_INSTALL_XXX)" checks in all the
# other cases.
# If CMAKE_INSTALL_LIBDIR is defined, if _libdir_set is false, then the
# variable is a normal one, otherwise it is a cache one.
get_property(_libdir_set CACHE CMAKE_INSTALL_LIBDIR PROPERTY TYPE SET)
if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set
AND DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
AND NOT "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" STREQUAL "${CMAKE_INSTALL_PREFIX}"))
# If CMAKE_INSTALL_LIBDIR is not defined, it is always executed.
# Otherwise:
# * if _libdir_set is false it is not executed (meaning that it is
# not a cache variable)
# * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is not defined it is
# not executed
# * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX and
# CMAKE_INSTALL_PREFIX are the same string it is not executed.
# _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is updated after the
# execution, of this part of code, therefore at the next inclusion
# of the file, CMAKE_INSTALL_LIBDIR is defined, and the 2 strings
# are equal, meaning that the if is not executed the code the
# second time.
set(_LIBDIR_DEFAULT "lib")
# Override this default 'lib' with 'lib64' iff:
# - we are on Linux system but NOT cross-compiling
# - we are NOT on debian
# - we are on a 64 bits system
# reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
# and CMAKE_INSTALL_PREFIX is "/usr"
# See http://wiki.debian.org/Multiarch
if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX)
set(__LAST_LIBDIR_DEFAULT "lib")
# __LAST_LIBDIR_DEFAULT is the default value that we compute from
# _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX, not a cache entry for
# the value that was last used as the default.
# This value is used to figure out whether the user changed the
# CMAKE_INSTALL_LIBDIR value manually, or if the value was the
# default one. When CMAKE_INSTALL_PREFIX changes, the value is
# updated to the new default, unless the user explicitly changed it.
endif()
if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
AND NOT CMAKE_CROSSCOMPILING)
if (EXISTS "/etc/debian_version") # is this a debian system ?
if(CMAKE_LIBRARY_ARCHITECTURE)
set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
endif()
else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
message(AUTHOR_WARNING
"Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
"Please enable at least one language before including GNUInstallDirs.")
else()
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
set(_LIBDIR_DEFAULT "lib64")
if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX)
set(__LAST_LIBDIR_DEFAULT "lib64")
endif()
endif()
endif()
endif()
endif()
if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})")
elseif(DEFINED __LAST_LIBDIR_DEFAULT
AND "${__LAST_LIBDIR_DEFAULT}" STREQUAL "${CMAKE_INSTALL_LIBDIR}")
set_property(CACHE CMAKE_INSTALL_LIBDIR PROPERTY VALUE "${_LIBDIR_DEFAULT}")
endif()
endif()
# Save for next run
set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run")
unset(_libdir_set)
unset(__LAST_LIBDIR_DEFAULT)
if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR)
set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)")
endif()
if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR)
set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)")
endif()
if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)
set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")
endif()
#-----------------------------------------------------------------------------
# Values whose defaults are relative to DATAROOTDIR. Store empty values in
# the cache and store the defaults in local variables if the cache values are
# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes.
if(NOT CMAKE_INSTALL_DATADIR)
set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)")
set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")
endif()
if(NOT CMAKE_INSTALL_INFODIR)
set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")
set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")
endif()
if(NOT CMAKE_INSTALL_LOCALEDIR)
set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)")
set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
endif()
if(NOT CMAKE_INSTALL_MANDIR)
set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")
set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")
endif()
if(NOT CMAKE_INSTALL_DOCDIR)
set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")
endif()
#-----------------------------------------------------------------------------
mark_as_advanced(
CMAKE_INSTALL_BINDIR
CMAKE_INSTALL_SBINDIR
CMAKE_INSTALL_LIBEXECDIR
CMAKE_INSTALL_SYSCONFDIR
CMAKE_INSTALL_SHAREDSTATEDIR
CMAKE_INSTALL_LOCALSTATEDIR
CMAKE_INSTALL_LIBDIR
CMAKE_INSTALL_INCLUDEDIR
CMAKE_INSTALL_OLDINCLUDEDIR
CMAKE_INSTALL_DATAROOTDIR
CMAKE_INSTALL_DATADIR
CMAKE_INSTALL_INFODIR
CMAKE_INSTALL_LOCALEDIR
CMAKE_INSTALL_MANDIR
CMAKE_INSTALL_DOCDIR
)
# Result directories
#
foreach(dir
BINDIR
SBINDIR
LIBEXECDIR
SYSCONFDIR
SHAREDSTATEDIR
LOCALSTATEDIR
LIBDIR
INCLUDEDIR
OLDINCLUDEDIR
DATAROOTDIR
DATADIR
INFODIR
LOCALEDIR
MANDIR
DOCDIR
)
if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}})
set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
else()
set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")
endif()
endforeach()

View File

@@ -27,7 +27,4 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
endif()
if(DEFINED MIRALL_FATAL_WARNINGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif(DEFINED MIRALL_FATAL_WARNINGS)
endif()

View File

@@ -29,7 +29,11 @@
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
#cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@"
#cmakedefine APPLICATION_VIRTUALFILE_SUFFIX "@APPLICATION_VIRTUALFILE_SUFFIX@"
#cmakedefine APPLICATION_OCSP_STAPLING_ENABLED "@APPLICATION_OCSP_STAPLING_ENABLED@"
#cmakedefine APPLICATION_FORBID_BAD_SSL "@APPLICATION_FORBID_BAD_SSL@"
#define APPLICATION_DOTVIRTUALFILE_SUFFIX "." APPLICATION_VIRTUALFILE_SUFFIX
#cmakedefine01 ENFORCE_VIRTUAL_FILES_SYNC_FOLDER
#cmakedefine DO_NOT_USE_PROXY "@DO_NOT_USE_PROXY@"
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@

View File

@@ -406,7 +406,7 @@ Virtual Files
-------------
.. note::
* This feature is currently only available on ``Windows`` by default. ``Linux`` implementation is experimental and must be enabled by adding ``showExperimentalOptions=true`` to the ``nextcloud.cfg`` configuration file in the ``App Data`` folder. ``macOS``, at the moment, is using the same backend as ``Linux`` one. It can be enabled with the same ``showExperimentalOptions`` flag.
* This feature is currently only available on ``Windows`` by default. ``Linux`` and ``macOS`` implementations are experimental and must be enabled by adding ``showExperimentalOptions=true`` to the ``nextcloud.cfg`` configuration file in the ``App Data`` folder.
Oftentimes, users are working with a huge amount of files that are big in size. Synchronizing every such file to a device that's running a Nextcloud desktop client is not always possible due to the user's device storage space limitation.
Let's assume that your desktop client is connected to a server that has 1TB of data. You want all those files at hand, so you can quickly access any file via the file explorer. Your device has 512GB local storage device.
@@ -416,8 +416,15 @@ Needless to say, this is far from being convenient.
That's why, starting from 3.2.0, we are introducing the VFS (Virtual Files) feature. You may have had experience working with a similar feature in other cloud sync clients. This feature is known by different names: Files On-Demand, SmartSync, etc.
The VFS does not occupy much space on the user's storage. It just creates placeholders for each file and folder. These files are quite small and only contain metadata needed to display them properly and to fetch the actual file when needed.
One will see a hydration (in other words - file download) process when double-clicking on a file that must become available. There will be a progress-bar popup displayed if the file is large enough. So, the hydration process can be observed and it makes it easy to then find out, how long, it would take to fetch the actual file from the server.
The "Hydration" can be thought of as "downloading" or "fetching" the file contents. As soon as hydration is complete, the file will then be opened normally as now it is a real file on the user's storage. It won't disappear, and, from now on, will always be available, unless it is manually dehydrated.
When one tries to open a file, for example by double clicking on a
file in the Windows Explorer, one will see that the file gets
downloaded and becomes available locally. This can be observed by a
small progress-bar popup if the file is large enough.
As soon as the download is complete, the file will then be opened
normally as now it is a real file on the user's storage. It won't
disappear, and, from now on, will always be available, unless it is
manually dehydrated.
.. image:: images/vfs_hydration_progress_bar.png
:alt: VFS hydration progress bar

View File

@@ -32,10 +32,9 @@ itself. Should the silent update fail, the client offers a manual download.
macOS
^^^^^
If a new update is available, the Nextcloud client initializes a pop-up dialog
to alert you of the update and requesting that you update to the latest
version. Due to their use of the Sparkle frameworks, this is the default
process for macOS applications.
There is no automatic updater on macOS. If a new update is available,
the Nextcloud client initializes a pop-up dialog to alert you of the
update and requesting that you update to the latest version manually.
Linux
^^^^^
@@ -96,14 +95,6 @@ To prevent automatic updates and disallow manual overrides:
.. note:: branded clients have different key names
Preventing Automatic Updates in macOS Environments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can disable the automatic update mechanism, in the macOS operating system,
by copying the file
``nextcloud.app/Contents/Resources/deny_autoupdate_com.nextcloud.desktopclient.plist``
to ``/Library/Preferences/com.nextcloud.desktopclient.plist``.
Preventing Automatic Updates in Linux Environments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@@ -185,6 +185,8 @@ Then, in Terminal:
.. code-block:: bash
% echo 'export CMAKE_INSTALL_PREFIX=~/Builds' >> ~/.nextcloud_build_variables
# If you want to build a macOS app bundle for distribution
% echo 'export BUILD_OWNCLOUD_OSX_BUNDLE=ON' >> ~/.nextcloud_build_variables
Replace ``~/Builds`` with a different directory if you'd like the build to end up elsewhere.

View File

@@ -48,9 +48,9 @@ copyright = u'2013-2021, The Nextcloud developers'
# built documents.
#
# The short X.Y version.
version = '3.3'
version = '3.4'
# The full version, including alpha/beta/rc tags.
release = '3.3.3'
release = '3.4.2'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@@ -41,7 +41,7 @@ Some interesting values that can be set on the configuration file are:
| ``chunkSize`` | ``10000000`` (10 MB) | Specifies the chunk size of uploaded files in bytes. |
| | | The client will dynamically adjust this size within the maximum and minimum bounds (see below). |
+----------------------------------+------------------------+--------------------------------------------------------------------------------------------------------+
| ``maxChunkSize`` | ``100000000`` (100 MB) | Specifies the maximum chunk size of uploaded files in bytes. |
| ``maxChunkSize`` | ``1000000000`` (1000 MB) | Specifies the maximum chunk size of uploaded files in bytes. |
+----------------------------------+------------------------+--------------------------------------------------------------------------------------------------------+
| ``minChunkSize`` | ``1000000`` (1 MB) | Specifies the minimum chunk size of uploaded files in bytes. |
+----------------------------------+------------------------+--------------------------------------------------------------------------------------------------------+

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -31,7 +31,7 @@ download page.
System Requirements
----------------------------------
- Windows 10+
- Windows 8.1+
- macOS 10.12+ (64-bit only)
- Linux
- FreeBSD

View File

@@ -157,6 +157,35 @@ icon.
If a directory includes ignored files that are marked with warning icons
that does not change the status of the parent directories.
Set the user status
-------------------
If you have the user status app installed on your Nextcloud server,
you can set your user status from the desktop client. To do so, open
the main dialog. Then click on your avatar and then click on the three
dots. In the menu that opens click on **Set status**.
.. figure:: images/user_status_selector_main_dialog.png
:alt: Open user status dialog from main dialog.
In the dialog that opens, you can set your online status if
you click on either **Online**, **Away**, **Do not disturb** or
**Invisible**. You can also set a custom status message with the text
field below or choose one of the predefined status messages below. It
is also possible to set a custom emoji if you click on the button with
the emoji beside the text input field. The last thing you might want
to set is when your user status should be cleared. You can choose the
period after which the user status will be cleared by clicking on the
button on the left hand side of the text **Clear status message after**.
.. figure:: images/user_status-selector_dialog.png
:alt: Dialog to set user status.
If you are happy with the status you have created you can enable this
status with the button **Set status message**. If you had already a
status set, you can clear the status by clicking the cutton **Clear
status message**.
Sharing From Your Desktop
-------------------------

View File

@@ -1,11 +1,27 @@
<RCC>
<qresource prefix="/qml">
<file>src/gui/UserStatusSelector.qml</file>
<file>src/gui/UserStatusSelectorDialog.qml</file>
<file>src/gui/EmojiPicker.qml</file>
<file>src/gui/ErrorBox.qml</file>
<file>src/gui/tray/Window.qml</file>
<file>src/gui/tray/UserLine.qml</file>
<file>src/gui/tray/HeaderButton.qml</file>
<file>src/gui/tray/SyncStatus.qml</file>
<file>theme/Style/Style.qml</file>
<file>theme/Style/qmldir</file>
<file>src/gui/tray/ActivityActionButton.qml</file>
<file>src/gui/tray/ActivityItem.qml</file>
<file>src/gui/tray/AutoSizingMenu.qml</file>
<file>src/gui/tray/ActivityList.qml</file>
<file>src/gui/tray/FileActivityDialog.qml</file>
<file>src/gui/tray/UnifiedSearchInputContainer.qml</file>
<file>src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml</file>
<file>src/gui/tray/UnifiedSearchResultItem.qml</file>
<file>src/gui/tray/UnifiedSearchResultItemSkeleton.qml</file>
<file>src/gui/tray/UnifiedSearchResultItemSkeletonContainer.qml</file>
<file>src/gui/tray/UnifiedSearchResultListItem.qml</file>
<file>src/gui/tray/UnifiedSearchResultNothingFound.qml</file>
<file>src/gui/tray/UnifiedSearchResultSectionItem.qml</file>
</qresource>
</RCC>

View File

@@ -1,23 +1,26 @@
if(APPLE)
set(OC_OEM_SHARE_ICNS "${CMAKE_BINARY_DIR}/src/gui/${APPLICATION_ICON_NAME}.icns")
set(OC_OEM_SHARE_ICNS "${CMAKE_BINARY_DIR}/src/gui/${APPLICATION_ICON_NAME}.icns")
# The bundle identifier and application group need to have compatible values with the client
# to be able to open a Mach port across the extension's sandbox boundary.
# Pass the info through the xcodebuild command line and make sure that the project uses
# those user-defined settings to build the plist.
add_custom_target( mac_overlayplugin ALL
xcodebuild -project ${CMAKE_SOURCE_DIR}/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj
-target FinderSyncExt -configuration Release "SYMROOT=${CMAKE_CURRENT_BINARY_DIR}"
"OC_OEM_SHARE_ICNS=${OC_OEM_SHARE_ICNS}"
"OC_APPLICATION_NAME=${APPLICATION_NAME}"
"OC_APPLICATION_REV_DOMAIN=${APPLICATION_REV_DOMAIN}"
"OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX=${SOCKETAPI_TEAM_IDENTIFIER_PREFIX}"
# The bundle identifier and application group need to have compatible values with the client
# to be able to open a Mach port across the extension's sandbox boundary.
# Pass the info through the xcodebuild command line and make sure that the project uses
# those user-defined settings to build the plist.
add_custom_target( mac_overlayplugin ALL
xcodebuild ARCHS=${CMAKE_OSX_ARCHITECTURES} ONLY_ACTIVE_ARCH=NO
-project ${CMAKE_SOURCE_DIR}/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj
-target FinderSyncExt -configuration Release "SYMROOT=${CMAKE_CURRENT_BINARY_DIR}"
"OC_OEM_SHARE_ICNS=${OC_OEM_SHARE_ICNS}"
"OC_APPLICATION_NAME=${APPLICATION_NAME}"
"OC_APPLICATION_REV_DOMAIN=${APPLICATION_REV_DOMAIN}"
"OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX=${SOCKETAPI_TEAM_IDENTIFIER_PREFIX}"
COMMENT building Mac Overlay icons
VERBATIM)
add_dependencies(mac_overlayplugin ${APPLICATION_EXECUTABLE}) # for the ownCloud.icns to be generated
add_dependencies(mac_overlayplugin nextcloud) # for the ownCloud.icns to be generated
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Release/FinderSyncExt.appex
DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns
USE_SOURCE_PERMISSIONS)
endif(APPLE)
if (BUILD_OWNCLOUD_OSX_BUNDLE)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Release/FinderSyncExt.appex
DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns
USE_SOURCE_PERMISSIONS)
endif()
endif()

View File

@@ -2,7 +2,7 @@ project(dolphin-owncloud)
cmake_minimum_required(VERSION 2.8.12)
set(QT_MIN_VERSION "5.12.0")
set(QT_MIN_VERSION "5.15.0")
set(KF5_MIN_VERSION "5.16.0")
set(KDE_INSTALL_USE_QT_SYS_PATHS ON CACHE BOOL "Install the plugin in the right directory")

View File

@@ -37,7 +37,7 @@ public:
explicit OwncloudDolphinPluginAction(QObject* parent, const QList<QVariant>&)
: KAbstractFileItemActionPlugin(parent) { }
QList<QAction*> actions(const KFileItemListProperties& fileItemInfos, QWidget* parentWidget) Q_DECL_OVERRIDE
QList<QAction*> actions(const KFileItemListProperties& fileItemInfos, QWidget* parentWidget) override
{
auto helper = OwncloudDolphinPluginHelper::instance();
if (!helper->isConnected() || !fileItemInfos.isLocal())

View File

@@ -1,6 +1,6 @@
if( UNIX AND NOT APPLE )
SET(ICON_DIR ${DATADIR}/icons/hicolor)
SET(ICON_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor)
FOREACH(size 128x128 16x16 256x256 32x32 48x48 64x64 72x72)
file(GLOB files "${size}/*.png")

View File

@@ -41,7 +41,7 @@ macro(libcloudproviders_add_config _sources)
endmacro(libcloudproviders_add_config _sources)
find_package(Qt5 5.12 COMPONENTS DBus)
find_package(Qt5 5.15 COMPONENTS DBus)
IF (Qt5DBus_FOUND)
STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")

View File

@@ -25,9 +25,9 @@ if( UNIX AND NOT APPLE )
ERROR_VARIABLE errors OUTPUT_VARIABLE out)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate.py DESTINATION ${DATADIR}/nautilus-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_nemo.py DESTINATION ${DATADIR}/nemo-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_caja.py DESTINATION ${DATADIR}/caja-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate.py DESTINATION ${CMAKE_INSTALL_DATADIR}/nautilus-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_nemo.py DESTINATION ${CMAKE_INSTALL_DATADIR}/nemo-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_caja.py DESTINATION ${CMAKE_INSTALL_DATADIR}/caja-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)

View File

@@ -26,7 +26,7 @@
#pragma once
class __declspec(dllexport) RemotePathChecker {
class RemotePathChecker {
public:
enum FileState {
// Order synced with NCOverlay

View File

@@ -63,6 +63,7 @@
<File Id="NCContextMenu.dll" KeyPath="yes" Source="$(var.HarvestAppDir)\shellext\NCContextMenu.dll">
<Class Id="$(var.ContextMenuGuid)" Context="InprocServer32" Description="$(var.ContextMenuDescription)" ThreadingModel="apartment" />
</File>
<RegistryValue Root="HKCR" Key="CLSID\$(var.ContextMenuGuid)" Name="ContextMenuOptIn" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="AllFileSystemObjects\shellex\ContextMenuHandlers\$(var.ContextMenuRegKeyName)" Value="$(var.ContextMenuGuid)" Type="string" Action="write" />
</Component>

12
sonar-project.properties Normal file
View File

@@ -0,0 +1,12 @@
sonar.projectKey=nextcloud_desktop
sonar.organization=nextcloud
sonar.projectBaseDir=..
sonar.sources=src
sonar.exclusions=3rdparty/**
sonar.language=c++
sonar.cfamily.cache.enabled=false
sonar.sourceEncoding=UTF-8
sonar.cfamily.threads=2
sonar.cfamily.gcov.reportsPath=build/Testing/CoverageInfo
sonar.cfamily.cache.enabled=true,
sonar.cfamily.cache.path=/cache/sonarcloud

View File

@@ -67,8 +67,8 @@ public:
*/
const QColor & color() const { return m_color; }
virtual QSize sizeHint() const;
int heightForWidth(int w) const;
QSize sizeHint() const override;
int heightForWidth(int w) const override;
public slots:
/*! Starts the spin animation.
\sa stopAnimation isAnimated
@@ -98,8 +98,8 @@ public slots:
*/
void setColor(const QColor & color);
protected:
virtual void timerEvent(QTimerEvent * event);
virtual void paintEvent(QPaintEvent * event);
void timerEvent(QTimerEvent * event) override;
void paintEvent(QPaintEvent * event) override;
private:
int m_angle = 0;
int m_timerId = -1;

280
src/3rdparty/kirigami/wheelhandler.cpp vendored Normal file
View File

@@ -0,0 +1,280 @@
/*
* SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "wheelhandler.h"
#include <QWheelEvent>
#include <QQuickItem>
#include <QDebug>
class GlobalWheelFilterSingleton
{
public:
GlobalWheelFilter self;
};
Q_GLOBAL_STATIC(GlobalWheelFilterSingleton, privateGlobalWheelFilterSelf)
GlobalWheelFilter::GlobalWheelFilter(QObject *parent)
: QObject(parent)
{
}
GlobalWheelFilter::~GlobalWheelFilter() = default;
GlobalWheelFilter *GlobalWheelFilter::self()
{
return &privateGlobalWheelFilterSelf()->self;
}
void GlobalWheelFilter::setItemHandlerAssociation(QQuickItem *item, WheelHandler *handler)
{
if (!m_handlersForItem.contains(handler->target())) {
handler->target()->installEventFilter(this);
}
m_handlersForItem.insert(item, handler);
connect(item, &QObject::destroyed, this, [this](QObject *obj) {
auto item = static_cast<QQuickItem *>(obj);
m_handlersForItem.remove(item);
});
connect(handler, &QObject::destroyed, this, [this](QObject *obj) {
auto handler = static_cast<WheelHandler *>(obj);
removeItemHandlerAssociation(handler->target(), handler);
});
}
void GlobalWheelFilter::removeItemHandlerAssociation(QQuickItem *item, WheelHandler *handler)
{
if (!item || !handler) {
return;
}
m_handlersForItem.remove(item, handler);
if (!m_handlersForItem.contains(item)) {
item->removeEventFilter(this);
}
}
bool GlobalWheelFilter::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::Wheel) {
auto item = qobject_cast<QQuickItem *>(watched);
if (!item || !item->isEnabled()) {
return QObject::eventFilter(watched, event);
}
auto we = static_cast<QWheelEvent *>(event);
m_wheelEvent.initializeFromEvent(we);
bool shouldBlock = false;
bool shouldScrollFlickable = false;
for (auto *handler : m_handlersForItem.values(item)) {
if (handler->m_blockTargetWheel) {
shouldBlock = true;
}
if (handler->m_scrollFlickableTarget) {
shouldScrollFlickable = true;
}
emit handler->wheel(&m_wheelEvent);
}
if (shouldScrollFlickable && !m_wheelEvent.isAccepted()) {
manageWheel(item, we);
}
if (shouldBlock) {
return true;
}
}
return QObject::eventFilter(watched, event);
}
void GlobalWheelFilter::manageWheel(QQuickItem *target, QWheelEvent *event)
{
// Duck typing: accept everyhint that has all the properties we need
if (target->metaObject()->indexOfProperty("contentX") == -1
|| target->metaObject()->indexOfProperty("contentY") == -1
|| target->metaObject()->indexOfProperty("contentWidth") == -1
|| target->metaObject()->indexOfProperty("contentHeight") == -1
|| target->metaObject()->indexOfProperty("topMargin") == -1
|| target->metaObject()->indexOfProperty("bottomMargin") == -1
|| target->metaObject()->indexOfProperty("leftMargin") == -1
|| target->metaObject()->indexOfProperty("rightMargin") == -1
|| target->metaObject()->indexOfProperty("originX") == -1
|| target->metaObject()->indexOfProperty("originY") == -1) {
return;
}
qreal contentWidth = target->property("contentWidth").toReal();
qreal contentHeight = target->property("contentHeight").toReal();
qreal contentX = target->property("contentX").toReal();
qreal contentY = target->property("contentY").toReal();
qreal topMargin = target->property("topMargin").toReal();
qreal bottomMargin = target->property("bottomMargin").toReal();
qreal leftMargin = target->property("leftMaring").toReal();
qreal rightMargin = target->property("rightMargin").toReal();
qreal originX = target->property("originX").toReal();
qreal originY = target->property("originY").toReal();
// Scroll Y
if (contentHeight > target->height()) {
int y = event->pixelDelta().y() != 0 ? event->pixelDelta().y() : event->angleDelta().y() / 8;
//if we don't have a pixeldelta, apply the configured mouse wheel lines
if (!event->pixelDelta().y()) {
y *= 3; // Magic copied value from Kirigami::Settings
}
// Scroll one page regardless of delta:
if ((event->modifiers() & Qt::ControlModifier) || (event->modifiers() & Qt::ShiftModifier)) {
if (y > 0) {
y = target->height();
} else if (y < 0) {
y = -target->height();
}
}
qreal minYExtent = topMargin - originY;
qreal maxYExtent = target->height() - (contentHeight + bottomMargin + originY);
target->setProperty("contentY", qMin(-maxYExtent, qMax(-minYExtent, contentY - y)));
}
//Scroll X
if (contentWidth > target->width()) {
int x = event->pixelDelta().x() != 0 ? event->pixelDelta().x() : event->angleDelta().x() / 8;
// Special case: when can't scroll vertically, scroll horizontally with vertical wheel as well
if (x == 0 && contentHeight <= target->height()) {
x = event->pixelDelta().y() != 0 ? event->pixelDelta().y() : event->angleDelta().y() / 8;
}
//if we don't have a pixeldelta, apply the configured mouse wheel lines
if (!event->pixelDelta().x()) {
x *= 3; // Magic copied value from Kirigami::Settings
}
// Scroll one page regardless of delta:
if ((event->modifiers() & Qt::ControlModifier) || (event->modifiers() & Qt::ShiftModifier)) {
if (x > 0) {
x = target->width();
} else if (x < 0) {
x = -target->width();
}
}
qreal minXExtent = leftMargin - originX;
qreal maxXExtent = target->width() - (contentWidth + rightMargin + originX);
target->setProperty("contentX", qMin(-maxXExtent, qMax(-minXExtent, contentX - x)));
}
//this is just for making the scrollbar
target->metaObject()->invokeMethod(target, "flick", Q_ARG(double, 0), Q_ARG(double, 1));
target->metaObject()->invokeMethod(target, "cancelFlick");
}
////////////////////////////
KirigamiWheelEvent::KirigamiWheelEvent(QObject *parent)
: QObject(parent)
{}
KirigamiWheelEvent::~KirigamiWheelEvent() = default;
void KirigamiWheelEvent::initializeFromEvent(QWheelEvent *event)
{
m_x = event->position().x();
m_y = event->position().y();
m_angleDelta = event->angleDelta();
m_pixelDelta = event->pixelDelta();
m_buttons = event->buttons();
m_modifiers = event->modifiers();
m_accepted = false;
m_inverted = event->inverted();
}
qreal KirigamiWheelEvent::x() const
{
return m_x;
}
qreal KirigamiWheelEvent::y() const
{
return m_y;
}
QPointF KirigamiWheelEvent::angleDelta() const
{
return m_angleDelta;
}
QPointF KirigamiWheelEvent::pixelDelta() const
{
return m_pixelDelta;
}
int KirigamiWheelEvent::buttons() const
{
return m_buttons;
}
int KirigamiWheelEvent::modifiers() const
{
return m_modifiers;
}
bool KirigamiWheelEvent::inverted() const
{
return m_inverted;
}
bool KirigamiWheelEvent::isAccepted()
{
return m_accepted;
}
void KirigamiWheelEvent::setAccepted(bool accepted)
{
m_accepted = accepted;
}
///////////////////////////////
WheelHandler::WheelHandler(QObject *parent)
: QObject(parent)
{
}
WheelHandler::~WheelHandler() = default;
QQuickItem *WheelHandler::target() const
{
return m_target;
}
void WheelHandler::setTarget(QQuickItem *target)
{
if (m_target == target) {
return;
}
if (m_target) {
GlobalWheelFilter::self()->removeItemHandlerAssociation(m_target, this);
}
m_target = target;
GlobalWheelFilter::self()->setItemHandlerAssociation(target, this);
emit targetChanged();
}
#include "moc_wheelhandler.cpp"

213
src/3rdparty/kirigami/wheelhandler.h vendored Normal file
View File

@@ -0,0 +1,213 @@
/*
* SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
#pragma once
#include <QtQml>
#include <QPoint>
#include <QQuickItem>
#include <QObject>
class QWheelEvent;
class WheelHandler;
/**
* Describes the mouse wheel event
*/
class KirigamiWheelEvent : public QObject
{
Q_OBJECT
/**
* x: real
*
* X coordinate of the mouse pointer
*/
Q_PROPERTY(qreal x READ x CONSTANT)
/**
* y: real
*
* Y coordinate of the mouse pointer
*/
Q_PROPERTY(qreal y READ y CONSTANT)
/**
* angleDelta: point
*
* The distance the wheel is rotated in degrees.
* The x and y coordinates indicate the horizontal and vertical wheels respectively.
* A positive value indicates it was rotated up/right, negative, bottom/left
* This value is more likely to be set in traditional mice.
*/
Q_PROPERTY(QPointF angleDelta READ angleDelta CONSTANT)
/**
* pixelDelta: point
*
* provides the delta in screen pixels available on high resolution trackpads
*/
Q_PROPERTY(QPointF pixelDelta READ pixelDelta CONSTANT)
/**
* buttons: int
*
* it contains an OR combination of the buttons that were pressed during the wheel, they can be:
* Qt.LeftButton, Qt.MiddleButton, Qt.RightButton
*/
Q_PROPERTY(int buttons READ buttons CONSTANT)
/**
* modifiers: int
*
* Keyboard mobifiers that were pressed during the wheel event, such as:
* Qt.NoModifier (default, no modifiers)
* Qt.ControlModifier
* Qt.ShiftModifier
* ...
*/
Q_PROPERTY(int modifiers READ modifiers CONSTANT)
/**
* inverted: bool
*
* Whether the delta values are inverted
* On some platformsthe returned delta are inverted, so positive values would mean bottom/left
*/
Q_PROPERTY(bool inverted READ inverted CONSTANT)
/**
* accepted: bool
*
* If set, the event shouldn't be managed anymore,
* for instance it can be used to block the handler to manage the scroll of a view on some scenarios
* @code
* // This handler handles automatically the scroll of
* // flickableItem, unless Ctrl is pressed, in this case the
* // app has custom code to handle Ctrl+wheel zooming
* Kirigami.WheelHandler {
* target: flickableItem
* blockTargetWheel: true
* scrollFlickableTarget: true
* onWheel: {
* if (wheel.modifiers & Qt.ControlModifier) {
* wheel.accepted = true;
* // Handle scaling of the view
* }
* }
* }
* @endcode
*
*/
Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
public:
KirigamiWheelEvent(QObject *parent = nullptr);
~KirigamiWheelEvent() override;
void initializeFromEvent(QWheelEvent *event);
qreal x() const;
qreal y() const;
QPointF angleDelta() const;
QPointF pixelDelta() const;
int buttons() const;
int modifiers() const;
bool inverted() const;
bool isAccepted();
void setAccepted(bool accepted);
private:
qreal m_x = 0;
qreal m_y = 0;
QPointF m_angleDelta;
QPointF m_pixelDelta;
Qt::MouseButtons m_buttons = Qt::NoButton;
Qt::KeyboardModifiers m_modifiers = Qt::NoModifier;
bool m_inverted = false;
bool m_accepted = false;
};
class GlobalWheelFilter : public QObject
{
Q_OBJECT
public:
GlobalWheelFilter(QObject *parent = nullptr);
~GlobalWheelFilter() override;
static GlobalWheelFilter *self();
void setItemHandlerAssociation(QQuickItem *item, WheelHandler *handler);
void removeItemHandlerAssociation(QQuickItem *item, WheelHandler *handler);
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
private:
void manageWheel(QQuickItem *target, QWheelEvent *wheel);
QMultiHash<QQuickItem *, WheelHandler *> m_handlersForItem;
KirigamiWheelEvent m_wheelEvent;
};
/**
* This class intercepts the mouse wheel events of its target, and gives them to the user code as a signal, which can be used for custom mouse wheel management code.
* The handler can block completely the wheel events from its target, and if it's a Flickable, it can automatically handle scrolling on it
*/
class WheelHandler : public QObject
{
Q_OBJECT
/**
* target: Item
*
* The target we want to manage wheel events.
* We will receive wheel() signals every time the user moves
* the mouse wheel (or scrolls with the touchpad) on top
* of that item.
*/
Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged)
/**
* blockTargetWheel: bool
*
* If true, the target won't receive any wheel event at all (default true)
*/
Q_PROPERTY(bool blockTargetWheel MEMBER m_blockTargetWheel NOTIFY blockTargetWheelChanged)
/**
* scrollFlickableTarget: bool
* If this property is true and the target is a Flickable, wheel events will cause the Flickable to scroll (default true)
*/
Q_PROPERTY(bool scrollFlickableTarget MEMBER m_scrollFlickableTarget NOTIFY scrollFlickableTargetChanged)
public:
explicit WheelHandler(QObject *parent = nullptr);
~WheelHandler() override;
QQuickItem *target() const;
void setTarget(QQuickItem *target);
Q_SIGNALS:
void targetChanged();
void blockTargetWheelChanged();
void scrollFlickableTargetChanged();
void wheel(KirigamiWheelEvent *wheel);
private:
QPointer<QQuickItem> m_target;
bool m_blockTargetWheel = true;
bool m_scrollFlickableTarget = true;
KirigamiWheelEvent m_wheelEvent;
friend class GlobalWheelFilter;
};

View File

@@ -57,7 +57,7 @@ public:
QtLockedFile();
QtLockedFile(const QString &name);
~QtLockedFile();
~QtLockedFile() override;
bool lock(LockMode mode, bool block = true);
bool unlock();

View File

@@ -44,13 +44,13 @@ class QtSingleApplication : public QApplication
public:
QtSingleApplication(const QString &id, int &argc, char **argv);
~QtSingleApplication();
~QtSingleApplication() override;
bool isRunning(qint64 pid = -1);
void setActivationWindow(QWidget* aw, bool activateOnMessage = true);
QWidget* activationWindow() const;
bool event(QEvent *event) Q_DECL_OVERRIDE;
bool event(QEvent *event) override;
QString applicationId() const;
void setBlock(bool value);

View File

@@ -4,10 +4,8 @@ endif()
include(ECMEnableSanitizers)
set(synclib_NAME ${APPLICATION_EXECUTABLE}sync)
find_package(Qt5 5.12 COMPONENTS Core Network Xml Concurrent REQUIRED)
find_package(Qt5 5.12 COMPONENTS WebEngineWidgets WebEngine)
find_package(Qt5 5.15 COMPONENTS Core Network Xml Concurrent REQUIRED)
find_package(Qt5 5.15 COMPONENTS WebEngineWidgets WebEngine)
if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND)
add_compile_definitions(WITH_WEBENGINE=1)
@@ -61,10 +59,6 @@ elseif(UNIX AND NOT APPLE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
endif()
include_directories(
${CMAKE_SOURCE_DIR}/src/3rdparty
)
set(QML_IMPORT_PATH ${CMAKE_SOURCE_DIR}/theme CACHE STRING "" FORCE)
add_subdirectory(csync)

View File

@@ -1,14 +1,11 @@
project(cmd)
set(CMAKE_AUTOMOC TRUE)
set(cmd_NAME ${APPLICATION_EXECUTABLE}cmd)
add_library(cmdCore STATIC simplesslerrorhandler.cpp netrcparser.cpp)
target_link_libraries(cmdCore
PUBLIC
"${csync_NAME}"
"${synclib_NAME}"
Nextcloud::sync
Qt5::Core
Qt5::Network
)
@@ -27,20 +24,22 @@ if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
endif()
if(NOT BUILD_LIBRARIES_ONLY)
add_executable(${cmd_NAME} cmd.cpp)
add_executable(nextcloudcmd cmd.cpp)
set_target_properties(nextcloudcmd PROPERTIES
RUNTIME_OUTPUT_NAME "${APPLICATION_EXECUTABLE}cmd")
target_link_libraries(nextcloudcmd cmdCore)
if(BUILD_OWNCLOUD_OSX_BUNDLE)
set_target_properties(${cmd_NAME} PROPERTIES
set_target_properties(nextcloudcmd PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS")
else()
set_target_properties(${cmd_NAME} PROPERTIES
set_target_properties(nextcloudcmd PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY})
install(TARGETS ${cmd_NAME}
install(TARGETS nextcloudcmd
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
target_link_libraries(${cmd_NAME} cmdCore)
endif()

View File

@@ -142,7 +142,7 @@ public:
{
}
void askFromUser() Q_DECL_OVERRIDE
void askFromUser() override
{
_password = ::queryPassword(user());
_ready = true;
@@ -155,7 +155,7 @@ public:
_sslTrusted = isTrusted;
}
bool sslIsTrusted() Q_DECL_OVERRIDE
bool sslIsTrusted() override
{
return _sslTrusted;
}
@@ -295,9 +295,10 @@ void selectiveSyncFixup(OCC::SyncJournalDb *journal, const QStringList &newList)
bool ok = false;
auto oldBlackListSet = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok).toSet();
const auto selectiveSyncList = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok);
const QSet<QString> oldBlackListSet(selectiveSyncList.begin(), selectiveSyncList.end());
if (ok) {
auto blackListSet = newList.toSet();
const QSet<QString> blackListSet(newList.begin(), newList.end());
const auto changes = (oldBlackListSet - blackListSet) + (blackListSet - oldBlackListSet);
for (const auto &it : changes) {
journal->schedulePathForRemoteDiscovery(it);
@@ -309,6 +310,9 @@ void selectiveSyncFixup(OCC::SyncJournalDb *journal, const QStringList &newList)
int main(int argc, char **argv)
{
#ifdef Q_OS_WIN
SetDllDirectory(L"");
#endif
QCoreApplication app(argc, argv);
#ifdef Q_OS_WIN
@@ -317,8 +321,6 @@ int main(int argc, char **argv)
qputenv("OPENSSL_CONF", opensslConf.toLocal8Bit());
#endif
qsrand(std::random_device()());
CmdOptions options;
options.silent = false;
options.trustSSL = false;
@@ -351,7 +353,7 @@ int main(int argc, char **argv)
return EXIT_FAILURE;
}
QUrl hostUrl = QUrl::fromUserInput(options.target_url);
QUrl hostUrl = QUrl::fromUserInput((options.target_url.endsWith(QLatin1Char('/')) || options.target_url.endsWith(QLatin1Char('\\'))) ? options.target_url.chopped(1) : options.target_url);
// Order of retrieval attempt (later attempts override earlier ones):
// 1. From URL
@@ -481,7 +483,7 @@ restart_sync:
qCritical() << "Could not open file containing the list of unsynced folders: " << options.unsyncedfolders;
} else {
// filter out empty lines and comments
selectiveSyncList = QString::fromUtf8(f.readAll()).split('\n').filter(QRegExp("\\S+")).filter(QRegExp("^[^#]"));
selectiveSyncList = QString::fromUtf8(f.readAll()).split('\n').filter(QRegularExpression("\\S+")).filter(QRegularExpression("^[^#]"));
for (int i = 0; i < selectiveSyncList.count(); ++i) {
if (!selectiveSyncList.at(i).endsWith(QLatin1Char('/'))) {
@@ -499,6 +501,9 @@ restart_sync:
selectiveSyncFixup(&db, selectiveSyncList);
}
SyncOptions opt;
opt.fillFromEnvironmentVariables();
opt.verifyChunkSizes();
SyncEngine engine(account, options.source_dir, folder, &db);
engine.setIgnoreHiddenFiles(options.ignoreHiddenFiles);
engine.setNetworkLimits(options.uplimit, options.downlimit);

View File

@@ -28,7 +28,7 @@ namespace OCC {
class SimpleSslErrorHandler : public OCC::AbstractSslErrorHandler
{
public:
bool handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr) Q_DECL_OVERRIDE;
bool handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr) override;
};
}

View File

@@ -144,6 +144,9 @@ QByteArray makeChecksumHeader(const QByteArray &checksumType, const QByteArray &
QByteArray findBestChecksum(const QByteArray &_checksums)
{
if (_checksums.isEmpty()) {
return {};
}
const auto checksums = QString::fromUtf8(_checksums);
int i = 0;
// The order of the searches here defines the preference ordering.
@@ -162,7 +165,7 @@ QByteArray findBestChecksum(const QByteArray &_checksums)
return _checksums.mid(i, end - i);
}
qCWarning(lcChecksums) << "Failed to parse" << _checksums;
return QByteArray();
return {};
}
bool parseChecksumHeader(const QByteArray &header, QByteArray *type, QByteArray *checksum)
@@ -361,11 +364,11 @@ void ValidateChecksumHeader::slotChecksumCalculated(const QByteArray &checksumTy
const QByteArray &checksum)
{
if (checksumType != _expectedChecksumType) {
emit validationFailed(tr("The checksum header contained an unknown checksum type '%1'").arg(QString::fromLatin1(_expectedChecksumType)));
emit validationFailed(tr("The checksum header contained an unknown checksum type \"%1\"").arg(QString::fromLatin1(_expectedChecksumType)));
return;
}
if (checksum != _expectedChecksum) {
emit validationFailed(tr("The downloaded file does not match the checksum, it will be resumed. '%1' != '%2'").arg(QString::fromUtf8(_expectedChecksum), QString::fromUtf8(checksum)));
emit validationFailed(tr(R"(The downloaded file does not match the checksum, it will be resumed. "%1" != "%2")").arg(QString::fromUtf8(_expectedChecksum), QString::fromUtf8(checksum)));
return;
}
emit validated(checksumType, checksum);

View File

@@ -81,7 +81,7 @@ class OCSYNC_EXPORT ComputeChecksum : public QObject
Q_OBJECT
public:
explicit ComputeChecksum(QObject *parent = nullptr);
~ComputeChecksum();
~ComputeChecksum() override;
/**
* Sets the checksum type to be used. The default is empty.

View File

@@ -5,6 +5,7 @@ set(common_SOURCES
${CMAKE_CURRENT_LIST_DIR}/checksums.cpp
${CMAKE_CURRENT_LIST_DIR}/filesystembase.cpp
${CMAKE_CURRENT_LIST_DIR}/ownsql.cpp
${CMAKE_CURRENT_LIST_DIR}/preparedsqlquerymanager.cpp
${CMAKE_CURRENT_LIST_DIR}/syncjournaldb.cpp
${CMAKE_CURRENT_LIST_DIR}/syncjournalfilerecord.cpp
${CMAKE_CURRENT_LIST_DIR}/utility.cpp

23
src/common/constants.h Normal file
View File

@@ -0,0 +1,23 @@
/*
* Copyright (C) by Oleksandr Zolotov <alex@nextcloud.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
#pragma once
#include <QtGlobal>
namespace OCC {
namespace Constants {
constexpr qint32 e2EeTagSize = 16;
}
}

View File

@@ -395,13 +395,13 @@ bool FileSystem::moveToTrash(const QString &fileName, QString *errorString)
suffix_number++;
}
if (!file.rename(f.absoluteFilePath(), path + QString::number(suffix_number))) { // rename(file old path, file trash path)
*errorString = QCoreApplication::translate("FileSystem", "Could not move '%1' to '%2'")
*errorString = QCoreApplication::translate("FileSystem", R"(Could not move "%1" to "%2")")
.arg(f.absoluteFilePath(), path + QString::number(suffix_number));
return false;
}
} else {
if (!file.rename(f.absoluteFilePath(), trashFilePath + f.fileName())) { // rename(file old path, file trash path)
*errorString = QCoreApplication::translate("FileSystem", "Could not move '%1' to '%2'")
*errorString = QCoreApplication::translate("FileSystem", R"(Could not move "%1" to "%2")")
.arg(f.absoluteFilePath(), trashFilePath + f.fileName());
return false;
}

View File

@@ -490,18 +490,4 @@ void SqlQuery::reset_and_clear_bindings()
}
}
bool SqlQuery::initOrReset(const QByteArray &sql, OCC::SqlDatabase &db)
{
ENFORCE(!_sqldb || &db == _sqldb);
_sqldb = &db;
_db = db.sqliteDb();
if (_stmt) {
reset_and_clear_bindings();
return true;
} else {
return prepare(sql) == 0;
}
}
} // namespace OCC

View File

@@ -103,12 +103,6 @@ public:
explicit SqlQuery() = default;
explicit SqlQuery(SqlDatabase &db);
explicit SqlQuery(const QByteArray &sql, SqlDatabase &db);
/**
* Prepare the SqlQuery if it was not prepared yet.
* Otherwise, clear the results and the bindings.
* return false if there is an error
*/
bool initOrReset(const QByteArray &sql, SqlDatabase &db);
/**
* Prepare the SqlQuery.
* If the query was already prepared, this will first call finish(), and re-prepare it.
@@ -161,10 +155,10 @@ public:
const QByteArray &lastQuery() const;
int numRowsAffected();
void reset_and_clear_bindings();
void finish();
private:
void bindValueInternal(int pos, const QVariant &value);
void finish();
SqlDatabase *_sqldb = nullptr;
sqlite3 *_db = nullptr;
@@ -172,6 +166,9 @@ private:
QString _error;
int _errId;
QByteArray _sql;
friend class SqlDatabase;
friend class PreparedSqlQueryManager;
};
} // namespace OCC

View File

@@ -77,7 +77,7 @@ enum class PinState {
*/
Unspecified = 3,
};
Q_ENUM_NS(PinState);
Q_ENUM_NS(PinState)
/** A user-facing version of PinState.
*

View File

@@ -0,0 +1,56 @@
/*
* Copyright (C) by Hannah von Reth <hannah.vonreth@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "preparedsqlquerymanager.h"
#include <sqlite3.h>
using namespace OCC;
PreparedSqlQuery::PreparedSqlQuery(SqlQuery *query, bool ok)
: _query(query)
, _ok(ok)
{
}
PreparedSqlQuery::~PreparedSqlQuery()
{
_query->reset_and_clear_bindings();
}
const PreparedSqlQuery PreparedSqlQueryManager::get(PreparedSqlQueryManager::Key key)
{
auto &query = _queries[key];
ENFORCE(query._stmt)
Q_ASSERT(!sqlite3_stmt_busy(query._stmt));
return { &query };
}
const PreparedSqlQuery PreparedSqlQueryManager::get(PreparedSqlQueryManager::Key key, const QByteArray &sql, SqlDatabase &db)
{
auto &query = _queries[key];
Q_ASSERT(!sqlite3_stmt_busy(query._stmt));
ENFORCE(!query._sqldb || &db == query._sqldb)
if (!query._stmt) {
query._sqldb = &db;
query._db = db.sqliteDb();
return { &query, query.prepare(sql) == 0 };
}
return { &query };
}

View File

@@ -0,0 +1,119 @@
/*
* Copyright (C) by Hannah von Reth <hannah.vonreth@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#include "ocsynclib.h"
#include "ownsql.h"
#include "common/asserts.h"
namespace OCC {
class OCSYNC_EXPORT PreparedSqlQuery
{
public:
~PreparedSqlQuery();
explicit operator bool() const { return _ok; }
SqlQuery *operator->() const
{
Q_ASSERT(_ok);
return _query;
}
SqlQuery &operator*() const &
{
Q_ASSERT(_ok);
return *_query;
}
private:
PreparedSqlQuery(SqlQuery *query, bool ok = true);
SqlQuery *_query;
bool _ok;
friend class PreparedSqlQueryManager;
};
/**
* @brief Manage PreparedSqlQuery
*/
class OCSYNC_EXPORT PreparedSqlQueryManager
{
public:
enum Key {
GetFileRecordQuery,
GetFileRecordQueryByMangledName,
GetFileRecordQueryByInode,
GetFileRecordQueryByFileId,
GetFilesBelowPathQuery,
GetAllFilesQuery,
ListFilesInPathQuery,
SetFileRecordQuery,
SetFileRecordChecksumQuery,
SetFileRecordLocalMetadataQuery,
GetDownloadInfoQuery,
SetDownloadInfoQuery,
DeleteDownloadInfoQuery,
GetUploadInfoQuery,
SetUploadInfoQuery,
DeleteUploadInfoQuery,
DeleteFileRecordPhash,
DeleteFileRecordRecursively,
GetErrorBlacklistQuery,
SetErrorBlacklistQuery,
GetSelectiveSyncListQuery,
GetChecksumTypeIdQuery,
GetChecksumTypeQuery,
InsertChecksumTypeQuery,
GetDataFingerprintQuery,
SetDataFingerprintQuery1,
SetDataFingerprintQuery2,
SetKeyValueStoreQuery,
GetKeyValueStoreQuery,
DeleteKeyValueStoreQuery,
GetConflictRecordQuery,
SetConflictRecordQuery,
DeleteConflictRecordQuery,
GetRawPinStateQuery,
GetEffectivePinStateQuery,
GetSubPinsQuery,
CountDehydratedFilesQuery,
SetPinStateQuery,
WipePinStateQuery,
PreparedQueryCount
};
PreparedSqlQueryManager() = default;
/**
* The queries are reset in the destructor to prevent wal locks
*/
const PreparedSqlQuery get(Key key);
/**
* Prepare the SqlQuery if it was not prepared yet.
*/
const PreparedSqlQuery get(Key key, const QByteArray &sql, SqlDatabase &db);
private:
SqlQuery _queries[PreparedQueryCount];
Q_DISABLE_COPY(PreparedSqlQueryManager)
};
}

View File

@@ -104,6 +104,7 @@ public:
ASSERT(!_isError);
return _result;
}
T operator*() &&
{
ASSERT(!_isError);
@@ -116,6 +117,12 @@ public:
return &_result;
}
const T &get() const
{
ASSERT(!_isError)
return _result;
}
const Error &error() const &
{
ASSERT(_isError);

File diff suppressed because it is too large Load Diff

View File

@@ -28,6 +28,7 @@
#include "common/utility.h"
#include "common/ownsql.h"
#include "common/preparedsqlquerymanager.h"
#include "common/syncjournalfilerecord.h"
#include "common/result.h"
#include "common/pinstate.h"
@@ -46,7 +47,7 @@ class OCSYNC_EXPORT SyncJournalDb : public QObject
Q_OBJECT
public:
explicit SyncJournalDb(const QString &dbFilePath, QObject *parent = nullptr);
virtual ~SyncJournalDb();
~SyncJournalDb() override;
/// Create a journal path for a specific configuration
static QString makeDbName(const QString &localPath,
@@ -69,7 +70,6 @@ public:
void keyValueStoreSet(const QString &key, QVariant value);
qint64 keyValueStoreGetInt(const QString &key, qint64 defaultValue);
QVariant keyValueStoreGet(const QString &key, QVariant defaultValue = {});
void keyValueStoreDelete(const QString &key);
bool deleteFileRecord(const QString &filename, bool recursively = false);
@@ -392,51 +392,11 @@ private:
SqlDatabase _db;
QString _dbFile;
QMutex _mutex; // Public functions are protected with the mutex.
QRecursiveMutex _mutex; // Public functions are protected with the mutex.
QMap<QByteArray, int> _checksymTypeCache;
int _transaction;
bool _metadataTableIsEmpty;
SqlQuery _getFileRecordQuery;
SqlQuery _getFileRecordQueryByMangledName;
SqlQuery _getFileRecordQueryByInode;
SqlQuery _getFileRecordQueryByFileId;
SqlQuery _getFilesBelowPathQuery;
SqlQuery _getAllFilesQuery;
SqlQuery _listFilesInPathQuery;
SqlQuery _setFileRecordQuery;
SqlQuery _setFileRecordChecksumQuery;
SqlQuery _setFileRecordLocalMetadataQuery;
SqlQuery _getDownloadInfoQuery;
SqlQuery _setDownloadInfoQuery;
SqlQuery _deleteDownloadInfoQuery;
SqlQuery _getUploadInfoQuery;
SqlQuery _setUploadInfoQuery;
SqlQuery _deleteUploadInfoQuery;
SqlQuery _deleteFileRecordPhash;
SqlQuery _deleteFileRecordRecursively;
SqlQuery _getErrorBlacklistQuery;
SqlQuery _setErrorBlacklistQuery;
SqlQuery _getSelectiveSyncListQuery;
SqlQuery _getChecksumTypeIdQuery;
SqlQuery _getChecksumTypeQuery;
SqlQuery _insertChecksumTypeQuery;
SqlQuery _getDataFingerprintQuery;
SqlQuery _setDataFingerprintQuery1;
SqlQuery _setDataFingerprintQuery2;
SqlQuery _setKeyValueStoreQuery;
SqlQuery _getKeyValueStoreQuery;
SqlQuery _deleteKeyValueStoreQuery;
SqlQuery _getConflictRecordQuery;
SqlQuery _setConflictRecordQuery;
SqlQuery _deleteConflictRecordQuery;
SqlQuery _getRawPinStateQuery;
SqlQuery _getEffectivePinStateQuery;
SqlQuery _getSubPinsQuery;
SqlQuery _countDehydratedFilesQuery;
SqlQuery _setPinStateQuery;
SqlQuery _wipePinStateQuery;
/* Storing etags to these folders, or their parent folders, is filtered out.
*
* When schedulePathForRemoteDiscovery() is called some etags to _invalid_ in the
@@ -458,6 +418,8 @@ private:
* variable, for specific filesystems, or when WAL fails in a particular way.
*/
QByteArray _journalMode;
PreparedSqlQueryManager _queryManager;
};
bool OCSYNC_EXPORT

View File

@@ -37,6 +37,7 @@
#include <QStandardPaths>
#include <QCollator>
#include <QSysInfo>
#include <qrandom.h>
#ifdef Q_OS_UNIX
@@ -64,14 +65,13 @@ Q_LOGGING_CATEGORY(lcUtility, "nextcloud.sync.utility", QtInfoMsg)
bool Utility::writeRandomFile(const QString &fname, int size)
{
int maxSize = 10 * 10 * 1024;
qsrand(QDateTime::currentMSecsSinceEpoch());
if (size == -1)
size = qrand() % maxSize;
size = rand() % maxSize;
QString randString;
for (int i = 0; i < size; i++) {
int r = qrand() % 128;
int r = rand() % 128;
randString.append(QChar(r));
}
@@ -109,6 +109,11 @@ void Utility::setupFavLink(const QString &folder)
setupFavLink_private(folder);
}
void Utility::removeFavLink(const QString &folder)
{
removeFavLink_private(folder);
}
QString Utility::octetsToString(qint64 octets)
{
#define THE_FACTOR 1024
@@ -259,6 +264,11 @@ QString Utility::escape(const QString &in)
return in.toHtmlEscaped();
}
int Utility::rand()
{
return QRandomGenerator::global()->bounded(0, RAND_MAX);
}
void Utility::sleep(int sec)
{
QThread::sleep(sec);

View File

@@ -50,10 +50,12 @@ Q_DECLARE_LOGGING_CATEGORY(lcUtility)
* @{
*/
namespace Utility {
OCSYNC_EXPORT int rand();
OCSYNC_EXPORT void sleep(int sec);
OCSYNC_EXPORT void usleep(int usec);
OCSYNC_EXPORT QString formatFingerprint(const QByteArray &, bool colonSeparated = true);
OCSYNC_EXPORT void setupFavLink(const QString &folder);
OCSYNC_EXPORT void removeFavLink(const QString &folder);
OCSYNC_EXPORT bool writeRandomFile(const QString &fname, int size = -1);
OCSYNC_EXPORT QString octetsToString(qint64 octets);
OCSYNC_EXPORT QByteArray userAgentString();
@@ -240,6 +242,11 @@ namespace Utility {
*/
OCSYNC_EXPORT bool isPathWindowsDrivePartitionRoot(const QString &path);
/**
* @brief Retrieves current logged-in user name from the OS
*/
OCSYNC_EXPORT QString getCurrentUserName();
#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

@@ -41,6 +41,11 @@ static void setupFavLink_private(const QString &folder)
CFRelease(urlRef);
}
static void removeFavLink_private(const QString &folder)
{
Q_UNUSED(folder)
}
bool hasLaunchOnStartup_private(const QString &)
{
// this is quite some duplicate code with setLaunchOnStartup, at some point we should fix this FIXME.
@@ -131,4 +136,9 @@ static bool hasDarkSystray_private()
return returnValue;
}
QString Utility::getCurrentUserName()
{
return {};
}
} // namespace OCC

View File

@@ -37,6 +37,11 @@ static void setupFavLink_private(const QString &folder)
}
}
static void removeFavLink_private(const QString &folder)
{
Q_UNUSED(folder)
}
// returns the autostart directory the linux way
// and respects the XDG_CONFIG_HOME env variable
QString getUserAutostartDir_private()
@@ -80,17 +85,17 @@ void setLaunchOnStartup_private(const QString &appName, const QString &guiName,
QTextStream ts(&iniFile);
ts.setCodec("UTF-8");
ts << QLatin1String("[Desktop Entry]") << endl
<< QLatin1String("Name=") << guiName << endl
<< QLatin1String("GenericName=") << QLatin1String("File Synchronizer") << endl
<< QLatin1String("Exec=\"") << executablePath << "\" --background" << endl
<< QLatin1String("Terminal=") << "false" << endl
<< QLatin1String("Icon=") << APPLICATION_ICON_NAME << endl
<< QLatin1String("Categories=") << QLatin1String("Network") << endl
<< QLatin1String("Type=") << QLatin1String("Application") << endl
<< QLatin1String("StartupNotify=") << "false" << endl
<< QLatin1String("X-GNOME-Autostart-enabled=") << "true" << endl
<< QLatin1String("X-GNOME-Autostart-Delay=10") << endl;
ts << QLatin1String("[Desktop Entry]\n")
<< QLatin1String("Name=") << guiName << QLatin1Char('\n')
<< QLatin1String("GenericName=") << QLatin1String("File Synchronizer\n")
<< QLatin1String("Exec=\"") << executablePath << "\" --background\n"
<< QLatin1String("Terminal=") << "false\n"
<< QLatin1String("Icon=") << APPLICATION_ICON_NAME << QLatin1Char('\n')
<< QLatin1String("Categories=") << QLatin1String("Network\n")
<< QLatin1String("Type=") << QLatin1String("Application\n")
<< QLatin1String("StartupNotify=") << "false\n"
<< QLatin1String("X-GNOME-Autostart-enabled=") << "true\n"
<< QLatin1String("X-GNOME-Autostart-Delay=10") << Qt::endl;
} else {
if (!QFile::remove(desktopFileLocation)) {
qCWarning(lcUtility) << "Could not remove autostart desktop file";
@@ -103,4 +108,9 @@ static inline bool hasDarkSystray_private()
return true;
}
QString Utility::getCurrentUserName()
{
return {};
}
} // namespace OCC

View File

@@ -18,8 +18,10 @@
#include "asserts.h"
#include "utility.h"
#include "gui/configgui.h"
#include <comdef.h>
#include <Lmcons.h>
#include <shlguid.h>
#include <shlobj.h>
#include <string>
@@ -47,7 +49,14 @@ static void setupFavLink_private(const QString &folder)
desktopIni.open(QFile::WriteOnly);
desktopIni.write("[.ShellClassInfo]\r\nIconResource=");
desktopIni.write(QDir::toNativeSeparators(qApp->applicationFilePath()).toUtf8());
desktopIni.write(",0\r\n");
#ifdef APPLICATION_FOLDER_ICON_INDEX
const auto iconIndex = APPLICATION_FOLDER_ICON_INDEX;
#else
const auto iconIndex = "0";
#endif
desktopIni.write(",");
desktopIni.write(iconIndex);
desktopIni.write("\r\n");
desktopIni.close();
// Set the folder as system and Desktop.ini as hidden+system for explorer to pick it.
@@ -74,6 +83,40 @@ static void setupFavLink_private(const QString &folder)
qCWarning(lcUtility) << "linking" << folder << "to" << linkName << "failed!";
}
static void removeFavLink_private(const QString &folder)
{
const QDir folderDir(folder);
// #1 Remove the Desktop.ini to reset the folder icon
if (!QFile::remove(folderDir.absoluteFilePath(QLatin1String("Desktop.ini")))) {
qCWarning(lcUtility) << "Remove Desktop.ini from" << folder
<< " has failed. Make sure it exists and is not locked by another process.";
}
// #2 Remove the system file attribute
const auto folderAttrs = GetFileAttributesW(folder.toStdWString().c_str());
if (!SetFileAttributesW(folder.toStdWString().c_str(), folderAttrs & ~FILE_ATTRIBUTE_SYSTEM)) {
qCWarning(lcUtility) << "Remove system file attribute failed for:" << folder;
}
// #3 Remove the link to this folder
PWSTR path;
if (!SHGetKnownFolderPath(FOLDERID_Links, 0, nullptr, &path) == S_OK) {
qCWarning(lcUtility) << "SHGetKnownFolderPath for " << folder << "has failed.";
return;
}
const QDir links(QString::fromWCharArray(path));
CoTaskMemFree(path);
const auto linkName = QDir(links).absoluteFilePath(folderDir.dirName() + QLatin1String(".lnk"));
qCInfo(lcUtility) << "Removing favorite link from" << folder << "to" << linkName;
if (!QFile::remove(linkName)) {
qCWarning(lcUtility) << "Removing a favorite link from" << folder << "to" << linkName << "failed.";
}
}
bool hasSystemLaunchOnStartup_private(const QString &appName)
{
QString runPath = QLatin1String(systemRunPathC);
@@ -346,6 +389,17 @@ QString Utility::formatWinError(long errorCode)
return QStringLiteral("WindowsError: %1: %2").arg(QString::number(errorCode, 16), QString::fromWCharArray(_com_error(errorCode).ErrorMessage()));
}
QString Utility::getCurrentUserName()
{
TCHAR username[UNLEN + 1] = {0};
DWORD len = sizeof(username) / sizeof(TCHAR);
if (!GetUserName(username, &len)) {
qCWarning(lcUtility) << "Could not retrieve Windows user name." << formatWinError(GetLastError());
}
return QString::fromWCharArray(username);
}
Utility::NtfsPermissionLookupRAII::NtfsPermissionLookupRAII()
{

View File

@@ -16,6 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config.h"
#include "vfs.h"
#include "plugin.h"
#include "version.h"

View File

@@ -126,7 +126,7 @@ public:
public:
explicit Vfs(QObject* parent = nullptr);
virtual ~Vfs();
~Vfs() override;
virtual Mode mode() const = 0;
@@ -291,7 +291,7 @@ class OCSYNC_EXPORT VfsOff : public Vfs
public:
VfsOff(QObject* parent = nullptr);
virtual ~VfsOff();
~VfsOff() override;
Mode mode() const override { return Vfs::Off; }

View File

@@ -18,7 +18,9 @@
#include <libcrashreporter-gui/CrashReporter.h>
#include <QApplication>
#include <QDir>
#include <QDebug>
#include <QFileInfo>
int main(int argc, char *argv[])
{
@@ -52,6 +54,14 @@ int main(int argc, char *argv[])
reporter.setWindowTitle(CRASHREPORTER_PRODUCT_NAME);
reporter.setText("<html><head/><body><p><span style=\" font-weight:600;\">Sorry!</span> " CRASHREPORTER_PRODUCT_NAME " crashed. Please tell us about it! " CRASHREPORTER_PRODUCT_NAME " has created an error report for you that can help improve the stability in the future. You can now send this report directly to the " CRASHREPORTER_PRODUCT_NAME " developers.</p></body></html>");
const QFileInfo crashLog(QDir::tempPath() + QStringLiteral("/" CRASHREPORTER_PRODUCT_NAME "-crash.log"));
if (crashLog.exists()) {
QFile inFile(crashLog.filePath());
if (inFile.open(QFile::ReadOnly)) {
reporter.setComment(inFile.readAll());
}
}
reporter.setReportData("BuildID", CRASHREPORTER_BUILD_ID);
reporter.setReportData("ProductName", CRASHREPORTER_PRODUCT_NAME);
reporter.setReportData("Version", CRASHREPORTER_VERSION_STRING);

View File

@@ -58,10 +58,11 @@ endif()
configure_file(csync_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/csync_version.h)
add_library("${csync_NAME}" SHARED ${common_SOURCES} ${csync_SRCS})
add_library(nextcloud_csync SHARED ${common_SOURCES} ${csync_SRCS})
add_library(Nextcloud::csync ALIAS nextcloud_csync)
target_include_directories(
"${csync_NAME}"
nextcloud_csync
PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/std
)
@@ -69,26 +70,26 @@ if(USE_OUR_OWN_SQLITE3)
message(STATUS "Using own sqlite3 version")
add_library(sqlite3 STATIC "${CMAKE_SOURCE_DIR}/src/3rdparty/sqlite3/sqlite3.c")
target_include_directories(sqlite3 PUBLIC "${CMAKE_SOURCE_DIR}/src/3rdparty/sqlite3")
target_link_libraries("${csync_NAME}" PUBLIC sqlite3)
target_link_libraries(nextcloud_csync PUBLIC sqlite3)
else()
target_include_directories("${csync_NAME}" PUBLIC ${SQLITE3_INCLUDE_DIR})
target_link_libraries("${csync_NAME}" PUBLIC ${SQLITE3_LIBRARIES})
target_include_directories(nextcloud_csync PUBLIC ${SQLITE3_INCLUDE_DIR})
target_link_libraries(nextcloud_csync PUBLIC ${SQLITE3_LIBRARIES})
endif()
generate_export_header("${csync_NAME}"
generate_export_header(nextcloud_csync
EXPORT_MACRO_NAME OCSYNC_EXPORT
EXPORT_FILE_NAME ocsynclib.h
)
target_link_libraries("${csync_NAME}"
target_link_libraries(nextcloud_csync
PUBLIC
${CSYNC_REQUIRED_LIBRARIES}
Qt5::Core Qt5::Concurrent
)
if(ZLIB_FOUND)
target_link_libraries("${csync_NAME}" PUBLIC ZLIB::ZLIB)
target_link_libraries(nextcloud_csync PUBLIC ZLIB::ZLIB)
endif(ZLIB_FOUND)
@@ -96,11 +97,11 @@ endif(ZLIB_FOUND)
if (APPLE)
find_library(FOUNDATION_LIBRARY NAMES Foundation)
find_library(CORESERVICES_LIBRARY NAMES CoreServices)
target_link_libraries("${csync_NAME}" PUBLIC ${FOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY})
target_link_libraries(nextcloud_csync PUBLIC ${FOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY})
endif()
set_target_properties(
"${csync_NAME}"
nextcloud_csync
PROPERTIES
VERSION
${LIBRARY_VERSION}
@@ -108,11 +109,15 @@ set_target_properties(
${LIBRARY_SOVERSION}
RUNTIME_OUTPUT_DIRECTORY
${BIN_OUTPUT_DIRECTORY}
LIBRARY_OUTPUT_NAME
${APPLICATION_EXECUTABLE}_csync
RUNTIME_OUTPUT_NAME
${APPLICATION_EXECUTABLE}_csync
)
if(BUILD_OWNCLOUD_OSX_BUNDLE)
INSTALL(
TARGETS
"${csync_NAME}"
nextcloud_csync
LIBRARY DESTINATION
${LIB_INSTALL_DIR}
ARCHIVE DESTINATION
@@ -123,7 +128,7 @@ if(BUILD_OWNCLOUD_OSX_BUNDLE)
else()
INSTALL(
TARGETS
"${csync_NAME}"
nextcloud_csync
LIBRARY DESTINATION
${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION

View File

@@ -7,7 +7,6 @@ include(CheckCXXSourceCompiles)
set(PACKAGE ${APPLICATION_NAME})
set(VERSION ${APPLICATION_VERSION})
set(DATADIR ${DATA_INSTALL_DIR})
set(LIBDIR ${LIB_INSTALL_DIR})
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
@@ -23,6 +22,12 @@ if (NOT LINUX)
check_library_exists(rt nanosleep "" HAVE_LIBRT)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
# Systems not using glibc require linker flag for argp
check_library_exists(argp argp_parse "" HAVE_LIBARGP)
if(HAVE_ARGP_H AND HAVE_LIBARGP)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} argp)
endif()
endif (NOT LINUX)
if(WIN32)

View File

@@ -19,6 +19,7 @@
*/
#include "config_csync.h"
#include <qglobal.h>
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
@@ -34,10 +35,8 @@
#include <QString>
#include <QFileInfo>
#include <QFile>
#include <QDir>
/** Expands C-like escape sequences (in place)
*/
OCSYNC_EXPORT void csync_exclude_expand_escapes(QByteArray &input)
@@ -199,13 +198,13 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(const QString &path, bool exclu
}
#endif
/* We create a Desktop.ini on Windows for the sidebar icon, make sure we don't sync it. */
if (blen == 11 && path == bname) {
if (bname.compare(QLatin1String("Desktop.ini"), Qt::CaseInsensitive) == 0) {
return CSYNC_FILE_SILENTLY_EXCLUDED;
}
/* Do not sync desktop.ini files anywhere in the tree. */
const auto desktopIniFile = QStringLiteral("desktop.ini");
if (blen == static_cast<qsizetype>(desktopIniFile.length()) && bname.compare(desktopIniFile, Qt::CaseInsensitive) == 0) {
return CSYNC_FILE_SILENTLY_EXCLUDED;
}
if (excludeConflictFiles && OCC::Utility::isConflictFile(path)) {
return CSYNC_FILE_EXCLUDE_CONFLICT;
}
@@ -231,24 +230,21 @@ ExcludedFiles::ExcludedFiles(const QString &localPath)
// We're in a detached exclude probably coming from a partial sync or test
if (_localPath.isEmpty())
return;
// Load exclude file from base dir
QFileInfo fi(_localPath + QStringLiteral(".sync-exclude.lst"));
if (fi.isReadable())
addInTreeExcludeFilePath(fi.absoluteFilePath());
}
ExcludedFiles::~ExcludedFiles() = default;
void ExcludedFiles::addExcludeFilePath(const QString &path)
{
_excludeFiles[_localPath].append(path);
}
void ExcludedFiles::addInTreeExcludeFilePath(const QString &path)
{
BasePathString basePath = leftIncludeLast(path, QLatin1Char('/'));
_excludeFiles[basePath].append(path);
const QFileInfo excludeFileInfo(path);
const auto fileName = excludeFileInfo.fileName();
const auto basePath = fileName.compare(QStringLiteral("sync-exclude.lst"), Qt::CaseInsensitive) == 0
? _localPath
: leftIncludeLast(path, QLatin1Char('/'));
auto &excludeFilesLocalPath = _excludeFiles[basePath];
if (std::find(excludeFilesLocalPath.cbegin(), excludeFilesLocalPath.cend(), path) == excludeFilesLocalPath.cend()) {
excludeFilesLocalPath.append(path);
}
}
void ExcludedFiles::setExcludeConflictFiles(bool onoff)
@@ -288,32 +284,26 @@ void ExcludedFiles::setClientVersion(ExcludedFiles::Version version)
_clientVersion = version;
}
bool ExcludedFiles::loadExcludeFile(const QString &basePath, const QString & file)
void ExcludedFiles::loadExcludeFilePatterns(const QString &basePath, QFile &file)
{
QFile f(file);
if (!f.open(QIODevice::ReadOnly))
return false;
QStringList patterns;
while (!f.atEnd()) {
QByteArray line = f.readLine().trimmed();
while (!file.atEnd()) {
QByteArray line = file.readLine().trimmed();
if (line.startsWith("#!version")) {
if (!versionDirectiveKeepNextLine(line))
f.readLine();
file.readLine();
}
if (line.isEmpty() || line.startsWith('#'))
continue;
csync_exclude_expand_escapes(line);
patterns.append(QString::fromUtf8(line));
}
_allExcludes.insert(basePath, patterns);
_allExcludes[basePath].append(patterns);
// nothing to prepare if the user decided to not exclude anything
if (!_allExcludes.value(basePath).isEmpty()){
prepare(basePath);
}
return true;
}
bool ExcludedFiles::reloadExcludeFiles()
@@ -330,8 +320,14 @@ bool ExcludedFiles::reloadExcludeFiles()
bool success = true;
const auto keys = _excludeFiles.keys();
for (const auto& basePath : keys) {
for (const auto& file : _excludeFiles.value(basePath)) {
success = loadExcludeFile(basePath, file);
for (const auto &excludeFile : _excludeFiles.value(basePath)) {
QFile file(excludeFile);
if (file.exists() && file.open(QIODevice::ReadOnly)) {
loadExcludeFilePatterns(basePath, file);
} else {
success = false;
qWarning() << "System exclude list file could not be opened:" << excludeFile;
}
}
}
@@ -422,11 +418,14 @@ CSYNC_EXCLUDE_TYPE ExcludedFiles::traversalPatternMatch(const QString &path, Ite
// Directories are guaranteed to be visited before their files
if (filetype == ItemTypeDirectory) {
const auto basePath = QString(_localPath + path + QLatin1Char('/'));
const auto fi = QFileInfo(basePath + QStringLiteral(".sync-exclude.lst"));
const QString absolutePath = basePath + QStringLiteral(".sync-exclude.lst");
QFileInfo excludeFileInfo(absolutePath);
if (fi.isReadable()) {
addInTreeExcludeFilePath(fi.absoluteFilePath());
loadExcludeFile(basePath, fi.absoluteFilePath());
if (excludeFileInfo.isReadable()) {
addExcludeFilePath(absolutePath);
reloadExcludeFiles();
} else {
qWarning() << "System exclude list file could not be read:" << absolutePath;
}
}

View File

@@ -48,6 +48,7 @@ enum CSYNC_EXCLUDE_TYPE {
};
class ExcludedFilesTest;
class QFile;
/**
* Manages file/directory exclusion.
@@ -69,7 +70,7 @@ public:
using Version = std::tuple<int, int, int>;
explicit ExcludedFiles(const QString &localPath = QStringLiteral("/"));
~ExcludedFiles();
~ExcludedFiles() override;
/**
* Adds a new path to a file containing exclude patterns.
@@ -77,7 +78,6 @@ public:
* Does not load the file. Use reloadExcludeFiles() afterwards.
*/
void addExcludeFilePath(const QString &path);
void addInTreeExcludeFilePath(const QString &path);
/**
* Whether conflict files shall be excluded.
@@ -148,7 +148,7 @@ public slots:
/**
* Loads the exclude patterns from file the registered base paths.
*/
bool loadExcludeFile(const QString &basePath, const QString &file);
void loadExcludeFilePatterns(const QString &basePath, QFile &file);
private:
/**

View File

@@ -124,7 +124,8 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
if (vfs) {
// Directly modifies file_stat->type.
// We can ignore the return value since we're done here anyway.
vfs->statTypeVirtualFile(file_stat.get(), &handle->path);
const auto result = vfs->statTypeVirtualFile(file_stat.get(), &handle->path);
Q_UNUSED(result)
}
return file_stat;

View File

@@ -34,6 +34,7 @@
#include "csync.h"
#include "vio/csync_vio_local.h"
#include "common/filesystembase.h"
#include "common/utility.h"
#include <QtCore/QLoggingCategory>
@@ -52,8 +53,6 @@ struct csync_vio_handle_t {
QString path; // Always ends with '\'
};
static int _csync_vio_local_stat_mb(const QString &path, csync_file_stat_t *buf);
csync_vio_handle_t *csync_vio_local_opendir(const QString &name) {
QScopedPointer<csync_vio_handle_t> handle(new csync_vio_handle_t{});
@@ -175,12 +174,9 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
file_stat->size = (handle->ffd.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + handle->ffd.nFileSizeLow;
file_stat->modtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem);
QString fullPath;
fullPath.reserve(handle->path.size() + std::wcslen(handle->ffd.cFileName));
fullPath += handle->path; // path always ends with '\', by construction
fullPath += QString::fromWCharArray(handle->ffd.cFileName);
// path always ends with '\', by construction
if (_csync_vio_local_stat_mb(fullPath, file_stat.get()) < 0) {
if (csync_vio_local_stat(handle->path + QString::fromWCharArray(handle->ffd.cFileName), file_stat.get()) < 0) {
// Will get excluded by _csync_detect_update.
file_stat->type = ItemTypeSkip;
}
@@ -188,14 +184,7 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
return file_stat;
}
int csync_vio_local_stat(const QString &uri, csync_file_stat_t *buf)
{
int rc = _csync_vio_local_stat_mb(uri, buf);
return rc;
}
static int _csync_vio_local_stat_mb(const QString &path, csync_file_stat_t *buf)
{
/* Almost nothing to do since csync_vio_local_readdir already filled up most of the information
But we still need to fetch the file ID.
@@ -206,21 +195,19 @@ static int _csync_vio_local_stat_mb(const QString &path, csync_file_stat_t *buf)
BY_HANDLE_FILE_INFORMATION fileInfo;
ULARGE_INTEGER FileIndex;
const auto longPath = OCC::FileSystem::longWinPath(path);
h = CreateFileW(longPath.toStdWString().data(), 0, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE,
nullptr, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
nullptr );
h = CreateFileW(reinterpret_cast<const wchar_t *>(OCC::FileSystem::longWinPath(uri).utf16()), 0, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
NULL);
if( h == INVALID_HANDLE_VALUE ) {
qCCritical(lcCSyncVIOLocal) << "CreateFileW failed on" << longPath;
errno = GetLastError();
qCCritical(lcCSyncVIOLocal) << "CreateFileW failed on" << uri << OCC::Utility::formatWinError(errno);
return -1;
}
if(!GetFileInformationByHandle( h, &fileInfo ) ) {
qCCritical(lcCSyncVIOLocal) << "GetFileInformationByHandle failed on" << longPath;
errno = GetLastError();
qCCritical(lcCSyncVIOLocal) << "GetFileInformationByHandle failed on" << uri << OCC::Utility::formatWinError(errno);
CloseHandle(h);
return -1;
}

View File

@@ -1,5 +1,8 @@
project(gui)
find_package(Qt5 REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2)
find_package(Qt5 REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2 Xml Network)
if (NOT TARGET Qt5::GuiPrivate)
message(FATAL_ERROR "Could not find GuiPrivate component of Qt5. It might be shipped as a separate package, please check that.")
endif()
if(CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DQT_QML_DEBUG)
@@ -18,6 +21,7 @@ set(theme_dir ${CMAKE_SOURCE_DIR}/theme)
set(client_UI_SRCS
accountsettings.ui
conflictdialog.ui
invalidfilenamedialog.ui
foldercreationdialog.ui
folderwizardsourcepage.ui
folderwizardtargetpage.ui
@@ -33,19 +37,30 @@ set(client_UI_SRCS
shareuserline.ui
sslerrordialog.ui
addcertificatedialog.ui
passwordinputdialog.ui
proxyauthdialog.ui
mnemonicdialog.ui
UserStatusSelector.qml
UserStatusSelectorDialog.qml
tray/ActivityActionButton.qml
tray/ActivityItem.qml
tray/ActivityList.qml
tray/Window.qml
tray/UserLine.qml
tray/UnifiedSearchInputContainer.qml
tray/UnifiedSearchResultFetchMoreTrigger.qml
tray/UnifiedSearchResultItem.qml
tray/UnifiedSearchResultItemSkeleton.qml
tray/UnifiedSearchResultItemSkeletonContainer.qml
tray/UnifiedSearchResultListItem.qml
tray/UnifiedSearchResultNothingFound.qml
tray/UnifiedSearchResultSectionItem.qml
wizard/flow2authwidget.ui
wizard/owncloudadvancedsetuppage.ui
wizard/owncloudconnectionmethoddialog.ui
wizard/owncloudhttpcredspage.ui
wizard/owncloudoauthcredspage.ui
wizard/owncloudsetupnocredspage.ui
wizard/owncloudwizardresultpage.ui
wizard/webview.ui
wizard/welcomepage.ui
)
@@ -54,6 +69,7 @@ set(client_SRCS
accountmanager.cpp
accountsettings.cpp
application.cpp
invalidfilenamedialog.cpp
conflictdialog.cpp
conflictsolver.cpp
connectionvalidator.cpp
@@ -80,21 +96,21 @@ set(client_SRCS
openfilemanager.cpp
owncloudgui.cpp
owncloudsetupwizard.cpp
passwordinputdialog.cpp
selectivesyncdialog.cpp
settingsdialog.cpp
sharedialog.cpp
sharelinkwidget.cpp
sharemanager.cpp
shareusergroupwidget.cpp
profilepagewidget.cpp
sharee.cpp
socketapi.cpp
sslbutton.cpp
sslerrordialog.cpp
syncrunfilelog.cpp
systray.cpp
thumbnailjob.cpp
userinfo.cpp
userstatus.cpp
accountstate.cpp
addcertificatedialog.cpp
authenticationdialog.cpp
@@ -105,13 +121,21 @@ set(client_SRCS
guiutility.cpp
elidedlabel.cpp
headerbanner.cpp
iconjob.cpp
iconutils.cpp
remotewipe.cpp
tray/ActivityData.cpp
tray/ActivityListModel.cpp
tray/UserModel.cpp
tray/NotificationHandler.cpp
tray/NotificationCache.cpp
userstatusselectormodel.cpp
emojimodel.cpp
fileactivitylistmodel.cpp
tray/svgimageprovider.cpp
tray/syncstatussummary.cpp
tray/activitydata.cpp
tray/activitylistmodel.cpp
tray/unifiedsearchresult.cpp
tray/unifiedsearchresultimageprovider.cpp
tray/unifiedsearchresultslistmodel.cpp
tray/usermodel.cpp
tray/notificationhandler.cpp
tray/notificationcache.cpp
creds/credentialsfactory.cpp
creds/httpcredentialsgui.cpp
creds/oauth.cpp
@@ -129,7 +153,6 @@ set(client_SRCS
wizard/owncloudsetuppage.cpp
wizard/owncloudwizardcommon.cpp
wizard/owncloudwizard.cpp
wizard/owncloudwizardresultpage.cpp
wizard/slideshow.cpp
wizard/welcomepage.cpp
wizard/linklabel.cpp
@@ -152,7 +175,6 @@ endif()
IF( APPLE )
list(APPEND client_SRCS cocoainitializer_mac.mm)
list(APPEND client_SRCS socketapisocket_mac.mm)
list(APPEND client_SRCS systray.mm)
if(SPARKLE_FOUND AND BUILD_UPDATER)
@@ -186,6 +208,7 @@ set(3rdparty_SRC
../3rdparty/qtsingleapplication/qtsingleapplication.cpp
../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp
../3rdparty/kmessagewidget/kmessagewidget.cpp
../3rdparty/kirigami/wheelhandler.cpp
)
if(NOT WIN32)
@@ -237,20 +260,39 @@ if (NOT DEFINED APPLICATION_ICON_NAME)
set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME})
endif()
if(NOT DEFINED APPLICATION_FOLDER_ICON_INDEX)
set(APPLICATION_FOLDER_ICON_INDEX 0)
endif()
# Generate png icons from svg
find_program(INKSCAPE
NAMES inkscape inkscape.exe
find_program(SVG_CONVERTER
NAMES inkscape inkscape.exe rsvg-convert
REQUIRED
HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV INKSCAPE_DIR)
HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV SVG_CONVERTER_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.")
if (NOT SVG_CONVERTER)
message(FATAL_ERROR "Could not find a suitable svg converter. Set SVG_CONVERTER_DIR to the path of either the inkscape or rsvg-convert executable.")
endif()
function(generate_sized_png_from_svg icon_path size)
set(options)
set(oneValueArgs OUTPUT_ICON_NAME OUTPUT_ICON_PATH)
set(multiValueArgs)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
get_filename_component(icon_name_dir ${icon_path} DIRECTORY)
get_filename_component(icon_name_wle ${icon_path} NAME_WLE)
if (ARG_OUTPUT_ICON_NAME)
set(icon_name_wle ${ARG_OUTPUT_ICON_NAME})
endif ()
if (ARG_OUTPUT_ICON_PATH)
set(icon_name_dir ${ARG_OUTPUT_ICON_PATH})
endif ()
if (EXISTS "${icon_name_dir}/${size}-${icon_name_wle}.png")
return()
endif()
@@ -258,16 +300,16 @@ function(generate_sized_png_from_svg icon_path size)
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}"
"${SVG_CONVERTER}" -w ${size} -h ${size} "${icon_path}" -o "${icon_output_name}"
WORKING_DIRECTORY "${icon_name_dir}"
RESULT_VARIABLE
INKSCAPE_SIDEBAR_ERROR
SVG_CONVERTER_SIDEBAR_ERROR
OUTPUT_QUIET
ERROR_QUIET)
if (INKSCAPE_SIDEBAR_ERROR)
if (SVG_CONVERTER_SIDEBAR_ERROR)
message(FATAL_ERROR
"inkscape could not generate icon: ${INKSCAPE_SIDEBAR_ERROR}")
"${SVG_CONVERTER} could not generate icon: ${SVG_CONVERTER_SIDEBAR_ERROR}")
else()
endif()
endfunction()
@@ -296,22 +338,86 @@ if(WIN32)
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)
# generate secondary icon if available (currently for Windows only)--------------------------------------
set(APP_SECONDARY_ICONS "${theme_dir}/colored/icons")
set(APP_ICON_WIN_FOLDER_SVG "${APP_SECONDARY_ICONS}/${APPLICATION_ICON_NAME}-icon-win-folder.svg")
set(RC_DEPENDENCIES "")
if(WIN32)
if (EXISTS ${APP_ICON_WIN_FOLDER_SVG})
get_filename_component(output_icon_name_win ${APP_ICON_WIN_FOLDER_SVG} NAME_WLE)
# Product icon (for smallest size)
foreach(size IN ITEMS 16;20)
generate_sized_png_from_svg(${APP_ICON_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/")
endforeach()
# Product icon with Windows folder (for sizes larger than 20)
foreach(size IN ITEMS 24;32;40;48;64;128;256;512;1024)
generate_sized_png_from_svg(${APP_ICON_WIN_FOLDER_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/")
endforeach()
file(GLOB_RECURSE OWNCLOUD_ICONS_WIN_FOLDER "${APP_SECONDARY_ICONS}/*-${APPLICATION_ICON_NAME}-icon*")
set(APP_ICON_WIN_FOLDER_ICO_NAME "${APPLICATION_ICON_NAME}-win-folder")
set(RC_DEPENDENCIES "${RC_DEPENDENCIES} ${APP_ICON_WIN_FOLDER_ICO_NAME}.ico")
ecm_add_app_icon(APP_ICON_WIN_FOLDER ICONS "${OWNCLOUD_ICONS_WIN_FOLDER}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APP_ICON_WIN_FOLDER_ICO_NAME}" ICON_INDEX 2)
endif()
endif()
# --------------------------------------
if (NOT ${RC_DEPENDENCIES} STREQUAL "")
string(STRIP ${RC_DEPENDENCIES} RC_DEPENDENCIES)
endif()
# generate primary icon from SVG (due to Win .ico vs .rc dependency issues, primary icon must always be generated last)--------------------------------------
if(WIN32)
foreach(size IN ITEMS 16;20;24;32;40;48;64;128;256;512;1024)
generate_sized_png_from_svg(${APP_ICON_SVG} ${size})
endforeach()
else()
foreach(size IN ITEMS 16;24;32;48;64;128;256;512;1024)
generate_sized_png_from_svg(${APP_ICON_SVG} ${size})
endforeach()
endif()
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(APP_ICON ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}")
ecm_add_app_icon(APP_ICON RC_DEPENDENCIES ${RC_DEPENDENCIES} ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}" ICON_INDEX 1)
# --------------------------------------
if(WIN32)
# merge *.rc.in files for Windows (multiple ICON resources must be placed in a single file, otherwise, this won't work de to a bug in Windows compiler https://developercommunity.visualstudio.com/t/visual-studio-2017-prof-1557-cvt1100-duplicate-res/363156)
function(merge_files IN_FILE OUT_FILE)
file(READ ${IN_FILE} CONTENTS)
message("Merging ${IN_FILE} into ${OUT_FILE}")
file(APPEND ${OUT_FILE} "${CONTENTS}")
endfunction()
message("APP_ICON is: ${APP_ICON}")
if(APP_ICON)
get_filename_component(RC_IN_FOLDER ${APP_ICON}} DIRECTORY)
file(GLOB_RECURSE RC_IN_FILES "${RC_IN_FOLDER}/*rc.in")
foreach(rc_in_file IN ITEMS ${RC_IN_FILES})
get_filename_component(rc_in_file_name ${rc_in_file} NAME)
get_filename_component(app_icon_name "${APP_ICON}.in" NAME)
if(NOT "${rc_in_file_name}" STREQUAL "${app_icon_name}")
merge_files(${rc_in_file} "${APP_ICON}.in")
if (DEFINED APPLICATION_FOLDER_ICON_INDEX)
MATH(EXPR APPLICATION_FOLDER_ICON_INDEX "${APPLICATION_FOLDER_ICON_INDEX}+1")
message("APPLICATION_FOLDER_ICON_INDEX is now set to: ${APPLICATION_FOLDER_ICON_INDEX}")
endif()
endif()
endforeach()
endif()
endif()
# --------------------------------------
if(UNIX AND NOT APPLE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
@@ -327,6 +433,7 @@ add_library(nextcloudCore STATIC ${final_src})
target_link_libraries(nextcloudCore
PUBLIC
Nextcloud::sync
Qt5::Widgets
Qt5::GuiPrivate
Qt5::Svg
@@ -335,9 +442,10 @@ target_link_libraries(nextcloudCore
Qt5::Qml
Qt5::Quick
Qt5::QuickControls2
${synclib_NAME}
)
add_subdirectory(socketapi)
if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND)
target_link_libraries(nextcloudCore PUBLIC Qt5::WebEngineWidgets)
endif()
@@ -353,6 +461,7 @@ target_include_directories(nextcloudCore
PUBLIC
${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator
${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
${CMAKE_SOURCE_DIR}/src/3rdparty/kirigami
${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget
${CMAKE_CURRENT_BINARY_DIR}
@@ -365,9 +474,9 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
foreach(_file ${_icons})
string(REPLACE "${theme_dir}/colored/" "" _res ${_file})
string(REPLACE "-${APPLICATION_ICON_NAME}-icon.png" "" _res ${_res})
install(FILES ${_file} RENAME ${APPLICATION_ICON_NAME}.png DESTINATION ${DATADIR}/icons/hicolor/${_res}x${_res}/apps)
install(FILES ${_file} RENAME ${APPLICATION_ICON_NAME}.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${_res}x${_res}/apps)
endforeach(_file)
install(FILES ${client_I18N} DESTINATION ${SHAREDIR}/${APPLICATION_EXECUTABLE}/i18n)
install(FILES ${client_I18N} DESTINATION ${CMAKE_INSTALL_DATADIR}/${APPLICATION_EXECUTABLE}/i18n)
else()
file(GLOB_RECURSE VISUAL_ELEMENTS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-w10startmenu*")
install(FILES ${VISUAL_ELEMENTS} DESTINATION bin/visualelements)
@@ -376,17 +485,23 @@ 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 ${client_version} ${client_manifest} ${APP_ICON})
add_executable(nextcloud WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON})
set_target_properties(nextcloud PROPERTIES
OUTPUT_NAME "${APPLICATION_EXECUTABLE}"
)
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 ${APP_ICON})
add_executable(nextcloud WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON})
if (BUILD_OWNCLOUD_OSX_BUNDLE)
set_target_properties(${APPLICATION_EXECUTABLE} PROPERTIES
set_target_properties(nextcloud PROPERTIES
OUTPUT_NAME "${APPLICATION_NAME}")
else()
set_target_properties(nextcloud PROPERTIES
OUTPUT_NAME "${APPLICATION_EXECUTABLE}")
endif()
set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations)
@@ -406,22 +521,17 @@ endif()
IF(BUILD_UPDATER)
add_library(updater STATIC ${updater_SRCS})
target_link_libraries(updater ${synclib_NAME} ${updater_DEPS} Qt5::Widgets Qt5::Svg Qt5::Network Qt5::Xml)
target_link_libraries(updater Nextcloud::sync ${updater_DEPS} Qt5::Widgets Qt5::Svg Qt5::Network Qt5::Xml)
target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
set_target_properties(updater PROPERTIES AUTOMOC ON)
target_link_libraries(nextcloudCore PUBLIC updater)
endif()
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY}
set_target_properties(nextcloud PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY}
)
target_link_libraries(${APPLICATION_EXECUTABLE} nextcloudCore)
IF(BUILD_UPDATER)
target_link_libraries(nextcloudCore PUBLIC updater)
endif()
target_link_libraries(nextcloudCore PUBLIC ${OS_SPECIFIC_LINK_LIBRARIES})
target_link_libraries(nextcloud PRIVATE nextcloudCore)
if(TARGET PkgConfig::CLOUDPROVIDERS)
message("Building with libcloudproviderssupport")
@@ -467,11 +577,7 @@ if(WITH_CRASHREPORTER)
endif()
endif()
# application.cpp still uses QDesktopServices::storageLocation
target_compile_definitions(nextcloudCore PRIVATE "QT_DISABLE_DEPRECATED_BEFORE=0")
install(TARGETS ${APPLICATION_EXECUTABLE}
install(TARGETS nextcloud
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
@@ -498,12 +604,12 @@ if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY)
set(NO_STRIP "")
endif()
add_custom_command(TARGET ${APPLICATION_EXECUTABLE} POST_BUILD
add_custom_command(TARGET nextcloud POST_BUILD
COMMAND "${MACDEPLOYQT_EXECUTABLE}"
"$<TARGET_FILE_DIR:${APPLICATION_EXECUTABLE}>/../.."
"$<TARGET_FILE_DIR:nextcloud>/../.."
-qmldir=${CMAKE_SOURCE_DIR}/src/gui
-always-overwrite
-executable="$<TARGET_FILE_DIR:${APPLICATION_EXECUTABLE}>/${cmd_NAME}"
-executable="$<TARGET_FILE_DIR:nextcloud>/${cmd_NAME}"
${NO_STRIP}
COMMAND "${CMAKE_COMMAND}"
-E rm -rf "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/bearer"
@@ -514,13 +620,15 @@ endif()
if(NOT BUILD_OWNCLOUD_OSX_BUNDLE AND NOT WIN32)
configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in
${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${DATADIR}/applications )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications )
configure_file(owncloud.xml.in ${APPLICATION_EXECUTABLE}.xml)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.xml DESTINATION ${DATADIR}/mime/packages )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages )
find_package(SharedMimeInfo)
if(SharedMimeInfo_FOUND)
update_xdg_mimetypes( ${DATADIR}/mime/packages )
update_xdg_mimetypes( ${CMAKE_INSTALL_DATADIR}/mime/packages )
endif(SharedMimeInfo_FOUND)
endif()
configure_file(configgui.h.in ${CMAKE_CURRENT_BINARY_DIR}/configgui.h)

112
src/gui/EmojiPicker.qml Normal file
View File

@@ -0,0 +1,112 @@
/*
* Copyright (C) by Felix Weilbach <felix.weilbach@nextcloud.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import com.nextcloud.desktopclient 1.0 as NC
ColumnLayout {
NC.EmojiModel {
id: emojiModel
}
signal chosen(string emoji)
spacing: 0
FontMetrics {
id: metrics
}
ListView {
id: headerLayout
Layout.fillWidth: true
implicitWidth: contentItem.childrenRect.width
implicitHeight: metrics.height * 2
orientation: ListView.Horizontal
model: emojiModel.emojiCategoriesModel
delegate: ItemDelegate {
width: metrics.height * 2
height: headerLayout.height
contentItem: Text {
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: emoji
}
Rectangle {
anchors.bottom: parent.bottom
width: parent.width
height: 2
visible: ListView.isCurrentItem
color: "grey"
}
onClicked: {
emojiModel.setCategory(label)
}
}
}
Rectangle {
height: 1
Layout.fillWidth: true
color: "grey"
}
GridView {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredHeight: metrics.height * 8
cellWidth: metrics.height * 2
cellHeight: metrics.height * 2
boundsBehavior: Flickable.DragOverBounds
clip: true
model: emojiModel.model
delegate: ItemDelegate {
width: metrics.height * 2
height: metrics.height * 2
contentItem: Text {
anchors.centerIn: parent
text: modelData === undefined ? "" : modelData.unicode
}
onClicked: {
chosen(modelData.unicode);
emojiModel.emojiUsed(modelData);
}
}
ScrollBar.vertical: ScrollBar {}
}
}

32
src/gui/ErrorBox.qml Normal file
View File

@@ -0,0 +1,32 @@
import QtQuick 2.15
import Style 1.0
Item {
id: errorBox
property var text: ""
property color color: Style.errorBoxTextColor
property color backgroundColor: Style.errorBoxBackgroundColor
property color borderColor: Style.errorBoxBorderColor
implicitHeight: errorMessage.implicitHeight + 2 * 8
Rectangle {
anchors.fill: parent
color: errorBox.backgroundColor
border.color: errorBox.borderColor
}
Text {
id: errorMessage
anchors.fill: parent
anchors.margins: 8
width: parent.width
color: errorBox.color
wrapMode: Text.WordWrap
text: errorBox.text
}
}

View File

@@ -0,0 +1,200 @@
/*
* Copyright (C) by Felix Weilbach <felix.weilbach@nextcloud.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
import QtQuick 2.6
import QtQuick.Dialogs 1.3
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import QtQuick.Window 2.15
import com.nextcloud.desktopclient 1.0 as NC
ColumnLayout {
id: rootLayout
spacing: 0
property NC.UserStatusSelectorModel userStatusSelectorModel
FontMetrics {
id: metrics
}
Text {
Layout.topMargin: 16
Layout.leftMargin: 8
Layout.rightMargin: 8
Layout.bottomMargin: 8
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
font.bold: true
text: qsTr("Online status")
}
GridLayout {
Layout.margins: 8
Layout.alignment: Qt.AlignTop
columns: 2
rows: 2
columnSpacing: 8
rowSpacing: 8
Button {
Layout.fillWidth: true
checked: NC.UserStatus.Online == userStatusSelectorModel.onlineStatus
checkable: true
icon.source: userStatusSelectorModel.onlineIcon
icon.color: "transparent"
text: qsTr("Online")
onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.Online)
implicitWidth: 100
}
Button {
Layout.fillWidth: true
checked: NC.UserStatus.Away == userStatusSelectorModel.onlineStatus
checkable: true
icon.source: userStatusSelectorModel.awayIcon
icon.color: "transparent"
text: qsTr("Away")
onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.Away)
implicitWidth: 100
}
Button {
Layout.fillWidth: true
checked: NC.UserStatus.DoNotDisturb == userStatusSelectorModel.onlineStatus
checkable: true
icon.source: userStatusSelectorModel.dndIcon
icon.color: "transparent"
text: qsTr("Do not disturb")
onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.DoNotDisturb)
implicitWidth: 100
}
Button {
Layout.fillWidth: true
checked: NC.UserStatus.Invisible == userStatusSelectorModel.onlineStatus
checkable: true
icon.source: userStatusSelectorModel.invisibleIcon
icon.color: "transparent"
text: qsTr("Invisible")
onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.Invisible)
implicitWidth: 100
}
}
Text {
Layout.topMargin: 16
Layout.leftMargin: 8
Layout.rightMargin: 8
Layout.bottomMargin: 8
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
font.bold: true
text: qsTr("Status message")
}
RowLayout {
Layout.topMargin: 8
Layout.leftMargin: 8
Layout.rightMargin: 8
Layout.bottomMargin: 16
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
Button {
Layout.preferredWidth: userStatusMessageTextField.height // metrics.height * 2
Layout.preferredHeight: userStatusMessageTextField.height // metrics.height * 2
text: userStatusSelectorModel.userStatusEmoji
onClicked: emojiDialog.open()
}
Popup {
id: emojiDialog
padding: 0
margins: 0
anchors.centerIn: Overlay.overlay
EmojiPicker {
id: emojiPicker
onChosen: {
userStatusSelectorModel.userStatusEmoji = emoji
emojiDialog.close()
}
}
}
TextField {
id: userStatusMessageTextField
Layout.fillWidth: true
placeholderText: qsTr("What is your status?")
text: userStatusSelectorModel.userStatusMessage
selectByMouse: true
onEditingFinished: userStatusSelectorModel.setUserStatusMessage(text)
}
}
Repeater {
model: userStatusSelectorModel.predefinedStatusesCount
Button {
id: control
Layout.fillWidth: true
flat: !hovered
hoverEnabled: true
text: userStatusSelectorModel.predefinedStatus(index).icon + " <b>" + userStatusSelectorModel.predefinedStatus(index).message + "</b> - " + userStatusSelectorModel.predefinedStatusClearAt(index)
onClicked: userStatusSelectorModel.setPredefinedStatus(index)
}
}
RowLayout {
Layout.topMargin: 16
Layout.leftMargin: 8
Layout.rightMargin: 8
Layout.bottomMargin: 8
Layout.alignment: Qt.AlignTop
Text {
text: qsTr("Clear status message after")
}
ComboBox {
Layout.fillWidth: true
model: userStatusSelectorModel.clearAtValues
displayText: userStatusSelectorModel.clearAt
onActivated: userStatusSelectorModel.setClearAt(index)
}
}
RowLayout {
Layout.margins: 8
Layout.alignment: Qt.AlignTop
Button {
Layout.fillWidth: true
text: qsTr("Clear status message")
onClicked: userStatusSelectorModel.clearUserStatus()
}
Button {
highlighted: true
Layout.fillWidth: true
text: qsTr("Set status message")
onClicked: userStatusSelectorModel.setUserStatus()
}
}
ErrorBox {
Layout.margins: 8
Layout.fillWidth: true
visible: userStatusSelectorModel.errorMessage != ""
text: "<b>Error:</b> " + userStatusSelectorModel.errorMessage
}
}

View File

@@ -0,0 +1,27 @@
import QtQuick.Window 2.15
import com.nextcloud.desktopclient 1.0 as NC
Window {
id: dialog
property NC.UserStatusSelectorModel model: NC.UserStatusSelectorModel {
onFinished: dialog.close()
}
minimumWidth: view.implicitWidth
minimumHeight: view.implicitHeight
maximumWidth: view.implicitWidth
maximumHeight: view.implicitHeight
width: maximumWidth
height: maximumHeight
visible: true
flags: Qt.Dialog
UserStatusSelector {
id: view
userStatusSelectorModel: model
}
}

View File

@@ -380,6 +380,8 @@ void AccountManager::deleteAccount(AccountState *account)
// Forget E2E keys
account->account()->e2e()->forgetSensitiveData(account->account());
account->account()->deleteAppToken();
emit accountSyncConnectionRemoved(account);
emit accountRemoved(account);
}

View File

@@ -28,7 +28,7 @@ class AccountManager : public QObject
Q_OBJECT
public:
static AccountManager *instance();
~AccountManager() = default;
~AccountManager() override = default;
/**
* Saves the accounts to a given settings file

View File

@@ -86,11 +86,11 @@ void showEnableE2eeWithVirtualFilesWarningDialog(std::function<void(void)> onAcc
const auto messageBox = new QMessageBox;
messageBox->setAttribute(Qt::WA_DeleteOnClose);
messageBox->setText(AccountSettings::tr("End-to-End Encryption with Virtual Files"));
messageBox->setInformativeText(AccountSettings::tr("You seem to have the Virtual Files feature enabled on this folder. At "
" the moment, it is not possible to implicitly download virtual files that are "
"End-to-End encrypted. To get the best experience with Virtual Files and"
" End-to-End Encryption, make sure the encrypted folder is marked with"
" \"Make always available locally\"."));
messageBox->setInformativeText(AccountSettings::tr("You seem to have the Virtual Files feature enabled on this folder. "
"At the moment, it is not possible to implicitly download virtual files that are "
"End-to-End encrypted. To get the best experience with Virtual Files and "
"End-to-End Encryption, make sure the encrypted folder is marked with "
"\"Make always available locally\"."));
messageBox->setIcon(QMessageBox::Warning);
const auto dontEncryptButton = messageBox->addButton(QMessageBox::StandardButton::Cancel);
Q_ASSERT(dontEncryptButton);
@@ -587,12 +587,14 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
ac = availabilityMenu->addAction(Utility::vfsPinActionText());
connect(ac, &QAction::triggered, this, [this]() { slotSetCurrentFolderAvailability(PinState::AlwaysLocal); });
ac->setDisabled(Theme::instance()->enforceVirtualFilesSyncFolder());
ac = availabilityMenu->addAction(Utility::vfsFreeSpaceActionText());
connect(ac, &QAction::triggered, this, [this]() { slotSetCurrentFolderAvailability(PinState::OnlineOnly); });
ac = menu->addAction(tr("Disable virtual file support …"));
connect(ac, &QAction::triggered, this, &AccountSettings::slotDisableVfsCurrentFolder);
ac->setDisabled(Theme::instance()->enforceVirtualFilesSyncFolder());
}
if (Theme::instance()->showVirtualFilesOption()
@@ -760,6 +762,7 @@ void AccountSettings::slotRemoveCurrentFolder()
messageBox->addButton(tr("Cancel"), QMessageBox::NoRole);
connect(messageBox, &QMessageBox::finished, this, [messageBox, yesButton, folder, row, this]{
if (messageBox->clickedButton() == yesButton) {
Utility::removeFavLink(folder->path());
FolderMan::instance()->removeFolder(folder);
_model->removeRow(row);
@@ -826,7 +829,9 @@ void AccountSettings::slotEnableVfsCurrentFolder()
folder->setRootPinState(PinState::Unspecified);
for (const auto &entry : oldBlacklist) {
folder->journalDb()->schedulePathForRemoteDiscovery(entry);
folder->vfs().setPinState(entry, PinState::OnlineOnly);
if (!folder->vfs().setPinState(entry, PinState::OnlineOnly)) {
qCWarning(lcAccountSettings) << "Could not set pin state of" << entry << "to online only";
}
}
folder->slotNextSyncFullLocalDiscovery();
@@ -932,7 +937,9 @@ void AccountSettings::slotSetSubFolderAvailability(Folder *folder, const QString
Q_ASSERT(!path.endsWith('/'));
// Update the pin state on all items
folder->vfs().setPinState(path, state);
if (!folder->vfs().setPinState(path, state)) {
qCWarning(lcAccountSettings) << "Could not set pin state of" << path << "to" << state;
}
// Trigger sync
folder->schedulePathForLocalDiscovery(path);

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