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

Compare commits

...

74 Commits

Author SHA1 Message Date
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
48 changed files with 1493 additions and 14048 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 "
@@ -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 "
@@ -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 "

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_EXECUTABLE@
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_EXECUTABLE@
Name[ca]=@APPLICATION_NAME@ client de sincro d'escriptori
GenericName[ca]=Directori de sincronització

View File

@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
# Translations
Comment[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
Icon[de_DE]=@APPLICATION_EXECUTABLE@
Name[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
GenericName[de_DE]=Synchronisationsordner
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
Icon[de]=@APPLICATION_EXECUTABLE@
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
GenericName[de]=Synchronisationsordner

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_EXECUTABLE@
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_EXECUTABLE@
Name[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
GenericName[lv]=Mapju Sinhronizēšana

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_EXECUTABLE@
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
Icon[nb_NO]=@APPLICATION_EXECUTABLE@
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_EXECUTABLE@
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_EXECUTABLE@
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_EXECUTABLE@
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
Icon[pt_PT]=@APPLICATION_EXECUTABLE@
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
GenericName[pt_PT]=Sincronização de Pasta

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

@@ -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

@@ -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

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>

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

File diff suppressed because it is too large Load Diff

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
@@ -95,7 +94,6 @@ set(client_SRCS
proxyauthdialog.cpp
synclogdialog.cpp
tooltipupdater.cpp
notificationwidget.cpp
notificationconfirmjob.cpp
servernotificationhandler.cpp
guiutility.cpp

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;
}
@@ -228,16 +232,11 @@ void ActivityItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
painter->setPen(p.color(QPalette::Disabled, QPalette::Text));
// 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;
QPalette::ColorGroup cg = option.state & (QStyle::State_Enabled | QStyle::State_Active)
? QPalette::Normal
: QPalette::Inactive;
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.color(cg, QPalette::HighlightedText));
else
painter->setPen(option.palette.color(cg, QPalette::Text));
painter->setPen(option.palette.color(cg, 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,12 +257,6 @@ 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);
}

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;
@@ -237,6 +237,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 +277,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,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>693</width>
<width>652</width>
<height>556</height>
</rect>
</property>
@@ -77,8 +77,11 @@
<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>
<item>
<widget class="QListView" name="_activityList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
@@ -92,18 +95,18 @@
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
<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>
<red>252</red>
<green>252</green>
<blue>252</blue>
</color>
</brush>
</colorrole>
@@ -112,18 +115,18 @@
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
<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>
<red>252</red>
<green>252</green>
<blue>252</blue>
</color>
</brush>
</colorrole>
@@ -132,18 +135,18 @@
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
<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>
<red>252</red>
<green>252</green>
<blue>252</blue>
</color>
</brush>
</colorrole>
@@ -151,13 +154,13 @@
</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 +188,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 +204,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

@@ -20,11 +20,10 @@
namespace OCC {
Q_DECLARE_LOGGING_CATEGORY(lcNotifications)
Q_LOGGING_CATEGORY(lcNotificationsJob, "nextcloud.gui.notifications", QtInfoMsg)
NotificationConfirmJob::NotificationConfirmJob(AccountPtr account)
: AbstractNetworkJob(account, "")
, _widget(0)
{
setIgnoreCredentialFailure(true);
}
@@ -35,20 +34,10 @@ void NotificationConfirmJob::setLinkAndVerb(const QUrl &link, const QByteArray &
_verb = verb;
}
void NotificationConfirmJob::setWidget(NotificationWidget *widget)
{
_widget = widget;
}
NotificationWidget *NotificationConfirmJob::widget()
{
return _widget;
}
void NotificationConfirmJob::start()
{
if (!_link.isValid()) {
qCWarning(lcNotifications) << "Attempt to trigger invalid URL: " << _link.toString();
qCWarning(lcNotificationsJob) << "Attempt to trigger invalid URL: " << _link.toString();
return;
}
QNetworkRequest req;

View File

@@ -25,8 +25,6 @@
namespace OCC {
class NotificationWidget;
/**
* @brief The NotificationConfirmJob class
* @ingroup gui
@@ -54,20 +52,6 @@ public:
*/
void start() Q_DECL_OVERRIDE;
/**
* @brief setWidget stores the associated widget to be able to use
* it when the job has finished
* @param widget pointer to the notification widget to store
*/
void setWidget(NotificationWidget *widget);
/**
* @brief widget - get the associated notification widget as stored
* with setWidget method.
* @return widget pointer to the notification widget
*/
NotificationWidget *widget();
signals:
/**
@@ -83,7 +67,6 @@ private slots:
private:
QByteArray _verb;
QUrl _link;
NotificationWidget *_widget;
};
}

View File

@@ -1,169 +0,0 @@
/*
* Copyright (C) by Klaas Freitag <freitag@owncloud.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 "notificationwidget.h"
#include "QProgressIndicator.h"
#include "common/utility.h"
#include "common/asserts.h"
#include "guiutility.h"
#include <QPushButton>
#include "ocsjob.h"
namespace OCC {
Q_LOGGING_CATEGORY(lcNotifications, "nextcloud.gui.notifications", QtInfoMsg)
NotificationWidget::NotificationWidget(QWidget *parent)
: QWidget(parent)
{
_ui.setupUi(this);
_progressIndi = new QProgressIndicator(this);
_ui.horizontalLayout->addWidget(_progressIndi);
}
void NotificationWidget::setActivity(const Activity &activity)
{
_myActivity = activity;
_accountName = activity._accName;
ASSERT(!_accountName.isEmpty());
_ui._subjectLabel->setVisible(!activity._subject.isEmpty());
_ui._messageLabel->setVisible(!activity._message.isEmpty());
_ui._subjectLabel->setText(activity._subject);
_ui._messageLabel->setText(activity._message);
_ui._notifIcon->setPixmap(QPixmap(":/client/resources/bell.svg"));
_ui._notifIcon->setMinimumWidth(22);
_ui._notifIcon->setMinimumHeight(22);
_ui._notifIcon->show();
QString tText = tr("%1").arg(Utility::timeAgoInWords(activity._dateTime));
_ui._timeLabel->setText(tText);
// always remove the buttons
foreach (auto button, _ui._buttonBox->buttons()) {
_ui._buttonBox->removeButton(button);
}
_buttons.clear();
// open the notification in the browser if there is a link
if(!_myActivity._link.isEmpty()){
QString buttonText(tr("More information"));
QPushButton *openBrowser = _ui._buttonBox->addButton(buttonText, QDialogButtonBox::AcceptRole);
openBrowser->setDefault(true);
connect(openBrowser, &QAbstractButton::clicked, this, &NotificationWidget::slotOpenBrowserButtonClicked);
_buttons.prepend(openBrowser);
}
// display buttons for the links
if (activity._links.isEmpty()) {
// is there any case where this code is executed?
// in case there is no action defined, do a close button.
QPushButton *b = _ui._buttonBox->addButton(QDialogButtonBox::Close);
b->setDefault(true);
connect(b, &QAbstractButton::clicked, this, &NotificationWidget::slotButtonClicked);
_buttons.append(b);
} else {
foreach (auto link, activity._links) {
QPushButton *b = _ui._buttonBox->addButton(link._label, QDialogButtonBox::AcceptRole);
b->setDefault(link._isPrimary);
connect(b, &QAbstractButton::clicked, this, &NotificationWidget::slotButtonClicked);
_buttons.append(b);
}
}
}
Activity NotificationWidget::activity() const
{
return _myActivity;
}
void NotificationWidget::slotOpenBrowserButtonClicked(){
QUrl url(_myActivity._link);
Utility::openBrowser(url, this);
}
void NotificationWidget::slotButtonClicked()
{
QObject *buttonWidget = QObject::sender();
int index = -1;
if (buttonWidget) {
// find the button that was clicked, it has to be in the list
// of buttons that were added to the button box before.
for (int i = 0; i < _buttons.count(); i++) {
if (_buttons.at(i) == buttonWidget) {
index = i;
}
_buttons.at(i)->setEnabled(false);
}
// there is an extra button: 'Open'
if(!_myActivity._link.isEmpty())
index--;
// if the button was found, the link must be called
if (index > -1 && _myActivity._links.count() == 0) {
// no links, that means it was the close button
// empty link. Just close and remove the widget.
QString doneText = tr("Closing in a few seconds...");
_ui._timeLabel->setText(doneText);
emit requestCleanupAndBlacklist(_myActivity);
return;
}
if (index > -1 && index < _myActivity._links.count()) {
ActivityLink triggeredLink = _myActivity._links.at(index);
_actionLabel = triggeredLink._label;
if (!triggeredLink._link.isEmpty()) {
qCInfo(lcNotifications) << "Notification Link: " << triggeredLink._verb << triggeredLink._link;
_progressIndi->startAnimation();
emit sendNotificationRequest(_accountName, triggeredLink._link, triggeredLink._verb);
}
}
}
}
void NotificationWidget::slotNotificationRequestFinished(int statusCode)
{
int i = 0;
QString doneText;
QLocale locale;
QString timeStr = locale.toString(QTime::currentTime());
// the ocs API returns stat code 100 or 200 inside the xml if it succeeded.
if (statusCode != OCS_SUCCESS_STATUS_CODE && statusCode != OCS_SUCCESS_STATUS_CODE_V2) {
qCWarning(lcNotifications) << "Notification Request to Server failed, leave button visible.";
for (i = 0; i < _buttons.count(); i++) {
_buttons.at(i)->setEnabled(true);
}
//: The second parameter is a time, such as 'failed at 09:58pm'
doneText = tr("%1 request failed at %2").arg(_actionLabel, timeStr);
} else {
// the call to the ocs API succeeded.
_ui._buttonBox->hide();
//: The second parameter is a time, such as 'selected at 09:58pm'
doneText = tr("'%1' selected at %2").arg(_actionLabel, timeStr);
}
_ui._timeLabel->setText(doneText);
_progressIndi->stopAnimation();
}
}

View File

@@ -1,61 +0,0 @@
/*
* Copyright (C) by Klaas Freitag <freitag@owncloud.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 NOTIFICATIONWIDGET_H
#define NOTIFICATIONWIDGET_H
#include <QWidget>
#include "activitydata.h"
#include "ui_notificationwidget.h"
#define NOTIFICATION_WIDGET_CLOSE_AFTER_MILLISECS 4800
class QProgressIndicator;
namespace OCC {
class NotificationWidget : public QWidget
{
Q_OBJECT
public:
explicit NotificationWidget(QWidget *parent = 0);
bool readyToClose();
Activity activity() const;
signals:
void sendNotificationRequest(const QString &, const QString &link, const QByteArray &verb);
void requestCleanupAndBlacklist(const Activity &activity);
public slots:
void setActivity(const Activity &activity);
void slotNotificationRequestFinished(int statusCode);
private slots:
void slotButtonClicked();
void slotOpenBrowserButtonClicked();
private:
Ui_NotificationWidget _ui;
Activity _myActivity;
QList<QPushButton *> _buttons;
QString _accountName;
QProgressIndicator *_progressIndi;
QString _actionLabel;
};
}
#endif // NOTIFICATIONWIDGET_H

View File

@@ -1,185 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NotificationWidget</class>
<widget class="QWidget" name="NotificationWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>725</width>
<height>129</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<property name="leftMargin">
<number>24</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>26</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>0</number>
</property>
<property name="verticalSpacing">
<number>2</number>
</property>
<item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<layout class="QHBoxLayout" name="labelsHorizontalLayout" stretch="1,1">
<property name="spacing">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="_notifIcon">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../../resources/bell.svg</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
</property>
<property name="margin">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="_subjectLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Lorem ipsum dolor sit amet</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="_messageLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod temporm </string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="margin">
<number>0</number>
</property>
<property name="indent">
<number>28</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>6</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>28</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="_timeLabel">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="_buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -58,7 +58,6 @@
namespace OCC {
const char propertyAccountC[] = "oc_account";
const char propertyMenuC[] = "oc_account_menu";
ownCloudGui::ownCloudGui(Application *parent)
: QObject(parent)
@@ -617,11 +616,11 @@ void ownCloudGui::updateContextMenu()
_contextMenu->addMenu(accountMenu);
addAccountContextMenu(account, accountMenu, true);
fetchNavigationApps(account, accountMenu);
fetchNavigationApps(account);
}
} else if (accountList.count() == 1) {
addAccountContextMenu(accountList.first(), _contextMenu.data(), false);
fetchNavigationApps(accountList.first(), _contextMenu.data());
fetchNavigationApps(accountList.first());
}
_contextMenu->addSeparator();
@@ -769,10 +768,9 @@ void ownCloudGui::slotEtagResponseHeaderReceived(const QByteArray &value, int st
}
}
void ownCloudGui::fetchNavigationApps(AccountStatePtr account, QMenu *accountMenu){
void ownCloudGui::fetchNavigationApps(AccountStatePtr account){
OcsNavigationAppsJob *job = new OcsNavigationAppsJob(account->account());
job->setProperty(propertyAccountC, QVariant::fromValue(account));
job->setProperty(propertyMenuC, QVariant::fromValue(accountMenu));
job->addRawHeader("If-None-Match", account->navigationAppsEtagResponseHeader());
connect(job, &OcsNavigationAppsJob::appsJobFinished, this, &ownCloudGui::slotNavigationAppsFetched);
connect(job, &OcsNavigationAppsJob::etagResponseHeaderReceived, this, &ownCloudGui::slotEtagResponseHeaderReceived);
@@ -829,9 +827,18 @@ void ownCloudGui::slotNavigationAppsFetched(const QJsonDocument &reply, int stat
}
}
if(QObject *accountMenuObj = qvariant_cast<QObject*>(sender()->property(propertyMenuC))){
if(QMenu *accountMenu = dynamic_cast<QMenu*>(accountMenuObj))
buildNavigationAppsMenu(account, accountMenu);
// TODO see pull #523
auto accountList = AccountManager::instance()->accounts();
if(accountList.size() > 1){
// the list of apps will be displayed under the account that it belongs to
foreach (QMenu *accountMenu, _accountMenus) {
if(accountMenu->title() == account->account()->displayName()){
buildNavigationAppsMenu(account, accountMenu);
break;
}
}
} else if(accountList.size() == 1){
buildNavigationAppsMenu(account, _contextMenu.data());
}
}
}

View File

@@ -127,7 +127,7 @@ private:
void setPauseOnAllFoldersHelper(bool pause);
void setupActions();
void addAccountContextMenu(AccountStatePtr accountState, QMenu *menu, bool separateMenu);
void fetchNavigationApps(AccountStatePtr account, QMenu *accountMenu);
void fetchNavigationApps(AccountStatePtr account);
void buildNavigationAppsMenu(AccountStatePtr account, QMenu *accountMenu);
QPointer<Systray> _tray;

View File

@@ -96,7 +96,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
accountAdded(ai.data());
}
_actionBefore = new QAction;
_actionBefore = new QAction(this);
_toolBar->addAction(_actionBefore);
// Adds space between users + activities and general + network actions

View File

@@ -44,7 +44,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::NoButton</set>
</property>
</widget>
</item>

View File

@@ -58,6 +58,7 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
, _unshareLinkAction(nullptr)
{
_ui->setupUi(this);
_ui->shareLinkToolButton->hide();
//Is this a file or folder?
QFileInfo fi(localPath);
@@ -65,20 +66,14 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
// the following progress indicator widgets are added to layouts which makes them
// automatically deleted once the dialog dies.
_pi_create = new QProgressIndicator();
_pi_password = new QProgressIndicator();
_pi_date = new QProgressIndicator();
_pi_editing = new QProgressIndicator();
_pi_indicator = new QProgressIndicator();
_ui->horizontalLayout->insertWidget(1, _pi_indicator, Qt::AlignCenter);
_ui->indicatorWidget->hide();
// TODO: where to loading should show up?
// _ui->verticalLayout->addWidget(_pi_create, Qt::AlignCenter);
// _ui->verticalLayout->addWidget(_pi_password, Qt::AlignCenter);
// _ui->verticalLayout->addWidget(_pi_editing, Qt::AlignCenter);
connect(_ui->enableShareLink, &QCheckBox::toggled, this, &ShareLinkWidget::slotCreateorDeleteShareLink);
connect(_ui->enableShareLink, &QCheckBox::toggled, this, &ShareLinkWidget::slotCreateOrDeleteShareLink);
connect(_ui->lineEdit_password, &QLineEdit::returnPressed, this, &ShareLinkWidget::slotCreatePassword);
connect(_ui->confirmPassword, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCreatePassword);
connect(_ui->confirmExpirationDate, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCreatePassword);
connect(_ui->confirmExpirationDate, &QAbstractButton::clicked, this, &ShareLinkWidget::slotSetExpireDate);
connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareLinkWidget::slotExpireDateChanged);
_ui->errorLabel->hide();
@@ -143,9 +138,19 @@ ShareLinkWidget::~ShareLinkWidget()
delete _ui;
}
void ShareLinkWidget::toggleAnimation(bool start){
if(start && !_pi_indicator->isAnimated())
_pi_indicator->startAnimation();
else
_pi_indicator->stopAnimation();
_ui->indicatorWidget->setVisible(start);
}
void ShareLinkWidget::getShares()
{
if (_manager) {
toggleAnimation(true);
_manager->fetchShares(_sharePath);
}
}
@@ -164,7 +169,7 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
// Connect all shares signals to gui slots
connect(share.data(), &Share::serverError, this, &ShareLinkWidget::slotServerError);
connect(share.data(), &Share::shareDeleted, this, &ShareLinkWidget::slotDeleteShareFetched);
//TODO connect(_linkShare.data(), &LinkShare::expireDateSet, this, &ShareLinkWidget::slotExpireSet);
connect(_linkShare.data(), &LinkShare::expireDateSet, this, &ShareLinkWidget::slotExpireDateSet);
connect(_linkShare.data(), &LinkShare::passwordSet, this, &ShareLinkWidget::slotPasswordSet);
connect(_linkShare.data(), &LinkShare::passwordSetError, this, &ShareLinkWidget::slotPasswordSetError);
@@ -173,12 +178,15 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
SharePermissions perm = _linkShare->getPermissions();
QActionGroup *permissionsGroup = new QActionGroup(this);
// Prepare sharing menu
_linkContextMenu = new QMenu(this);
// radio button style
permissionsGroup->setExclusive(true);
if(_isFile){
checked = perm & (SharePermissionRead & SharePermissionUpdate);
_allowEditingLinkAction = permissionsGroup->addAction(tr("Allow Editing"));
_allowEditingLinkAction = _linkContextMenu->addAction(tr("Allow Editing"));
_allowEditingLinkAction->setCheckable(true);
_allowEditingLinkAction->setChecked(checked);
@@ -202,9 +210,6 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
_allowUploadLinkAction->setChecked(checked);
}
// Prepare sharing menu
_linkContextMenu = new QMenu(this);
// Add copy action (icon only)
_copyLinkAction = _linkContextMenu->addAction(QIcon(":/client/resources/copy.svg"),
tr("Copy link"));
@@ -240,6 +245,7 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
_expirationDateLinkAction = _linkContextMenu->addAction(tr("Expiration Date"));
_expirationDateLinkAction->setCheckable(true);
if(_linkShare->getExpireDate().isValid()){
_ui->calendar->setDate(_linkShare->getExpireDate());
_expirationDateLinkAction->setChecked(true);
_ui->expirationShareProperty->show();
}
@@ -265,81 +271,46 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
_ui->shareLinkToolButton->setEnabled(true);
_ui->enableShareLink->setEnabled(true);
_ui->enableShareLink->setChecked(true);
// show sharing options
_ui->shareLinkToolButton->show();
}
toggleAnimation(false);
}
// TODO
//void ShareLinkWidget::slotShareSelectionChanged()
//{
// // Disable running progress indicators
// _pi_create->stopAnimation();
// _pi_editing->stopAnimation();
// _pi_date->stopAnimation();
// _pi_password->stopAnimation();
// _ui->errorLabel->hide();
// _ui->passwordShareProperty->show();
// _ui->expirationShareProperty->show();
// if (!_account->capabilities().sharePublicLinkAllowUpload()) {
// _allowUploadEditingLinkAction->setEnabled(false);
// _allowUploadLinkAction->setEnabled(false);
// }
// // Password state
// _ui->lineEdit_password->setEnabled(_linkShare->isPasswordSet());
// if(_linkShare->isPasswordSet()) _ui->lineEdit_password->setPlaceholderText("********");
// _ui->lineEdit_password->setText(QString());
// _ui->lineEdit_password->setEnabled(_linkShare->isPasswordSet());
// _ui->confirmPassword->setEnabled(_linkShare->isPasswordSet());
// // Expiry state
// _ui->calendar->setMinimumDate(QDate::currentDate().addDays(1));
// if (_linkShare->getExpireDate().isValid()) {
// _ui->calendar->setDate(_linkShare->getExpireDate());
// _ui->calendar->setEnabled(true);
// }
// // Public upload state (box is hidden for files)
// if (!_isFile) {
// if (_linkShare->getPublicUpload()) {
// if (_linkShare->getShowFileListing()) {
// _allowUploadEditingLinkAction->setChecked(true);
// } else {
// _allowUploadLinkAction->setChecked(true);
// }
// } else {
// _readOnlyLinkAction->setChecked(true);
// }
// }
//}
void ShareLinkWidget::setExpireDate(const QDate &date)
{
if (_linkShare) {
_pi_date->startAnimation();
toggleAnimation(true);
_ui->errorLabel->hide();
_linkShare->setExpireDate(date);
}
}
// TODO
//void ShareLinkWidget::slotExpireSet()
//{
// if (sender() == _linkShare.data()) {
// slotShareSelectionChanged();
// }
//}
void ShareLinkWidget::slotExpireDateSet()
{
toggleAnimation(false);
}
void ShareLinkWidget::slotExpireDateChanged(const QDate &date)
{
setExpireDate(date);
}
void ShareLinkWidget::slotSetExpireDate()
{
slotExpireDateChanged(_ui->calendar->date());
}
void ShareLinkWidget::slotCreatePassword()
{
if (!_manager) {
return;
}
toggleAnimation(true);
if (!_linkShare) {
// If share creation requires a password, we'll be in this case
if (_ui->lineEdit_password->text().isEmpty()) {
@@ -347,21 +318,21 @@ void ShareLinkWidget::slotCreatePassword()
return;
}
_pi_create->startAnimation();
_manager->createLinkShare(_sharePath, QString(), _ui->lineEdit_password->text());
} else {
setPassword(_ui->lineEdit_password->text());
}
}
void ShareLinkWidget::slotCreateorDeleteShareLink(bool checked)
void ShareLinkWidget::slotCreateOrDeleteShareLink(bool checked)
{
if (!_manager) {
qCWarning(lcSharing) << "No share manager set.";
return;
}
_pi_create->startAnimation();
toggleAnimation(true);
if(checked){
_manager->createLinkShare(_sharePath, QString(), QString());
} else {
@@ -371,14 +342,13 @@ void ShareLinkWidget::slotCreateorDeleteShareLink(bool checked)
}
confirmAndDeleteShare();
}
_ui->shareLinkToolButton->setEnabled(checked);
}
void ShareLinkWidget::setPassword(const QString &password)
{
if (_linkShare) {
_pi_password->startAnimation();
toggleAnimation(true);
_ui->errorLabel->hide();
_linkShare->setPassword(password);
}
@@ -389,7 +359,6 @@ void ShareLinkWidget::slotPasswordSet()
if (!_linkShare)
return;
_pi_password->stopAnimation();
_ui->lineEdit_password->setText(QString());
if (_linkShare->isPasswordSet()) {
_ui->lineEdit_password->setPlaceholderText("********");
@@ -398,6 +367,8 @@ void ShareLinkWidget::slotPasswordSet()
_ui->lineEdit_password->setPlaceholderText(QString());
}
toggleAnimation(false);
/*
* When setting/deleting a password from a share the old share is
* deleted and a new one is created. So we need to refetch the shares
@@ -410,21 +381,26 @@ void ShareLinkWidget::slotPasswordSet()
void ShareLinkWidget::slotDeleteShareFetched()
{
toggleAnimation(true);
_linkShare.clear();
_ui->enableShareLink->setChecked(false);
_ui->shareLinkToolButton->setEnabled(false);
_ui->shareLinkToolButton->hide();
togglePasswordOptions(false);
toggleExpireDateOptions(false);
getShares();
}
void ShareLinkWidget::slotCreateShareFetched()
{
_pi_create->stopAnimation();
_pi_password->stopAnimation();
toggleAnimation(true);
getShares();
}
void ShareLinkWidget::slotCreateShareRequiresPassword(const QString &message)
{
// Prepare password entry
_pi_create->stopAnimation();
_pi_password->stopAnimation();
toggleAnimation(true);
_ui->passwordShareProperty->show();
if (!message.isEmpty()) {
_ui->errorLabel->setText(message);
@@ -439,7 +415,14 @@ void ShareLinkWidget::slotCreateShareRequiresPassword(const QString &message)
void ShareLinkWidget::togglePasswordOptions(bool enable)
{
_ui->passwordShareProperty->setVisible(enable);
if(enable) _ui->lineEdit_password->setFocus();
if(enable) {
_ui->lineEdit_password->setFocus();
} else {
// 'deletes' password
if(_linkShare)
_linkShare->setPassword(QString());
}
}
void ShareLinkWidget::toggleExpireDateOptions(bool enable)
@@ -447,9 +430,13 @@ void ShareLinkWidget::toggleExpireDateOptions(bool enable)
_ui->expirationShareProperty->setVisible(enable);
if (enable) {
const QDate date = QDate::currentDate().addDays(1);
setExpireDate(date);
_ui->calendar->setDate(date);
_ui->calendar->setMinimumDate(date);
_ui->calendar->setFocus();
} else {
// 'deletes' expire date
if(_linkShare)
_linkShare->setExpireDate(QDate());
}
}
@@ -469,12 +456,8 @@ void ShareLinkWidget::confirmAndDeleteShare()
connect(messageBox, &QMessageBox::finished, this,
[messageBox, yesButton, this]() {
if (messageBox->clickedButton() == yesButton){
// TODO: dlete is not hapenning correctly
if (messageBox->clickedButton() == yesButton)
this->_linkShare->deleteShare();
this->_ui->enableShareLink->setChecked(false);
this->_ui->shareLinkToolButton->setEnabled(false);
}
});
messageBox->open();
}
@@ -525,16 +508,13 @@ void ShareLinkWidget::slotLinkContextMenuActionTriggered(QAction *action)
toggleExpireDateOptions(state);
} else if (action == _unshareLinkAction) {
confirmAndDeleteShare();
slotCreateOrDeleteShareLink(state);
}
}
void ShareLinkWidget::slotServerError(int code, const QString &message)
{
_pi_create->stopAnimation();
_pi_date->stopAnimation();
_pi_password->stopAnimation();
_pi_editing->stopAnimation();
toggleAnimation(false);
qCWarning(lcSharing) << "Error from server" << code << message;
displayError(message);

View File

@@ -61,10 +61,11 @@ private slots:
void slotSharesFetched(const QList<QSharedPointer<Share>> &shares);
//void slotShareSelectionChanged();
void slotCreateorDeleteShareLink(bool checked);
void slotCreateOrDeleteShareLink(bool checked);
void slotCreatePassword();
void slotExpireDateChanged(const QDate &date);
void slotSetExpireDate();
void slotContextMenuButtonClicked();
void slotLinkContextMenuActionTriggered(QAction *action);
@@ -72,8 +73,9 @@ private slots:
void slotDeleteShareFetched();
void slotCreateShareFetched();
void slotCreateShareRequiresPassword(const QString &message);
void slotPasswordSet();
//void slotExpireSet();
void slotExpireDateSet();
void slotServerError(int code, const QString &message);
void slotPasswordSetError(int code, const QString &message);
@@ -95,10 +97,7 @@ private:
/** Retrieve a share's name, accounting for _namesSupported */
QString shareName() const;
/**
* Retrieve the selected share, returning 0 if none.
*/
//QSharedPointer<LinkShare> selectedShare() const;
void toggleAnimation(bool start);
Ui::ShareLinkWidget *_ui;
AccountPtr _account;
@@ -106,10 +105,7 @@ private:
QString _localPath;
QString _shareUrl;
QProgressIndicator *_pi_create;
QProgressIndicator *_pi_password;
QProgressIndicator *_pi_date;
QProgressIndicator *_pi_editing;
QProgressIndicator *_pi_indicator;
ShareManager *_manager;
QSharedPointer<LinkShare> _linkShare;

View File

@@ -181,6 +181,27 @@
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="indicatorWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</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>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="passwordShareProperty" native="true">
<property name="sizePolicy">
@@ -266,7 +287,7 @@
<enum>QLineEdit::Password</enum>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>

View File

@@ -376,14 +376,15 @@ ShareUserLine::ShareUserLine(QSharedPointer<Share> share,
// adds permissions
// can edit permission
bool enabled = maxSharingPermissions & (SharePermissionRead & SharePermissionUpdate);
if(!_isFile) enabled = enabled & (SharePermissionCreate & SharePermissionDelete);
bool enabled = (maxSharingPermissions & SharePermissionUpdate);
if(!_isFile) enabled = enabled && (maxSharingPermissions & SharePermissionCreate &&
maxSharingPermissions & SharePermissionDelete);
_ui->permissionsEdit->setEnabled(enabled);
connect(_ui->permissionsEdit, &QAbstractButton::clicked, this, &ShareUserLine::slotEditPermissionsChanged);
// create menu with checkable permissions
QMenu *menu = new QMenu(this);
_permissionReshare= new QAction(tr("Can reshare"));
_permissionReshare= new QAction(tr("Can reshare"), this);
_permissionReshare->setCheckable(true);
_permissionReshare->setEnabled(maxSharingPermissions & SharePermissionShare);
menu->addAction(_permissionReshare);
@@ -393,19 +394,19 @@ ShareUserLine::ShareUserLine(QSharedPointer<Share> share,
* Files can't have create or delete permissions
*/
if (!_isFile) {
_permissionCreate = new QAction(tr("Can create"));
_permissionCreate = new QAction(tr("Can create"), this);
_permissionCreate->setCheckable(true);
_permissionCreate->setEnabled(maxSharingPermissions & SharePermissionCreate);
menu->addAction(_permissionCreate);
connect(_permissionCreate, &QAction::triggered, this, &ShareUserLine::slotPermissionsChanged);
_permissionChange = new QAction(tr("Can change"));
_permissionChange = new QAction(tr("Can change"), this);
_permissionChange->setCheckable(true);
_permissionChange->setEnabled(maxSharingPermissions & SharePermissionUpdate);
menu->addAction(_permissionChange);
connect(_permissionChange, &QAction::triggered, this, &ShareUserLine::slotPermissionsChanged);
_permissionDelete = new QAction(tr("Can delete"));
_permissionDelete = new QAction(tr("Can delete"), this);
_permissionDelete->setCheckable(true);
_permissionDelete->setEnabled(maxSharingPermissions & SharePermissionDelete);
menu->addAction(_permissionDelete);
@@ -526,25 +527,28 @@ void ShareUserLine::slotEditPermissionsChanged()
Share::Permissions permissions = SharePermissionRead;
if (_permissionReshare->isChecked()) {
permissions |= SharePermissionShare;
}
// folders edit = CREATE, READ, UPDATE, DELETE
// files edit = READ + UPDATE
if (_ui->permissionsEdit->checkState() == Qt::Checked) {
if (_permissionChange->isEnabled())
permissions |= SharePermissionUpdate;
/*
* Files can't have create or delete permisisons
*/
if (!_isFile) {
if (_permissionChange->isEnabled())
permissions |= SharePermissionUpdate;
if (_permissionCreate->isEnabled())
permissions |= SharePermissionCreate;
if (_permissionDelete->isEnabled())
permissions |= SharePermissionDelete;
} else {
permissions |= SharePermissionUpdate;
}
}
if(_isFile && _permissionReshare->isEnabled() && _permissionReshare->isChecked())
permissions |= SharePermissionShare;
_share->setPermissions(permissions);
}
@@ -554,23 +558,20 @@ void ShareUserLine::slotPermissionsChanged()
Share::Permissions permissions = SharePermissionRead;
if (_permissionReshare->isChecked()) {
if (_permissionReshare->isChecked())
permissions |= SharePermissionShare;
}
if (!_isFile) {
if (_permissionCreate->isChecked()) {
permissions |= SharePermissionCreate;
}
if (_permissionChange->isChecked()) {
if (_permissionChange->isChecked())
permissions |= SharePermissionUpdate;
}
if (_permissionDelete->isChecked()) {
if (_permissionCreate->isChecked())
permissions |= SharePermissionCreate;
if (_permissionDelete->isChecked())
permissions |= SharePermissionDelete;
}
}
} else {
if (_ui->permissionsEdit->isChecked())
permissions |= SharePermissionUpdate;
}
_share->setPermissions(permissions);
}
@@ -616,21 +617,20 @@ void ShareUserLine::displayPermissions()
{
auto perm = _share->getPermissions();
if (perm & SharePermissionUpdate
&& (_isFile
|| (perm & SharePermissionCreate
&& perm & SharePermissionDelete))) {
// folders edit = CREATE, READ, UPDATE, DELETE
// files edit = READ + UPDATE
if (perm & SharePermissionUpdate && (_isFile ||
(perm & SharePermissionCreate && perm & SharePermissionDelete))) {
_ui->permissionsEdit->setCheckState(Qt::Checked);
} else if (perm & (SharePermissionUpdate | SharePermissionCreate | SharePermissionDelete)) {
} else if (!_isFile && perm & (SharePermissionUpdate | SharePermissionCreate | SharePermissionDelete)) {
_ui->permissionsEdit->setCheckState(Qt::PartiallyChecked);
} else {
} else if(perm & SharePermissionRead) {
_ui->permissionsEdit->setCheckState(Qt::Unchecked);
}
_permissionReshare->setChecked(Qt::Unchecked);
if (perm & SharePermissionShare) {
// edit is independent of reshare
if (perm & SharePermissionShare)
_permissionReshare->setChecked(Qt::Checked);
}
if(!_isFile){
_permissionCreate->setChecked(perm & SharePermissionCreate);

View File

@@ -6,6 +6,7 @@
#include <QWebEngineUrlRequestJob>
#include <QWebEngineUrlSchemeHandler>
#include <QWebEngineView>
#include <QDesktopServices>
#include <QProgressBar>
#include <QLoggingCategory>
#include <QLocale>
@@ -36,6 +37,19 @@ Q_SIGNALS:
void urlCatched(QString user, QString pass, QString host);
};
class WebEnginePage : public QWebEnginePage {
public:
WebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr);
QWebEnginePage * createWindow(QWebEnginePage::WebWindowType type) override;
};
// We need a separate class here, since we cannot simply return the same WebEnginePage object
// this leads to a strage segfault somewhere deep inside of the QWebEngine code
class ExternalWebEnginePage : public QWebEnginePage {
public:
ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr);
bool acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) override;
};
WebView::WebView(QWidget *parent)
: QWidget(parent),
@@ -45,11 +59,13 @@ WebView::WebView(QWidget *parent)
_webview = new QWebEngineView(this);
_profile = new QWebEngineProfile(this);
_page = new QWebEnginePage(_profile);
_page = new WebEnginePage(_profile);
_interceptor = new WebViewPageUrlRequestInterceptor(this);
_schemeHandler = new WebViewPageUrlSchemeHandler(this);
_profile->setHttpUserAgent(Utility::userAgentString());
const QString userAgent(Utility::userAgentString());
_profile->setHttpUserAgent(userAgent);
QWebEngineProfile::defaultProfile()->setHttpUserAgent(userAgent);
_profile->setRequestInterceptor(_interceptor);
_profile->installUrlSchemeHandler("nc", _schemeHandler);
@@ -120,6 +136,27 @@ void WebViewPageUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *reques
emit urlCatched(user, password, server);
}
WebEnginePage::WebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) {
}
QWebEnginePage * WebEnginePage::createWindow(QWebEnginePage::WebWindowType type) {
ExternalWebEnginePage *view = new ExternalWebEnginePage(this->profile());
return view;
}
ExternalWebEnginePage::ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) {
}
bool ExternalWebEnginePage::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame)
{
QDesktopServices::openUrl(url);
return false;
}
}
#include "webview.moc"

