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

Compare commits

...

353 Commits

Author SHA1 Message Date
Nextcloud bot
371001c9ff [tx-robot] updated from transifex 2018-11-11 01:51:25 +00:00
Nextcloud bot
8367dbc67f [tx-robot] updated from transifex 2018-11-10 01:49:34 +00:00
rakekniven
ee96d998e5 Merge pull request #803 from nextcloud/rakekniven-patch-1
l10n. Added space for correct grammar.
2018-11-09 17:06:25 +01:00
rakekniven
a73da99d78 Merge branch 'master' into rakekniven-patch-1 2018-11-09 16:37:43 +01:00
rakekniven
f25ef73772 l10n. Added space for correct grammar.
Signed-off-by: Mark Ziegler <mark.ziegler@rakekniven.de>
2018-11-09 16:37:29 +01:00
Roeland Jago Douma
cf0838643f Merge pull request #800 from nextcloud/fix/open_activities_on_conflict
Actually open the activity view on a click for more info
2018-11-09 16:36:24 +01:00
Roeland Jago Douma
559fd910d8 Merge pull request #801 from nextcloud/fix/generated_avatar_not_black
Use a format that supports alpha channels for avatars
2018-11-09 15:15:46 +01:00
Roeland Jago Douma
3a0c7f64c0 Use a format that supports alpha channels for avatars
If we use the source format it can result in fully black images. As the
basic generated avatar doesn't have an alpha channel.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-09 13:01:28 +01:00
Roeland Jago Douma
7925c6c081 Actually open the activity view on a click for more info
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-09 12:12:25 +01:00
Roeland Jago Douma
9c0e5c2b19 Merge pull request #797 from alexcustos/issue_alternative_log_in
Added default scheme when server returns just a host
2018-11-09 08:52:39 +01:00
Nextcloud bot
c387592e47 [tx-robot] updated from transifex 2018-11-09 01:48:22 +00:00
Camila Ayres
b1d68f311d Merge pull request #798 from alexcustos/issues_openssl_1_1
Removed explicit initialization; Fixed RAND_bytes not found
2018-11-08 10:26:47 +01:00
Aleksandr Borisenko
f5586baee7 Added default scheme when server returns just a host 2018-11-08 11:35:27 +03:00
Aleksandr Borisenko
bb2d31a2bd Removed explicit initialization; Fixed RAND_bytes not found 2018-11-08 11:24:39 +03:00
Nextcloud bot
82cbee3f9d [tx-robot] updated from transifex 2018-11-08 01:48:27 +00:00
Roeland Jago Douma
347f4c8675 Merge pull request #796 from nextcloud/settings-dialog-height
SettingsDialog: disable unnecessary wrapping for the about label
2018-11-07 21:09:27 +01:00
J-P Nurmi
3a6d0ee29c SettingsDialog: disable unnecessary wrapping for the about label
For some reason, QLabel with rich text and word wrapping enabled
calculates quite a bit too large size hint. Luckily, it's rich text
that is already divided to paragraphs so that wrapping makes actually
very little visual difference. For example, on my screen, when the
settings dialog is resized horizontally to the minimum, the only word
that actually wrapped was "2017". After this patch, it naturally won't
wrap anymore, but the General Settings page also doesn't leave a large
gap at the bottom. As a result, the minimum height of the dialog went
down from 581 to 525. The exact values depend on the style and fonts.

Fixes #91.
2018-11-07 20:01:28 +01:00
Roeland Jago Douma
1b6e0c5292 Merge pull request #794 from jpnurmi/activity-text-colors
Fix ActivityWidget palette
2018-11-07 10:13:00 +01:00
Roeland Jago Douma
32cf2f2622 Merge branch 'master' into activity-text-colors 2018-11-07 09:29:15 +01:00
Nextcloud bot
6bd6bd3ed9 [tx-robot] updated from transifex 2018-11-07 01:48:19 +00:00
Roeland Jago Douma
13e1b6a34a Merge pull request #790 from nextcloud/fix/789/osx_installer_background
Update isntaller background for OSX
2018-11-06 11:11:16 +01:00
Roeland Jago Douma
6ada87ed15 Update isntaller background for OSX
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-06 10:39:10 +01:00
Nextcloud bot
da367f17ab [tx-robot] updated from transifex 2018-11-06 01:50:02 +00:00
J-P Nurmi
d01a99e9e5 ActivityWidget: remove a hard-coded white background
Let the system palette provide the appropriate color.

Fixes #742.
2018-11-05 22:13:34 +01:00
J-P Nurmi
b8d97b590f Fix palette usage in ActivityItemDelegate::paint()
Fixes #742.
2018-11-05 20:18:54 +01:00
Roeland Jago Douma
5a1fed8e23 Merge pull request #785 from nextcloud/we_are_nextcloud
Use Nextcloud
2018-11-05 13:57:17 +01:00
Roeland Jago Douma
fe60a2a570 Use Nextcloud
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-05 13:27:30 +01:00
Roeland Jago Douma
aee0363876 Merge pull request #783 from nextcloud/doc/cmake-build
Fix cmake build of documentation
2018-11-05 11:26:36 +01:00
Julius Härtl
abac2c327e Fix cmake build of documentation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-05 10:56:21 +01:00
Nextcloud bot
6dae188ed9 [tx-robot] updated from transifex 2018-11-05 01:49:43 +00:00
Roeland Jago Douma
2b760cd63b Merge pull request #781 from ivaradi/qt5.5-compat
Qt 5.5 compatibility patch for Xenial
2018-11-04 21:08:44 +01:00
Roeland Jago Douma
54b490c8d1 Merge branch 'master' into qt5.5-compat 2018-11-04 20:41:33 +01:00
Roeland Jago Douma
1e6b0b8924 Merge pull request #780 from jpnurmi/margins
Margins
2018-11-04 20:20:42 +01:00
Roeland Jago Douma
ef15534c64 Merge branch 'master' into margins 2018-11-04 19:40:40 +01:00
István Váradi
ea806a1287 Patch for Xenial to be able to compile with Qt 5.5 2018-11-04 17:28:13 +01:00
Roeland Jago Douma
b904d79d8f Merge pull request #776 from nextcloud/feature/migrate_http_to_webflow
Migrate http auth to webflow
2018-11-04 14:03:13 +01:00
Roeland Jago Douma
0c535872cb Merge branch 'master' into feature/migrate_http_to_webflow 2018-11-04 13:47:04 +01:00
Nextcloud bot
15553df34e [tx-robot] updated from transifex 2018-11-04 01:54:37 +00:00
J-P Nurmi
028979d752 ActivityWidget: remove double margins
To align margins with the account settings tab, so the content doesn't
jump when switching tabs.
2018-11-03 23:03:54 +01:00
J-P Nurmi
1e1d116052 SettingsDialog: remove an unused button box
This makes the bottom margin aligned with horizontal margins, and
eliminates a warning on startup:

    [unknown QObject::connect: Cannot connect (null)::clicked() to OCC::SettingsDialog::accept()
2018-11-03 22:49:48 +01:00
Roeland Jago Douma
045bba0161 Migrate http auth to webflow
This moves all the basic http auth over to the webflow mechanism.
This thus also makes sure that if the password changes a webflow page
pops up. And thus will directly move them over to apptokens then.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-03 12:37:53 +01:00
Nextcloud bot
b44408a91b [tx-robot] updated from transifex 2018-11-03 01:49:48 +00:00
Roeland Jago Douma
af8a2819be Merge pull request #768 from nextcloud/fix/766/copy_over_old_windows_config
Copy over config file to new location on windows
2018-11-02 21:01:22 +01:00
Roeland Jago Douma
17d05a2ad4 Merge pull request #750 from jpnurmi/slideshow
Setup wizard: implement an animated and interactive slide show
2018-11-02 12:21:07 +01:00
Roeland Jago Douma
0f767ed995 Increase durations a bit
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-02 11:10:57 +01:00
Roeland Jago Douma
e6f1d7632a Merge branch 'master' into slideshow 2018-11-02 10:43:01 +01:00
Roeland Jago Douma
40c36a9ed3 Merge pull request #756 from jpnurmi/add-button
Make the "Add Folder Sync Connection" button act like a button
2018-11-02 10:39:00 +01:00
Roeland Jago Douma
67714d33db Merge pull request #744 from jpnurmi/remove-qtsvg-include
Build fix: remove an unused QtSvg/QSvgRenderer include
2018-11-02 10:31:01 +01:00
Roeland Jago Douma
e01cb108e1 Merge pull request #754 from kevin147147/patch-1
theming for general settings ui
2018-11-02 10:08:18 +01:00
Roeland Jago Douma
3e634dad70 Merge pull request #764 from Awesome-Technologies/user_group_widget
Fix warning in ShareUserGroupWidget
2018-11-02 10:05:14 +01:00
Nextcloud bot
c2d947ee02 [tx-robot] updated from transifex 2018-11-02 01:51:45 +00:00
Roeland Jago Douma
28fe702e8e Merge pull request #769 from nextcloud/l10n/update
Update to translate strings
2018-11-01 16:13:10 +01:00
Roeland Jago Douma
baf4d5f9fc Update to translate strings
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-01 15:22:41 +01:00
Roeland Jago Douma
188a1a6e24 Copy over config file to new location on windows
Fixes #766

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-01 15:02:31 +01:00
Roeland Jago Douma
899fca12ba Merge pull request #721 from storca/patch-1
Inform user that configuration is not writable
2018-11-01 11:44:37 +01:00
Roeland Jago Douma
0f1395fdf0 Merge pull request #758 from nextcloud/self-signed-login-flow
Allow to use the login flow with a self signed certificate
2018-11-01 11:43:54 +01:00
Manuel Stahl
c9f720b68d Fix warning in ShareUserGroupWidget
Change-Id: I63091c67cd56dce241f04ed6badc090bb25cad5f
2018-11-01 10:26:19 +01:00
Roeland Jago Douma
b30a8528bd Merge pull request #645 from nextcloud/upstream/wizard
Wizard enhancement
2018-11-01 09:30:19 +01:00
Roeland Jago Douma
bb4c180c89 Merge branch 'master' into upstream/wizard 2018-11-01 08:32:12 +01:00
Roeland Jago Douma
a23dd9dfb3 Merge pull request #646 from nextcloud/upstream/pr/6656
FolderMan::checkPathValidityForNewFolder: make sure to work when fold…
2018-11-01 08:31:36 +01:00
Roeland Jago Douma
3b5d8f0277 Merge branch 'master' into upstream/pr/6656 2018-11-01 08:07:55 +01:00
Nextcloud bot
feb9a69703 [tx-robot] updated from transifex 2018-11-01 01:50:27 +00:00
Roeland Jago Douma
fd2293b067 Merge pull request #655 from nextcloud/upstream/pr/6671
Do not require server replies to contain an mtime
2018-10-31 22:19:26 +01:00
Roeland Jago Douma
5cfdc71ca5 Merge branch 'master' into upstream/pr/6671 2018-10-31 21:13:10 +01:00
Roeland Jago Douma
d3ee6ed9c5 Merge pull request #651 from nextcloud/upstream/pr/6616
Update: Report on readdir() errors #6610
2018-10-31 21:12:54 +01:00
J-P Nurmi
08879c0f14 Make the "Add Folder Sync Connection" button act like a button 2018-10-31 20:05:14 +01:00
Roeland Jago Douma
b7d0e5672a Merge branch 'master' into upstream/pr/6616 2018-10-31 13:51:34 +01:00
Nextcloud bot
a39d4777fd [tx-robot] updated from transifex 2018-10-31 01:49:53 +00:00
Roeland Jago Douma
cb4450864e Merge pull request #656 from nextcloud/upstream/pr/6672
Settings: Attempt to fix rename issue on old macOS
2018-10-30 23:04:34 +01:00
Roeland Jago Douma
ef3aeb65cc Merge pull request #658 from nextcloud/upstream/pr/6698
OAuth: Fix infinite loop when the refresh token is expired
2018-10-30 23:04:09 +01:00
Roeland Jago Douma
aca75ee982 Merge pull request #403 from nextcloud/upstream/pr/6372
Partial local discovery: Fix scheduling logic
2018-10-30 23:03:16 +01:00
Roeland Jago Douma
326c872ba7 Merge pull request #663 from nextcloud/upstream/pr/6707
Windows: Release handle/fd when file open fails #6699
2018-10-30 22:40:44 +01:00
Roeland Jago Douma
dd39887f2b Merge pull request #641 from nextcloud/upstream/pr/6621
TestOAuth: Don't have global static QObject
2018-10-30 22:38:51 +01:00
Roeland Jago Douma
8df9746005 Merge branch 'master' into upstream/pr/6372 2018-10-30 22:37:30 +01:00
Roeland Jago Douma
668c53a0af Allow to use the login flow with a self signed certificate
The QWebEngine uses a different certificate store/system. So we can't
just pass wour accepted certificates in there.

As a work around we now trust the url we set by definition. As this has
to already be approved before we access this.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-30 22:23:10 +01:00
kevin147147
30032f9c0c i18n for general settings ui 2018-10-30 17:32:52 +01:00
Nextcloud bot
f2bc5c0482 [tx-robot] updated from transifex 2018-10-30 01:52:44 +00:00
J-P Nurmi
1d3d261e38 Setup wizard: implement an animated and interactive slide show 2018-10-29 19:10:27 +01:00
Nextcloud bot
c40793257d [tx-robot] updated from transifex 2018-10-29 01:51:50 +00:00
Roeland Jago Douma
85b9f94a36 Merge pull request #748 from caugner/qtkeychain-0.9.1
qtkeychain: 0.8.0 -> 0.9.1
2018-10-28 19:45:17 +01:00
Roeland Jago Douma
8688fabee3 Merge branch 'master' into qtkeychain-0.9.1 2018-10-28 19:20:16 +01:00
Nextcloud bot
e88b81c6c9 [tx-robot] updated from transifex 2018-10-27 00:51:13 +00:00
Claas Augner
2344db8937 qtkeychain: 0.8.0 -> 0.9.1 2018-10-26 18:49:03 +02:00
Nextcloud bot
58302e9fc0 [tx-robot] updated from transifex 2018-10-26 00:50:27 +00:00
J-P Nurmi
f48aabf344 Build fix: remove an unused QtSvg/QSvgRenderer include
Slipped in in 156605c.
2018-10-25 21:32:43 +02:00
Roeland Jago Douma
8acc5573ff Merge pull request #667 from nextcloud/upstream/pr/6592
SettingsDialog: Show the page for the newly created account
2018-10-25 08:23:51 +02:00
Roeland Jago Douma
6224f6a1fa Merge branch 'master' into upstream/pr/6592 2018-10-25 07:44:04 +02:00
Nextcloud bot
44bc637237 [tx-robot] updated from transifex 2018-10-25 00:49:57 +00:00
Julius Härtl
99d4f81892 Merge branch 'master' into upstream/pr/6592 2018-10-24 22:38:11 +02:00
Julius Härtl
98bedf1031 Merge pull request #659 from nextcloud/upstream/issues/6696-6610
Windows: Don't ignore files with FILE_ATTRIBUTE_TEMPORARY
2018-10-24 22:25:16 +02:00
storca
ef8e029cbf Merge branch 'master' into patch-1 2018-10-24 18:10:35 +02:00
Roeland Jago Douma
eb31e9205c Merge branch 'master' into upstream/issues/6696-6610 2018-10-24 16:50:39 +02:00
Roeland Jago Douma
c8204f1725 Merge pull request #640 from nextcloud/upstream/pr/6617
OAuth: Remove the timeout
2018-10-24 16:49:59 +02:00
Roeland Jago Douma
174f99728f Merge branch 'master' into upstream/pr/6617 2018-10-24 16:27:31 +02:00
Roeland Jago Douma
dcdf6d966d Merge pull request #717 from tuxmaster5000/gitignore
Add cmake temporary stuff
2018-10-24 13:22:56 +02:00
Roeland Jago Douma
3e79ebed60 Merge pull request #661 from nextcloud/upstream/pr/6712
nautilus: Fix GET_MENU_ITEMS with utf8 filenames #6643
2018-10-24 13:22:22 +02:00
Roeland Jago Douma
5237a2c3e2 Merge branch 'master' into upstream/pr/6712 2018-10-24 08:59:29 +02:00
Roeland Jago Douma
6e0d636989 Merge pull request #595 from nextcloud/upstream/pr/6485
Show a tray message when a folder watcher becomes unreliable #6119
2018-10-24 08:59:15 +02:00
Roeland Jago Douma
d246c1e8b9 Merge branch 'master' into upstream/pr/6485 2018-10-24 08:27:11 +02:00
Roeland Jago Douma
96541d8ab8 Merge pull request #657 from nextcloud/upstream/pr/6688
Support higher resolution theme icons
2018-10-24 08:23:41 +02:00
Roeland Jago Douma
091c4fd9b0 Merge branch 'master' into upstream/pr/6688 2018-10-24 07:29:10 +02:00
Nextcloud bot
8098566140 [tx-robot] updated from transifex 2018-10-24 00:50:56 +00:00
Roeland Jago Douma
21dc97b809 Merge pull request #644 from nextcloud/upstream/pr/6632
Reconcile: When detecting a local move, keep the local mtime
2018-10-23 23:13:58 +02:00
Julius Härtl
23883b2b60 Merge branch 'master' into patch-1 2018-10-23 23:11:21 +02:00
Julius Härtl
0f9b8daa57 Merge branch 'master' into upstream/pr/6712 2018-10-23 23:09:26 +02:00
Dominik Schmidt
cddb9aa8ba Support higher resolution theme icons 2018-10-23 23:07:17 +02:00
Roeland Jago Douma
24606c0105 Merge branch 'master' into upstream/pr/6632 2018-10-23 22:51:12 +02:00
Roeland Jago Douma
3384f7e28b Merge pull request #660 from nextcloud/upstream/pr/6674
Data-Fingerprint: Fix backup detection when fingerprint is empty
2018-10-23 22:50:54 +02:00
Roeland Jago Douma
6b7328bb87 Merge branch 'master' into upstream/pr/6632 2018-10-23 22:48:34 +02:00
Roeland Jago Douma
f3529e3dd7 Merge branch 'master' into upstream/pr/6674 2018-10-23 21:43:13 +02:00
Roeland Jago Douma
305952e32e Merge pull request #634 from nextcloud/upstream/issue/6581
Ensure GETFileJob notices finishing #6581
2018-10-23 21:26:21 +02:00
Roeland Jago Douma
c37186cc56 Merge branch 'master' into upstream/issue/6581 2018-10-23 21:08:51 +02:00
Roeland Jago Douma
4e866123c5 Merge pull request #635 from nextcloud/upstream/issue/6522
OAuth2: Try to refresh the token even if the credentials weren't ready.
2018-10-23 21:07:04 +02:00
Roeland Jago Douma
35c0c9c0b1 Merge branch 'master' into upstream/issue/6522 2018-10-23 20:13:28 +02:00
Roeland Jago Douma
d3bc9fbdf3 Merge pull request #639 from nextcloud/upstream/pr/6605
UpdateInfo: Remove unused code
2018-10-23 13:05:27 +02:00
Roeland Jago Douma
0cf2970134 Merge branch 'master' into upstream/pr/6605 2018-10-23 12:32:16 +02:00
Roeland Jago Douma
206f081505 Merge pull request #727 from nextcloud/fix-issue-268
Uses QByteArray to store private key.
2018-10-23 12:31:39 +02:00
Roeland Jago Douma
1c8307f264 Merge branch 'master' into fix-issue-268 2018-10-23 12:04:14 +02:00
Roeland Jago Douma
2d65091f27 Merge pull request #637 from nextcloud/upstream/issue/6545
Tray workarounds #6545
2018-10-23 11:48:08 +02:00
Roeland Jago Douma
a492ab8294 Merge branch 'master' into upstream/issue/6545 2018-10-23 10:59:56 +02:00
Nextcloud bot
3da6f45ba9 [tx-robot] updated from transifex 2018-10-23 00:43:03 +00:00
Julius Härtl
856d40fd99 Merge branch 'master' into upstream/issue/6581 2018-10-22 20:41:17 +02:00
Nextcloud bot
846075704e [tx-robot] updated from transifex 2018-10-22 00:45:03 +00:00
Roeland Jago Douma
156308c72e Merge branch 'master' into upstream/issue/6581 2018-10-21 14:19:07 +02:00
Camila Ayres
c99a35a8a5 Merge pull request #732 from st4ll1/master
Fix cmake command for linux in README too
2018-10-21 11:50:28 +02:00
Andreas Stallinger
f937fdd624 Fix cmake command for linux in README too 2018-10-21 10:40:44 +02:00
Nextcloud bot
1f8c3074a6 [tx-robot] updated from transifex 2018-10-21 00:44:18 +00:00
Nextcloud bot
11673005db [tx-robot] updated from transifex 2018-10-20 00:43:12 +00:00
Roeland Jago Douma
df24a25829 Merge pull request #396 from nextcloud/upstream/pr/6360
SyncJournal: Clear etag filter before sync
2018-10-19 20:26:30 +02:00
Roeland Jago Douma
2dc7ff7332 Merge branch 'master' into upstream/pr/6360 2018-10-19 16:13:09 +02:00
Roeland Jago Douma
7ace48d5de Merge pull request #643 from nextcloud/upstream/pr/6615
Log: Adjust update/reconcile log verbosity
2018-10-19 16:04:26 +02:00
Roeland Jago Douma
56ccff4ee8 Merge pull request #654 from nextcloud/upstream/sqlite-version-3-24
sqlite: Update bundled version to 3.24.0
2018-10-19 16:03:04 +02:00
Roeland Jago Douma
9d9f96a685 Merge branch 'master' into upstream/pr/6615 2018-10-19 15:43:50 +02:00
Nextcloud bot
052c37acda [tx-robot] updated from transifex 2018-10-19 00:42:46 +00:00
Nextcloud bot
fd2e88e13b [tx-robot] updated from transifex 2018-10-17 00:42:35 +00:00
storca
4bd3829f78 Merge branch 'master' into patch-1 2018-10-16 21:17:58 +02:00
tuxmaster5000
28b399ec2b Merge branch 'master' into gitignore 2018-10-16 08:55:18 +02:00
Roeland Jago Douma
4bb936f876 Merge pull request #709 from nextcloud/fix-issue-665
Fixes #665 Adds slot for confirmShare button.
2018-10-15 13:58:16 +02:00
Roeland Jago Douma
6805d91033 Merge branch 'master' into fix-issue-665 2018-10-15 13:47:18 +02:00
Nextcloud bot
8da2b9dbf8 [tx-robot] updated from transifex 2018-10-15 00:43:12 +00:00
Camila San
45ff3385c7 Uses QByteArray to store private key.
Removes QSslkey. See #268

Signed-off-by: Camila San <hello@camila.codes>
2018-10-15 00:21:08 +02:00
Camila Ayres
53cc6a1611 Merge branch 'master' into gitignore 2018-10-14 16:17:13 +02:00
Camila Ayres
4e3b408c50 Merge branch 'master' into patch-1 2018-10-14 16:14:43 +02:00
Nextcloud bot
bfc8154e68 [tx-robot] updated from transifex 2018-10-14 00:43:12 +00:00
storca
620908523e Update accountmanager.cpp
Fixed syntax error
Possible fix for issue #720
2018-10-13 18:45:01 +02:00
storca
8a996ba9a9 Update accountmanager.cpp
Fixed issue #720 by adding the isWrittable method
2018-10-13 18:36:40 +02:00
Nextcloud bot
74d8f32f37 [tx-robot] updated from transifex 2018-10-13 00:42:33 +00:00
tuxmaster5000
a5e329a1c5 Add cmake temporary stuff 2018-10-12 11:48:32 +02:00
Nextcloud bot
3fe44f0d25 [tx-robot] updated from transifex 2018-10-11 00:43:07 +00:00
Nextcloud bot
e207c91228 [tx-robot] updated from transifex 2018-10-10 00:50:58 +00:00
Nextcloud bot
cdf922f51d [tx-robot] updated from transifex 2018-10-09 00:49:05 +00:00
Camila Ayres
45ffc0ae09 Merge pull request #710 from kevin147147/patch-1
Rename INSTALL to INSTALL.md for Preview :)
2018-10-08 22:00:22 +02:00
kevin147147
e214234001 Rename README to README.md
Preview :)
2018-10-08 21:01:08 +02:00
kevin147147
54e58b51ab Rename INSTALL to INSTALL.md
Preview :)
2018-10-08 20:57:34 +02:00
Camila San
debe37308f Fixes #665 Adds slot for confirmShare button.
Signed-off-by: Camila San <hello@camila.codes>
2018-10-08 20:56:01 +02:00
Nextcloud bot
7c096d08aa [tx-robot] updated from transifex 2018-10-07 00:50:40 +00:00
Nextcloud bot
ac631d008c [tx-robot] updated from transifex 2018-10-06 00:48:41 +00:00
Nextcloud bot
f1cad3443b [tx-robot] updated from transifex 2018-10-05 00:51:40 +00:00
Nextcloud bot
cacde7a3aa [tx-robot] updated from transifex 2018-10-02 00:49:28 +00:00
Camila Ayres
b533c3582e Updates issue_template.md.
Signed-off-by: Camila San <hello@camila.codes>
2018-10-01 17:57:35 +02:00
Nextcloud bot
69f18f6b7d [tx-robot] updated from transifex 2018-10-01 00:49:10 +00:00
Nextcloud bot
de80f7d6ca [tx-robot] updated from transifex 2018-09-30 00:50:09 +00:00
Nextcloud bot
38ec3b8972 [tx-robot] updated from transifex 2018-09-29 00:47:33 +00:00
Nextcloud bot
52d40235b6 [tx-robot] updated from transifex 2018-09-28 00:43:34 +00:00
Nextcloud bot
0ee662bb0e [tx-robot] updated from transifex 2018-09-27 00:52:10 +00:00
Nextcloud bot
5733e90b09 [tx-robot] updated from transifex 2018-09-26 00:52:09 +00:00
Nextcloud bot
95d2c64c1b [tx-robot] updated from transifex 2018-09-25 00:51:54 +00:00
Nextcloud bot
b71c753a94 [tx-robot] updated from transifex 2018-09-24 00:49:25 +00:00
Nextcloud bot
bd88ddfa07 [tx-robot] updated from transifex 2018-09-23 01:19:35 +00:00
Nextcloud bot
373c6cd631 [tx-robot] updated from transifex 2018-09-22 00:52:01 +00:00
Nextcloud bot
a464ad2c71 [tx-robot] updated from transifex 2018-09-21 00:59:02 +00:00
Nextcloud bot
f3dd97f29c [tx-robot] updated from transifex 2018-09-20 00:50:44 +00:00
Nextcloud bot
6587955668 [tx-robot] updated from transifex 2018-09-19 00:49:32 +00:00
Nextcloud bot
9013036685 [tx-robot] updated from transifex 2018-09-17 00:52:18 +00:00
Nextcloud bot
ebd632f582 [tx-robot] updated from transifex 2018-09-16 00:51:19 +00:00
Nextcloud bot
ce22007b16 [tx-robot] updated from transifex 2018-09-15 00:50:19 +00:00
Nextcloud bot
6a1043cef0 [tx-robot] updated from transifex 2018-09-14 00:51:47 +00:00
Nextcloud bot
82f3b4c91f [tx-robot] updated from transifex 2018-09-13 00:50:42 +00:00
Nextcloud bot
d0b6a611f2 [tx-robot] updated from transifex 2018-09-12 00:49:42 +00:00
Camila Ayres
714a4090a7 Merge pull request #668 from nextcloud/update-qtmacgoodies
Updates submodule qtmacgoodies.
2018-09-11 16:41:45 +02:00
Camila San
63d7e54ef3 Updates submodule qtmacgoodies.
Signed-off-by: Camila San <hello@camila.codes>
2018-09-11 16:11:47 +02:00
Markus Goetz
a2f4917daf SettingsDialogMac: Show the page for the newly created account 2018-09-11 13:45:01 +02:00
Olivier Goffart
a09f1d14ba SettingsDialog: Show the page for the newly created account 2018-09-11 13:44:22 +02:00
Nextcloud bot
96c37b1fac [tx-robot] updated from transifex 2018-09-11 00:50:01 +00:00
Christian Kamm
4bd2545dad Windows: Release handle/fd when file open fails #6699 2018-09-10 21:17:20 +02:00
Christian Kamm
f4dfdf5889 nautilus: Fix GET_MENU_ITEMS with utf8 filenames #6643 2018-09-10 21:06:57 +02:00
Olivier Goffart
08e4ba3363 Data-Fingerprint: Fix backup detection when fingerprint is empty
Add a test to test the data fingerprint feature make me realize it was broken.
The code was relying in the distinction between empty and null QByteArray,
but this was a bad idea as this difference is lost when going through QString.
2018-09-10 20:44:03 +02:00
Olivier Goffart
3b2c6d2202 OAuth: Fix infinite loop when the refresh token is expired
The server reply with a code 400 when the token is invalid,
the client was understanding this error as a network error, and was retying
again with the same token.