View File

@@ -14,6 +14,7 @@ namespace OCC {
class WebViewPageUrlRequestInterceptor;
class WebViewPageUrlSchemeHandler;
class WebEnginePage;
class WebView : public QWidget
{
@@ -30,7 +31,7 @@ private:
QWebEngineView *_webview;
QWebEngineProfile *_profile;
QWebEnginePage *_page;
WebEnginePage *_page;
WebViewPageUrlRequestInterceptor *_interceptor;
WebViewPageUrlSchemeHandler *_schemeHandler;

View File

@@ -938,7 +938,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderstatusdelegate.cpp" line="46"/>
<source>Add Folder Sync Connection</source>
<translation>Přidat synchronizaci adresáře</translation>
<translation>Přidat spojení synchronizace složky</translation>
</message>
<message>
<location filename="../src/gui/folderstatusdelegate.cpp" line="249"/>
@@ -956,12 +956,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="143"/>
<source>You need to be connected to add a folder</source>
<translation>Pro přidání adresáře musíte být připojeni</translation>
<translation>Pro přidání složky je třeba, abyste byli připojení</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="145"/>
<source>Click this button to add a folder to synchronize.</source>
<translation>Stisknutím tlačítka přidáte adresář k synchronizaci.</translation>
<translation>Stisknutím tlačítka přidáte složku k synchronizaci.</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="154"/>
@@ -973,7 +973,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="180"/>
<source>Error while loading the list of folders from the server.</source>
<translation>Chyba při načítání seznamu adresářů ze serveru.</translation>
<translation>Chyba při načítání seznamu složek ze serveru.</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="231"/>
@@ -983,17 +983,17 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="183"/>
<source>Fetching folder list from server...</source>
<translation>Načítání seznamu adresářů ze serveru...</translation>
<translation>Načítání seznamu složek ze serveru</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="209"/>
<source>There are unresolved conflicts. Click for details.</source>
<translation>Existují nevyřešené konflikty. Klikněte pro detaily.</translation>
<translation>Existují nevyřešené konflikty. Klikněte pro podrobnosti.</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="878"/>
<source>Checking for changes in &apos;%1&apos;</source>
<translation>Kontrola změn v &apos;%1&apos;</translation>
<translation>Zjišťování případných změn v %1</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="884"/>
@@ -1004,19 +1004,19 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<location filename="../src/gui/folderstatusmodel.cpp" line="919"/>
<source>, &apos;%1&apos;</source>
<extracomment>Build a list of file names</extracomment>
<translation>, &apos;%1&apos;</translation>
<translation>, %1</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="922"/>
<source>&apos;%1&apos;</source>
<extracomment>Argument is a file name</extracomment>
<translation>&apos;%1&apos;</translation>
<translation>%1</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="946"/>
<source>Syncing %1</source>
<extracomment>Example text: &quot;Syncing 'foo.txt', 'bar.txt'&quot;</extracomment>
<translation>Synchronizuji %1</translation>
<translation>Synchronizuje se %1</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="948"/>
@@ -1088,7 +1088,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="1064"/>
<source>Preparing to sync...</source>
<translation>Synchronizace se připravuje...</translation>
<translation>Příprava na synchronizaci</translation>
</message>
</context>
<context>
@@ -1119,7 +1119,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderwizard.cpp" line="133"/>
<source>Select the source folder</source>
<translation>Zvolte zdrojový adresář</translation>
<translation>Zvolte zdrojovou složku</translation>
</message>
</context>
<context>
@@ -1127,7 +1127,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderwizard.cpp" line="181"/>
<source>Create Remote Folder</source>
<translation>Vytvořit vzdálený adresář</translation>
<translation>Vytvořit složku na protějšku</translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="182"/>
@@ -1137,7 +1137,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderwizard.cpp" line="212"/>
<source>Folder was successfully created on %1.</source>
<translation>Adresář byl úspěšně vytvořen na %1.</translation>
<translation>Složka byl úspěšně vytvořena na %1.</translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="223"/>
@@ -1147,12 +1147,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderwizard.cpp" line="225"/>
<source>Failed to create the folder on %1. Please check manually.</source>
<translation>Na %1 selhalo vytvoření adresáře. Zkontrolujte to prosím ručně.</translation>
<translation>Na %1 se nepodařilo vytvořit složku. Zkontrolujte to ručně.</translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="234"/>
<source>Failed to list a folder. Error: %1</source>
<translation>Chyba při vypsání adresáře. Chyba: %1</translation>
<translation>Chyba při vypsání složky. Chyba: %1</translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="315"/>
@@ -1162,7 +1162,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/folderwizard.cpp" line="445"/>
<source>This folder is already being synced.</source>
<translation>Tento adresář je j synchronizován.</translation>
<translation>Tato složka je synchronizována.</translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="447"/>
@@ -1291,12 +1291,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
<message>
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="100"/>
<source>Please enter %1 password:&lt;br&gt;&lt;br&gt;User: %2&lt;br&gt;Account: %3&lt;br&gt;</source>
<translation>Vložte prosím %1 heslo:&lt;br&gt;&lt;br&gt;Uživatel: %2&lt;br&gt;Účet: %3&lt;br&gt;</translation>
<translation>Zadejte heslo %1:&lt;br&gt;&lt;br&gt;Uživatel: %2&lt;br&gt;Účet: %3&lt;br&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="114"/>
<source>Reading from keychain failed with error: &apos;%1&apos;</source>
<translation>Čtení z klíčenky selhalo s chybou: &apos;%1&apos;</translation>
<translation>Čtení z klíčenky se nezdařilo s chybou: %1</translation>
</message>
<message>
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="120"/>
@@ -1413,12 +1413,12 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods
<location filename="../src/gui/issueswidget.ui" line="50"/>
<location filename="../src/gui/issueswidget.cpp" line="83"/>
<source>Folder</source>
<translation>Adresář</translation>
<translation>Složka</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="73"/>
<source>Show warnings</source>
<translation>Ukázat varování</translation>
<translation>Zobrazit varování</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="83"/>
@@ -1693,7 +1693,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods
<message>
<location filename="../src/gui/creds/oauth.cpp" line="112"/>
<source>Error returned from the server: &lt;em&gt;%1&lt;/em&gt;</source>
<translation type="unfinished"/>
<translation>Od serveru vrácena chyba: &lt;em&gt;%1&lt;/em&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="115"/>
@@ -1703,7 +1703,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods
<message>
<location filename="../src/gui/creds/oauth.cpp" line="118"/>
<source>Could not parse the JSON returned from the server: &lt;br&gt;&lt;em&gt;%1&lt;/em&gt;</source>
<translation type="unfinished"/>
<translation>Nedaří se vyhodnotit JSON data vrácená serverem:&lt;br&gt;&lt;em&gt;%1&lt;/em&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="121"/>

View File

@@ -1308,7 +1308,7 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter
<message>
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="157"/>
<source>&lt;a href=&quot;%1&quot;&gt;Click here&lt;/a&gt; to request an app password from the web interface.</source>
<translation>&lt;a href=&quot;%1&quot;&gt;Klicke hier&lt;/a&gt; um ein App-Passwort von dem Web-Interface zu erhalten.</translation>
<translation>&lt;a href=&quot;%1&quot;&gt;Klicke hier&lt;/a&gt; um ein App-Passwort vom Web-Interface zu erhalten.</translation>
</message>
</context>
<context>

View File

@@ -83,7 +83,7 @@
<message>
<location filename="../src/libsync/abstractnetworkjob.cpp" line="247"/>
<source>Unknown error: network reply was deleted</source>
<translation type="unfinished"/>
<translation>Errore ezezaguna: sareko erantzuna ezabatu da</translation>
</message>
<message>
<location filename="../src/libsync/abstractnetworkjob.cpp" line="390"/>
@@ -253,7 +253,7 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="667"/>
<source>Obtaining authorization from the browser. &lt;a href=&apos;%1&apos;&gt;Click here&lt;/a&gt; to re-open the browser.</source>
<translation type="unfinished"/>
<translation>Nabigatzailearen baimena eskuratzen. Egin &lt;a href= &apos;%1&apos;&gt;klik hemen&lt;/a&gt; nabigatzailea berrabiarazteko.</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="671"/>
@@ -388,7 +388,7 @@
<message>
<location filename="../src/gui/accountstate.cpp" line="138"/>
<source>Asking Credentials</source>
<translation type="unfinished"/>
<translation>Kredentzialak eskatzen</translation>
</message>
<message>
<location filename="../src/gui/accountstate.cpp" line="140"/>
@@ -436,17 +436,17 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="606"/>
<source>The server activity list has been copied to the clipboard.</source>
<translation type="unfinished"/>
<translation>Zerbitzariaren eginkizunen zerrenda arbelera kopiatu da.</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="610"/>
<source>The sync activity list has been copied to the clipboard.</source>
<translation type="unfinished"/>
<translation>Sinkronizatutako eginkizunen zerrenda arbelera kopiatu da.</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="613"/>
<source>The list of unsynced items has been copied to the clipboard.</source>
<translation type="unfinished"/>
<translation>Sinkronizatu gabeko elementuen zerrenda arbelera kopiatu da.</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="618"/>
@@ -747,13 +747,15 @@
<location filename="../src/gui/folder.cpp" line="888"/>
<source>A new folder larger than %1 MB has been added: %2.
</source>
<translation type="unfinished"/>
<translation>%1 MB baino handiagoa den karpeta berri bat gehitu da: %2.
</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="891"/>
<source>A folder from an external storage has been added.
</source>
<translation type="unfinished"/>
<translation>Kanpoko biltegi bateko karpeta gehitu da.
</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="892"/>
@@ -828,12 +830,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/folderman.cpp" line="1054"/>
<source> (backup)</source>
<translation type="unfinished"/>
<translation> (backup)</translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1059"/>
<source> (backup %1)</source>
<translation type="unfinished"/>
<translation> (backup %1)</translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1265"/>
@@ -936,7 +938,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/folderstatusdelegate.cpp" line="249"/>
<source>Synchronizing with local folder</source>
<translation type="unfinished"/>
<translation>Karpeta lokalarekin sinkronizatzen</translation>
</message>
<message>
<location filename="../src/gui/folderstatusdelegate.cpp" line="296"/>
@@ -949,19 +951,19 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="143"/>
<source>You need to be connected to add a folder</source>
<translation type="unfinished"/>
<translation>Konektatuta egon behar duzu karpeta bat gehitzeko</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="145"/>
<source>Click this button to add a folder to synchronize.</source>
<translation type="unfinished"/>
<translation>Klikatu botoi hau karpeta bat gehitzeko sinkronizazioari.</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="154"/>
<location filename="../src/gui/folderstatusmodel.cpp" line="156"/>
<source>%1 (%2)</source>
<extracomment>Example text: &quot;File.txt (23KB)&quot;</extracomment>
<translation type="unfinished"/>
<translation>%1 (%2)</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="180"/>
@@ -981,7 +983,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="209"/>
<source>There are unresolved conflicts. Click for details.</source>
<translation type="unfinished"/>
<translation>Konpondu gabeko gatazkak daude. Klikatu zehaztasunak ikusteko.</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="878"/>

View File

@@ -273,17 +273,17 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="785"/>
<source>There are folders that were not synchronized because they are too big: </source>
<translation type="unfinished"/>
<translation>Az alábbi mappák nem lettek szinkronizálva, mert túl nagyok:</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="787"/>
<source>There are folders that were not synchronized because they are external storages: </source>
<translation type="unfinished"/>
<translation>Az alábbi mappák nem lettek szinkronizálva, mert külső tárolóra mutatnak:</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="788"/>
<source>There are folders that were not synchronized because they are too big or external storages: </source>
<translation type="unfinished"/>
<translation>Az alábbi mappák nem lettek szinkronizálva, mert túl nagyok, vagy külső tárolóra mutatnak:</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="834"/>
@@ -373,7 +373,7 @@
<message>
<location filename="../src/gui/accountstate.cpp" line="132"/>
<source>Maintenance mode</source>
<translation type="unfinished"/>
<translation>Karbantartó üzemmód</translation>
</message>
<message>
<location filename="../src/gui/accountstate.cpp" line="134"/>
@@ -388,7 +388,7 @@
<message>
<location filename="../src/gui/accountstate.cpp" line="138"/>
<source>Asking Credentials</source>
<translation type="unfinished"/>
<translation>Hitelesítési adatok</translation>
</message>
<message>
<location filename="../src/gui/accountstate.cpp" line="140"/>
@@ -446,7 +446,7 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="613"/>
<source>The list of unsynced items has been copied to the clipboard.</source>
<translation type="unfinished"/>
<translation>A nem szinkronizált elemek listája a vágólapra került.</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="618"/>
@@ -529,7 +529,7 @@
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
<source>Certificate &amp; Key (pkcs12) :</source>
<translation type="unfinished"/>
<translation>Tanúsítvány és kulcs (pkcs12):</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
@@ -557,17 +557,17 @@
<message>
<location filename="../src/gui/application.cpp" line="164"/>
<source>Error accessing the configuration file</source>
<translation type="unfinished"/>
<translation>Hiba a konfigurációs állomány elérésében</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="165"/>
<source>There was an error while accessing the configuration file at %1.</source>
<translation type="unfinished"/>
<translation>Hiba törént az alábbi konfigurációs állomány elérésekor: %1.</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="168"/>
<source>Quit ownCloud</source>
<translation type="unfinished"/>
<translation>Kilépés az ownCloudból</translation>
</message>
</context>
<context>
@@ -598,7 +598,7 @@
<message>
<location filename="../src/libsync/owncloudpropagator.cpp" line="1001"/>
<source>Error writing metadata to the database</source>
<translation type="unfinished"/>
<translation>Hiba történt a metaadatok adatbázisba írásakor</translation>
</message>
</context>
<context>
@@ -741,24 +741,26 @@
<message>
<location filename="../src/gui/folder.cpp" line="640"/>
<source>Could not read system exclude file</source>
<translation type="unfinished"/>
<translation>Nem lehetett beolvasni a rendszer kizárási fájlját</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="888"/>
<source>A new folder larger than %1 MB has been added: %2.
</source>
<translation type="unfinished"/>
<translation>Egy %1 MB méretet meghaladó mappa hozzá lett adva: %2.
</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="891"/>
<source>A folder from an external storage has been added.
</source>
<translation type="unfinished"/>
<translation>Egy mappa egy külső tárolóból hozzá lett adva.
</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="892"/>
<source>Please go in the settings to select it if you wish to download it.</source>
<translation type="unfinished"/>
<translation>Kérlek, a beállításoknál válaszd ki, ha le szeretnéd tölteni.</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="927"/>
@@ -766,7 +768,10 @@
These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore.
If you decide to keep the files, they will be re-synced with the server if you have rights to do so.
If you decide to delete the files, they will be unavailable to you, unless you are the owner.</source>
<translation type="unfinished"/>
<translation>Az összes fájl a szinkronizálási mappában - %1 - törölve lett a kiszolgálón.
Ezek a törlések szinkronizálódni fognak a helyi mappádban, elérhetetlenné téve ezeket a fájlokat kivéve ha van jogosultságod a visszaállításhoz.
Ha úgy döntesz, hogy megtartod a fájlokat, azok újra lesznek szinkronizálva a szerverrel, ha van jogosultságod.
Ha úgy döntesz, hogy letörlöd a fájlokat, elérhetetlenné válnak számodra, kivéve ha te vagy a tulajdonos.</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="932"/>

View File

@@ -83,7 +83,7 @@
<message>
<location filename="../src/libsync/abstractnetworkjob.cpp" line="247"/>
<source>Unknown error: network reply was deleted</source>
<translation type="unfinished"/>
<translation>Onbekende fout: netwerkantwoord verwijderd</translation>
</message>
<message>
<location filename="../src/libsync/abstractnetworkjob.cpp" line="390"/>
@@ -243,7 +243,7 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="656"/>
<source>Server %1 is currently in maintenance mode.</source>
<translation type="unfinished"/>
<translation>Server %1 momenteel in onderhoudsmodus.</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="658"/>
@@ -253,7 +253,7 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="667"/>
<source>Obtaining authorization from the browser. &lt;a href=&apos;%1&apos;&gt;Click here&lt;/a&gt; to re-open the browser.</source>
<translation type="unfinished"/>
<translation>Authorization van de browser verkrijgen. &lt;a href=&apos;%1&apos;&gt;Klik hier&lt;/a&gt; om de browser te heropenen.</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="671"/>
@@ -388,7 +388,7 @@
<message>
<location filename="../src/gui/accountstate.cpp" line="138"/>
<source>Asking Credentials</source>
<translation type="unfinished"/>
<translation>Vragen naar inloggegevens</translation>
</message>
<message>
<location filename="../src/gui/accountstate.cpp" line="140"/>
@@ -990,7 +990,7 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="209"/>
<source>There are unresolved conflicts. Click for details.</source>
<translation type="unfinished"/>
<translation>Er zijn nog niet-opgehelderde conflicten. Klik voor details.</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="878"/>
@@ -1000,7 +1000,7 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="884"/>
<source>Reconciling changes</source>
<translation type="unfinished"/>
<translation>Wijzigingen in overeenstemming brengen</translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="919"/>
@@ -1434,12 +1434,12 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma
<message>
<location filename="../src/gui/issueswidget.ui" line="133"/>
<source>There were too many issues. Not all will be visible here.</source>
<translation type="unfinished"/>
<translation>Te veel problemen. Niet alles is hier zichtbaar.</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="155"/>
<source>Copy the issues list to the clipboard.</source>
<translation type="unfinished"/>
<translation>Kopieer de problemen naar het klembord.</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="158"/>
@@ -1482,7 +1482,7 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma
<message>
<location filename="../src/gui/logbrowser.cpp" line="89"/>
<source>&amp;Capture debug messages</source>
<translation type="unfinished"/>
<translation>&amp;Opvangen debug berichten</translation>
</message>
<message>
<location filename="../src/gui/logbrowser.cpp" line="101"/>
@@ -1704,17 +1704,17 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma
<message>
<location filename="../src/gui/creds/oauth.cpp" line="115"/>
<source>There was an error accessing the &apos;token&apos; endpoint: &lt;br&gt;&lt;em&gt;%1&lt;/em&gt;</source>
<translation type="unfinished"/>
<translation>Er trad een fout op bij het benaderen van het &apos;token&apos; endpoint: &lt;br&gt;&lt;em&gt;%1&lt;/em&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="118"/>
<source>Could not parse the JSON returned from the server: &lt;br&gt;&lt;em&gt;%1&lt;/em&gt;</source>
<translation type="unfinished"/>
<translation>Kon de van de server ontvangen JSON niet verklaren: &lt;br&gt;&lt;em&gt;%1&lt;/em&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="121"/>
<source>The reply from the server did not contain all expected fields</source>
<translation type="unfinished"/>
<translation>Het antwoord van de server bevatte niet alle verwachte velden</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="125"/>
@@ -1724,7 +1724,7 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma
<message>
<location filename="../src/gui/creds/oauth.cpp" line="131"/>
<source>&lt;h1&gt;Wrong user&lt;/h1&gt;&lt;p&gt;You logged-in with user &lt;em&gt;%1&lt;/em&gt;, but must login with user &lt;em&gt;%2&lt;/em&gt;.&lt;br&gt;Please log out of %3 in another tab, then &lt;a href=&apos;%4&apos;&gt;click here&lt;/a&gt; and log in as user %2&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Verkeerde gebruiker&lt;/h1&gt;&lt;p&gt;Je bent ingelogd met gebruiker &lt;em&gt;%1&lt;/em&gt;, maar moest inloggen als gebruiker &lt;em&gt;%2&lt;/em&gt;.&lt;br&gt;Log uit van %3 in een andere tab en dan &lt;a href=&apos;%4&apos;&gt;klik hier&lt;/a&gt; en log in als gebruiker %2&lt;/p&gt;</translation>
</message>
</context>
<context>
@@ -1892,7 +1892,7 @@ vragen om extra autorisaties tijdens installatie.</translation>
<message>
<location filename="../src/gui/wizard/owncloudoauthcredspage.cpp" line="44"/>
<source>Login in your browser</source>
<translation type="unfinished"/>
<translation>Login in je browser</translation>
</message>
</context>
<context>
@@ -1970,7 +1970,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="297"/>
<source>The server reported the following error:</source>
<translation type="unfinished"/>
<translation>De server gaf de volgende foutmelding:</translation>
</message>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="452"/>
@@ -2132,7 +2132,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="459"/>
<source>The download would reduce free local disk space below the limit</source>
<translation type="unfinished"/>
<translation>De download zou de vrije lokale schijfruimte beperken tot onder de limiet</translation>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="463"/>
@@ -2319,7 +2319,7 @@ We adviseren deze site niet te gebruiken.</translation>
<location filename="../src/libsync/propagateupload.cpp" line="186"/>
<location filename="../src/libsync/propagateupload.cpp" line="549"/>
<source>Upload of %1 exceeds the quota for the folder</source>
<translation type="unfinished"/>
<translation>Upload van %1 overschrijdt het quotum voor de map</translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="622"/>
@@ -2659,12 +2659,12 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/sharelinkwidget.ui" line="35"/>
<source>Enter a name to create a new public link...</source>
<translation type="unfinished"/>
<translation>Geef een naam op om een nieuwe openbare link te maken...</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.ui" line="42"/>
<source>&amp;Create new</source>
<translation type="unfinished"/>
<translation>&amp;Creëer nieuw</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.ui" line="105"/>
@@ -2715,12 +2715,12 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="93"/>
<source>Link shares have been disabled</source>
<translation type="unfinished"/>
<translation>Deellinks zijn uitgeschakeld</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="107"/>
<source>Create public link share</source>
<translation type="unfinished"/>
<translation>Creëren openbare deellink</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="168"/>
@@ -2741,7 +2741,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="165"/>
<source>Copy link to clipboard (direct download)</source>
<translation type="unfinished"/>
<translation>Kopieer link naar klembord (directe download)</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="166"/>
@@ -2751,12 +2751,12 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="167"/>
<source>Send link by email (direct download)</source>
<translation type="unfinished"/>
<translation>Verstuur link per e-mail (directe download)</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="520"/>
<source>Confirm Link Share Deletion</source>
<translation type="unfinished"/>
<translation>Bevestig verwijderen deellink</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="521"/>
@@ -2943,7 +2943,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/socketapi.cpp" line="568"/>
<source>Send private link by email...</source>
<translation type="unfinished"/>
<translation>Verstuur privé link via mail</translation>
</message>
</context>
<context>
@@ -3236,7 +3236,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/libsync/syncengine.cpp" line="493"/>
<source>Conflict: Server version downloaded, local copy renamed and not uploaded.</source>
<translation type="unfinished"/>
<translation>Bestandsconflict: server versie is gedownload en lokale kopie hernoemd en niet geüpload</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="777"/>
@@ -3362,7 +3362,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/libsync/syncengine.cpp" line="489"/>
<source>Unresolved conflict.</source>
<translation type="unfinished"/>
<translation>Bestandsconflict</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="500"/>
@@ -3608,7 +3608,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="240"/>
<source>Disconnected from some accounts</source>
<translation type="unfinished"/>
<translation>Niet verbonden met sommige accounts</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="251"/>
@@ -3634,12 +3634,12 @@ We adviseren deze site niet te gebruiken.</translation>
<location filename="../src/gui/owncloudgui.cpp" line="273"/>
<location filename="../src/gui/owncloudgui.cpp" line="304"/>
<source>Synchronization is paused</source>
<translation type="unfinished"/>
<translation>Synchronisatie is gepauzeerd</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="306"/>
<source>Error during synchronization</source>
<translation type="unfinished"/>
<translation>Fout bij synchronisatie</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="314"/>
@@ -3859,7 +3859,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/wizard/owncloudoauthcredspage.ui" line="56"/>
<source>Re-open Browser</source>
<translation type="unfinished"/>
<translation>Heropen browser</translation>
</message>
</context>
<context>
@@ -4186,7 +4186,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/guiutility.cpp" line="33"/>
<source>Could not open browser</source>
<translation type="unfinished"/>
<translation>Kon browser niet openen</translation>
</message>
<message>
<location filename="../src/gui/guiutility.cpp" line="34"/>

View File

@@ -1405,7 +1405,7 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn
<location filename="../src/gui/issueswidget.ui" line="42"/>
<location filename="../src/gui/issueswidget.ui" line="61"/>
<source>&lt;no filter&gt;</source>
<translation type="unfinished"/>
<translation>&lt;no filter&gt;</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="50"/>
@@ -4028,7 +4028,7 @@ Kliknij</translation>
<message>
<location filename="../src/libsync/theme.cpp" line="299"/>
<source>&lt;p&gt;&lt;small&gt;Built from Git revision &lt;a href=&quot;%1&quot;&gt;%2&lt;/a&gt; on %3, %4 using Qt %5, %6&lt;/small&gt;&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt;&lt;small&gt;Skompilowano z wersji Git &lt;a href=&quot;%1&quot;&gt;%2&lt;/a&gt; na %3, %4 używając Qt %5, %6&lt;/small&gt;&lt;/p&gt;</translation>
</message>
</context>
<context>

View File

@@ -178,7 +178,7 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="307"/>
<source>Restart sync</source>
<translation type="unfinished"/>
<translation>Reštartovať synchronizáciu</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="316"/>
@@ -278,12 +278,12 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="787"/>
<source>There are folders that were not synchronized because they are external storages: </source>
<translation type="unfinished"/>
<translation>Niektoré priečinky neboli synchronizované, pretože na externom úložisku</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="788"/>
<source>There are folders that were not synchronized because they are too big or external storages: </source>
<translation type="unfinished"/>
<translation>Niektoré priečinky neboli synchronizované, pretože príliš veľké alebo na externom úložisku</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="834"/>
@@ -446,7 +446,7 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="613"/>
<source>The list of unsynced items has been copied to the clipboard.</source>
<translation type="unfinished"/>
<translation>Zoznam nezosynchronizovaných položiek bol skopírovaný do schránky.</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="618"/>
@@ -557,7 +557,7 @@
<message>
<location filename="../src/gui/application.cpp" line="164"/>
<source>Error accessing the configuration file</source>
<translation type="unfinished"/>
<translation>Chyba pri prístupe ku konfiguračnému súboru</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="165"/>
@@ -747,13 +747,15 @@
<location filename="../src/gui/folder.cpp" line="888"/>
<source>A new folder larger than %1 MB has been added: %2.
</source>
<translation type="unfinished"/>
<translation>Bol pridaný nový priečinok väčší ako %1 MB: %2.
</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="891"/>
<source>A folder from an external storage has been added.
</source>
<translation type="unfinished"/>
<translation>Bol pridaný priečinok z externého úložiska.
</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="892"/>
@@ -1255,7 +1257,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/generalsettings.ui" line="147"/>
<source>Edit &amp;Ignored Files</source>
<translation type="unfinished"/>
<translation>Editovať &amp;ignorované súbory</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="232"/>
@@ -1387,7 +1389,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/issueswidget.ui" line="20"/>
<source>List of issues</source>
<translation type="unfinished"/>
<translation>Zoznam problémov</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="34"/>
@@ -1409,7 +1411,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/issueswidget.ui" line="73"/>
<source>Show warnings</source>
<translation type="unfinished"/>
<translation>Zobraziť varovania</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="83"/>
@@ -1424,7 +1426,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/issueswidget.ui" line="155"/>
<source>Copy the issues list to the clipboard.</source>
<translation type="unfinished"/>
<translation>Skopírovať zoznam problémov do schránky.</translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="158"/>
@@ -1955,7 +1957,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="297"/>
<source>The server reported the following error:</source>
<translation type="unfinished"/>
<translation>Server nahlásil nasledovnú chybu:</translation>
</message>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="452"/>
@@ -3216,7 +3218,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/libsync/syncengine.cpp" line="477"/>
<source>Folder hierarchy is too deep</source>
<translation type="unfinished"/>
<translation>Hierarchia priečinkov je príliš hlboká</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="493"/>
@@ -3619,7 +3621,7 @@ Nie je vhodné ju používať.</translation>
<location filename="../src/gui/owncloudgui.cpp" line="273"/>
<location filename="../src/gui/owncloudgui.cpp" line="304"/>
<source>Synchronization is paused</source>
<translation type="unfinished"/>
<translation>Synchronizácia je pozastavená</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="306"/>
@@ -3695,7 +3697,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="786"/>
<source>Syncing %1 of %2</source>
<translation type="unfinished"/>
<translation>Synchronizuje sa %1 z %2</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="795"/>
@@ -4171,7 +4173,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/gui/guiutility.cpp" line="33"/>
<source>Could not open browser</source>
<translation type="unfinished"/>
<translation>Nepodarilo sa otvoriť prehliadač</translation>
</message>
<message>
<location filename="../src/gui/guiutility.cpp" line="34"/>

View File

@@ -4,7 +4,7 @@
<message>
<location filename="../src/gui/folderwizardsourcepage.ui" line="14"/>
<source>Form</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/folderwizardsourcepage.ui" line="33"/>
@@ -22,7 +22,7 @@
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="14"/>
<source>Form</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="131"/>
@@ -55,7 +55,7 @@
<message>
<location filename="../src/gui/notificationwidget.ui" line="20"/>
<source>Form</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/notificationwidget.ui" line="56"/>
@@ -96,7 +96,7 @@
<message>
<location filename="../src/gui/accountsettings.ui" line="14"/>
<source>Form</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/accountsettings.ui" line="58"/>
@@ -388,7 +388,7 @@
<message>
<location filename="../src/gui/accountstate.cpp" line="138"/>
<source>Asking Credentials</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/accountstate.cpp" line="140"/>
@@ -1000,7 +1000,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="884"/>
<source>Reconciling changes</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/folderstatusmodel.cpp" line="919"/>
@@ -1398,7 +1398,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/issueswidget.ui" line="20"/>
<source>List of issues</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="34"/>
@@ -1430,12 +1430,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/issueswidget.ui" line="133"/>
<source>There were too many issues. Not all will be visible here.</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="155"/>
<source>Copy the issues list to the clipboard.</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/issueswidget.ui" line="158"/>
@@ -1455,7 +1455,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/issueswidget.cpp" line="84"/>
<source>Issue</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>
@@ -1478,7 +1478,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/logbrowser.cpp" line="89"/>
<source>&amp;Capture debug messages</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/logbrowser.cpp" line="101"/>
@@ -1696,7 +1696,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/creds/oauth.cpp" line="112"/>
<source>Error returned from the server: &lt;em&gt;%1&lt;/em&gt;</source>
<translation type="unfinished"/>
<translation>:&lt;em&gt;%1&lt;/em&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="115"/>
@@ -1711,12 +1711,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/creds/oauth.cpp" line="121"/>
<source>The reply from the server did not contain all expected fields</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="125"/>
<source>&lt;h1&gt;Login Error&lt;/h1&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;&lt;/h1&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/gui/creds/oauth.cpp" line="131"/>
@@ -2314,7 +2314,7 @@ It is not advisable to use it.</source>
<location filename="../src/libsync/propagateupload.cpp" line="186"/>
<location filename="../src/libsync/propagateupload.cpp" line="549"/>
<source>Upload of %1 exceeds the quota for the folder</source>
<translation type="unfinished"/>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="622"/>
@@ -2659,7 +2659,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharelinkwidget.ui" line="42"/>
<source>&amp;Create new</source>
<translation type="unfinished"/>
<translation>&amp;</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.ui" line="105"/>
@@ -2751,7 +2751,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="520"/>
<source>Confirm Link Share Deletion</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="521"/>
@@ -2772,7 +2772,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="254"/>
<source>Delete link share</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="459"/>
@@ -3216,7 +3216,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="264"/>
<source>%1 (skipped due to earlier error, trying again in %2)</source>
<translation type="unfinished"/>
<translation>%1 (%2 )</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="474"/>
@@ -3226,7 +3226,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="477"/>
<source>Folder hierarchy is too deep</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="493"/>