Instead, we must rely on what the json is saying, even if the reply is
not a 200 code.

Issue https://github.com/owncloud/enterprise/issues/2777
2018-09-10 20:22:40 +02:00
Markus Goetz
4f83bba829 Windows: Don't ignore files with FILE_ATTRIBUTE_TEMPORARY
Too many applications incorrectly use this attribute.

For #6696 #6610
2018-09-10 20:20:40 +02:00
Markus Goetz
109947ba3f Settings: Attempt to fix rename issue on old macOS
Found by @hurradieweltgehtunter
2018-09-10 17:34:48 +02:00
Christian Kamm
5b228d1afd Do not require server replies to contain an mtime
The check was added for #6317 in commit
13eb64584f.

We did see missing mtimes in replies in tests with live servers though.
Possibly those were old incomplete responses cached in the stat cache?
2018-09-10 17:33:53 +02:00
Camila San
90d3917481 Creates .github folder.
- Adds issue_template.md to folder .github - previously bug_report.md.
- This will enable the issue template when users creates issues.

Signed-off-by: Camila San <hello@camila.codes>
2018-09-10 17:17:39 +02:00
Camila San
d9cc362258 Adds bug_report.md file.
Signed-off-by: Camila San <hello@camila.codes>
2018-09-10 17:09:22 +02:00
Camila Ayres
0a5f890bf9 Adds bug_report template.
Signed-off-by: Camila San <hello@camila.codes>
2018-09-10 16:58:27 +02:00
Markus Goetz
b873311bc5 sqlite: Update bundled version to 3.24.0
For OS X and Windows.
2018-09-10 16:44:16 +02:00
Camila Ayres
eaa4e77626 Merge pull request #652 from ivaradi/nautilus-plugin-python-fix
Use encode()/decode() with Python 3 only.
2018-09-10 15:29:10 +02:00
István Váradi
7a7799407d Merge branch 'master' into nautilus-plugin-python-fix 2018-09-10 15:17:14 +02:00
István Váradi
a4e23e7655 Merge pull request #598 from ivaradi/icon-name-fix
Create symlinks for the small-letter application icon file names
2018-09-10 15:16:45 +02:00
István Váradi
56ea525499 Use encode()/decode() with Python 3 only 2018-09-10 15:05:46 +02:00
István Váradi
e84bdd59c7 Use the correct icon name variable in mirall.desktop.in 2018-09-10 14:54:24 +02:00
István Váradi
b5f484aaf5 Revert "Create symlinks for the small-letter application icon file names"
This reverts commit 328f82297a.
2018-09-10 14:50:14 +02:00
Christian Kamm
3ec4fc6145 Update: Report on readdir() errors #6610 2018-09-10 14:33:36 +02:00
István Váradi
264b77c634 Merge branch 'master' into icon-name-fix 2018-09-10 14:08:35 +02:00
Nextcloud bot
23d64dd3ac [tx-robot] updated from transifex 2018-09-10 00:50:19 +00:00
Olivier Goffart
b3e4ec9454 FolderMan::checkPathValidityForNewFolder: make sure to work when folder points to deleted folders
Note that we also needed to adjust the server url to contains the user name
in the folder wizard. (As checkPathValidityForNewFolder expect the user name)

Issue #6654
2018-09-09 22:02:44 +02:00
Olivier Goffart
39c6196487 Wizard: show a message when the URL is invalid
Rather than let Qt show "Host not found"

Issue #6646
2018-09-09 21:47:03 +02:00
Olivier Goffart
986cf448a9 Wizard OAuth2 Page: add a context menu to copy the link
Relates to https://github.com/owncloud/enterprise/issues/2600
2018-09-09 21:46:42 +02:00
Olivier Goffart
67f793a49e Log: Remove inaccurate comment about --logdebug
The exact string is actually "sync.*.debug=true\ngui.*.debug=true".
And this is not strictly equivalent to setting the env var, as it
calls QLoggingCategory::setFilterRules.
Over all, that's an implementation details that users do not care about.
2018-09-09 21:44:55 +02:00
Olivier Goffart
d202942a2c Reconcile: When detecting a local move, keep the local mtime
https://github.com/owncloud/client/issues/6629#issuecomment-402450691
2018-09-09 21:38:10 +02:00
Dmitry Mayorov
d338c130af added logdebug 2018-09-09 21:36:47 +02:00
Christian Kamm
283c4b13a1 Log: Adjust update/reconcile log verbosity
Not having these enabled by default is causing significant extra back
and forth with reporters since they must manually use --logdebug for the
log to be useful.
2018-09-09 21:34:41 +02:00
Olivier Goffart
7019f03e46 TestOAuth: Don't have global static QObject
Fix a strange warning seen on the log from the CI on Windows in
https://github.com/owncloud/client/pull/6621

The test shows, at the beginning
QObject::connect: No such signal DesktopServiceHook::destroyed(QObject*)
And crashes at the and.

My guess is that when QDesktopServices::setUrlHandler is called, the
QMetaObject is not yet initialized

But this is probably not the reason of the crash
2018-09-09 18:16:59 +02:00
Olivier Goffart
40007537ea OAuth: Remove the timeout
There is no real reason to have a timeout. The connection can stay open
as long as we are not authenticated. The User can still re-open a browser
from the UI at any time.

Issue #6612
2018-09-09 17:57:38 +02:00
Markus Goetz
6122a47241 UpdateInfo: Remove unused code 2018-09-09 17:39:56 +02:00
Christian Kamm
ce3339a00f fixup: remove outdated Qt5.5 workaround code 2018-09-09 17:27:30 +02:00
Christian Kamm
14df7a3273 fixup: use initializer for contextMenuVisibleManual 2018-09-09 17:23:49 +02:00
Christian Kamm
9330d2b178 fixup: make logging "info" 2018-09-09 17:15:58 +02:00
Christian Kamm
87dd198b52 Tray workarounds #6545
* Disentangle the previous 'qdbusWorkarounds' into three different
  things
* Make not trusting tray.isVisible() a new workaround
* Introduce env vars for all workaround flags
* Use the workaround flags for OSX
* Determine workaround flags for KDE when the plasma integration plugin
  is missing
2018-09-09 13:17:31 +02:00
Olivier Goffart
a68c95522d OAuth2: Try to refresh the token even if the credentials weren't ready.
This can happen when the client is started and the internet connection
was not enabled. Then we would fetch the credentials, but we would
no do the refresh token step (because network is down).
So next time we try to connect, we would also not refresh the token
because the credentials are not marked as 'ready'

Reported in
https://github.com/owncloud/client/issues/6522#issuecomment-396845167
2018-09-09 12:00:59 +02:00
Christian Kamm
cba0627a9c Ensure GETFileJob notices finishing #6581
It could happen that readyRead was emitted for incoming data while the
download was not yet finished. Then the network job could finish with
no more data arriving - so readyRead wasn't emitted again.

To fix this, the finished signal also gets connected to the readyRead
slot.
2018-09-09 11:50:00 +02:00
Nextcloud bot
cb69944b5c [tx-robot] updated from transifex 2018-09-09 00:52:22 +00:00
Nextcloud bot
f80517d719 [tx-robot] updated from transifex 2018-09-08 00:50:03 +00:00
Camila Ayres
13cfd80093 Adds correct qt5keychain lib file name for cmake instructions in README.
Signed-off-by: Camila San <hello@camila.codes>
2018-09-06 10:57:33 +02:00
Camila Ayres
17ac41377e Fix README cmake instructions for the 3 platforms.
Signed-off-by: Camila San <hello@camila.codes>
2018-09-06 10:39:31 +02:00
Nextcloud bot
0b8459ca14 [tx-robot] updated from transifex 2018-09-06 00:52:07 +00:00
Roeland Jago Douma
537fac70bf Merge pull request #594 from hiiamok/windows-large-app-icon
Larger Windows App Icon
2018-09-05 22:54:42 +02:00
Oskar Kruschitz
cf150caa2b Merge branch 'master' into windows-large-app-icon 2018-09-05 13:24:08 +02:00
Camila Ayres
23d276021e Updates README cmake instruction for Windows.
Signed-off-by: Camila San <hello@camila.codes>
2018-09-05 13:23:58 +02:00
Roeland Jago Douma
599f6f0228 Merge pull request #624 from nextcloud/fix/279/abstract_webflow_qnam
Add a WebFlowCredentialsAccessManager
2018-09-05 13:01:06 +02:00
Camila Ayres
bddc573c54 Merge branch 'master' into fix/279/abstract_webflow_qnam 2018-09-05 12:42:56 +02:00
Camila Ayres
1a73d3323a Merge pull request #625 from hiiamok/mac-app-icon
Mac Application Icon
2018-09-05 12:41:09 +02:00
Oskar Kruschitz
2bfb99f174 Mac Application Icon
Replaced ownCloud.icns with APPLICATION_ICON_NAME variable
2018-09-05 11:57:26 +02:00
Oskar Kruschitz
f4a704164f Merge branch 'master' into windows-large-app-icon 2018-09-05 11:37:24 +02:00
Nextcloud bot
e730f95a71 [tx-robot] updated from transifex 2018-09-05 00:48:38 +00:00
Roeland Jago Douma
9f1f99f4db Add a WebFlowCredentialsAccessManager
Fixes #279

Some setups don't make Qt emit the right signals and the client would
end up in state where it could not do the initial authentications.
This is a similar hack that apparently already was is place for basic
http auth.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-09-04 20:59:25 +02:00
Oskar Kruschitz
d236c3c011 Merge branch 'master' into windows-large-app-icon 2018-09-04 08:35:11 +02:00
Nextcloud bot
73ccccb8a7 [tx-robot] updated from transifex 2018-09-04 00:47:25 +00:00
Oskar Kruschitz
7ab2a9bfcb Merge branch 'master' into windows-large-app-icon 2018-09-03 12:51:26 +02:00
Camila Ayres
b19abe9c86 Merge pull request #614 from Titan-C/host_link
In setup wizard put link to nextcloud installation.
2018-09-02 13:18:00 +02:00
Camila Ayres
44026763b8 Merge branch 'master' into host_link 2018-09-02 12:55:44 +02:00
Camila Ayres
617cd6dfdb Merge pull request #615 from Titan-C/webview_scale
Web view scales vertically.
2018-09-02 12:54:41 +02:00
Camila Ayres
3a489b73f9 Merge branch 'master' into webview_scale 2018-09-02 12:23:44 +02:00
Camila Ayres
07013783ea Merge pull request #405 from nextcloud/sync-hidden-files
Sync hidden files by default.
2018-09-02 12:23:29 +02:00
Camila Ayres
7c77864396 Merge branch 'master' into sync-hidden-files 2018-09-02 12:01:07 +02:00
Nextcloud bot
3b8dde601d [tx-robot] updated from transifex 2018-09-02 00:50:43 +00:00
Tobia De Koninck
d9f79215a7 Fix the hiddensync state in the UI + also sync hidden in cmd 2018-09-01 16:30:27 +02:00
Jan-Christoph Borchardt
309b0b6382 Sync hidden files by default 2018-09-01 16:30:27 +02:00
Nextcloud bot
9d021d004d [tx-robot] updated from transifex 2018-09-01 00:48:21 +00:00
Óscar Nájera
452f64221e Web view scales vertically
Fix #591
2018-08-31 19:49:13 +02:00
Óscar Nájera
72419a1149 Remove hostButton from setup page 2018-08-31 18:35:52 +02:00
Óscar Nájera
ab5c4749c1 In setup wizard put link to nextcloud installation
Fix #604

Remove the not actionable button but a direct link to the nextcloud
installation page. In this case the button is changed for a label with an
html link to the website.
2018-08-31 18:32:00 +02:00
Nextcloud bot
5cdf8a2997 [tx-robot] updated from transifex 2018-08-31 00:48:47 +00:00
Camila Ayres
bfd8897f22 Merge branch 'master' into windows-large-app-icon 2018-08-30 17:05:04 +02:00
Camila Ayres
8c19be7213 Merge pull request #599 from Titan-C/unpause_resume
Rename Unpause To Resume.
2018-08-30 17:03:58 +02:00
Camila Ayres
4a47d1c8ef Merge branch 'master' into unpause_resume 2018-08-30 16:47:28 +02:00
Camila Ayres
e3d7c9f1ea Merge branch 'master' into icon-name-fix 2018-08-30 16:45:52 +02:00
Camila Ayres
fbd8438072 Merge pull request #603 from Titan-C/login_button
Hide login button on setup screen.
2018-08-30 16:43:41 +02:00
Camila Ayres
efc2f0eded Merge branch 'master' into login_button 2018-08-30 14:33:00 +02:00
Camila Ayres
3e839b2e44 Merge branch 'master' into unpause_resume 2018-08-30 13:31:34 +02:00
Camila Ayres
678e2c873e Merge pull request #601 from Titan-C/activity_hover_notooltip
Drop the ToolTipRole from the activity list.
2018-08-30 13:26:47 +02:00
Óscar Nájera
121c0d8433 Hide login button on setup screen
Fix #576
2018-08-30 13:24:23 +02:00
Camila Ayres
881c7f804f Merge branch 'master' into activity_hover_notooltip 2018-08-30 12:33:40 +02:00
István Váradi
2e55702258 Merge branch 'master' into icon-name-fix 2018-08-30 07:54:49 +02:00
Oskar Kruschitz
964470fc11 Merge branch 'master' into windows-large-app-icon 2018-08-30 07:42:34 +02:00
Nextcloud bot
c4d01b6aea [tx-robot] updated from transifex 2018-08-30 00:46:36 +00:00
Óscar Nájera
0f80ecbb39 Drop the ToolTipRole from the activity list
Fix #515
2018-08-30 00:37:59 +02:00
Oskar Kruschitz
bf35821bc0 Merge branch 'master' into windows-large-app-icon 2018-08-29 20:39:17 +02:00
Óscar Nájera
d896edeee8 Rename Unpause to Resume
Fix #192
2018-08-29 17:03:07 +02:00
István Váradi
328f82297a Create symlinks for the small-letter application icon file names 2018-08-29 16:36:56 +02:00
Camila Ayres
cafdcf77cb Merge pull request #597 from Titan-C/readmes
Improves README documentation.
2018-08-29 16:08:01 +02:00
Óscar Nájera
ed705ba98c Improving documentation
Fix #584
Fix #585
2018-08-29 15:47:44 +02:00
Christian Kamm
2844c925eb Show a tray message when a folder watcher becomes unreliable #6119 2018-08-28 17:04:25 +02:00
Oskar Kruschitz
ea8676ad2c Larger Windows App Icon
Newer Windows versions are also displaying a 256x256 icon. If this icon size is not present, the 48x48 icon is used, but not resized. This means there is a possibly large empty area around the icon.
2018-08-28 10:06:28 +02:00
Nextcloud bot
028da61824 [tx-robot] updated from transifex 2018-08-28 00:47:44 +00:00
Nextcloud bot
16337bf656 [tx-robot] updated from transifex 2018-08-27 00:48:31 +00:00
Camila Ayres
d8bf20310b Adds link on how to create a pull request to the README.
Signed-off-by: Camila San <hello@camila.codes>
2018-08-25 17:49:34 +02:00
Nextcloud bot
cdd84dce6e [tx-robot] updated from transifex 2018-08-25 00:47:18 +00:00
Camila Ayres
647df7bcee Merge pull request #580 from nextcloud/issues/activities
Fixes #538: correctly checks for local sync actitivities.
2018-08-24 14:54:42 +02:00
Camila San
64e21d5083 Fixes #538: correctly checks for local sync actitivities.
- Local sync activities are now listed with the sync icon and included
in the correct list: once a file is synced, activityWidget checks for
its status to know if it is an error or if the file was successfully synced.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-24 09:24:32 +02:00
Nextcloud bot
ea0bdddb2a [tx-robot] updated from transifex 2018-08-24 00:48:54 +00:00
Nextcloud bot
e9b4453814 [tx-robot] updated from transifex 2018-08-23 00:52:06 +00:00
Nextcloud bot
1991d71136 [tx-robot] updated from transifex 2018-08-22 00:48:25 +00:00
Camila Ayres
6a7a08bd01 Merge pull request #567 from nextcloud/issues/share-dialog
Fixes issues in the share dialog
2018-08-21 23:23:04 +02:00
Camila San
d5a0ec7d8b Fixes #534: interactions with expiration date and password.
- Fixes call for slot when date is set - it was the password
slot for that.
- Adds QProgressIndicator and function to toggle animation.
- Fixes: when date was set, the date was not being correctly set and
displayed.
- Fixes: hides and 'deletes' passsword and expire. date widgets when
the user unchecks it in the toolbox menu.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 22:48:51 +02:00
Camila San
eecbdb00de Fixes #534: can edit permission were always disabled.
- Properly checks files and folder share permissions when displaying
can edit checkbox - which can also be partially checked - and listing
permissios in the tollbutton menu.
- Fixes click on can edit checkbox - which can also change state of
permissions in the toolbutton menu.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 22:48:51 +02:00
Camila San
085de2825a Enhancement #534: hide tool button when there is no share link.
- Only display button when there is a share link.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 22:48:51 +02:00
Camila San
cf3ee4b3a4 Fixes share link delete action when clicking on tool button menu.
- Shared point was not handled properly.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 22:48:50 +02:00
Camila San
8f7bc8cff9 Changes 'Allow editing' for file sharing to a checkbox instead of a radiobutton.
Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 22:48:42 +02:00
Camila Ayres
ff9177edc3 Merge pull request #571 from nextcloud/issues/mac-build
Fixes mac build.
2018-08-21 22:47:41 +02:00
Camila San
c8d5d9a622 Removes dynamic cast when building navigation apps.
- It checks for the menu title to know where to add the apps menu instead of trying to cast
the menu pointer saved in the sender() property.
- The previous solution was not working reliably - see #523
- Adds TODO.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 14:57:12 +02:00
Camila San
fa4328a596 Changes repo for 3rdparty/qtmacgoodies.
- The fork has the functions needed to add separators in the toolbar.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-21 13:02:54 +02:00
Nextcloud bot
985c2ed1ca [tx-robot] updated from transifex 2018-08-21 00:47:36 +00:00
Nextcloud bot
034d5b60aa [tx-robot] updated from transifex 2018-08-20 00:48:31 +00:00
Nextcloud bot
a2f7355d4a [tx-robot] updated from transifex 2018-08-19 00:47:24 +00:00
Nextcloud bot
17d4aeeb78 [tx-robot] updated from transifex 2018-08-18 00:47:40 +00:00
Nextcloud bot
a214ecf788 [tx-robot] updated from transifex 2018-08-17 00:47:10 +00:00
Camila Ayres
0d9de74726 Merge pull request #562 from ivaradi/qaction2
Further QAction constructor fixes
2018-08-15 17:32:43 +02:00
István Váradi
8b996772a4 Further QAction constructor fixes 2018-08-15 17:02:28 +02:00
Camila Ayres
fa5143a66d Merge pull request #556 from ivaradi/qaction
Provide parent to QAction
2018-08-14 21:10:56 +02:00
István Váradi
8cbc757a56 Merge branch 'master' into qaction 2018-08-14 17:13:44 +02:00
Camila Ayres
e9ae10ba6c Merge pull request #559 from nextcloud/issues/517
Fixes #517: changes QPalette for more readability in the activities list.
2018-08-14 17:12:48 +02:00
István Váradi
5bcc4ece77 Merge branch 'master' into qaction 2018-08-14 17:11:00 +02:00
Camila San
135bcaea3e Fixes #517: changes QPalette for more readability in the activities list.
Signed-off-by: Camila San <hello@camila.codes>
2018-08-14 17:00:43 +02:00
Camila Ayres
29c11618b3 Merge pull request #558 from nextcloud/issues/518
Fixes #518: adds more margin for the text in the activity
2018-08-14 16:59:54 +02:00
István Váradi
a15a470ea2 Merge branch 'master' into qaction 2018-08-14 16:53:14 +02:00
Camila San
1d4fc91d79 Fixes #518: adds more margin for the text in the activity (only for Windows).
Signed-off-by: Camila San <hello@camila.codes>
2018-08-14 16:32:48 +02:00
Camila Ayres
ef9c302b5e Merge pull request #550 from nextcloud/issues/533
Fixes #533: Removes the copy activities/notifications button
2018-08-14 16:31:14 +02:00
Camila San
c1c5e5da5f Fixes #533: Removes the copy activities/notifications button
- Also removes the signal/slot associated with it.
- Minor changes: removes white background and changes frame style to the
same used in the accountsettings for consistency.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-14 13:53:14 +02:00
István Váradi
14615855d0 Provide parent to QAction 2018-08-14 11:54:08 +02:00
Roeland Jago Douma
f0ef2c27a3 Merge pull request #553 from ivaradi/libssl
LibSSL versions
2018-08-13 21:47:53 +02:00
Camila Ayres
b50db09b01 Merge pull request #554 from nextcloud/feature/noid/enable_providers_by_default
Enable providers by default
2018-08-13 20:24:27 +02:00
Roeland Jago Douma
86991b9996 Enable providers by default
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-08-13 19:59:34 +02:00
István Váradi
c27943b46d Merge branch 'master' into libssl 2018-08-13 19:15:57 +02:00
Camila Ayres
ef71e6b0f7 Merge pull request #551 from nextcloud/issues/494
Issue #494: removes close button from the settings.
2018-08-13 18:25:20 +02:00
Camila Ayres
8e8a619ee1 Merge branch 'master' into issues/494 2018-08-13 17:42:53 +02:00
Camila Ayres
27076c0f28 Merge pull request #552 from nextcloud/removes-notificationwidget
Removes unused NotificationWidget class.
2018-08-13 17:42:38 +02:00
István Váradi
fc6e6149e5 Require libssl 1.1 on distributions other than Xenial 2018-08-13 16:24:44 +02:00
István Váradi
13e2bb099b Require libssl 1.0 on Xenial 2018-08-13 16:24:18 +02:00
Camila San
8fd0ca4587 Removes unused NotificationWidget class.
Since the new activities/notifications list UI this class is not used
anymore.

Signed-off-by: Camila San <hello@camila.codes>
2018-08-13 15:17:40 +02:00
Camila San
2aa942e4b8 Issue #494: removes close button from the settings.
Signed-off-by: Camila San <hello@camila.codes>
2018-08-13 14:24:10 +02:00
Camila Ayres
92aaa09643 Merge pull request #541 from nextcloud/bugfix/noid/wizard-external-links
Make links open in an external browser
2018-08-13 12:03:31 +02:00
Roeland Jago Douma
0e2cd30ea1 Merge branch 'master' into bugfix/noid/wizard-external-links 2018-08-13 11:43:42 +02:00
Roeland Jago Douma
bc44c62471 Merge pull request #524 from ivaradi/ubuntu-compat
Some Ubuntu compilation fixes
2018-08-13 11:43:26 +02:00
Roeland Jago Douma
2434523f33 Merge pull request #532 from ShinjiLE/master
rearange CMake find_package OpenSSL
2018-08-13 11:42:35 +02:00
Camila Ayres
534a92b709 Merge branch 'master' into bugfix/noid/wizard-external-links 2018-08-13 11:40:45 +02:00
Roeland Jago Douma
233e10ecb1 Merge branch 'master' into master 2018-08-13 11:21:05 +02:00
Roeland Jago Douma
cefc6b531c Merge pull request #549 from nextcloud/ci/noid/bump_imagesx
Bump ci images
2018-08-13 11:20:50 +02:00
Roeland Jago Douma
5c7c92157f Bump images
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-08-13 10:56:18 +02:00
Camila Ayres
176a2e6f84 Merge branch 'master' into ubuntu-compat 2018-08-13 09:03:26 +02:00
Camila Ayres
647d16c792 Merge branch 'master' into bugfix/noid/wizard-external-links 2018-08-13 09:02:21 +02:00
Camila Ayres
3ad33a368a Merge branch 'master' into master 2018-08-13 08:58:26 +02:00
Nextcloud bot
951096f569 [tx-robot] updated from transifex 2018-08-13 00:49:31 +00:00
Nextcloud bot
489c0529c4 [tx-robot] updated from transifex 2018-08-12 00:48:32 +00:00
Julius Härtl
3576fbb2a5 Remove unused subclass of QWebEngineView
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-11 17:47:40 +02:00
Julius Härtl
8dedb9084e Make links open in an external browser
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-11 17:38:08 +02:00
Nextcloud bot
f6ef11a5c9 [tx-robot] updated from transifex 2018-08-11 00:47:25 +00:00
Nextcloud bot
1d868eb809 [tx-robot] updated from transifex 2018-08-09 00:48:49 +00:00
Julius Härtl
c3aafa722a Merge pull request #536 from nextcloud/3rdpart/remove_uneeded
Remove nlohmann/json.hpp
2018-08-08 21:34:48 +02:00
Roeland Jago Douma
b85bad0566 Remove nlohmann/json.hpp
Not used so no need to have it lying around

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-08-08 20:03:04 +02:00
Nextcloud bot
a4507db31a [tx-robot] updated from transifex 2018-08-08 00:50:18 +00:00
Nextcloud bot
e551b89ba7 [tx-robot] updated from transifex 2018-08-07 00:46:53 +00:00
Ronny
7cbca28eb7 Merge branch 'master' into master 2018-08-05 11:35:53 +02:00
Nextcloud bot
a1967d551d [tx-robot] updated from transifex 2018-08-05 00:49:39 +00:00
Ronny Kunze
2b825a1748 rearange CMake find_package OpenSSL
the command seems to be malformed . The keyword VERSION is not valid .
And the version should follow direct after the packagename.
2018-08-04 16:53:06 +02:00
Nextcloud bot
5110f9618a [tx-robot] updated from transifex 2018-08-04 00:47:26 +00:00
István Váradi
d30f8b9094 Merge branch 'master' into ubuntu-compat 2018-08-03 17:16:20 +02:00
István Váradi
758c2ad9ac Merge branch 'master' into ubuntu-compat 2018-08-02 21:08:54 +02:00
István Váradi
c919b7e069 Merge branch 'master' into ubuntu-compat 2018-08-01 16:28:48 +02:00
István Váradi
be3640dc51 Depend on libqt5svg5-dev 2018-07-31 16:24:16 +02:00
István Váradi
343402740f Make the Bionic control file the default one 2018-07-31 16:22:02 +02:00
István Váradi
1364755141 Use libkf5kio-dev directly on Bionic and Cosmic 2018-07-31 16:21:03 +02:00
Christian Kamm
797b40237e Partial local discovery: Fix scheduling logic
A recent patch that touched the condition for deciding whether a
periodic full local discovery is necessary accidentally inverted the
condition.
2018-06-06 22:49:50 +02:00
Christian Kamm
09f83f4fa9 SyncJournal: Clear etag filter before sync
Before, we only cleared the _avoidReadFromDbOnNextSyncFilter *after* a
sync which meant that we had to sync twice after selective sync setup.

Now, we clear the filter *before* a sync as well which allows the actual
next sync to write the correct etags to the db again - instead of only
the sync after that one.

Also expand on comments and rename _avoidReadFromDbOnNextSyncFilter to
_etagStorageFilter.
2018-06-05 12:00:20 +02:00
204 changed files with 58317 additions and 60536 deletions

View File

@@ -6,7 +6,7 @@ clone:
pipeline:
qt-5.7:
image: nextcloudci/client-5.7:client-5.7-3
image: nextcloudci/client-5.7:client-5.7-4
commands:
# Install QtKeyChain
- /bin/bash -c "
@@ -14,7 +14,7 @@ pipeline:
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
@@ -34,7 +34,7 @@ pipeline:
matrix:
TESTS: qt-5.7
qt-5.8:
image: nextcloudci/client-5.8:client-5.8-3
image: nextcloudci/client-5.8:client-5.8-4
commands:
# Install QtKeyChain
- /bin/bash -c "
@@ -42,7 +42,7 @@ pipeline:
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
@@ -62,7 +62,7 @@ pipeline:
matrix:
TESTS: qt-5.8
qt-5.9:
image: nextcloudci/client-5.9:client-5.9-4
image: nextcloudci/client-5.9:client-5.9-5
commands:
# Install QtKeyChain
- /bin/bash -c "
@@ -70,7 +70,7 @@ pipeline:
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
@@ -100,7 +100,7 @@ pipeline:
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
@@ -132,7 +132,7 @@ pipeline:
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
@@ -165,7 +165,7 @@ pipeline:
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&

64
.github/issue_template.md vendored Normal file
View File

@@ -0,0 +1,64 @@
<!---
Please try to only report a bug if it happens with the latest version
The latest version can be seen by checking https://download.nextcloud.com/desktop/
For support try our forums: https://help.nextcloud.com
--->
### Expected behaviour
Tell us what should happen
### Actual behaviour
Tell us what happens instead
### Steps to reproduce
1.
2.
3.
### Client configuration
Client version:
Operating system:
OS language:
Qt version used by client package (Linux only, see also Settings dialog):
Client package (From Nextcloud or distro) (Linux only):
Installation path of client:
### Server configuration
<!---
Optional section. It depends on the issue.
--->
Operating system:
Web server:
Database:
PHP version:
Nextcloud version:
Storage backend (external storage):
### Logs
Please use Gist (https://gist.github.com/) or a similar code paster for longer
logs.
```Template for output < 10 lines```
1. Client logfile: Output of `nextcloud --logwindow` or `nextcloud --logfile log.txt`
(On Windows using `cmd.exe`, you might need to first `cd` into the Nextcloud directory)
(See also https://docs.nextcloud.com/desktop/2.3/troubleshooting.html#log-files)
2. Web server error log:
3. Server logfile: nextcloud log (data/nextcloud.log):

7
.gitignore vendored
View File

@@ -164,3 +164,10 @@ UpgradeLog*.htm
# Microsoft Fakes
FakesAssemblies/
#cmake temporary stuff
CMakeCache.txt
CMakeFiles/
CPackConfig.cmake
CPackOptions.cmake
CPackSourceConfig.cmake

2
.gitmodules vendored
View File

@@ -1,6 +1,6 @@
[submodule "src/3rdparty/qtmacgoodies"]
path = src/3rdparty/qtmacgoodies
url = https://github.com/guruz/qtmacgoodies.git
url = https://github.com/camilasan/qtmacgoodies.git
[submodule "binary"]
path = binary
url = git://github.com/owncloud/owncloud-client-binary.git

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
Icon[ca]=@APPLICATION_ICON_NAME@
Name[ca]=@APPLICATION_NAME@ client de sincro d'escriptori
GenericName[ca]=Directori de sincronització

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[cs_CZ]=@APPLICATION_NAME@ desktopový synchronizační klient
Icon[cs_CZ]=@APPLICATION_EXECUTABLE@
Name[cs_CZ]=@APPLICATION_NAME@ desktopový synchronizační klient
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
Icon[cs_CZ]=@NAZEV_IKONY_APLIKACE@
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
GenericName[cs_CZ]=Synchronizace složek

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
Icon[de_DE]=@APPLICATION_EXECUTABLE@
Icon[de_DE]=@APPLICATION_ICON_NAME@
Name[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
GenericName[de_DE]=Synchronisationsordner

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
Icon[en_GB]=@APPLICATION_EXECUTABLE@
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
GenericName[en_GB]=Folder Sync

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_CL]=@APPLICATION_EXECUTABLE@
Name[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_CL]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_CO]=@APPLICATION_EXECUTABLE@
Name[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_CO]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_CR]=@APPLICATION_EXECUTABLE@
Name[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_CR]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_DO]=@APPLICATION_EXECUTABLE@
Name[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_DO]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_EC]=@APPLICATION_EXECUTABLE@
Name[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_EC]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_GT]=@APPLICATION_EXECUTABLE@
Name[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_GT]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_MX]=@APPLICATION_EXECUTABLE@
Name[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_MX]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
Icon[es_SV]=@APPLICATION_EXECUTABLE@
Name[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
GenericName[es_SV]=Sincronización de carpeta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
Icon[es]=@APPLICATION_EXECUTABLE@
Icon[es]=@APPLICATION_ICON_NAME@
Name[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
GenericName[es]=Sincronización de carpetas

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[fr]=Client desktop de synchronisation @APPLICATION_NAME@
Icon[fr]=@APPLICATION_EXECUTABLE@
Comment[fr]=Client de synchronisation @APPLICATION_NAME@ desktop
Icon[fr]=@APPLICATION_ICON_NAME@
Name[fr]=Client desktop de synchronisation @APPLICATION_NAME@
GenericName[fr]=Synchronisation du dossier

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
Icon[gl]=@APPLICATION_ICON_NAME@
Name[gl]=@APPLICATION_NAME@ cliente de sincr escritorio
GenericName[gl]=Sincr. de cartafol

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
Icon[he]=@APPLICATION_EXECUTABLE@
Name[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
GenericName[he]=סנכרון תיקיות

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[hu_HU]=@APPLICATION_NAME@ deszktop szinkronizációs kliens
Icon[hu_HU]=@APPLICATION_ICON_NAME@
Name[hu_HU]=@APPLICATION_NAME@ deszktop szinkronizációs kliens
GenericName[hu_HU]=Mappa szinkronizáció

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
Icon[is]=@APPLICATION_EXECUTABLE@
Icon[is]=@APPLICATION_ICON_NAME@
Name[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
GenericName[is]=Samstilling á möppum

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
Icon[it]=@APPLICATION_EXECUTABLE@
Icon[it]=@APPLICATION_ICON_NAME@
Name[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
GenericName[it]=Sincronizzazione cartelle

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
Icon[ja_JP]=@APPLICATION_EXECUTABLE@
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
GenericName[ja_JP]=フォルダーを同期する

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
Icon[lt_LT]=@APPLICATION_ICON_NAME@
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
GenericName[lt_LT]=Aplankų sinchronizavimas

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
Icon[lv]=@APPLICATION_ICON_NAME@
Name[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
GenericName[lv]=Mapju Sinhronizēšana

View File

@@ -0,0 +1,203 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
Name[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
GenericName[nb_NO]=Mappe synkroinisering

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
Icon[nl]=@APPLICATION_ICON_NAME@
Name[nl]=@APPLICATION_NAME@ desktop sync client
GenericName[nl]=Map synchronisatie

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
Icon[pl]=@APPLICATION_ICON_NAME@
Name[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
GenericName[pl]=Katalog synchronizacji

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
Icon[pt_BR]=@APPLICATION_EXECUTABLE@
Icon[pt_BR]=@APPLICATION_ICON_NAME@
Name[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
GenericName[pt_BR]=Sincronizar Pasta

View File

@@ -0,0 +1,203 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
GenericName[pt_PT]=Sincronização de Pasta

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
Icon[ru]=@APPLICATION_EXECUTABLE@
Icon[ru]=@APPLICATION_ICON_NAME@
Name[ru]=@APPLICATION_NAME@ клиент для ПК
GenericName[ru]=Синхронизация папок

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[sk_SK]=@APPLICATION_NAME@ Synchronizačný klient pre PC
Icon[sk_SK]=@APPLICATION_ICON_NAME@
Name[sk_SK]=@APPLICATION_NAME@ Synchronizačný klient pre PC
GenericName[sk_SK]=Synchnonizácia priečinka

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
Icon[sl]=@APPLICATION_ICON_NAME@
Name[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
GenericName[sl]=Usklajevanje map

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
Icon[sr]=@APPLICATION_EXECUTABLE@
Icon[sr]=@APPLICATION_ICON_NAME@
Name[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
GenericName[sr]=Синхронизација фасцикли

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
Icon[tr]=@APPLICATION_EXECUTABLE@
Icon[tr]=@APPLICATION_ICON_NAME@
Name[tr]=@APPLICATION_NAME@ masaüstü eşiteme istemcisi
GenericName[tr]=Klasör Eşitleme

View File

@@ -0,0 +1,204 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
Icon[zh_CN]=@APPLICATION_ICON_NAME@
Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
GenericName[zh_CN]=文件夹同步

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -199,6 +199,5 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
Icon[zh_TW]=@APPLICATION_EXECUTABLE@
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
GenericName[zh_TW]=資料夾同步

View File

@@ -183,7 +183,7 @@ if(BUILD_CLIENT)
endif()
find_package(Sphinx)
find_package(PdfLatex)
find_package(OpenSSL REQUIRED VERSION 1.1)
find_package(OpenSSL 1.1 REQUIRED )
find_package(ZLIB REQUIRED)
find_package(GLib2)

View File

@@ -21,4 +21,4 @@ option( WITH_CRASHREPORTER "Build crashreporter" OFF )
#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE string "URL for crash reporter" )
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
option( WITH_PROVIDERS "Build with providers list" OFF )
option( WITH_PROVIDERS "Build with providers list" ON )

View File

@@ -19,7 +19,7 @@ if(APPLE)
set( CPACK_GENERATOR "DragNDrop" )
set( CPACK_SOURCE_GENERATOR "")
set( CPACK_PACKAGE_FILE_NAME ${APPLICATION_SHORTNAME}-${CPACK_PACKAGE_VERSION} )
set( CPACK_PACKAGE_ICON ${CMAKE_BINARY_DIR}/src/gui/ownCloud.icns)
set( CPACK_PACKAGE_ICON ${CMAKE_BINARY_DIR}/src/gui/${APPLICATION_ICON_NAME}.icns)
set( CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/admin/osx/DS_Store.in")
# set( CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/admin/osx/DMGBackground.png" )

View File

@@ -17,30 +17,36 @@ with your computer.
##### Clone the repo and create build directory
```
$ git clone git@github.com:nextcloud/desktop.git
$ git clone https://github.com/nextcloud/desktop.git
$ cd desktop
$ mkdir build
$ cd build
```
##### Compile and install
For development reasons it is better to install the client on user space
instead on the global system. For example you could use in the next
instructions `path-to-install-folder/` as `~/.local/` in a linux system. If
you want to install system wide you could use `/usr/local` or `/opt/nextcloud/`.
##### Linux
```
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib64/libqt5keychain.so -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
$ make install
```
##### Windows
```
$ cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
$ cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DPng2Ico_EXECUTABLE=/path-to-install-png2ico/png2ico.exe -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib/qt5keychain.lib -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
$ cmake --build . --config Debug --target install
```
##### Mac OS
```
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib/libqt5keychain.dylib -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
$ make install
```
@@ -69,6 +75,8 @@ of your report being lost. :boom:
- If you created a patch :heart_eyes:, please submit a [Pull
Request](https://github.com/nextcloud/client/pulls).
- How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
## :satellite: Contact us
@@ -99,5 +107,3 @@ https://github.com/nextcloud/desktop.
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.

View File

@@ -18,11 +18,11 @@ if [ $SUFFIX != "master" ]; then
SUFFIX="PR-$SUFFIX"
fi
#QtKeyChain 0.8.0
#QtKeyChain 0.9.1
cd /build
git clone https://github.com/frankosterfeld/qtkeychain.git
cd qtkeychain
git checkout v0.8.0
git checkout v0.9.1
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr ../

View File

@@ -1,88 +0,0 @@
Source: nextcloud-client
Section: contrib/devel
Priority: optional
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
Build-Depends: cmake,
debhelper,
cdbs,
dh-python,
extra-cmake-modules (>= 5.16),
kdelibs5-dev,
kio-dev,
libcmocka-dev,
libhttp-dav-perl,
libinotify-dev [kfreebsd-any],
libqt5webkit5-dev,
libsqlite3-dev,
libssl-dev (>> 1.0.0),
zlib1g-dev,
optipng,
pkg-kde-tools,
python-sphinx | python3-sphinx,
python3-all,
qt5keychain-dev,
qtwebengine5-dev,
qtdeclarative5-dev,
qttools5-dev,
qttools5-dev-tools,
xvfb
Standards-Version: 3.9.8
Homepage: https://github.com/nextcloud/client_theming
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
Package: nextcloud-client
Architecture: any
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, libgnome-keyring0, nextcloud-client-l10n
Description: Nextcloud desktop sync client
Use the desktop client to keep your files synchronized
between your Nextcloud server and your desktop. Select
one or more directories on your local machine and always
have access to your latest files wherever you are.
Package: libnextcloudsync0
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Nextcloud sync library
Used by the Nextcloud desktop client as the synchronization engine.
Package: libnextcloudsync-dev
Architecture: any
Section: contrib/libdevel
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
Description: Nextcloud sync library development files
The headers and development library for the Nextcloud sync library.
Package: nextcloud-client-l10n
Architecture: all
Depends: ${misc:Depends}
Description: Nextcloud client internatialization files
The translation files.
Package: nextcloud-client-nautilus
Architecture: all
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nautilus, nautilus, ${misc:Depends}
Description: Nautilus plugin for Nextcloud
This package contains a Nautilus plugin to display
synchronization status icons for Nextcloud files.
Package: nextcloud-client-nemo
Architecture: all
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo | nemo-python, nemo, ${misc:Depends}
Description: Nemo plugin for Nextcloud
This package contains a Nemo plugin to display
synchronization status icons for Nextcloud files.
Package: nextcloud-client-caja
Architecture: all
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-caja, caja, ${misc:Depends}
Description: Caja plugin for Nextcloud
This package contains a Caja plugin to display
synchronization status icons for Nextcloud files.
Package: nextcloud-client-dolphin
Architecture: any
Depends: dolphin (>= 4:15.12.1), libnextcloudsync0 (= ${binary:Version}), nextcloud-client, ${misc:Depends}, ${shlibs:Depends}
Description: Dolphin plugin for Nextcloud
This package contains a Dolphin plugin to display
synchronization status icons for Nextcloud files.

View File

@@ -13,8 +13,9 @@ Build-Depends: cmake,
libhttp-dav-perl,
libinotify-dev [kfreebsd-any],
libqt5webkit5-dev,
libqt5svg5-dev,
libsqlite3-dev,
libssl-dev (>> 1.0.0),
libssl-dev (>= 1.1.0),
zlib1g-dev,
optipng,
pkg-kde-tools,

View File

@@ -13,6 +13,7 @@ Build-Depends: cmake,
libhttp-dav-perl,
libinotify-dev [kfreebsd-any],
libqt5webkit5-dev,
libqt5svg5-dev,
libsqlite3-dev,
libssl-dev (>> 1.0.0),
zlib1g-dev,
@@ -33,7 +34,8 @@ Homepage: https://github.com/nextcloud/client_theming
Package: nextcloud-client
Architecture: any
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, libgnome-keyring0, nextcloud-client-l10n
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
Recommends: libgnome-keyring0
Description: Nextcloud desktop sync client
Use the desktop client to keep your files synchronized
between your Nextcloud server and your desktop. Select

View File

@@ -0,0 +1,11 @@
--- nextcloud-client-2.5.0.orig/CMakeLists.txt 2018-08-13 16:19:57.191634632 +0200
+++ nextcloud-client-2.5.0/CMakeLists.txt 2018-08-13 16:20:05.167612238 +0200
@@ -183,7 +183,7 @@
endif()
find_package(Sphinx)
find_package(PdfLatex)
- find_package(OpenSSL 1.1 REQUIRED )
+ find_package(OpenSSL 1.0 REQUIRED )
find_package(ZLIB REQUIRED)
find_package(GLib2)

View File

@@ -0,0 +1,40 @@
--- nextcloud-client-2.4.0.orig/src/gui/wizard/owncloudoauthcredspage.cpp
+++ nextcloud-client-2.4.0/src/gui/wizard/owncloudoauthcredspage.cpp
@@ -53,10 +53,8 @@ OwncloudOAuthCredsPage::OwncloudOAuthCredsPage()
_ui.openLinkButton->setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(_ui.openLinkButton, &QWidget::customContextMenuRequested, [this](const QPoint &pos) {
auto menu = new QMenu(_ui.openLinkButton);
- menu->addAction(tr("Copy link to clipboard"), this, [this] {
- if (_asyncAuth)
- QApplication::clipboard()->setText(_asyncAuth->authorisationLink().toString(QUrl::FullyEncoded));
- });
+ auto action = menu->addAction(tr("Copy link to clipboard"));
+ connect(action, &QAction::triggered, this, &OwncloudOAuthCredsPage::copyLinkToClipboard);
menu->setAttribute(Qt::WA_DeleteOnClose);
menu->popup(_ui.openLinkButton->mapToGlobal(pos));
});
@@ -131,4 +129,11 @@ bool OwncloudOAuthCredsPage::isComplete() const
return false; /* We can never go forward manually */
}
+void OwncloudOAuthCredsPage::copyLinkToClipboard()
+{
+ if (_asyncAuth)
+ QApplication::clipboard()->setText(_asyncAuth->authorisationLink().toString(QUrl::FullyEncoded));
+}
+
+
} // namespace OCC
--- nextcloud-client-2.4.0.orig/src/gui/wizard/owncloudoauthcredspage.h
+++ nextcloud-client-2.4.0/src/gui/wizard/owncloudoauthcredspage.h
@@ -57,6 +57,10 @@ public:
QString _refreshToken;
QScopedPointer<OAuth> _asyncAuth;
Ui_OwncloudOAuthCredsPage _ui;
+
+protected slots:
+ void copyLinkToClipboard();
+
};
} // namespace OCC

View File

@@ -8,13 +8,14 @@ Build-Depends: cmake,
dh-python,
extra-cmake-modules (>= 5.16),
kdelibs5-dev,
kio-dev,
libkf5kio-dev,
libcmocka-dev,
libhttp-dav-perl,
libinotify-dev [kfreebsd-any],
libqt5svg5-dev,
libqt5webkit5-dev,
libsqlite3-dev,
libssl-dev (>> 1.0.0),
libssl-dev (>= 1.1.0),
zlib1g-dev,
optipng,
pkg-kde-tools,
@@ -33,8 +34,7 @@ Homepage: https://github.com/nextcloud/client_theming
Package: nextcloud-client
Architecture: any
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
Recommends: libgnome-keyring0
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, libgnome-keyring0, nextcloud-client-l10n
Description: Nextcloud desktop sync client
Use the desktop client to keep your files synchronized
between your Nextcloud server and your desktop. Select

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -1,51 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 595.275 311.111"
xml:space="preserve"
height="200"
width="320"
version="1.1"
y="0px"
x="0px"
viewBox="0 0 35 0"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="installer-background.svg"><metadata
id="metadata12"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs10" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1002"
id="namedview8"
showgrid="false"
inkscape:zoom="0.734375"
inkscape:cx="-49.141255"
inkscape:cy="236.17459"
inkscape:window-x="0"
inkscape:window-y="34"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" /><path
style="text-indent:0;text-transform:none;block-progression:tb;color:#000000;fill:#ffffff;fill-opacity:1;enable-background:accumulate"
d="m 75.63384,28.421489 c -29.36582,0 -53.09172,23.724901 -53.09172,53.091701 0,12.1047 4.03087,23.2455 10.82647,32.1667 14.74225,-17.0631 36.50138,-27.8988 60.79508,-27.8988 11.88546,0 23.15644,2.6467 33.31219,7.2871 0.82221,-3.7185 1.24924,-7.5856 1.24924,-11.555 0,-29.3658 -23.72491,-53.091701 -53.09172,-53.091701 z M 6.30358,52.98809 c -15.29297,0 -27.58645,12.3977 -27.58645,27.6906 0,4.9515 1.27738,9.6301 3.53933,13.6373 9.22826,-5.206 19.89756,-8.2239 31.23002,-8.2239 1.09366,0 2.14708,0.039 3.22713,0.1052 -0.12231,-1.5502 -0.20806,-3.103 -0.20806,-4.6844 0,-8.5178 1.85002,-16.6223 5.10106,-23.9429 -4.37708,-2.9351 -9.62115,-4.5803 -15.30284,-4.5803 z m 130.95716,19.0502 c -1.12983,0 -2.21885,0.1381 -3.33122,0.2078 0.48121,3.0338 0.83274,6.097 0.83274,9.2651 0,4.9298 -0.62692,9.6869 -1.7697,14.2616 13.39754,7.4144 24.52385,18.5084 31.8547,31.9586 7.60342,-3.9586 16.08566,-6.4754 25.08804,-7.0787 -2.32015,-27.2093 -24.86184,-48.6137 -52.67416,-48.6137 z m -43.09675,19.7789 c -41.09117,0 -74.32775,33.2333 -74.32775,74.3278 0,41.0911 33.23329,74.3277 74.32775,74.3277 41.09447,0 74.32775,-33.2366 74.32775,-74.3277 0,-41.0945 -33.23657,-74.3278 -74.32775,-74.3278 z m -80.67652,0.3117 c -31.87937,0 -57.67166,25.792 -57.67166,57.6717 0,18.7668 8.94156,35.3802 22.79774,45.9078 5.84147,-11.2667 17.57406,-18.9461 31.1258,-18.9461 1.63789,0 3.21,0.1986 4.78871,0.4169 -0.49554,-3.6054 -0.72871,-7.2937 -0.72871,-11.0346 0,-17.8847 5.82174,-34.4234 15.71907,-47.7819 -5.92466,-7.4133 -10.1643,-16.321 -11.97162,-26.025 -1.33935,-0.092 -2.69673,-0.2078 -4.05979,-0.2078 z m 180.71831,34.3544 c -9.68,0 -18.74781,2.4714 -26.75364,6.6625 4.54607,10.0696 7.07867,21.2422 7.07867,32.9998 0,22.0146 -8.85114,42.0052 -23.21431,56.5275 10.5516,11.7145 25.861,19.0503 42.88961,19.0503 31.87937,0 57.67165,-25.7916 57.67165,-57.6717 0,-31.8793 -25.79195,-57.5664 -57.67165,-57.5664 z m -244.00885,7.5998 c -29.3701,0 -53.19693,23.6164 -53.19693,52.9832 0,29.3669 23.82815,53.1937 53.19364,53.1937 11.17727,0 21.53161,-3.4825 30.08487,-9.369 -3.5344,-5.492 -5.62151,-12.0581 -5.62151,-19.0503 0,-3.6291 0.53552,-7.1158 1.56148,-10.4099 -16.01267,-11.5721 -26.44131,-30.4034 -26.44131,-51.6319 0,-5.394 0.71083,-10.6098 1.97792,-15.6152 -0.52591,-0.013 -1.03171,-0.1052 -1.56152,-0.1052 z m 312.19495,45.5955 c -1.56661,0 -3.08252,0.1789 -4.58026,0.4169 0.0829,1.3242 0.1039,2.6108 0.1039,3.9559 0,16.9326 -6.68118,32.3015 -17.4889,43.7214 5.31706,6.1831 13.12695,10.0976 21.96526,10.0976 16.09849,0 29.14785,-12.9451 29.14785,-29.0439 0,-16.0985 -13.04936,-29.1479 -29.14785,-29.1479 z m -252.64924,3.1229 c -16.09783,0 -29.04395,12.9461 -29.04395,29.044 0,16.0978 12.94612,29.1478 29.04395,29.1478 12.33919,0 22.81287,-7.6994 27.06599,-18.5298 -10.378,-10.57 -17.83675,-24.0544 -21.13213,-39.0363 -1.92854,-0.3985 -3.88588,-0.6247 -5.93386,-0.6247 z"
id="path6"
inkscape:connector-curvature="0" /></svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xml:space="preserve" height="200" width="320" enable-background="new 0 0 595.275 311.111" y="0px" x="0px" viewBox="0 0 35 0"><path style="color-rendering:auto;text-decoration-color:#000000;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;block-progression:tb;text-decoration-line:none;image-rendering:auto;white-space:normal;text-indent:0;enable-background:accumulate;text-transform:none;text-decoration-style:solid" d="m100.3 47.902c-41.68 0.003-76.667 28.536-87.36 66.923-9.3312-20.531-29.874-35.082-53.741-35.083-32.488 0.003-59.2 26.715-59.203 59.203-0.0058 32.494 26.709 59.213 59.203 59.216 23.869-0.003 44.397-14.562 53.728-35.096 10.691 38.4 45.696 66.94 87.372 66.94 41.446 0.003 76.269-28.226 87.178-66.288 9.4834 20.154 29.709 34.446 53.302 34.45 32.501 0.006 59.221-26.715 59.216-59.216-0.003-32.494-26.722-59.21-59.216-59.203-23.594 0.003-43.832 14.293-53.314 34.45-10.896-38.064-45.712-66.293-87.152-66.29zm0 34.754c31.298-0.002 56.298 24.992 56.301 56.29 0.002 31.301-25 56.304-56.301 56.301-31.296-0.002-56.291-25.003-56.288-56.301 0.003-31.294 24.992-56.286 56.288-56.29zm-141.1 31.84c13.71 0.002 24.448 10.74 24.45 24.45 0.0024 13.713-10.736 24.461-24.45 24.462-13.713-0.002-24.453-10.749-24.45-24.462 0.0016-13.71 10.74-24.448 24.45-24.45zm281.58 0c13.713-0.002 24.461 10.736 24.462 24.45 0.003 13.716-10.745 24.464-24.462 24.462-13.713-0.002-24.453-10.749-24.45-24.462 0.002-13.71 10.74-24.448 24.45-24.45z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -36,6 +36,7 @@
<file>resources/public.svg</file>
<file>resources/confirm.svg</file>
<file>resources/copy.svg</file>
<file>resources/state-sync.svg</file>
</qresource>
<qresource prefix="/"/>
</RCC>

View File

@@ -45,6 +45,9 @@ macro (KDE4_ADD_APP_ICON appsources pattern)
if (fn MATCHES ".*128.*" )
list (APPEND _icons ${it})
endif (fn MATCHES ".*128.*")
if (fn MATCHES ".*256.*" )
list (APPEND _icons ${it})
endif (fn MATCHES ".*256.*")
endforeach (it)
if (_icons)
add_custom_command(OUTPUT ${_outfilename}.ico ${_outfilename}.rc

View File

@@ -168,7 +168,8 @@ function(ecm_add_app_icon appsources)
${icons_at_32px}
${icons_at_48px}
${icons_at_64px}
${icons_at_128px})
${icons_at_128px}
${icons_at_256px})
if (NOT windows_icons)
message(AUTHOR_WARNING "No icons suitable for use on Windows provided")
endif()

View File

@@ -11,7 +11,7 @@
<key>CFBundleExecutable</key>
<string>@APPLICATION_EXECUTABLE@</string>
<key>CFBundleIconFile</key>
<string>ownCloud.icns</string>
<string>@APPLICATION_ICON_NAME@.icns</string>
<key>CFBundleIdentifier</key>
<string>@APPLICATION_REV_DOMAIN@</string>
<key>CFBundleInfoDictionaryVersion</key>

View File

@@ -16,6 +16,8 @@ if(SPHINX_FOUND)
install(DIRECTORY ${SPHINX_PDF_DIR} DESTINATION ${APPLICATION_DOC_DIR} OPTIONAL)
install(DIRECTORY ${SPHINX_QCH_DIR} DESTINATION ${APPLICATION_DOC_DIR} OPTIONAL)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/conf.py" conf.py COPYONLY)
if(WITH_DOC)
add_custom_target(doc ALL DEPENDS doc-html COMMENT "Building documentation...")
else(WITH_DOC)

View File

@@ -21,6 +21,25 @@ When a deeply nested directory is excluded from synchronization it will be
listed with other ignored files and directories in the "Not synced" tab of
the "Activity" pane.
There Was A Warning About Changes In Synchronized Folders Not Being Tracked Reliably.
-------------------------------------------------------------------------------------
On linux when the synchronized folder contains very many subfolders the
operating system may not allow for enough inotify watches to monitor the
changes in all of them.
In this case the client will not be able to immediately start the
synchronization process when a file in one of the unmonitored folders changes.
Instead, the client will show the warning and manually scan folders for changes
in a regular interval (two hours by default).
This problem can be solved by setting the fs.inotify.max_user_watches
sysctl to a higher value. This can usually be done either temporarily::
echo 524288 > /proc/sys/fs/inotify/max_user_watches
or permanently by adjusting ``/etc/sysctl.conf``.
I Want To Move My Local Sync Folder
-----------------------------------

View File

@@ -24,7 +24,9 @@ The other options are:
``--logflush``
Clears (flushes) the log file after each write action.
``--logdebug``
Also output debug-level messages in the log (equivalent to setting the env var QT_LOGGING_RULES="qt.*=true;*.debug=true").
)
``--confdir`` `<dirname>`
Uses the specified configuration directory.

View File

@@ -5,7 +5,7 @@ Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
@@ -198,185 +198,185 @@ X-GNOME-Autostart-Delay=3
Comment[oc]=@APPLICATION_NAME@ sincronizacion del client
GenericName[oc]=Dorsièr de Sincronizacion
Name[oc]=@APPLICATION_NAME@ sincronizacion del client
Icon[oc]=@APPLICATION_EXECUTABLE@
Icon[oc]=@APPLICATION_ICON_NAME@
Comment[ar]=@APPLICATION_NAME@ زبون مزامنة مكتبي
GenericName[ar]=مزامنة المجلد
Name[ar]=@APPLICATION_NAME@ زبون مزامنة مكتبي
Icon[ar]=@APPLICATION_EXECUTABLE@
Icon[ar]=@APPLICATION_ICON_NAME@
Comment[bg_BG]=@APPLICATION_NAME@ клиент за десктоп синхронизация
GenericName[bg_BG]=Синхронизиране на папката
Name[bg_BG]=@APPLICATION_NAME@ клиент десктоп синхронизация
Icon[bg_BG]=@APPLICATION_EXECUTABLE@
Icon[bg_BG]=@APPLICATION_ICON_NAME@
Comment[ca]=Client de sincronització d'escriptori @APPLICATION_NAME@
GenericName[ca]=Sincronització de carpetes
Name[ca]=Client de sincronització d'escriptori @APPLICATION_NAME@
Icon[ca]=@APPLICATION_EXECUTABLE@
Icon[ca]=@APPLICATION_ICON_NAME@
Comment[da]=@APPLICATION_NAME@ skrivebordsklient til synkronisering
GenericName[da]=Mappesynkronisering
Name[da]=@APPLICATION_NAME@ skrivebordsklient til synk
Icon[da]=@APPLICATION_EXECUTABLE@
Icon[da]=@APPLICATION_ICON_NAME@
Comment[de]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
GenericName[de]=Ordner-Synchronisation
Name[de]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
Icon[de]=@APPLICATION_EXECUTABLE@
Icon[de]=@APPLICATION_ICON_NAME@
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
GenericName[ja_JP]=フォルダー同期
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
Icon[ja_JP]=@APPLICATION_EXECUTABLE@
Icon[ja_JP]=@APPLICATION_ICON_NAME@
Comment[el]=@ΟΝΟΜΑ_ΕΦΑΡΜΟΓΗΣ@ συγχρονισμός επιφάνειας εργασίας πελάτη
GenericName[el]=Συγχρονισμός φακέλου
Name[el]=@ΟΝΟΜΑ_ΕΦΑΡΜΟΓΗΣ@ συγχρονισμός επιφάνειας εργασίας πελάτη
Icon[el]=@APPLICATION_EXECUTABLE@
Icon[el]=@APPLICATION_ICON_NAME@
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
GenericName[en_GB]=Folder Sync
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
Icon[en_GB]=@APPLICATION_EXECUTABLE@
Icon[en_GB]=@APPLICATION_ICON_NAME@
Comment[es]=@APPLICATION_NAME@ cliente de sincronización de escritorio
GenericName[es]=Sincronización de carpeta
Name[es]=@APPLICATION_NAME@ cliente de sincronización de escritorio
Icon[es]=@APPLICATION_EXECUTABLE@
Icon[es]=@APPLICATION_ICON_NAME@
Comment[de_DE]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
GenericName[de_DE]=Ordner-Synchronisation
Name[de_DE]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
Icon[de_DE]=@APPLICATION_EXECUTABLE@
Icon[de_DE]=@APPLICATION_ICON_NAME@
Comment[eu]=@APPLICATION_NAME@ mahaigaineko sinkronizazio bezeroa
GenericName[eu]=Karpetaren sinkronizazioa
Name[eu]=@APPLICATION_NAME@ mahaigaineko sinkronizazio bezeroa
Icon[eu]=@APPLICATION_EXECUTABLE@
Icon[eu]=@APPLICATION_ICON_NAME@
GenericName[fa]=همسان سازی پوشه‌ها
Name[fa]=@APPLICATION_EXECUTABLE@ نسخه‌ی همسان سازی مشتری
Icon[fa]=@APPLICATION_EXECUTABLE@
Icon[fa]=@APPLICATION_ICON_NAME@
Comment[fr]=Synchronisez vos dossiers avec un serveur @APPLICATION_NAME@
GenericName[fr]=Synchronisation de dossier
Name[fr]=Client de synchronisation @APPLICATION_NAME@
Icon[fr]=@APPLICATION_EXECUTABLE@
Icon[fr]=@APPLICATION_ICON_NAME@
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
GenericName[gl]=Sincronizar Cartafol
Name[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
Icon[gl]=@APPLICATION_EXECUTABLE@
Icon[gl]=@APPLICATION_ICON_NAME@
Comment[he]=@APPLICATION_NAME@ לקוח סנכון שולחן עבודה
GenericName[he]=סנכון תיקייה
Name[he]=@APPLICATION_NAME@ לקוח סנכרון שולחן עבודה
Icon[he]=@APPLICATION_EXECUTABLE@
Icon[he]=@APPLICATION_ICON_NAME@
Comment[ia]=@APPLICATION_NAME@ cliente de synchronisation pro scriptorio
GenericName[ia]=Synchronisar Dossier
Name[ia]=@APPLICATION_NAME@ cliente de synchronisation pro scriptorio
Icon[ia]=@APPLICATION_EXECUTABLE@
Icon[ia]=@APPLICATION_ICON_NAME@
Comment[id]=Klien sinkronisasi desktop @APPLICATION_NAME@
GenericName[id]=Folder Sync
Name[id]=Klien sync desktop @APPLICATION_NAME@
Icon[id]=@APPLICATION_EXECUTABLE@
Icon[id]=@APPLICATION_ICON_NAME@
Comment[is]=@APPLICATION_NAME@ skjáborðsforrit samstillingar
GenericName[is]=Samstilling möppu
Name[is]=@APPLICATION_NAME@ skjáborðsforrit samstillingar
Icon[is]=@APPLICATION_EXECUTABLE@
Icon[is]=@APPLICATION_ICON_NAME@
Comment[it]=Client di sincronizzazione del desktop di @APPLICATION_NAME@
GenericName[it]=Sincronizzazione cartella
Name[it]=Client di sincronizzazione del desktop di @APPLICATION_NAME@
Icon[it]=@APPLICATION_EXECUTABLE@
Icon[it]=@APPLICATION_ICON_NAME@
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
GenericName[ko]=폴더 동기화
Name[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
Icon[ko]=@APPLICATION_EXECUTABLE@
Icon[ko]=@APPLICATION_ICON_NAME@
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizációs kliens
GenericName[hu_HU]=Könyvtár szinkronizálás
Name[hu_HU]=@APPLICATION_NAME@ asztali szinkr. kliens
Icon[hu_HU]=@APPLICATION_EXECUTABLE@
Icon[hu_HU]=@APPLICATION_ICON_NAME@
Comment[af_ZA]=@APPLICATION_NAME@ werkskermsinchroniseerkliënt
GenericName[af_ZA]=Vouersinchronisering
Name[af_ZA]=@APPLICATION_NAME@ werkskermsinchroniseerkliënt
Icon[af_ZA]=@APPLICATION_EXECUTABLE@
Icon[af_ZA]=@APPLICATION_ICON_NAME@
Comment[nl]=@APPLICATION_NAME@ desktop synchronisatie client
GenericName[nl]=Mappen sync
Name[nl]=@APPLICATION_NAME@ desktop sync client
Icon[nl]=@APPLICATION_EXECUTABLE@
Icon[nl]=@APPLICATION_ICON_NAME@
Comment[et_EE]=@APPLICATION_NAME@ sünkroonimise klient töölauale
GenericName[et_EE]=Kaustade sünkroonimine
Name[et_EE]=@APPLICATION_NAME@ sünkroonimise klient töölauale
Icon[et_EE]=@APPLICATION_EXECUTABLE@
Icon[et_EE]=@APPLICATION_ICON_NAME@
Comment[pl]=@APPLICATION_NAME@ klient synchronizacji dla komputerów stacjonarnych
GenericName[pl]=Folder Synchronizacji
Name[pl]=@APPLICATION_NAME@ klient synchronizacji dla komputerów stacjonarnych
Icon[pl]=@APPLICATION_EXECUTABLE@
Icon[pl]=@APPLICATION_ICON_NAME@
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização do computador
GenericName[pt_BR]=Sincronização de Pasta
Name[pt_BR]=@APPLICATION_NAME@ cliente de sincronização de desktop
Icon[pt_BR]=@APPLICATION_EXECUTABLE@
Icon[pt_BR]=@APPLICATION_ICON_NAME@
Comment[cs_CZ]=@APPLICATION_NAME@ počítačový synchronizační klient
GenericName[cs_CZ]=Synchronizace adresáře
Name[cs_CZ]=@APPLICATION_NAME@ počítačový synchronizační klient
Icon[cs_CZ]=@APPLICATION_EXECUTABLE@
Icon[cs_CZ]=@APPLICATION_ICON_NAME@
Comment[ru]=Настольный клиент синхронизации @APPLICATION_NAME@
GenericName[ru]=Синхронизация каталогов
Name[ru]=Настольный клиент синхронизации @APPLICATION_NAME@
Icon[ru]=@APPLICATION_EXECUTABLE@
Icon[ru]=@APPLICATION_ICON_NAME@
Comment[sl]=@APPLICATION_NAME@ Program za usklajevanje datotek z namizjem
GenericName[sl]=Usklajevanje map
Name[sl]=@APPLICATION_NAME@ Program za usklajevanje datotek z namizjem
Icon[sl]=@APPLICATION_EXECUTABLE@
Icon[sl]=@APPLICATION_ICON_NAME@
Comment[sq]=Klient njëkohësimesh @APPLICATION_NAME@ për desktop
GenericName[sq]=Njëkohësim Dosjesh
Name[sq]=Klient njëkohësimesh @APPLICATION_NAME@ për desktop
Icon[sq]=@APPLICATION_EXECUTABLE@
Icon[sq]=@APPLICATION_ICON_NAME@
Comment[fi_FI]=@APPLICATION_NAME@ työpöytäsynkronointisovellus
GenericName[fi_FI]=Kansion synkronointi
Name[fi_FI]=@APPLICATION_NAME@ työpöytäsynkronointisovellus
Icon[fi_FI]=@APPLICATION_EXECUTABLE@
Icon[fi_FI]=@APPLICATION_ICON_NAME@
Comment[sv]=@APPLICATION_NAME@ desktop synkroniseringsklient
GenericName[sv]=Mappsynk
Name[sv]=@APPLICATION_NAME@ desktop synk-klient
Icon[sv]=@APPLICATION_EXECUTABLE@
Icon[sv]=@APPLICATION_ICON_NAME@
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
GenericName[tr]=Dosya Eşitleme
Name[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
Icon[tr]=@APPLICATION_EXECUTABLE@
Icon[tr]=@APPLICATION_ICON_NAME@
Comment[uk]=Настільний клієнт синхронізації @APPLICATION_NAME@
GenericName[uk]=Синхронізація теки
Name[uk]=Настільний клієнт синхронізації @APPLICATION_NAME@
Icon[uk]=@APPLICATION_EXECUTABLE@
Icon[uk]=@APPLICATION_ICON_NAME@
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pe desktop
GenericName[ro]=Sincronizare director
Name[ro]=@APPLICATION_NAME@ client de sincronizare pe desktop
Icon[ro]=@APPLICATION_EXECUTABLE@
Icon[ro]=@APPLICATION_ICON_NAME@
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
GenericName[zh_CN]=文件夹同步
Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
Icon[zh_CN]=@APPLICATION_EXECUTABLE@
Icon[zh_CN]=@APPLICATION_ICON_NAME@
Comment[zh_HK]=桌面版同步客户端
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
GenericName[zh_TW]=資料夾同步
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
Icon[zh_TW]=@APPLICATION_EXECUTABLE@
Icon[zh_TW]=@APPLICATION_ICON_NAME@
Comment[es_AR]=Cliente de sincronización para escritorio @APPLICATION_NAME@
GenericName[es_AR]=Sincronización de directorio
Name[es_AR]=Cliente de sincronización para escritorio @APPLICATION_NAME@
Icon[es_AR]=@APPLICATION_EXECUTABLE@
Icon[es_AR]=@APPLICATION_ICON_NAME@
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo programa
GenericName[lt_LT]=Katalogo sinchnorizacija
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio programa
Icon[lt_LT]=@APPLICATION_EXECUTABLE@
Icon[lt_LT]=@APPLICATION_ICON_NAME@
Comment[th_TH]=@APPLICATION_NAME@ ไคลเอนต์ประสานข้อมูลเดสก์ท็อป
GenericName[th_TH]=ประสานข้อมูลโฟลเดอร์
Name[th_TH]= @APPLICATION_NAME@ ไคลเอนต์ประสานข้อมูลเดสก์ท็อป
Icon[th_TH]=@APPLICATION_EXECUTABLE@
Icon[th_TH]=@APPLICATION_ICON_NAME@
Comment[es_MX]=Cliente de escritorio para sincronziación de @APPLICATION_NAME@
GenericName[es_MX]=Sincronización de Carpetas
Name[es_MX]=Cliente de escritorio para sincronziación de @APPLICATION_NAME@
Icon[es_MX]=@APPLICATION_EXECUTABLE@
Icon[es_MX]=@APPLICATION_ICON_NAME@
Comment[nb_NO]=@APPLICATION_NAME@ skrivebordssynkroniseringsklient
GenericName[nb_NO]=Mappesynkronisering
Name[nb_NO]=@APPLICATION_NAME@ skrivebordssynkroniseringsklient
Icon[nb_NO]=@APPLICATION_EXECUTABLE@
Icon[nb_NO]=@APPLICATION_ICON_NAME@
Comment[nn_NO]=@APPLICATION_NAME@ klient for å synkronisera frå skrivebord
GenericName[nn_NO]=Mappe synkronisering
Name[nn_NO]=@APPLICATION_NAME@ klient for å synkronisera frå skrivebord
Icon[nn_NO]=@APPLICATION_EXECUTABLE@
Icon[nn_NO]=@APPLICATION_ICON_NAME@
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização para PC
GenericName[pt_PT]=Sincronizar Pasta
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização para PC
Icon[pt_PT]=@APPLICATION_EXECUTABLE@
Icon[km]=@APPLICATION_EXECUTABLE@
Icon[pt_PT]=@APPLICATION_ICON_NAME@
Icon[km]=@APPLICATION_ICON_NAME@
Comment[lb]=@APPLICATION_NAME@ Desktop Synchronisatioun Client
GenericName[lb]=Dossier Dync
Name[lb]=@APPLICATION_NAME@ Desktop Sync Client
Icon[lb]=@APPLICATION_EXECUTABLE@
Icon[lb]=@APPLICATION_ICON_NAME@

1
resources/state-sync.svg Normal file
View File

@@ -0,0 +1 @@
<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.87498 0 0 .87498 .26458 -255.9)"><circle cx="2.1167" cy="294.88" r="2.1167" fill="#2268ab" stroke-width=".25066"/><g fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="m3.0714 295.43a1.1024 1.1024 0 0 1-0.95473 0.55121 1.1024 1.1024 0 0 1-0.95473-0.55121" stroke="#fff" stroke-width=".44097"/><path transform="scale(-1)" d="m-1.1619-294.33a1.1024 1.1024 0 0 1-0.95473 0.55122 1.1024 1.1024 0 0 1-0.95473-0.55122" stroke="#fff" stroke-width=".44097"/><path d="m1.4349 295.15-0.52538-4e-5 1.138e-4 0.52563" stroke="#faffff" stroke-width=".52916"/><path d="m2.815 294.62 0.52538 4e-5 -1.138e-4 -0.52563" stroke="#faffff" stroke-width=".52916"/></g></g></svg>

After

Width:  |  Height:  |  Size: 800 B

View File

@@ -63,7 +63,7 @@ class SocketConnect(GObject.GObject):
self._watch_id = 0
self._sock = None
self._listeners = [self._update_registered_paths, self._get_version]
self._remainder = ''.encode()
self._remainder = ''.encode() if python3 else ''
self.protocolVersion = '1.0'
self.nautilusVFSFile_table = {} # not needed in this object actually but shared
# all over the other objects.
@@ -82,7 +82,7 @@ class SocketConnect(GObject.GObject):
# print("Server command: " + cmd)
if self.connected:
try:
self._sock.send(cmd.encode())
self._sock.send(cmd.encode() if python3 else cmd)
except:
print("Sending failed.")
self.reconnect()
@@ -134,7 +134,8 @@ class SocketConnect(GObject.GObject):
return []
data = self._remainder[:end]
self._remainder = self._remainder[end+1:]
return data.decode().split('\n')
data = data.decode() if python3 else data
return data.split('\n')
# Notify is the raw answer from the socket
def _handle_notify(self, source, condition):
@@ -233,7 +234,7 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
def ask_for_menu_items(self, files):
record_separator = '\x1e'
filesstring = record_separator.join(files)
socketConnect.sendCommand('GET_MENU_ITEMS:{}\n'.format(filesstring))
socketConnect.sendCommand(u'GET_MENU_ITEMS:{}\n'.format(filesstring))
done = False
start = time.time()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -123,9 +123,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
#define SQLITE_VERSION "3.23.1"
#define SQLITE_VERSION_NUMBER 3023001
#define SQLITE_SOURCE_ID "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
#define SQLITE_VERSION "3.24.0"
#define SQLITE_VERSION_NUMBER 3024000
#define SQLITE_SOURCE_ID "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -504,6 +504,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30<<8))
#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8))
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
#define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8))
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
#define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2<<8))
#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
@@ -511,6 +512,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
#define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4<<8))
#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
#define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2<<8))
#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
@@ -1930,6 +1932,22 @@ struct sqlite3_mem_methods {
** I/O required to support statement rollback.
** The default value for this setting is controlled by the
** [SQLITE_STMTJRNL_SPILL] compile-time option.
**
** [[SQLITE_CONFIG_SORTERREF_SIZE]]
** <dt>SQLITE_CONFIG_SORTERREF_SIZE
** <dd>The SQLITE_CONFIG_SORTERREF_SIZE option accepts a single parameter
** of type (int) - the new value of the sorter-reference size threshold.
** Usually, when SQLite uses an external sort to order records according
** to an ORDER BY clause, all fields required by the caller are present in the
** sorted records. However, if SQLite determines based on the declared type
** of a table column that its values are likely to be very large - larger
** than the configured sorter-reference size threshold - then a reference
** is stored in each sorted record and the required column values loaded
** from the database as records are returned in sorted order. The default
** value for this option is to never use this optimization. Specifying a
** negative value for this option restores the default behaviour.
** This option is only available if SQLite is compiled with the
** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option.
** </dl>
*/
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
@@ -1959,6 +1977,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */
#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
/*
** CAPI3REF: Database Connection Configuration Options
@@ -2095,6 +2114,21 @@ struct sqlite3_mem_methods {
** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if
** it is not disabled, 1 if it is.
** </dd>
**
** <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
** [VACUUM] in order to reset a database back to an empty database
** with no schema and no content. The following process works even for
** a badly corrupted database file:
** <ol>
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
** <li> [sqlite3_exec](db, "[VACUUM]", 0, 0, 0);
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
** </ol>
** Because resetting a database is destructive and irreversible, the
** process requires the use of this obscure API and multiple steps to help
** ensure that it does not happen by accident.
** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -2106,7 +2140,8 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
#define SQLITE_DBCONFIG_MAX 1008 /* Largest DBCONFIG */
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_MAX 1009 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
@@ -5492,6 +5527,41 @@ SQLITE_API SQLITE_EXTERN char *sqlite3_temp_directory;
*/
SQLITE_API SQLITE_EXTERN char *sqlite3_data_directory;
/*
** CAPI3REF: Win32 Specific Interface
**
** These interfaces are available only on Windows. The
** [sqlite3_win32_set_directory] interface is used to set the value associated
** with the [sqlite3_temp_directory] or [sqlite3_data_directory] variable, to
** zValue, depending on the value of the type parameter. The zValue parameter
** should be NULL to cause the previous value to be freed via [sqlite3_free];
** a non-NULL value will be copied into memory obtained from [sqlite3_malloc]
** prior to being used. The [sqlite3_win32_set_directory] interface returns
** [SQLITE_OK] to indicate success, [SQLITE_ERROR] if the type is unsupported,
** or [SQLITE_NOMEM] if memory could not be allocated. The value of the
** [sqlite3_data_directory] variable is intended to act as a replacement for
** the current directory on the sub-platforms of Win32 where that concept is
** not present, e.g. WinRT and UWP. The [sqlite3_win32_set_directory8] and
** [sqlite3_win32_set_directory16] interfaces behave exactly the same as the
** sqlite3_win32_set_directory interface except the string parameter must be
** UTF-8 or UTF-16, respectively.
*/
SQLITE_API int sqlite3_win32_set_directory(
unsigned long type, /* Identifier for directory being set or reset */
void *zValue /* New value for directory being set or reset */
);
SQLITE_API int sqlite3_win32_set_directory8(unsigned long type, const char *zValue);
SQLITE_API int sqlite3_win32_set_directory16(unsigned long type, const void *zValue);
/*
** CAPI3REF: Win32 Directory Types
**
** These macros are only available on Windows. They define the allowed values
** for the type argument to the [sqlite3_win32_set_directory] interface.
*/
#define SQLITE_WIN32_DATA_DIRECTORY_TYPE 1
#define SQLITE_WIN32_TEMP_DIRECTORY_TYPE 2
/*
** CAPI3REF: Test For Auto-Commit Mode
** KEYWORDS: {autocommit mode}
@@ -6224,6 +6294,10 @@ struct sqlite3_index_info {
/*
** CAPI3REF: Virtual Table Scan Flags
**
** Virtual table implementations are allowed to set the
** [sqlite3_index_info].idxFlags field to some combination of
** these bits.
*/
#define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */
@@ -6999,7 +7073,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_ALWAYS 13
#define SQLITE_TESTCTRL_RESERVE 14
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
#define SQLITE_TESTCTRL_ISKEYWORD 16
#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
@@ -7013,6 +7087,189 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */
/*
** CAPI3REF: SQL Keyword Checking
**
** These routines provide access to the set of SQL language keywords
** recognized by SQLite. Applications can uses these routines to determine
** whether or not a specific identifier needs to be escaped (for example,
** by enclosing in double-quotes) so as not to confuse the parser.
**
** The sqlite3_keyword_count() interface returns the number of distinct
** keywords understood by SQLite.
**
** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
** makes *Z point to that keyword expressed as UTF8 and writes the number
** of bytes in the keyword into *L. The string that *Z points to is not
** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
** SQLITE_OK if N is within bounds and SQLITE_ERROR if not. If either Z
** or L are NULL or invalid pointers then calls to
** sqlite3_keyword_name(N,Z,L) result in undefined behavior.
**
** The sqlite3_keyword_check(Z,L) interface checks to see whether or not
** the L-byte UTF8 identifier that Z points to is a keyword, returning non-zero
** if it is and zero if not.
**
** The parser used by SQLite is forgiving. It is often possible to use
** a keyword as an identifier as long as such use does not result in a
** parsing ambiguity. For example, the statement
** "CREATE TABLE BEGIN(REPLACE,PRAGMA,END);" is accepted by SQLite, and
** creates a new table named "BEGIN" with three columns named
** "REPLACE", "PRAGMA", and "END". Nevertheless, best practice is to avoid
** using keywords as identifiers. Common techniques used to avoid keyword
** name collisions include:
** <ul>
** <li> Put all identifier names inside double-quotes. This is the official
** SQL way to escape identifier names.
** <li> Put identifier names inside &#91;...&#93;. This is not standard SQL,
** but it is what SQL Server does and so lots of programmers use this
** technique.
** <li> Begin every identifier with the letter "Z" as no SQL keywords start
** with "Z".
** <li> Include a digit somewhere in every identifier name.
** </ul>
**
** Note that the number of keywords understood by SQLite can depend on
** compile-time options. For example, "VACUUM" is not a keyword if
** SQLite is compiled with the [-DSQLITE_OMIT_VACUUM] option. Also,
** new keywords may be added to future releases of SQLite.
*/
SQLITE_API int sqlite3_keyword_count(void);
SQLITE_API int sqlite3_keyword_name(int,const char**,int*);
SQLITE_API int sqlite3_keyword_check(const char*,int);
/*
** CAPI3REF: Dynamic String Object
** KEYWORDS: {dynamic string}
**
** An instance of the sqlite3_str object contains a dynamically-sized
** string under construction.
**
** The lifecycle of an sqlite3_str object is as follows:
** <ol>
** <li> ^The sqlite3_str object is created using [sqlite3_str_new()].
** <li> ^Text is appended to the sqlite3_str object using various
** methods, such as [sqlite3_str_appendf()].
** <li> ^The sqlite3_str object is destroyed and the string it created
** is returned using the [sqlite3_str_finish()] interface.
** </ol>
*/
typedef struct sqlite3_str sqlite3_str;
/*
** CAPI3REF: Create A New Dynamic String Object
** CONSTRUCTOR: sqlite3_str
**
** ^The [sqlite3_str_new(D)] interface allocates and initializes
** a new [sqlite3_str] object. To avoid memory leaks, the object returned by
** [sqlite3_str_new()] must be freed by a subsequent call to
** [sqlite3_str_finish(X)].
**
** ^The [sqlite3_str_new(D)] interface always returns a pointer to a
** valid [sqlite3_str] object, though in the event of an out-of-memory
** error the returned object might be a special singleton that will
** silently reject new text, always return SQLITE_NOMEM from
** [sqlite3_str_errcode()], always return 0 for
** [sqlite3_str_length()], and always return NULL from
** [sqlite3_str_finish(X)]. It is always safe to use the value
** returned by [sqlite3_str_new(D)] as the sqlite3_str parameter
** to any of the other [sqlite3_str] methods.
**
** The D parameter to [sqlite3_str_new(D)] may be NULL. If the
** D parameter in [sqlite3_str_new(D)] is not NULL, then the maximum
** length of the string contained in the [sqlite3_str] object will be
** the value set for [sqlite3_limit](D,[SQLITE_LIMIT_LENGTH]) instead
** of [SQLITE_MAX_LENGTH].
*/
SQLITE_API sqlite3_str *sqlite3_str_new(sqlite3*);
/*
** CAPI3REF: Finalize A Dynamic String
** DESTRUCTOR: sqlite3_str
**
** ^The [sqlite3_str_finish(X)] interface destroys the sqlite3_str object X
** and returns a pointer to a memory buffer obtained from [sqlite3_malloc64()]
** that contains the constructed string. The calling application should
** pass the returned value to [sqlite3_free()] to avoid a memory leak.
** ^The [sqlite3_str_finish(X)] interface may return a NULL pointer if any
** errors were encountered during construction of the string. ^The
** [sqlite3_str_finish(X)] interface will also return a NULL pointer if the
** string in [sqlite3_str] object X is zero bytes long.
*/
SQLITE_API char *sqlite3_str_finish(sqlite3_str*);
/*
** CAPI3REF: Add Content To A Dynamic String
** METHOD: sqlite3_str
**
** These interfaces add content to an sqlite3_str object previously obtained
** from [sqlite3_str_new()].
**
** ^The [sqlite3_str_appendf(X,F,...)] and
** [sqlite3_str_vappendf(X,F,V)] interfaces uses the [built-in printf]
** functionality of SQLite to append formatted text onto the end of
** [sqlite3_str] object X.
**
** ^The [sqlite3_str_append(X,S,N)] method appends exactly N bytes from string S
** onto the end of the [sqlite3_str] object X. N must be non-negative.
** S must contain at least N non-zero bytes of content. To append a
** zero-terminated string in its entirety, use the [sqlite3_str_appendall()]
** method instead.
**
** ^The [sqlite3_str_appendall(X,S)] method appends the complete content of
** zero-terminated string S onto the end of [sqlite3_str] object X.
**
** ^The [sqlite3_str_appendchar(X,N,C)] method appends N copies of the
** single-byte character C onto the end of [sqlite3_str] object X.
** ^This method can be used, for example, to add whitespace indentation.
**
** ^The [sqlite3_str_reset(X)] method resets the string under construction
** inside [sqlite3_str] object X back to zero bytes in length.
**
** These methods do not return a result code. ^If an error occurs, that fact
** is recorded in the [sqlite3_str] object and can be recovered by a
** subsequent call to [sqlite3_str_errcode(X)].
*/
SQLITE_API void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...);
SQLITE_API void sqlite3_str_vappendf(sqlite3_str*, const char *zFormat, va_list);
SQLITE_API void sqlite3_str_append(sqlite3_str*, const char *zIn, int N);
SQLITE_API void sqlite3_str_appendall(sqlite3_str*, const char *zIn);
SQLITE_API void sqlite3_str_appendchar(sqlite3_str*, int N, char C);
SQLITE_API void sqlite3_str_reset(sqlite3_str*);
/*
** CAPI3REF: Status Of A Dynamic String
** METHOD: sqlite3_str
**
** These interfaces return the current status of an [sqlite3_str] object.
**
** ^If any prior errors have occurred while constructing the dynamic string
** in sqlite3_str X, then the [sqlite3_str_errcode(X)] method will return
** an appropriate error code. ^The [sqlite3_str_errcode(X)] method returns
** [SQLITE_NOMEM] following any out-of-memory error, or
** [SQLITE_TOOBIG] if the size of the dynamic string exceeds
** [SQLITE_MAX_LENGTH], or [SQLITE_OK] if there have been no errors.
**
** ^The [sqlite3_str_length(X)] method returns the current length, in bytes,
** of the dynamic string under construction in [sqlite3_str] object X.
** ^The length returned by [sqlite3_str_length(X)] does not include the
** zero-termination byte.
**
** ^The [sqlite3_str_value(X)] method returns a pointer to the current
** content of the dynamic string under construction in X. The value
** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X
** and might be freed or altered by any subsequent method on the same
** [sqlite3_str] object. Applications must not used the pointer returned
** [sqlite3_str_value(X)] after any subsequent method call on the same
** object. ^Applications may change the content of the string returned
** by [sqlite3_str_value(X)] as long as they do not write into any bytes
** outside the range of 0 to [sqlite3_str_length(X)] and do not read or
** write any byte after any subsequent sqlite3_str method call.
*/
SQLITE_API int sqlite3_str_errcode(sqlite3_str*);
SQLITE_API int sqlite3_str_length(sqlite3_str*);
SQLITE_API char *sqlite3_str_value(sqlite3_str*);
/*
** CAPI3REF: SQLite Runtime Status
**
@@ -8282,11 +8539,11 @@ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
** method of a [virtual table], then it returns true if and only if the
** column is being fetched as part of an UPDATE operation during which the
** column value will not change. Applications might use this to substitute
** a lighter-weight value to return that the corresponding [xUpdate] method
** understands as a "no-change" value.
** a return value that is less expensive to compute and that the corresponding
** [xUpdate] method understands as a "no-change" value.
**
** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that
** the column is not changed by the UPDATE statement, they the xColumn
** the column is not changed by the UPDATE statement, then the xColumn
** method can optionally return without setting a result, without calling
** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces].
** In that case, [sqlite3_value_nochange(X)] will return true for the
@@ -8781,7 +9038,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const c
** been a prior call to [sqlite3_deserialize(D,S,...)] with the same
** values of D and S.
** The size of the database is written into *P even if the
** SQLITE_SERIALIZE_NOCOPY bit is set but no contigious copy
** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy
** of the database exists.
**
** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the

View File

@@ -319,7 +319,7 @@ int main(int argc, char **argv)
options.trustSSL = false;
options.useNetrc = false;
options.interactive = true;
options.ignoreHiddenFiles = true;
options.ignoreHiddenFiles = false; // Default is to sync hidden files
options.nonShib = false;
options.restartTimes = 3;
options.uplimit = 0;

View File

@@ -272,10 +272,12 @@ bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qi
int fd = _open_osfhandle((intptr_t)fileHandle, _O_RDONLY);
if (fd == -1) {
error = "could not make fd from handle";
CloseHandle(fileHandle);
return false;
}
if (!file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle)) {
error = file->errorString();
_close(fd); // implicitly closes fileHandle
return false;
}

View File

@@ -602,7 +602,7 @@ void SyncJournalDb::close()
commitTransaction();
_db.close();
_avoidReadFromDbOnNextSyncFilter.clear();
clearEtagStorageFilter();
_metadataTableIsEmpty = false;
}
@@ -824,10 +824,10 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record)
SyncJournalFileRecord record = _record;
QMutexLocker locker(&_mutex);
if (!_avoidReadFromDbOnNextSyncFilter.isEmpty()) {
if (!_etagStorageFilter.isEmpty()) {
// If we are a directory that should not be read from db next time, don't write the etag
QByteArray prefix = record._path + "/";
foreach (const QByteArray &it, _avoidReadFromDbOnNextSyncFilter) {
foreach (const QByteArray &it, _etagStorageFilter) {
if (it.startsWith(prefix)) {
qCInfo(lcDb) << "Filtered writing the etag of" << prefix << "because it is a prefix of" << it;
record._etag = "_invalid_";
@@ -1816,7 +1816,12 @@ void SyncJournalDb::avoidReadFromDbOnNextSync(const QByteArray &fileName)
// Prevent future overwrite of the etags of this folder and all
// parent folders for this sync
argument.append('/');
_avoidReadFromDbOnNextSyncFilter.append(argument);
_etagStorageFilter.append(argument);
}
void SyncJournalDb::clearEtagStorageFilter()
{
_etagStorageFilter.clear();
}
void SyncJournalDb::forceRemoteDiscoveryNextSync()

View File

@@ -178,10 +178,18 @@ public:
* Since folders in the selective sync list will not be rediscovered (csync_ftw,
* _csync_detect_update skip them), the _invalid_ marker will stay. And any
* child items in the db will be ignored when reading a remote tree from the database.
*
* Any setFileRecord() call to affected directories before the next sync run will be
* adjusted to retain the invalid etag via _etagStorageFilter.
*/
void avoidReadFromDbOnNextSync(const QString &fileName) { avoidReadFromDbOnNextSync(fileName.toUtf8()); }
void avoidReadFromDbOnNextSync(const QByteArray &fileName);
/**
* Wipe _etagStorageFilter. Also done implicitly on close().
*/
void clearEtagStorageFilter();
/**
* Ensures full remote discovery happens on the next sync.
*
@@ -295,13 +303,20 @@ private:
SqlQuery _setConflictRecordQuery;
SqlQuery _deleteConflictRecordQuery;
/* This is the list of paths we called avoidReadFromDbOnNextSync on.
* It means that they should not be written to the DB in any case since doing
* that would write the etag and would void the purpose of avoidReadFromDbOnNextSync
/* Storing etags to these folders, or their parent folders, is filtered out.
*
* When avoidReadFromDbOnNextSync() is called some etags to _invalid_ in the
* database. If this is done during a sync run, a later propagation job might
* undo that by writing the correct etag to the database instead. This filter
* will prevent this write and instead guarantee the _invalid_ etag stays in
* place.
*
* The list is cleared on close() (end of sync run) and explicitly with
* clearEtagStorageFilter() (start of sync run).
*
* The contained paths have a trailing /.
*/
QList<QByteArray> _avoidReadFromDbOnNextSyncFilter;
QList<QByteArray> _etagStorageFilter;
/** The journal mode to use for the db.
*

View File

@@ -166,7 +166,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
/* First, check that the file is NOT in our tree (another file with the same name was added) */
if (our_tree->findFile(basePath)) {
other = nullptr;
qCDebug(lcReconcile, "Origin found in our tree : %s", basePath.constData());
qCInfo(lcReconcile, "Origin found in our tree : %s", basePath.constData());
} else {
/* Find the potential rename source file in the other tree.
* If the renamed file could not be found in the opposite tree, that is because it
@@ -174,7 +174,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
* The journal is cleaned up later after propagation.
*/
other = other_tree->findFile(basePath);
qCDebug(lcReconcile, "Rename origin in other tree (%s) %s",
qCInfo(lcReconcile, "Rename origin in other tree (%s) %s",
basePath.constData(), other ? "found" : "not found");
}
@@ -185,7 +185,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
// Some other EVAL_RENAME already claimed other.
// We do nothing: maybe a different candidate for
// other is found as well?
qCDebug(lcReconcile, "Other has already been renamed to %s",
qCInfo(lcReconcile, "Other has already been renamed to %s",
other->rename_path.constData());
} else if (cur->type == ItemTypeDirectory
// The local replica is reconciled first, so the remote tree would
@@ -197,13 +197,17 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
|| other->instruction == CSYNC_INSTRUCTION_NONE
|| other->instruction == CSYNC_INSTRUCTION_UPDATE_METADATA
|| other->instruction == CSYNC_INSTRUCTION_REMOVE) {
qCDebug(lcReconcile, "Switching %s to RENAME to %s",
qCInfo(lcReconcile, "Switching %s to RENAME to %s",
other->path.constData(), cur->path.constData());
other->instruction = CSYNC_INSTRUCTION_RENAME;
other->rename_path = cur->path;
if( !cur->file_id.isEmpty() ) {
other->file_id = cur->file_id;
}
if (ctx->current == LOCAL_REPLICA) {
// Keep the local mtime.
other->modtime = cur->modtime;
}
other->inode = cur->inode;
cur->instruction = CSYNC_INSTRUCTION_NONE;
// We have consumed 'other': exit this loop to not consume another one.
@@ -217,7 +221,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
// Local: The remote reconcile will be able to deal with this.
// Remote: The local replica has already dealt with this.
// See the EVAL_RENAME case when other was found directly.
qCDebug(lcReconcile, "File in a renamed directory, other side's instruction: %d",
qCInfo(lcReconcile, "File in a renamed directory, other side's instruction: %d",
other->instruction);
cur->instruction = CSYNC_INSTRUCTION_NONE;
} else {
@@ -225,7 +229,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
// and the instruction in the local tree is NEW while cur has EVAL_RENAME
// due to a remote move of the same file. In these scenarios we just
// want the instruction to stay NEW.
qCDebug(lcReconcile, "Other already has instruction %d",
qCInfo(lcReconcile, "Other already has instruction %d",
other->instruction);
}
};
@@ -233,7 +237,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
if (ctx->current == LOCAL_REPLICA) {
/* use the old name to find the "other" node */
OCC::SyncJournalFileRecord base;
qCDebug(lcReconcile, "Finding rename origin through inode %" PRIu64 "",
qCInfo(lcReconcile, "Finding rename origin through inode %" PRIu64 "",
cur->inode);
ctx->statedb->getFileRecordByInode(cur->inode, &base);
renameCandidateProcessing(base._path);
@@ -246,7 +250,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
// line.
auto basePath = csync_rename_adjust_full_path_source(ctx, cur->path);
if (basePath != cur->path) {
qCDebug(lcReconcile, "Trying rename origin by csync_rename mapping %s",
qCInfo(lcReconcile, "Trying rename origin by csync_rename mapping %s",
basePath.constData());
// We go through getFileRecordsByFileId to ensure the basePath
// computed in this way also has the expected fileid.
@@ -259,7 +263,7 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
// Also feed all the other files with the same fileid if necessary
if (!processedRename) {
qCDebug(lcReconcile, "Finding rename origin through file ID %s",
qCInfo(lcReconcile, "Finding rename origin through file ID %s",
cur->file_id.constData());
ctx->statedb->getFileRecordsByFileId(cur->file_id,
[&](const OCC::SyncJournalFileRecord &base) { renameCandidateProcessing(base._path); });

View File

@@ -125,12 +125,12 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
* This code should probably be in csync_exclude, but it does not have the fs parameter.
* Keep it here for now */
if (ctx->ignore_hidden_files && (fs->is_hidden)) {
qCDebug(lcUpdate, "file excluded because it is a hidden file: %s", fs->path.constData());
qCInfo(lcUpdate, "file excluded because it is a hidden file: %s", fs->path.constData());
excluded = CSYNC_FILE_EXCLUDE_HIDDEN;
}
} else {
/* File is ignored because it's matched by a user- or system exclude pattern. */
qCDebug(lcUpdate, "%s excluded (%d)", fs->path.constData(), excluded);
qCInfo(lcUpdate, "%s excluded (%d)", fs->path.constData(), excluded);
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) {
return 1;
}
@@ -155,7 +155,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
*/
QTextEncoder encoder(localCodec, QTextCodec::ConvertInvalidToNull);
if (encoder.fromUnicode(QString::fromUtf8(fs->path)).contains('\0')) {
qCDebug(lcUpdate, "cannot encode %s to local encoding %d",
qCInfo(lcUpdate, "cannot encode %s to local encoding %d",
fs->path.constData(), localCodec->mibEnum());
excluded = CSYNC_FILE_EXCLUDE_CANNOT_ENCODE;
}
@@ -163,7 +163,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
if (fs->type == ItemTypeFile ) {
if (fs->modtime == 0) {
qCDebug(lcUpdate, "file: %s - mtime is zero!", fs->path.constData());
qCInfo(lcUpdate, "file: %s - mtime is zero!", fs->path.constData());
}
}
@@ -245,7 +245,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
checksumIdentical = fs->checksumHeader == base._checksumHeader;
}
if (checksumIdentical) {
qCDebug(lcUpdate, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData());
qCInfo(lcUpdate, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData());
fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA;
goto out;
}
@@ -269,7 +269,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
* The metadata comparison ensure that we fetch all the file id or permission when
* upgrading owncloud
*/
qCDebug(lcUpdate, "Reading from database: %s", fs->path.constData());
qCInfo(lcUpdate, "Reading from database: %s", fs->path.constData());
ctx->remote.read_from_db = true;
}
/* If it was remembered in the db that the remote dir has ignored files, store
@@ -280,7 +280,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
}
if (metadata_differ) {
/* file id or permissions has changed. Which means we need to update them in the DB. */
qCDebug(lcUpdate, "Need to update metadata for: %s", fs->path.constData());
qCInfo(lcUpdate, "Need to update metadata for: %s", fs->path.constData());
fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA;
} else {
fs->instruction = CSYNC_INSTRUCTION_NONE;
@@ -288,7 +288,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
} else {
/* check if it's a file and has been renamed */
if (ctx->current == LOCAL_REPLICA) {
qCDebug(lcUpdate, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode);
qCInfo(lcUpdate, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode);
OCC::SyncJournalFileRecord base;
if(!ctx->statedb->getFileRecordByInode(fs->inode, &base)) {
@@ -315,13 +315,13 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
_rel_to_abs(ctx, fs->path), base._checksumHeader,
ctx->callbacks.checksum_userdata);
if (!fs->checksumHeader.isEmpty()) {
qCDebug(lcUpdate, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), base._checksumHeader.constData());
qCInfo(lcUpdate, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), base._checksumHeader.constData());
isRename = fs->checksumHeader == base._checksumHeader;
}
}
if (isRename) {
qCDebug(lcUpdate, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode);
qCInfo(lcUpdate, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode);
/* inode found so the file has been renamed */
fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME;
if (fs->type == ItemTypeDirectory) {
@@ -331,6 +331,8 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
goto out;
} else {
qCInfo(lcUpdate, "Checking for rename based on fileid %s", fs->file_id.constData());
/* Remote Replica Rename check */
fs->instruction = CSYNC_INSTRUCTION_NEW;
@@ -376,7 +378,8 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> f
return;
}
qCDebug(lcUpdate, "remote rename detected based on fileid %s --> %s", qPrintable(base._path), qPrintable(fs->path.constData()));
qCInfo(lcUpdate, "remote rename detected based on fileid %s --> %s", base._path.constData(), fs->path.constData());
fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME;
done = true;
};
@@ -484,11 +487,11 @@ int csync_walker(CSYNC *ctx, std::unique_ptr<csync_file_stat_t> fs) {
}
break;
case ItemTypeSoftLink:
qCDebug(lcUpdate, "symlink: %s - not supported", fs->path.constData());
qCInfo(lcUpdate, "symlink: %s - not supported", fs->path.constData());
break;
default:
qCInfo(lcUpdate, "item: %s - item type %d not iterated", fs->path.constData(), fs->type);
return 0;
break;
}
rc = _csync_detect_update(ctx, std::move(fs));
@@ -511,7 +514,7 @@ static bool fill_tree_from_db(CSYNC *ctx, const char *uri)
* their correct etags again and we don't run into this case.
*/
if (rec._etag == "_invalid_") {
qCDebug(lcUpdate, "%s selective sync excluded", rec._path.constData());
qCInfo(lcUpdate, "%s selective sync excluded", rec._path.constData());
skipbase = rec._path;
skipbase += '/';
return;
@@ -663,7 +666,21 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
goto error;
}
while ((dirent = csync_vio_readdir(ctx, dh))) {
while (true) {
// Get the next item in the directory
errno = 0;
dirent = csync_vio_readdir(ctx, dh);
if (!dirent) {
if (errno != 0) {
// Note: Windows vio converts any error into EACCES
qCWarning(lcUpdate, "readdir failed for file in %s - errno %d", uri, errno);
goto error;
}
// Normal case: End of items in directory
break;
}
/* Conversion error */
if (dirent->path.isEmpty() && !dirent->original_path.isEmpty()) {
ctx->status_code = CSYNC_STATUS_INVALID_CHARACTERS;
@@ -757,7 +774,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
}
csync_vio_closedir(ctx, dh);
qCDebug(lcUpdate, " <= Closing walk for %s with read_from_db %d", uri, read_from_db);
qCInfo(lcUpdate, " <= Closing walk for %s with read_from_db %d", uri, read_from_db);
return rc;

View File

@@ -156,6 +156,7 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *d
// might be error, check!
int dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES) {
qCWarning(lcCSyncVIOLocal, "FindNextFile error %d", dwError);
errno = EACCES; // no more files is fine. Otherwise EACCESS
}
return nullptr;
@@ -181,7 +182,7 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *d
}
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE
|| handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE
|| handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
) {
file_stat->type = ItemTypeSkip;
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
file_stat->type = ItemTypeDirectory;

View File

@@ -33,7 +33,6 @@ set(client_UI_SRCS
sslerrordialog.ui
addcertificatedialog.ui
proxyauthdialog.ui
notificationwidget.ui
mnemonicdialog.ui
wizard/owncloudadvancedsetuppage.ui
wizard/owncloudconnectionmethoddialog.ui
@@ -54,6 +53,7 @@ set(client_SRCS
folderman.cpp
folderstatusmodel.cpp
folderstatusdelegate.cpp
folderstatusview.cpp
folderwatcher.cpp
folderwizard.cpp
generalsettings.cpp
@@ -95,7 +95,6 @@ set(client_SRCS
proxyauthdialog.cpp
synclogdialog.cpp
tooltipupdater.cpp
notificationwidget.cpp
notificationconfirmjob.cpp
servernotificationhandler.cpp
guiutility.cpp
@@ -118,6 +117,7 @@ set(client_SRCS
wizard/owncloudwizardresultpage.cpp
wizard/webviewpage.cpp
wizard/webview.cpp
wizard/slideshow.cpp
)
IF(NOT NO_SHIBBOLETH)
@@ -274,7 +274,7 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
add_executable( ${APPLICATION_EXECUTABLE} WIN32 main.cpp ${final_src})
else()
# set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf.
set(MACOSX_BUNDLE_ICON_FILE "ownCloud.icns")
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 ${final_src})

View File

@@ -52,7 +52,7 @@ AccountManager *AccountManager::instance()
bool AccountManager::restore()
{
auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC));
if (settings->status() != QSettings::NoError) {
if (settings->status() != QSettings::NoError || !settings->isWritable()) {
qCWarning(lcAccountManager) << "Could not read settings from" << settings->fileName()
<< settings->status();
return false;
@@ -253,6 +253,20 @@ AccountPtr AccountManager::loadAccountHelper(QSettings &settings)
acc->setUrl(urlConfig.toUrl());
}
// Migrate to webflow
if (authType == QLatin1String("http")) {
authType = "webflow";
settings.setValue(QLatin1String(authTypeC), authType);
foreach(QString key, settings.childKeys()) {
if (!key.startsWith("http_"))
continue;
auto newkey = QString::fromLatin1("webflow_").append(key.mid(5));
settings.setValue(newkey, settings.value((key)));
settings.remove(key);
}
}
qCInfo(lcAccountManager) << "Account for" << acc->url() << "using auth type" << authType;
acc->_serverVersion = settings.value(QLatin1String(serverVersionC)).toString();
@@ -340,7 +354,7 @@ void AccountManager::displayMnemonic(const QString& mnemonic)
Ui_Dialog ui;
ui.setupUi(widget);
widget->setWindowTitle(tr("End to end encryption mnemonic"));
ui.label->setText(tr("To protect your Cryptocraphic Identity, we encrypt it with a mnemonic of 12 dictionary words."
ui.label->setText(tr("To protect your Cryptocraphic Identity, we encrypt it with a mnemonic of 12 dictionary words. "
"Please note these down and keep them safe. "
"They will be needed to add other devices to your account (like your mobile phone or laptop)."));
ui.textEdit->setText(mnemonic);

View File

@@ -625,7 +625,7 @@ void AccountSettings::slotFolderListClicked(const QModelIndex &indx)
return;
}
if (FolderStatusDelegate::errorsListRect(tv->visualRect(indx)).contains(pos)) {
emit showIssuesList(_model->data(indx, FolderStatusDelegate::FolderAliasRole).toString());
emit showIssuesList(_accountState);
return;
}
@@ -680,7 +680,7 @@ void AccountSettings::slotFolderWizardAccepted()
/* take the value from the definition of already existing folders. All folders have
* the same setting so far.
* The default is to not sync hidden files
* The default is to sync hidden files
*/
definition.ignoreHiddenFiles = folderMan->ignoreHiddenFiles();

View File

@@ -61,7 +61,7 @@ public:
signals:
void folderChanged();
void openFolderAlias(const QString &);
void showIssuesList(const QString &folderAlias);
void showIssuesList(AccountState *account);
void requesetMnemonic();
public slots:

View File

@@ -117,7 +117,7 @@
</layout>
</item>
<item row="2" column="0">
<widget class="QTreeView" name="_folderList">
<widget class="OCC::FolderStatusView" name="_folderList">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
@@ -275,6 +275,11 @@
<extends>QToolButton</extends>
<header>sslbutton.h</header>
</customwidget>
<customwidget>
<class>OCC::FolderStatusView</class>
<extends>QTreeView</extends>
<header>folderstatusview.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View File

@@ -335,10 +335,10 @@ void AccountState::slotInvalidCredentials()
if (account()->credentials()->ready()) {
account()->credentials()->invalidateToken();
if (auto creds = qobject_cast<HttpCredentials *>(account()->credentials())) {
if (creds->refreshAccessToken())
return;
}
}
if (auto creds = qobject_cast<HttpCredentials *>(account()->credentials())) {
if (creds->refreshAccessToken())
return;
}
account()->credentials()->askFromUser();
}

View File

@@ -60,6 +60,10 @@ int ActivityItemDelegate::rowHeight()
QFontMetrics fm(f);
_margin = fm.height() / 2;
#if defined(Q_OS_WIN)
_margin += 5;
#endif
}
return iconHeight() + 5 * _margin;
}
@@ -225,19 +229,13 @@ void ActivityItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
// change pen color if use is not online
QPalette p = option.palette;
if(!accountOnline)
painter->setPen(p.color(QPalette::Disabled, QPalette::Text));
p.setCurrentColorGroup(QPalette::Disabled);
// change pen color if the line is selected
QPalette::ColorGroup cg = option.state & QStyle::State_Enabled
? QPalette::Normal
: QPalette::Disabled;
if (cg == QPalette::Normal && !(option.state & QStyle::State_Active))
cg = QPalette::Inactive;
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.color(cg, QPalette::HighlightedText));
painter->setPen(p.color(QPalette::HighlightedText));
else
painter->setPen(option.palette.color(cg, QPalette::Text));
painter->setPen(p.color(QPalette::Text));
// calculate space for text - use the max possible before using the elipses
int spaceLeftForText = option.rect.width() - (actionIconRect.width() + margin + rightMargin + leftMargin) -
@@ -258,22 +256,15 @@ void ActivityItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
// draw the message
// change pen color for the message
if(!messageText.isEmpty()){
painter->setPen(p.color(QPalette::Inactive, QPalette::Text));
// check if line is selected
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.color(cg, QPalette::HighlightedText));
const QString elidedMessage = fm.elidedText(messageText, Qt::ElideRight, spaceLeftForText);
painter->drawText(messageTextBox, elidedMessage);
}
// change pen color for the time
painter->setPen(p.color(QPalette::Disabled, QPalette::Text));
// check if line is selected
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.color(cg, QPalette::HighlightedText));
painter->setPen(p.color(QPalette::Disabled, QPalette::HighlightedText));
else
painter->setPen(p.color(QPalette::Disabled, QPalette::Text));
// draw the time
const QString elidedTime = fm.elidedText(timeStr, Qt::ElideRight, spaceLeftForText);

View File

@@ -108,9 +108,9 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
|| a._status == SyncFileItem::Restoration){
return QIcon(QLatin1String(":/client/resources/state-warning.svg"));
}
return QIcon(QLatin1String(":/client/resources/activity.png"));
} else return QIcon(QLatin1String(":/client/resources/activity.png"));
return QVariant();
return QIcon(QLatin1String(":/client/resources/state-sync.svg"));
}
return QIcon(QLatin1String(":/client/resources/activity.png"));
break;
case ActivityItemDelegate::ObjectTypeRole:
return a._objectType;
@@ -121,7 +121,6 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
return type;
break;
}
case Qt::ToolTipRole:
case ActivityItemDelegate::ActionTextRole:
return a._subject;
break;
@@ -237,6 +236,12 @@ void ActivityListModel::removeActivityFromActivityList(int row) {
removeActivityFromActivityList(activity);
}
void ActivityListModel::addSyncFileItemToActivityList(Activity activity) {
qCInfo(lcActivity) << "Successfully added to the activity list: " << activity._subject;
_syncFileItemLists.prepend(activity);
combineActivityLists();
}
void ActivityListModel::removeActivityFromActivityList(Activity activity) {
qCInfo(lcActivity) << "Activity/Notification/Error successfully dismissed: " << activity._subject;
qCInfo(lcActivity) << "Trying to remove Activity/Notification/Error from view... ";
@@ -271,6 +276,9 @@ void ActivityListModel::combineActivityLists()
std::sort(_notificationLists.begin(), _notificationLists.end());
resultList.append(_notificationLists);
std::sort(_syncFileItemLists.begin(), _syncFileItemLists.end());
resultList.append(_syncFileItemLists);
std::sort(_activityLists.begin(), _activityLists.end());
resultList.append(_activityLists);

View File

@@ -50,6 +50,7 @@ public:
ActivityList errorsList() { return _notificationErrorsLists; }
void addNotificationToActivityList(Activity activity);
void addErrorToActivityList(Activity activity);
void addSyncFileItemToActivityList(Activity activity);
void removeActivityFromActivityList(int row);
void removeActivityFromActivityList(Activity activity);
@@ -68,6 +69,7 @@ private:
void combineActivityLists();
ActivityList _activityLists;
ActivityList _syncFileItemLists;
ActivityList _notificationLists;
ActivityList _notificationErrorsLists;
ActivityList _finalList;

View File

@@ -30,7 +30,6 @@
#include "accountmanager.h"
#include "activityitemdelegate.h"
#include "QProgressIndicator.h"
#include "notificationwidget.h"
#include "notificationconfirmjob.h"
#include "servernotificationhandler.h"
#include "theme.h"
@@ -68,7 +67,6 @@ ActivityWidget::ActivityWidget(AccountState *accountState, QWidget *parent)
ActivityItemDelegate *delegate = new ActivityItemDelegate;
delegate->setParent(this);
_ui->_activityList->setItemDelegate(delegate);
_ui->_activityList->setBackgroundRole(QPalette::Background);
_ui->_activityList->setAlternatingRowColors(true);
_ui->_activityList->setModel(_model);
@@ -77,15 +75,11 @@ ActivityWidget::ActivityWidget(AccountState *accountState, QWidget *parent)
connect(_model, &ActivityListModel::activityJobStatusCode,
this, &ActivityWidget::slotAccountActivityStatus);
_ui->_copyButton->setToolTip(tr("Copy the activity list to the clipboard."));
connect(_ui->_copyButton, &QPushButton::click, this, &ActivityWidget::copyToClipboard);
connect(_model, &QAbstractItemModel::rowsInserted, this, &ActivityWidget::rowsInserted);
connect(delegate, &ActivityItemDelegate::primaryButtonClickedOnItemView, this, &ActivityWidget::slotPrimaryButtonClickedOnListView);
connect(delegate, &ActivityItemDelegate::secondaryButtonClickedOnItemView, this, &ActivityWidget::slotSecondaryButtonClickedOnListView);
connect(_ui->_activityList, &QListView::activated, this, &ActivityWidget::slotOpenFile);
connect(&_removeTimer, &QTimer::timeout, this, &ActivityWidget::slotCheckToCleanWidgets);
connect(ProgressDispatcher::instance(), &ProgressDispatcher::progressInfo,
this, &ActivityWidget::slotProgressInfo);
@@ -104,52 +98,49 @@ ActivityWidget::~ActivityWidget()
void ActivityWidget::slotProgressInfo(const QString &folder, const ProgressInfo &progress)
{
if (progress.status() == ProgressInfo::Reconcile) {
// Wipe all non-persistent entries - as well as the persistent ones
// in cases where a local discovery was done.
auto f = FolderMan::instance()->folder(folder);
if (!f)
return;
const auto &engine = f->syncEngine();
const auto style = engine.lastLocalDiscoveryStyle();
foreach (Activity activity, _model->errorsList()) {
if (activity._folder != folder){
continue;
}
// TODO: this is really not working
// if (progress.status() == ProgressInfo::Done
// || progress.status() == ProgressInfo::Reconcile) {
// // Wipe all non-persistent entries - as well as the persistent ones
// // in cases where a local discovery was done.
// auto f = FolderMan::instance()->folder(folder);
// if (!f)
// return;
// const auto &engine = f->syncEngine();
// const auto style = engine.lastLocalDiscoveryStyle();
// foreach (Activity activity, _model->errorsList()) {
// if (activity._folder != folder){
// continue;
// }
if (style == LocalDiscoveryStyle::FilesystemOnly){
_model->removeActivityFromActivityList(activity);
continue;
}
// if (style == LocalDiscoveryStyle::FilesystemOnly){
// _model->removeActivityFromActivityList(activity);
// continue;
// }
// if(activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()){
// _model->removeActivityFromActivityList(activity);
// continue;
// }
if(activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()){
_model->removeActivityFromActivityList(activity);
continue;
}
// if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
// _model->removeActivityFromActivityList(activity);
// continue;
// }
if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
_model->removeActivityFromActivityList(activity);
continue;
}
// if(!QFileInfo(f->path() + activity._file).exists()){
// _model->removeActivityFromActivityList(activity);
// continue;
// }
if(!QFileInfo(f->path() + activity._file).exists()){
_model->removeActivityFromActivityList(activity);
continue;
}
// auto path = QFileInfo(activity._file).dir().path().toUtf8();
// if (path == ".")
// path.clear();
auto path = QFileInfo(activity._file).dir().path().toUtf8();
if (path == ".")
path.clear();
// if(engine.shouldDiscoverLocally(path))
// _model->removeActivityFromActivityList(activity);
// }
if(engine.shouldDiscoverLocally(path))
_model->removeActivityFromActivityList(activity);
}
// }
}
if (progress.status() == ProgressInfo::Done) {
// We keep track very well of pending conflicts.
@@ -177,18 +168,26 @@ void ActivityWidget::slotItemCompleted(const QString &folder, const SyncFileItem
qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in " << item->_errorString;
Activity activity;
activity._type = Activity::SyncFileItemType;
activity._type = Activity::SyncFileItemType; //client activity
activity._status = item->_status;
activity._dateTime = QDateTime::fromString(QDateTime::currentDateTime().toString(), Qt::ISODate);
activity._subject = item->_errorString;
activity._message = item->_originalFile;
activity._link = folderInstance->accountState()->account()->url();
activity._accName = folderInstance->accountState()->account()->displayName();
activity._file = item->_file;
activity._folder = folder;
// add 'protocol error' to activity list
_model->addErrorToActivityList(activity);
if(item->_status == SyncFileItem::NoStatus || item->_status == SyncFileItem::Success){
qCWarning(lcActivity) << "Item " << item->_file << " retrieved successfully.";
activity._message.prepend(tr("Synced "));
_model->addSyncFileItemToActivityList(activity);
} else {
qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in error " << item->_errorString;
activity._subject = item->_errorString;
// add 'protocol error' to activity list
_model->addErrorToActivityList(activity);
}
}
}
@@ -326,14 +325,17 @@ void ActivityWidget::slotRemoveAccount()
void ActivityWidget::showLabels()
{
QString t = tr("Server Activities");
t.clear();
_ui->_bottomLabel->hide(); // hide whatever was there before
QString t("");
QSetIterator<QString> i(_accountsWithoutActivities);
while (i.hasNext()) {
t.append(tr("<br/>Account %1 does not have activities enabled.").arg(i.next()));
}
_ui->_bottomLabel->setTextFormat(Qt::RichText);
_ui->_bottomLabel->setText(t);
if(!t.isEmpty()){
_ui->_bottomLabel->setTextFormat(Qt::RichText);
_ui->_bottomLabel->setText(t);
_ui->_bottomLabel->show();
}
}
void ActivityWidget::slotAccountActivityStatus(int statusCode)
@@ -347,7 +349,7 @@ void ActivityWidget::slotAccountActivityStatus(int statusCode)
_accountsWithoutActivities.remove(_accountState->account()->displayName());
}
checkActivityTabVisibility();
checkActivityWidgetVisibility();
showLabels();
}
@@ -398,16 +400,15 @@ void ActivityWidget::storeActivityList(QTextStream &ts)
}
}
void ActivityWidget::checkActivityTabVisibility()
void ActivityWidget::checkActivityWidgetVisibility()
{
int accountCount = AccountManager::instance()->accounts().count();
bool hasAccountsWithActivity =
_accountsWithoutActivities.count() != accountCount;
bool hasNotifications = !_widgetForNotifId.isEmpty();
_ui->_activityList->setVisible(hasAccountsWithActivity);
emit hideActivityTab(!hasAccountsWithActivity && !hasNotifications);
emit hideActivityTab(!hasAccountsWithActivity);
}
void ActivityWidget::slotOpenFile(QModelIndex indx)
@@ -508,7 +509,7 @@ void ActivityWidget::slotSendNotificationRequest(const QString &accountName, con
}
}
void ActivityWidget::endNotificationRequest(NotificationWidget *widget, int replyCode)
void ActivityWidget::endNotificationRequest(int replyCode)
{
_notificationRequestsRunning--;
slotNotificationRequestFinished(replyCode);
@@ -523,7 +524,7 @@ void ActivityWidget::slotNotifyNetworkError(QNetworkReply *reply)
int resultCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
endNotificationRequest(job->widget(), resultCode);
endNotificationRequest(resultCode);
qCWarning(lcActivity) << "Server notify job failed with code " << resultCode;
}
@@ -534,72 +535,10 @@ void ActivityWidget::slotNotifyServerFinished(const QString &reply, int replyCod
return;
}
endNotificationRequest(job->widget(), replyCode);
endNotificationRequest(replyCode);
qCInfo(lcActivity) << "Server Notification reply code" << replyCode << reply;
// if the notification was successful start a timer that triggers
// removal of the done widgets in a few seconds
// Add 200 millisecs to the predefined value to make sure that the timer in
// widget's method readyToClose() has elapsed.
if (replyCode == OCS_SUCCESS_STATUS_CODE || replyCode == OCS_SUCCESS_STATUS_CODE_V2) {
//scheduleWidgetToRemove(job->widget());
}
}
// blacklist the activity coming in here.
void ActivityWidget::slotRequestCleanupAndBlacklist(const Activity &blacklistActivity)
{
if (!_blacklistedNotifications.contains(blacklistActivity)) {
_blacklistedNotifications.append(blacklistActivity);
}
NotificationWidget *widget = _widgetForNotifId[blacklistActivity.ident()];
scheduleWidgetToRemove(widget);
}
void ActivityWidget::scheduleWidgetToRemove(NotificationWidget *widget, int milliseconds)
{
if (!widget) {
return;
}
// in five seconds from now, remove the widget.
QDateTime removeTime = QDateTime::currentDateTimeUtc().addMSecs(milliseconds);
QDateTime &it = _widgetsToRemove[widget];
if (!it.isValid() || it > removeTime) {
it = removeTime;
}
if (!_removeTimer.isActive()) {
_removeTimer.start();
}
}
// Called every second to see if widgets need to be removed.
void ActivityWidget::slotCheckToCleanWidgets()
{
auto currentTime = QDateTime::currentDateTimeUtc();
auto it = _widgetsToRemove.begin();
while (it != _widgetsToRemove.end()) {
// loop over all widgets in the to-remove queue
QDateTime t = it.value();
NotificationWidget *widget = it.key();
if (currentTime > t) {
// found one to remove!
Activity::Identifier id = widget->activity().ident();
_widgetForNotifId.remove(id);
widget->deleteLater();
it = _widgetsToRemove.erase(it);
} else {
++it;
}
}
if (_widgetsToRemove.isEmpty()) {
_removeTimer.stop();
}
}
/* ==================================================================== */
ActivitySettings::ActivitySettings(AccountState *accountState, QWidget *parent)
@@ -611,14 +550,7 @@ ActivitySettings::ActivitySettings(AccountState *accountState, QWidget *parent)
_activityWidget = new ActivityWidget(_accountState, this);
// set background white
QPalette palette;
palette.setColor(QPalette::Background, Qt::white);
_activityWidget->setAutoFillBackground(true);
_activityWidget->setPalette(palette);
_vbox->insertWidget(1, _activityWidget);
connect(_activityWidget, &ActivityWidget::copyToClipboard, this, &ActivitySettings::slotCopyToClipboard);
connect(_activityWidget, &ActivityWidget::guiLog, this, &ActivitySettings::guiLog);
connect(&_notificationCheckTimer, &QTimer::timeout,
this, &ActivitySettings::slotRegularNotificationCheck);
@@ -641,21 +573,6 @@ void ActivitySettings::setNotificationRefreshInterval(std::chrono::milliseconds
_notificationCheckTimer.start(interval.count());
}
void ActivitySettings::slotCopyToClipboard()
{
QString text;
QTextStream ts(&text);
QString message;
_activityWidget->storeActivityList(ts);
message = tr("The server activity and notifications list has been copied to the clipboard.");
QApplication::clipboard()->setText(text);
emit guiLog(tr("Copied to clipboard"), message);
}
void ActivitySettings::slotRemoveAccount()
{
_activityWidget->slotRemoveAccount();

View File

@@ -37,7 +37,6 @@ namespace OCC {
class Account;
class AccountStatusPtr;
class JsonApiJob;
class NotificationWidget;
class ActivityListModel;
namespace Ui {
@@ -68,7 +67,7 @@ public:
* Based on whether activities are enabled and whether notifications are
* available.
*/
void checkActivityTabVisibility();
void checkActivityWidgetVisibility();
public slots:
void slotOpenFile(QModelIndex indx);
@@ -76,14 +75,12 @@ public slots:
void slotRefreshNotifications();
void slotRemoveAccount();
void slotAccountActivityStatus(int statusCode);
void slotRequestCleanupAndBlacklist(const Activity &blacklistActivity);
void addError(const QString &folderAlias, const QString &message, ErrorCategory category);
void slotProgressInfo(const QString &folder, const ProgressInfo &progress);
void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item);
signals:
void guiLog(const QString &, const QString &);
void copyToClipboard();
void rowsInserted();
void hideActivityTab(bool);
void sendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row);
@@ -93,9 +90,7 @@ private slots:
void slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row);
void slotNotifyNetworkError(QNetworkReply *);
void slotNotifyServerFinished(const QString &reply, int replyCode);
void endNotificationRequest(NotificationWidget *widget, int replyCode);
void scheduleWidgetToRemove(NotificationWidget *widget, int milliseconds = 100);
void slotCheckToCleanWidgets();
void endNotificationRequest(int replyCode);
void slotNotificationRequestFinished(int statusCode);
void slotPrimaryButtonClickedOnListView(const QModelIndex &index);
void slotSecondaryButtonClickedOnListView(const QModelIndex &index);
@@ -105,12 +100,10 @@ private:
QString timeString(QDateTime dt, QLocale::FormatType format) const;
Ui::ActivityWidget *_ui;
QSet<QString> _accountsWithoutActivities;
QMap<Activity::Identifier, NotificationWidget *> _widgetForNotifId;
QElapsedTimer _guiLogTimer;
QSet<int> _guiLoggedNotifications;
ActivityList _blacklistedNotifications;
QHash<NotificationWidget *, QDateTime> _widgetsToRemove;
QTimer _removeTimer;
// number of currently running notification requests. If non zero,
@@ -146,7 +139,6 @@ public slots:
void setNotificationRefreshInterval(std::chrono::milliseconds interval);
private slots:
void slotCopyToClipboard();
void slotRegularNotificationCheck();
void slotDisplayActivities();

View File

@@ -6,79 +6,30 @@
<rect>
<x>0</x>
<y>0</y>
<width>693</width>
<width>652</width>
<height>556</height>
</rect>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>252</red>
<green>252</green>
<blue>252</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>252</red>
<green>252</green>
<blue>252</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QListView" name="_activityList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
@@ -86,78 +37,14 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>0</number>
<number>1</number>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
@@ -185,7 +72,7 @@
</property>
</widget>
</item>
<item row="1" column="0">
<item>
<widget class="QLabel" name="_bottomLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
@@ -201,28 +88,6 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="_copyButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">margin-left:40px;</string>
</property>
<property name="text">
<string>Copy</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>

View File

@@ -71,7 +71,7 @@ namespace {
" --logexpire <hours> : removes logs older than <hours> hours.\n"
" (to be used with --logdir)\n"
" --logflush : flush the log file after every write.\n"
" --logdebug : also output debug-level messages in the log (equivalent to setting the env var QT_LOGGING_RULES=\"qt.*=true;*.debug=true\").\n"
" --logdebug : also output debug-level messages in the log.\n"
" --confdir <dirname> : Use the given configuration folder.\n";
QString applicationTrPath()
@@ -125,7 +125,8 @@ Application::Application(int &argc, char **argv)
setAttribute(Qt::AA_UseHighDpiPixmaps, true);
auto confDir = ConfigFile().configPath();
if (!QFileInfo(confDir).exists()) {
if (confDir.endsWith('/')) confDir.chop(1); // macOS 10.11.x does not like trailing slash for rename/move.
if (!QFileInfo(confDir).isDir()) {
// Migrate from version <= 2.4
setApplicationName(_theme->appNameGUI());
#ifndef QT_WARNING_DISABLE_DEPRECATED // Was added in Qt 5.9
@@ -136,6 +137,7 @@ Application::Application(int &argc, char **argv)
// We need to use the deprecated QDesktopServices::storageLocation because of its Qt4
// behavior of adding "data" to the path
QString oldDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
if (oldDir.endsWith('/')) oldDir.chop(1); // macOS 10.11.x does not like trailing slash for rename/move.
QT_WARNING_POP
setApplicationName(_theme->appName());
if (QFileInfo(oldDir).isDir()) {
@@ -189,7 +191,7 @@ Application::Application(int &argc, char **argv)
tr("There was an error while accessing the configuration "
"file at %1.")
.arg(ConfigFile().configFile()),
tr("Quit ownCloud"));
tr("Quit Nextcloud"));
QTimer::singleShot(0, qApp, SLOT(quit()));
return;
}
@@ -202,9 +204,8 @@ Application::Application(int &argc, char **argv)
_theme->setSystrayUseMonoIcons(cfg.monoIcons());
connect(_theme, &Theme::systrayUseMonoIconsChanged, this, &Application::slotUseMonoIconsChanged);
FolderMan::instance()->setupFolders();
_proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy.
// Setting up the gui class will allow tray notifications for the
// setup that follows, like folder setup
_gui = new ownCloudGui(this);
if (_showLogWindow) {
_gui->slotToggleLogBrowser(); // _showLogWindow is set in parseOptions.
@@ -213,6 +214,9 @@ Application::Application(int &argc, char **argv)
_gui->setupCloudProviders();
#endif
FolderMan::instance()->setupFolders();
_proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy.
// Enable word wrapping of QInputDialog (#4197)
setStyleSheet("QInputDialog QLabel { qproperty-wordWrap:1; }");

View File

@@ -150,7 +150,6 @@ void OAuth::start()
});
}
});
QTimer::singleShot(5 * 60 * 1000, this, [this] { result(Error); });
}
QUrl OAuth::authorisationLink() const

View File

@@ -24,9 +24,39 @@ namespace OCC {
Q_LOGGING_CATEGORY(lcWebFlowCredentials, "sync.credentials.webflow", QtInfoMsg)
class WebFlowCredentialsAccessManager : public AccessManager
{
public:
WebFlowCredentialsAccessManager(const WebFlowCredentials *cred, QObject *parent = nullptr)
: AccessManager(parent)
, _cred(cred)
{
}
protected:
QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) Q_DECL_OVERRIDE
{
QNetworkRequest req(request);
if (!req.attribute(HttpCredentials::DontAddCredentialsAttribute).toBool()) {
if (_cred && !_cred->password().isEmpty()) {
QByteArray credHash = QByteArray(_cred->user().toUtf8() + ":" + _cred->password().toUtf8()).toBase64();
req.setRawHeader("Authorization", "Basic " + credHash);
}
}
return AccessManager::createRequest(op, req, outgoingData);
}
private:
// The credentials object dies along with the account, while the QNAM might
// outlive both.
QPointer<const WebFlowCredentials> _cred;
};
WebFlowCredentials::WebFlowCredentials()
: _ready(false),
_credentialsValid(false)
: _ready(false)
, _credentialsValid(false)
, _keychainMigration(false)
{
}
@@ -38,6 +68,7 @@ WebFlowCredentials::WebFlowCredentials(const QString &user, const QString &passw
, _clientSslCertificate(certificate)
, _ready(true)
, _credentialsValid(true)
, _keychainMigration(false)
{
}
@@ -56,7 +87,7 @@ QString WebFlowCredentials::password() const {
QNetworkAccessManager *WebFlowCredentials::createQNAM() const {
qCInfo(lcWebFlowCredentials()) << "Get QNAM";
AccessManager *qnam = new AccessManager();
AccessManager *qnam = new WebFlowCredentialsAccessManager(this);
connect(qnam, &AccessManager::authenticationRequired, this, &WebFlowCredentials::slotAuthentication);
connect(qnam, &AccessManager::finished, this, &WebFlowCredentials::slotFinished);
@@ -231,7 +262,7 @@ void WebFlowCredentials::fetchFromKeychainHelper() {
const QString kck = keychainKey(
_account->url().toString(),
_user,
_account->id());
_keychainMigration ? QString() : _account->id());
ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName());
job->setInsecureFallback(false);
@@ -244,6 +275,13 @@ void WebFlowCredentials::slotReadPasswordJobDone(Job *incomingJob) {
QKeychain::ReadPasswordJob *job = static_cast<ReadPasswordJob *>(incomingJob);
QKeychain::Error error = job->error();
// If we could not find the entry try the old entries
if (!_keychainMigration && error == QKeychain::EntryNotFound) {
_keychainMigration = true;
fetchFromKeychainHelper();
return;
}
if (error == QKeychain::NoError) {
_password = job->textData();
_ready = true;
@@ -251,8 +289,22 @@ void WebFlowCredentials::slotReadPasswordJobDone(Job *incomingJob) {
} else {
_ready = false;
}
emit fetched();
// If keychain data was read from legacy location, wipe these entries and store new ones
if (_keychainMigration && _ready) {
_keychainMigration = false;
persist();
deleteOldKeychainEntries();
qCWarning(lcWebFlowCredentials) << "Migrated old keychain entries";
}
}
void WebFlowCredentials::deleteOldKeychainEntries() {
DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName());
job->setInsecureFallback(false);
job->setKey(keychainKey(_account->url().toString(), _user, QString()));
job->start();
}
}

View File

@@ -52,14 +52,8 @@ private slots:
void slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host);
private:
/** Reads data from keychain locations
*
* Goes through
* slotReadClientCertPEMJobDone to
* slotReadClientCertPEMJobDone to
* slotReadJobDone
*/
void fetchFromKeychainHelper();
void deleteOldKeychainEntries();
QString fetchUser();
@@ -70,6 +64,7 @@ private:
bool _ready;
bool _credentialsValid;
bool _keychainMigration;
WebFlowCredentialsDialog *_askDialog;
};

View File

@@ -645,9 +645,13 @@ void Folder::startSync(const QStringList &pathList)
}
return interval;
}();
if (_folderWatcher && _folderWatcher->isReliable() && _timeSinceLastFullLocalDiscovery.isValid()
&& (fullLocalDiscoveryInterval.count() < 0
|| _timeSinceLastFullLocalDiscovery.hasExpired(fullLocalDiscoveryInterval.count()))) {
bool hasDoneFullLocalDiscovery = _timeSinceLastFullLocalDiscovery.isValid();
bool periodicFullLocalDiscoveryNow =
fullLocalDiscoveryInterval.count() >= 0 // negative means we don't require periodic full runs
&& _timeSinceLastFullLocalDiscovery.hasExpired(fullLocalDiscoveryInterval.count());
if (_folderWatcher && _folderWatcher->isReliable()
&& hasDoneFullLocalDiscovery
&& !periodicFullLocalDiscoveryNow) {
qCInfo(lcFolder) << "Allowing local discovery to read from the database";
_engine->setLocalDiscoveryOptions(LocalDiscoveryStyle::DatabaseAndFilesystem, _localDiscoveryPaths);
@@ -1015,6 +1019,20 @@ void Folder::warnOnNewExcludedItem(const SyncJournalFileRecord &record, const QS
Logger::instance()->postOptionalGuiLog(Theme::instance()->appNameGUI(), message);
}
void Folder::slotWatcherUnreliable(const QString &message)
{
qCWarning(lcFolder) << "Folder watcher for" << path() << "became unreliable:" << message;
auto fullMessage =
tr("Changes in synchronized folders could not be tracked reliably.\n"
"\n"
"This means that the synchronization client might not upload local changes "
"immediately and will instead only scan for local changes and upload them "
"occasionally (every two hours by default).\n"
"\n"
"%1").arg(message);
Logger::instance()->postGuiLog(Theme::instance()->appNameGUI(), fullMessage);
}
void Folder::scheduleThisFolderSoon()
{
if (!_scheduleSelfTimer.isActive()) {
@@ -1034,11 +1052,14 @@ void Folder::registerFolderWatcher()
if (!QDir(path()).exists())
return;
_folderWatcher.reset(new FolderWatcher(path(), this));
_folderWatcher.reset(new FolderWatcher(this));
connect(_folderWatcher.data(), &FolderWatcher::pathChanged,
this, &Folder::slotWatchedPathChanged);
connect(_folderWatcher.data(), &FolderWatcher::lostChanges,
this, &Folder::slotNextSyncFullLocalDiscovery);
connect(_folderWatcher.data(), &FolderWatcher::becameUnreliable,
this, &Folder::slotWatcherUnreliable);
_folderWatcher->init(path());
}
void Folder::slotAboutToRemoveAllFiles(SyncFileItem::Direction dir, bool *cancel)

View File

@@ -49,7 +49,7 @@ class FolderDefinition
public:
FolderDefinition()
: paused(false)
, ignoreHiddenFiles(true)
, ignoreHiddenFiles(false)
{
}
@@ -325,6 +325,9 @@ private slots:
/** Warn users if they create a file or folder that is selective-sync excluded */
void warnOnNewExcludedItem(const SyncJournalFileRecord &record, const QStringRef &path);
/** Warn users about an unreliable folder watcher */
void slotWatcherUnreliable(const QString &message);
private:
bool reloadExcludes();

View File

@@ -1242,25 +1242,45 @@ QString FolderMan::trayTooltipStatusString(
return folderMessage;
}
QString FolderMan::checkPathValidityForNewFolder(const QString &path, const QUrl &serverUrl, bool forNewDirectory) const
static QString checkPathValidityRecursive(const QString &path)
{
if (path.isEmpty()) {
return tr("No valid folder selected!");
return FolderMan::tr("No valid folder selected!");
}
QFileInfo selFile(path);
if (!selFile.exists()) {
return checkPathValidityForNewFolder(selFile.dir().path(), serverUrl, true);
return checkPathValidityRecursive(selFile.dir().path());
}
if (!selFile.isDir()) {
return tr("The selected path is not a folder!");
return FolderMan::tr("The selected path is not a folder!");
}
if (!selFile.isWritable()) {
return tr("You have no permission to write to the selected folder!");
return FolderMan::tr("You have no permission to write to the selected folder!");
}
return QString();
}
// QFileInfo::canonicalPath returns an empty string if the file does not exist.
// This function also works with files that does not exist and resolve the symlinks in the
// parent directories.
static QString canonicalPath(const QString &path)
{
QFileInfo selFile(path);
if (!selFile.exists()) {
return canonicalPath(selFile.dir().path()) + '/' + selFile.fileName();
}
return selFile.canonicalFilePath();
}
QString FolderMan::checkPathValidityForNewFolder(const QString &path, const QUrl &serverUrl) const
{
QString recursiveValidity = checkPathValidityRecursive(path);
if (!recursiveValidity.isEmpty())
return recursiveValidity;
// check if the local directory isn't used yet in another ownCloud sync
Qt::CaseSensitivity cs = Qt::CaseSensitive;
@@ -1268,57 +1288,28 @@ QString FolderMan::checkPathValidityForNewFolder(const QString &path, const QUrl
cs = Qt::CaseInsensitive;
}
const QString userDir = QDir::cleanPath(canonicalPath(path)) + '/';
for (auto i = _folderMap.constBegin(); i != _folderMap.constEnd(); ++i) {
Folder *f = static_cast<Folder *>(i.value());
QString folderDir = QDir(f->path()).canonicalPath();
if (folderDir.isEmpty()) {
continue;
}
if (!folderDir.endsWith(QLatin1Char('/'), cs))
folderDir.append(QLatin1Char('/'));
QString folderDir = QDir::cleanPath(canonicalPath(f->path())) + '/';
const QString folderDirClean = QDir::cleanPath(folderDir) + '/';
const QString userDirClean = QDir::cleanPath(path) + '/';
// folderDir follows sym links, path not.
bool differentPathes = !Utility::fileNamesEqual(QDir::cleanPath(folderDir), QDir::cleanPath(path));
if (!forNewDirectory && differentPathes && folderDirClean.startsWith(userDirClean, cs)) {
bool differentPaths = QString::compare(folderDir, userDir, cs) != 0;
if (differentPaths && folderDir.startsWith(userDir, cs)) {
return tr("The local folder %1 already contains a folder used in a folder sync connection. "
"Please pick another one!")
.arg(QDir::toNativeSeparators(path));
}
// QDir::cleanPath keeps links
// canonicalPath() remove symlinks and uses the symlink targets.
QString absCleanUserFolder = QDir::cleanPath(QDir(path).canonicalPath()) + '/';
if ((forNewDirectory || differentPathes) && userDirClean.startsWith(folderDirClean, cs)) {
if (differentPaths && userDir.startsWith(folderDir, cs)) {
return tr("The local folder %1 is already contained in a folder used in a folder sync connection. "
"Please pick another one!")
.arg(QDir::toNativeSeparators(path));
}
// both follow symlinks.
bool cleanUserEqualsCleanFolder = Utility::fileNamesEqual(absCleanUserFolder, folderDirClean);
if (differentPathes && absCleanUserFolder.startsWith(folderDirClean, cs) && !cleanUserEqualsCleanFolder) {
return tr("The local folder %1 is a symbolic link. "
"The link target is already contained in a folder used in a folder sync connection. "
"Please pick another one!")
.arg(QDir::toNativeSeparators(path));
}
if (differentPathes && folderDirClean.startsWith(absCleanUserFolder, cs) && !cleanUserEqualsCleanFolder && !forNewDirectory) {
return tr("The local folder %1 contains a symbolic link. "
"The link target contains an already synced folder. "
"Please pick another one!")
.arg(QDir::toNativeSeparators(path));
}
// if both pathes are equal, the server url needs to be different
// otherwise it would mean that a new connection from the same local folder
// to the same account is added which is not wanted. The account must differ.
if (serverUrl.isValid() && Utility::fileNamesEqual(absCleanUserFolder, folderDir)) {
if (serverUrl.isValid() && !differentPaths) {
QUrl folderUrl = f->accountState()->account()->url();
QString user = f->accountState()->account()->credentials()->user();
folderUrl.setUserName(user);
@@ -1372,8 +1363,10 @@ QString FolderMan::findGoodPathForNewSyncFolder(const QString &basePath, const Q
bool FolderMan::ignoreHiddenFiles() const
{
if (_folderMap.empty()) {
return true;
// Currently no folders in the manager -> return default
return false;
}
// Since the hiddenFiles settings is the same for all folders, just return the settings of the first folder
return _folderMap.begin().value()->ignoreHiddenFiles();
}

View File

@@ -127,11 +127,9 @@ public:
*
* Note that different accounts are allowed to sync to the same folder.
*
* \a forNewDirectory is internal and is used for recursion.
*
* @returns an empty string if it is allowed, or an error if it is not allowed
*/
QString checkPathValidityForNewFolder(const QString &path, const QUrl &serverUrl = QUrl(), bool forNewDirectory = false) const;
QString checkPathValidityForNewFolder(const QString &path, const QUrl &serverUrl = QUrl()) const;
/**
* Attempts to find a non-existing, acceptable path for creating a new sync folder.

View File

@@ -16,6 +16,7 @@
#include "folderstatusdelegate.h"
#include "folderstatusmodel.h"
#include "folderstatusview.h"
#include "folderman.h"
#include "accountstate.h"
#include <theme.h>
@@ -24,6 +25,7 @@
#include <QFileIconProvider>
#include <QPainter>
#include <QApplication>
#include <QMouseEvent>
inline static QFont makeAliasFont(const QFont &normalFont)
{
@@ -110,6 +112,10 @@ int FolderStatusDelegate::rootFolderHeightWithoutErrors(const QFontMetrics &fm,
void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if (index.data(AddButton).toBool()) {
const_cast<QStyleOptionViewItem &>(option).showDecorationSelected = false;
}
QStyledItemDelegate::paint(painter, option, index);
auto textAlign = Qt::AlignLeft;
@@ -129,15 +135,15 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
int margin = subFm.height() / 4;
if (index.data(AddButton).toBool()) {
QSize hint = sizeHint(option, index);
QStyleOptionButton opt;
static_cast<QStyleOption &>(opt) = option;
opt.state &= ~QStyle::State_Selected;
opt.state |= QStyle::State_Raised;
if (opt.state & QStyle::State_Enabled && opt.state & QStyle::State_MouseOver && index == _pressedIndex) {
opt.state |= QStyle::State_Sunken;
} else {
opt.state |= QStyle::State_Raised;
}
opt.text = addFolderText();
opt.rect.setWidth(qMin(opt.rect.width(), hint.width()));
opt.rect.adjust(0, aliasMargin, 0, -aliasMargin);
opt.rect = QStyle::visualRect(option.direction, option.rect, opt.rect);
opt.rect = addButtonRect(option.rect, option.direction);
painter->save();
painter->setFont(qApp->font("QPushButton"));
QApplication::style()->drawControl(QStyle::CE_PushButton, &opt, painter, option.widget);
@@ -352,6 +358,27 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
bool FolderStatusDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
const QStyleOptionViewItem &option, const QModelIndex &index)
{
switch (event->type()) {
case QEvent::MouseButtonPress:
case QEvent::MouseMove:
if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(option.widget)) {
QMouseEvent *me = static_cast<QMouseEvent *>(event);
QModelIndex index;
if (me->buttons()) {
index = view->indexAt(me->pos());
}
if (_pressedIndex != index) {
_pressedIndex = index;
view->viewport()->update();
}
}
break;
case QEvent::MouseButtonRelease:
_pressedIndex = QModelIndex();
break;
default:
break;
}
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
@@ -375,6 +402,16 @@ QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection
return QStyle::visualRect(direction, within, r);
}
QRect FolderStatusDelegate::addButtonRect(QRect within, Qt::LayoutDirection direction)
{
QFontMetrics fm(qApp->font("QPushButton"));
QStyleOptionButton opt;
opt.text = addFolderText();
QSize size = QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &opt, fm.size(Qt::TextSingleLine, opt.text)).expandedTo(QApplication::globalStrut());
QRect r(QPoint(within.left(), within.top() + within.height() / 2 - size.height() / 2), size);
return QStyle::visualRect(direction, within, r);
}
QRect FolderStatusDelegate::errorsListRect(QRect within)
{
QFont font = QFont();

View File

@@ -57,11 +57,13 @@ public:
* return the position of the option button within the item
*/
static QRect optionsButtonRect(QRect within, Qt::LayoutDirection direction);
static QRect addButtonRect(QRect within, Qt::LayoutDirection direction);
static QRect errorsListRect(QRect within);
static int rootFolderHeightWithoutErrors(const QFontMetrics &fm, const QFontMetrics &aliasFm);
private:
static QString addFolderText();
QPersistentModelIndex _pressedIndex;
};
} // namespace OCC

View File

@@ -0,0 +1,42 @@
/*
* Copyright (C) 2018 by J-P Nurmi <jpnurmi@gmail.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.
*/
#include "folderstatusview.h"
#include "folderstatusdelegate.h"
namespace OCC {
FolderStatusView::FolderStatusView(QWidget *parent) : QTreeView(parent)
{
}
QModelIndex FolderStatusView::indexAt(const QPoint &point) const
{
QModelIndex index = QTreeView::indexAt(point);
if (index.data(FolderStatusDelegate::AddButton).toBool() && !visualRect(index).contains(point)) {
return QModelIndex();
}
return index;
}
QRect FolderStatusView::visualRect(const QModelIndex &index) const
{
QRect rect = QTreeView::visualRect(index);
if (index.data(FolderStatusDelegate::AddButton).toBool()) {
return FolderStatusDelegate::addButtonRect(rect, layoutDirection());
}
return rect;
}
} // namespace OCC

View File

@@ -0,0 +1,39 @@
/*
* Copyright (C) 2018 by J-P Nurmi <jpnurmi@gmail.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.
*/
#ifndef FOLDERSTATUSVIEW_H
#define FOLDERSTATUSVIEW_H
#include <QTreeView>
namespace OCC {
/**
* @brief The FolderStatusView class
* @ingroup gui
*/
class FolderStatusView : public QTreeView
{
Q_OBJECT
public:
explicit FolderStatusView(QWidget *parent = nullptr);
QModelIndex indexAt(const QPoint &point) const override;
QRect visualRect(const QModelIndex &index) const override;
};
} // namespace OCC
#endif // FOLDERSTATUSVIEW_H

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