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

Compare commits

..

1212 Commits

Author SHA1 Message Date
Roeland Jago Douma
c04d1f1f69 Make different program so it doesn't mess with existing config
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-30 11:53:52 +01:00
Roeland Jago Douma
f8d805d78b Use NC windows installer images
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-30 11:25:46 +01:00
Roeland Jago Douma
d85c2bf025 Fix building on windows
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-30 11:10:03 +01:00
Roeland Jago Douma
296f46356e If the metadata is empty we should store (and not update).
Android only creates the metadata file when the first encrypted file is
added. We assumed it would be there.

This hacky code makes us store the metadata if there wasn't any yet.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-29 22:04:50 +01:00
Tomaz Canabrava
dcc9ac7d2e [Buildfix] Fix build from last merge 2018-01-29 14:17:52 +01:00
Tomaz Canabrava
d24a1e542e Merge branch 'master' into clientSideEncryptionV3 2018-01-29 14:06:12 +01:00
Tomaz Canabrava
f4a50e88f5 [CSE] Ignore renames for downloaded files.
- TODO: Fix the incorrect "filename has been removed" popup.
The file is not removed, just the popup shows.
2018-01-28 23:59:53 +01:00
Tomaz Canabrava
682bb2ad43 [CSE] Save the encrypted name relation on downloads 2018-01-28 23:50:12 +01:00
Tomaz Canabrava
d38e5e1529 [CSE] Bypass rename if it's e2e
The client tracks the files in server and locally, but the
names of the files differ in the server, but we do *not*
wanna rename the files to the server one, we wanna
keep it as is if it's an encrypted file.
2018-01-28 23:48:51 +01:00
Tomaz Canabrava
7b123650da [CSE] Search for name, not mangled name. 2018-01-28 23:48:25 +01:00
Tomaz Canabrava
0c94142c97 [CSE] More debug output 2018-01-28 23:47:58 +01:00
Tomaz Canabrava
e8849a2cf9 [CSE] Save the relation of the file / encrypted file names on the db 2018-01-28 22:26:07 +01:00
Roeland Jago Douma
11946d9ef8 Bump
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-28 20:21:12 +01:00
Roeland Jago Douma
3c084bb6eb Bump drone image
* Bump to 16.04 since 14.04 doesn't auto build here due to openssl fu
* No more gcc7 since gcc5 is new enough

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-28 20:10:04 +01:00
Tomaz Canabrava
e9a7a56359 [CSE] Store the encrypted file name on the SyncFilePtr 2018-01-28 18:37:01 +01:00
Tomaz Canabrava
a003d216a5 [CSE] Implementation of the setE2eRelation
This call creates a new entry on the database for e2e.
2018-01-28 18:05:28 +01:00
Tomaz Canabrava
32eaaa0601 [CSE] GetMangledName implementation 2018-01-28 17:50:10 +01:00
Tomaz Canabrava
be817748f8 [CSE] Reset the new Queries on close 2018-01-28 17:46:20 +01:00
Tomaz Canabrava
b909bb6977 [CSE] Change the Database to handle Encrypted Files
Create a table to hold the information between the
real file name and the fake file name
2018-01-28 16:41:07 +01:00
Roeland Jago Douma
040507fce6 Merge pull request #135 from nextcloud/oc_up
Merge upstream changes
2018-01-25 20:31:35 +01:00
Roeland Jago Douma
e2e99da446 Bump appimage drone image
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-25 14:31:14 +01:00
Julius Härtl
bcb9553925 Use Qt5DBus_FOUND instead of the old WITH_DBUS
WITH_DBUS was removed in 257d8142b1

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-25 14:18:03 +01:00
Roeland Jago Douma
aa7e47f525 Fix new icon naming
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-25 12:19:51 +01:00
Roeland Jago Douma
48bce4c6b0 Merge remote-tracking branch 'oc/master' into oc_up 2018-01-25 11:17:04 +01:00
Roeland Jago Douma
84b26e0d4d Merge pull request #133 from nextcloud/fix-notification-dismiss-button
Uses QString::number to get a string equivalent of the notification_id number
2018-01-24 19:29:21 +01:00
Julius Härtl
3d162745af Merge pull request #131 from nextcloud/nextcloud_subdir
If status.php fails check <server>/nextcloud/status.php
2018-01-24 17:59:48 +01:00
Camila San
7a69e19e4d Uses QString::number to get a string equivalent of the notification_id number.
This fixes the bug reported #117.

Signed-off-by: Camila San <hello@camila.codes>
2018-01-24 17:29:45 +01:00
Olivier Goffart
02988229b1 FolderStatusModel: don't use deprecated QModelIndex::child
Was deprecated in Qt 5.8.
(IMHO this show that child can be usefull and I am not sure the
deprecation was justified)
2018-01-24 10:23:03 +01:00
Roeland Jago Douma
4892b0ec43 Properly fill EncryptedFile
* Add a mimetype (mobile clients need this)
* Add the tag unencoded as we encode it when we send the metadata
already

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-23 21:31:00 +01:00
Roeland Jago Douma
21d55c3321 No sharing in metadata yet and PEM as PKCS#8
* Don't store the metadata yet this crashes android
  - Yes android should be fixed but for now this is quicker ;)
* QSslKey exports PEM as PKCS#1
  - This is not handled properly on android so use PKCS#8 helper

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-23 21:02:52 +01:00
Olivier Goffart
72b9beb79c Merge remote-tracking branch 'origin/2.4'
Conflicts:
	shell_integration/nautilus/syncstate.py
2018-01-23 14:08:15 +01:00
Olivier Goffart
883080b557 Windows shell extension: port to the new protocol 2018-01-23 14:02:56 +01:00
Christian Kamm
ebfac84c69 Shell integration: Make nautilus work with multiselections
Previously no menu would ever be shown if more than one file is
selected. Now the GET_MENU_ITEMS command is sent with all selected files
as an argument - similar to what is done for the dolphin integration.
2018-01-23 14:02:56 +01:00
Christian Kamm
3c2622d2de Shell integration: Update nautilus for GET_MENU_ITEMS 2018-01-23 14:02:56 +01:00
Olivier Goffart
982c591ec9 SocketApi: add a way to disable menu entries 2018-01-23 14:02:56 +01:00
Olivier Goffart
1782ae3c08 SocketAPI: Make it easier to add or remove item in the action menu
By making it dynamic.
So far only the dolphin shell extension have been ported
2018-01-23 14:02:56 +01:00
Roeland Jago Douma
7ce009ef49 If status.php fails check <server>/nextcloud/status.php
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-23 13:43:44 +01:00
Christian Kamm
72363155d8 Nautilus integration: Work with python2 and python3 2018-01-23 12:30:58 +01:00
Olivier Goffart
f254ee3211 Nautilus shell integration: Port to Python 3 2018-01-23 12:30:58 +01:00
Christian Kamm
59f2e0634e Protocol: Correct sorting by size #6326
Previously we were sorting by size string, where
"6 MB" < "3 KB".
2018-01-23 12:02:16 +01:00
Christian Kamm
32bb1e6763 ProtocolItem: Use accessors over magic numbers 2018-01-23 12:02:16 +01:00
Christian Kamm
497b327d43 ShareLinkWidget: Remove outdated signal connection
Also convert the others to the new syntax to avoid similar errors in the
future.
2018-01-23 12:01:22 +01:00
Christian Kamm
d831369f86 Protocol: Remove entries for auto resolved conflicts #6316 2018-01-23 12:01:22 +01:00
Roeland Jago Douma
a2b8724adf Hacky way to drop duplicates (we should really use the fileid!)
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-23 11:58:05 +01:00
Roeland Jago Douma
bb85e2ab2c Reuse existing EncryptedFile
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-23 11:36:15 +01:00
Jenkins for ownCloud
c1a1e55207 [tx-robot] updated from transifex 2018-01-23 02:18:36 +01:00
Olivier Goffart
c3dbb20ce3 Logger: --logdebug only show owncloud's debug message
Recent Qt version show way too many debug messages, spamming the console.
So filter only messages that comes from the client.
2018-01-22 21:13:15 +01:00
Roeland Jago Douma
33beb7aade Don't generate values after we use them
* Pregerenate IV
* Pregenerate key
* Pregenerate filename

TODO:
  - Reuse existing file entries and update (we might need logic in the
  metadatahandling to do this properly).
2018-01-22 15:24:54 +01:00
Tomaz Canabrava
cae6bbc853 [CSE] Start the download process 2018-01-22 14:08:32 +01:00
Christian Kamm
e2b89c5afe TextXmlParse: Add truncated-xml testcase #6317 2018-01-22 14:05:08 +01:00
Jenkins for ownCloud
ba4712c922 [tx-robot] updated from transifex 2018-01-22 02:18:54 +01:00
Tomaz Canabrava
cf2fa2ea35 [CSE] Get the tag of the encrypted file to feed the metadata
Also, change the logging cattegory
2018-01-21 21:59:19 +01:00
Tomaz Canabrava
5d6817e165 [CSE] Save the tag while encrypting. 2018-01-21 21:49:24 +01:00
Tomaz Canabrava
261cedce3f [CSE] Do not quit if encryption fails
It's much more reasonable to return failure and handle it.
2018-01-21 21:40:53 +01:00
Tomaz Canabrava
2d872f2a8d [CSE] Add missing files 2018-01-21 21:26:05 +01:00
Tomaz Canabrava
009562da1e [CSE] Remove lambas with lambdas
It's hard to reason with lambdas with lambdas, so transform
them into actuall signal / slot calls.
2018-01-21 21:25:06 +01:00
Tomaz Canabrava
d5a76ea70d [CSE] Remove the DecryptionJob
Transform it into an Static function - it was blocking anyway
and this way it's easier to transform it into a thread in the
future.
2018-01-21 21:24:02 +01:00
Tomaz Canabrava
4a2d0ab9e9 [CSE] Move code to display minemonic out of the libsync
The libsync should not contain Qt Widget related code.
2018-01-21 19:50:40 +01:00
Jenkins for ownCloud
a19eb59461 [tx-robot] updated from transifex 2018-01-21 02:18:35 +01:00
Jenkins for ownCloud
484ec95596 [tx-robot] updated from transifex 2018-01-20 02:18:50 +01:00
Olivier Goffart
5a97ddde5a Merge remote-tracking branch 'origin/2.4'
Conflicts:
	src/gui/updater/updater.cpp
2018-01-19 13:41:29 +01:00
Olivier Goffart
b8539eb329 Get rid of the StopWatch in the PropagateUpload job
For issue #6318

The StopWatch is using memory, and we are not really using it.
2018-01-19 13:37:48 +01:00
Christian Kamm
b9c7aa8df3 Sync: Deal with file/folder conflicts #6312
Previously conflicts with a different type on both ends lead to sync
errors. Now they are handled in the expected way: the local item gets
renamed and the remote item gets propagated downwards.

This also adds a unittest for the TYPE_CHANGE case. That one looks like
parts of it might be unified with CONFLICT cases.
2018-01-19 09:47:49 +01:00
Jenkins for ownCloud
6f5b3eb4d7 [tx-robot] updated from transifex 2018-01-19 02:18:35 +01:00
Roeland Jago Douma
6d613fb4d5 Quick and dirty way of showing the mnemonic for now
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-18 22:10:55 +01:00
Dominik Schmidt
127e675838 Merge pull request #6310 from owncloud/appveyor
Enable appveyor builds
2018-01-18 18:08:09 +01:00
Christian Kamm
c1b5412c16 Exclude regex: Use named captures
My benchmarks show no performance difference.
2018-01-18 10:24:24 +01:00
Dominik Schmidt
217c6bbcaf Add AppVeyor badge 2018-01-18 09:46:06 +01:00
Jenkins for ownCloud
a32b3e565b [tx-robot] updated from transifex 2018-01-18 02:18:38 +01:00
Olivier Goffart
926609bd74 Partially revert "shell_integration/dolphin: Silence some warnings"
This partially reverts commit 1c721e9422.

This caused the overlay plugin to be installed at the wrong place
because the kcoreaddons_add_plugin macto still use deprecated
${PLUGIN_INSTALL_DIR}.

I guess we'll have to live with the warnings.
2018-01-17 17:34:27 +01:00
Dominik Schmidt
486ccaff56 Enable tests in appveyor builds 2018-01-17 16:25:03 +01:00
Dominik Schmidt
e0cc93c047 Enable appveyor builds 2018-01-17 16:21:09 +01:00
Christian Kamm
4337e8532e Exclude matching: Speedup the full-path traversal case
Previously we'd use the full regex when the bname triggered a full-path
matching to take place. Now we have a simplified full-traversal regex
for this case that can be significantly faster to apply.

Triggered by #5017 but doesn't actually solve it.
2018-01-17 15:05:50 +01:00
Christian Kamm
a8a6f82270 Link shares: Change default share name #6298
There's a 64 character limit and we don't want to accidentally exceed
it.

Eventually there might be server API for default share name generation.

See owncloud/core#29913
2018-01-17 15:03:11 +01:00
Dominik Schmidt
4895b848c8 Merge pull request #6308 from dschmidt/fix-linux-icons
Fix Linux icons
2018-01-17 12:53:32 +01:00
Dominik Schmidt
fe3c68b9dd Fix Linux icons 2018-01-17 12:18:31 +01:00
Jenkins for ownCloud
24d6fda360 [tx-robot] updated from transifex 2018-01-17 02:18:35 +01:00
Roeland Jago Douma
4e7c033ae5 Merge pull request #121 from nextcloud/removes-logout-login-all-accounts
Removes 'Log in to all accounts' and 'Log out to all accounts' from the primary client menu.
2018-01-16 09:20:47 +01:00
Jenkins for ownCloud
d4106b9a88 [tx-robot] updated from transifex 2018-01-16 02:18:35 +01:00
Olivier Goffart
2a14ba5582 Folder: remove declaration of non-existing method 2018-01-15 15:43:13 +01:00
Olivier Goffart
2a842a5745 Application: remove declaration of non-existing functions 2018-01-15 15:07:09 +01:00
Olivier Goffart
cfe9909560 admin/linux/Dockerfile: Add comments 2018-01-15 13:56:35 +01:00
Olivier Goffart
8331f04b5b Merge pull request #6244 from owncloud/cleanuo
Modernize makefiles and remove dead code
2018-01-15 13:49:57 +01:00
Camila Ayres
cd36f73f6b Removes 'Log in to all accounts' and 'Log out to all accounts' from main menu.
This is not an often used option and it should be fine if this can only be done
from within the settings dialog.

Signed-off-by: Camila San <hello@camila.codes>
2018-01-15 11:48:27 +01:00
Olivier Goffart
d0713d018c client_de.ts: Fix spacing in a translation
Issue #6303
2018-01-15 11:29:08 +01:00
Roeland Jago Douma
5722d29e42 Double encode the metadatakeys
This is required by a misunderstanding of the RFC.
You need to resetup your test user.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-15 11:26:06 +01:00
Jürgen Weigert
a33fc2a0db Update updater.cpp
deprecate suffix nightly, promote suffix daily
2018-01-15 11:25:10 +01:00
Jenkins for ownCloud
ca200e788e [tx-robot] updated from transifex 2018-01-15 02:18:34 +01:00
Dominik Schmidt
7839c4d4e1 Revert "Disable stack protection for mingw win32 builds in 2.4"
This reverts commit 298f1ab570.

We're shipping libssp-0.dll now with mingw builds. We would
have enough time to test this for 2.5.0 now anyway, but we
also will most likely switch to MSVC for that release.
2018-01-14 14:39:29 +01:00
Jenkins for ownCloud
c454d626b6 [tx-robot] updated from transifex 2018-01-14 02:18:36 +01:00
Dominik Schmidt
969d90d15b Fix UIC detection in windows cross env 2018-01-14 00:57:40 +01:00
Dominik Schmidt
d8a279c671 Fix windows cross build of the updater and bump libcrashreporter-qt revision 2018-01-14 00:45:02 +01:00
Dominik Schmidt
6d56f30d9b Fix incorrect target_include_directories usage for crash reporter 2018-01-13 23:49:58 +01:00
Dominik Schmidt
86ea5876cd Use standard png2ico in our cross env too 2018-01-13 23:28:52 +01:00
Dominik Schmidt
bb8468c627 Add Linux CI Dockerfile 2018-01-13 23:28:18 +01:00
Dominik Schmidt
fc62e9e9d9 Fix .def and .rc files not being compiled into windows shell extensions 2018-01-13 21:01:09 +01:00
Dominik Schmidt
15967b1219 Install all dlls to BINDIR so craft does not ignore them 2018-01-13 13:58:17 +01:00
Dominik Schmidt
0656c77da8 Set CMAKE_CXX_STANDARD to 14 2018-01-13 13:58:17 +01:00
Dominik Schmidt
81c20352e1 Use new ECMAddAppIcon macro for application icons.
cmake/modules/ECMAddAppIcon.cmake is heavily patched to support sidebar icons, OUTFILE_BASE parameter and to not include 64 and 64@2x icons on macOS which are not supported. All changes are made in a way that we can upstream this.
2018-01-13 13:58:17 +01:00
Dominik Schmidt
4e52ee9ebd Build Explorer extension if building with MSVC 2018-01-13 13:58:17 +01:00
Dominik Schmidt
6ee87a77cc Fix macOS updater build without deprecated Qt apis 2018-01-13 13:58:17 +01:00
Dominik Schmidt
539d6fd92e Link client against QtMacExtras as it bundles qtmacgoodies 2018-01-13 13:58:17 +01:00
Dominik Schmidt
da98e2aa28 Fix building sqlite on macOS and Windows 2018-01-13 13:58:17 +01:00
Dominik Schmidt
1f9763eda9 Package libssp-0.dll in NSIS installer.
It's needed since 586fd346ea activated stack-protector-strong
2018-01-13 13:58:17 +01:00
Dominik Schmidt
cbf470f17b Fix csync installation on windows 2018-01-13 13:58:17 +01:00
Dominik Schmidt
1f12d6344b Fix sqlite compilation (on OSX) 2018-01-13 13:58:17 +01:00
Olivier Goffart
437d45981e Remove unused c_strlist 2018-01-13 13:58:17 +01:00
Olivier Goffart
3ae327ea8e Modernize out CMakeLists.txt
Mainly uses target_include_directories instead of include_directories
so libraries public include directory get automatically added when adding
the target in target_link_library
2018-01-13 13:58:17 +01:00
Olivier Goffart
1c721e9422 shell_integration/dolphin: Silence some warnings 2018-01-13 13:58:17 +01:00
Olivier Goffart
5d0aa5f039 Remove unused c_path 2018-01-13 13:58:17 +01:00
Olivier Goffart
41798cef18 Csync: remove some unused build system stuff 2018-01-13 13:58:17 +01:00
Olivier Goffart
1c11778693 Remove the unusued csync_file_locked_or_open test in csync_reconcile
It is unused. Also remove the corresponding error code
2018-01-13 13:58:17 +01:00
Olivier Goffart
3ddd4b6f16 Get rid of csync_log
We use Qt's debugging code everywhere
2018-01-13 13:58:17 +01:00
Olivier Goffart
d948ed11a1 Csync: use QElapsedTimer and qCInfo instead of CSYNC_LOG and its own csync time function
This allow to remove all the csync time manipulation routne which are now unused
2018-01-13 13:58:17 +01:00
Olivier Goffart
257d8142b1 Build system: Get rid of QtVersionAbstraction.cmake
Use modern cmake with target_link_libraries and Qt5:: that
automatically add the include path and compile flags
2018-01-13 13:58:17 +01:00
Olivier Goffart
48c55b7d29 csync/std: don't build in a separate library
There is no need to create a static library for the csync/std file, just
put everything together in csync
2018-01-13 13:58:17 +01:00
Olivier Goffart
776bbbf7b1 Don't include sqlite3.h from headers
So that sqlite is not part of the public interface of csync
(and that the sqlite include path don't need to be passed when compiling
libsync or gui)
2018-01-13 13:58:17 +01:00
Dominik Schmidt
f326bf371d Merge pull request #6299 from dschmidt/linux-docker-ci
Use docker for Linux CI
2018-01-13 13:46:04 +01:00
Jenkins for ownCloud
4cf7ca4162 [tx-robot] updated from transifex 2018-01-13 02:18:33 +01:00
Roeland Jago Douma
99aebf292c Yet another drone image
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-12 19:36:09 +01:00
Dominik Schmidt
01f3b82ea5 Move pulling docker images to their own stages 2018-01-12 17:19:22 +01:00
Roeland Jago Douma
d1c84fd859 Bump drone docer used for appimage
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-12 15:21:30 +01:00
Jenkins for ownCloud
c22e3aaa4b [tx-robot] updated from transifex 2018-01-12 02:19:52 +01:00
Dominik Schmidt
dbf15fb8dc Make setLaunchOnStartup debug output more meaningful 2018-01-11 16:11:23 +01:00
Dominik Schmidt
a253129fd6 Fix running tests until #6210 is fixed 2018-01-11 16:11:06 +01:00
Dominik Schmidt
a8ba3ee9e1 Use docker for Linux CI 2018-01-11 16:10:31 +01:00
Olivier Goffart
9613f6437d Merge remote-tracking branch 'origin/2.4'
Conflicts:
	src/libsync/networkjobs.cpp
2018-01-11 10:46:50 +01:00
Jürgen Weigert
9dc765142c Update updater.cpp
depricate suffix nightly, promote suffix daily
2018-01-10 16:19:08 +01:00
Christian Kamm
7d70f1becb Ignore files that can't be encoded for the filesystem
There's an upstream bug where QTextCodec::canEncode returns true even
though it should be false. This works around that issue and adds a test.

The original work was done in 72809ef5b1

See #6287, #5676, #5719
See https://bugreports.qt.io/browse/QTBUG-6925
2018-01-10 13:36:00 +01:00
Jenkins for ownCloud
a476c5420a [tx-robot] updated from transifex 2018-01-10 02:18:51 +01:00
Christian Kamm
cdd8d10940 Fix resizing crash when currentPage() is null
Sentry:
https://sentry.io/owncloud/desktop-win-and-mac/issues/425331770/
2018-01-09 13:54:11 +01:00
Christian Kamm
883deb1c5d Fix potential crash in Composite job destruction
Sentry:
https://sentry.io/owncloud/desktop-win-and-mac/issues/427476987/
2018-01-09 13:53:57 +01:00
Christian Kamm
e389fcaecb Avatars: Use old location for servers <10 #6279 2018-01-09 11:34:56 +01:00
Christian Kamm
585d2b20bd Exclude regex: Restore old matching on Windows #6245
Unfortunately matching behaved differently on Windows. This patch
restores the previous matching behavior but still uses the new regular
expression based matching.

Further work will hopefully unify the behavior between platforms without
breaking backwards compatibility.
2018-01-09 11:09:05 +01:00
Jenkins for ownCloud
9078d9cfab [tx-robot] updated from transifex 2018-01-09 02:18:35 +01:00
Daniel Nicoletti
a7ee1a95a6 Download and decrypt file if parent folder is marked as encrypted 2018-01-08 21:08:31 +01:00
Daniel Nicoletti
3abbbab6a0 Faster way to detecting CSE capability 2018-01-08 21:08:31 +01:00
Christian Kamm
51b662fdfe Minor logging additions
- Clearly mark local and remote discovery start, to make this searchable
even without --logdebug.
- Promote two messages from debug to info: The 'N entries read from db'
message is useful and the 'read from db but ignored' message is rare
and surprising - if there's a bug there we want to see what happened in
the logs.
2018-01-08 09:36:30 +01:00
Jenkins for ownCloud
b6d74ad753 [tx-robot] updated from transifex 2018-01-08 02:18:35 +01:00
Jenkins for ownCloud
5656323434 [tx-robot] updated from transifex 2018-01-06 02:18:39 +01:00
Christian Kamm
81baebf113 owncloudcmd: Set proxy earlier #6281
In particular before the capability call.

Also warn if no proxy is set because the command line doesn't follow the
strict format requirements.

(cherry picked from commit d0e7f61db6)
2018-01-05 10:26:55 +01:00
Christian Kamm
f7c884d4d1 owncloudcmd: Remove some dead code
(cherry picked from commit 0f8790d993)
2018-01-05 10:26:53 +01:00
Christian Kamm
d0e7f61db6 owncloudcmd: Set proxy earlier #6281
In particular before the capability call.

Also warn if no proxy is set because the command line doesn't follow the
strict format requirements.
2018-01-05 10:23:29 +01:00
Christian Kamm
0f8790d993 owncloudcmd: Remove some dead code 2018-01-05 10:12:25 +01:00
Christian Kamm
86377aa37a Folder: Remove unused 'dirty proxy' setting 2018-01-05 09:44:20 +01:00
Christian Kamm
3988f3ad77 GCC: Fix implicit-fallthrough warnings 2018-01-05 09:43:53 +01:00
Christian Kamm
7aa9af08c3 Issues: Speed up insertion and add hard upper limit #6272
Since sorting was enabled permanenty the list would be resorted with
each inserted issue. When inserting thousands of ignored files that
would make the whole ui freeze up.

Instead, sorting is disabled for inserts now and is reenabled after some
time has passed. That way users usually see the sorted view without the
lockups. Also, there's now a maximum of 50k issue entries.
2018-01-05 08:44:27 +01:00
Jenkins for ownCloud
15803d1837 [tx-robot] updated from transifex 2018-01-05 02:18:35 +01:00
Christian Kamm
ab9d6285c6 Proxy: Hostname validation and reconnection on setting change
Where 'validation' currently just means "check whether it's empty".

Code adapted from wiggiBe's original PR #6140
2018-01-04 14:30:24 +01:00
Jenkins for ownCloud
c0c10fd5f1 [tx-robot] updated from transifex 2018-01-04 02:18:34 +01:00
Jenkins for ownCloud
e2d4a38639 [tx-robot] updated from transifex 2018-01-03 02:18:34 +01:00
Jenkins for ownCloud
f89676d4bb [tx-robot] updated from transifex 2018-01-02 02:18:36 +01:00
Jenkins for ownCloud
b9c167fc13 [tx-robot] updated from transifex 2018-01-01 02:18:34 +01:00
Jenkins for ownCloud
3bac06d6e5 [tx-robot] updated from transifex 2017-12-31 02:18:36 +01:00
Jenkins for ownCloud
504e11b5bb [tx-robot] updated from transifex 2017-12-30 02:18:36 +01:00
Daniel Nicoletti
e2c895e61f Fix encrypted file location on the server 2017-12-29 17:28:35 +01:00
Daniel Nicoletti
ca92c46970 Add category logging to PropagateUploadEncrypted 2017-12-29 17:28:35 +01:00
Daniel Nicoletti
50916bcda5 Mark ClientSideEncryption::isFolderEncrypted() as const 2017-12-29 17:28:35 +01:00
Daniel Nicoletti
c6491d50bb Replace deprecated Qt API usage 2017-12-29 17:28:35 +01:00
Daniel Nicoletti
fdc96d3a4f Fix deprecated use of QUrl::setQueryItems() 2017-12-29 17:28:35 +01:00
Daniel Nicoletti
e06e04ee93 Fix parsing list of encrypted folders 2017-12-29 17:28:35 +01:00
Tomaz Canabrava
7d68fa17e7 Merge pull request #107 from dantti/clientSideEncryptionV3
Prepend "nextcloud" for all logging categories
2017-12-29 11:52:40 +01:00
Jenkins for ownCloud
b80ba97154 [tx-robot] updated from transifex 2017-12-29 02:18:34 +01:00
Daniel Nicoletti
a63d34f870 Prepend "nextcloud" for all logging categories
Thus making easier to exclude logging from kio, qt
and only enable "nextcloud.*"
2017-12-28 17:33:10 -02:00
Tomaz Canabrava
c772857054 Merge pull request #106 from dantti/clientSideEncryptionV3
Fix URL in dialog that requests password
2017-12-28 13:08:33 +01:00
Daniel Nicoletti
c963259bfb Fix URL in dialog that requests password
An URL that had base like "http://localhost/nextcloud/"
would get the last slash '/' removed and then appended
with "index.php..." resulting in
http://localhost/nextcloudindex.php
2017-12-28 10:00:17 -02:00
Jenkins for ownCloud
e3e38f3eac [tx-robot] updated from transifex 2017-12-28 02:18:36 +01:00
Jürgen Weigert
6e445033c7 OBS publishing details added
OBS has two pubishing swithces: one per package and one per project, 
we always only switch per project! we have too many dependency packages to keep that in sync manually!
2017-12-27 12:37:02 +01:00
Jenkins for ownCloud
93c9f4316b [tx-robot] updated from transifex 2017-12-27 02:18:35 +01:00
Jenkins for ownCloud
47a7000121 [tx-robot] updated from transifex 2017-12-26 02:18:36 +01:00
Jenkins for ownCloud
6c9026e330 [tx-robot] updated from transifex 2017-12-25 02:18:36 +01:00
Tomaz Canabrava
efc039863b [CSE] Tons of debugs. 2017-12-24 17:08:04 +01:00
Tomaz Canabrava
da9f1c412d [CSE] Remove debug 2017-12-24 16:36:57 +01:00
Tomaz Canabrava
06c34ed617 [CSE] Assorted fixes
- Unlock the folder even on error
- Use the correct name of the file for upload
2017-12-24 16:30:39 +01:00
Jenkins for ownCloud
d59c609a73 [tx-robot] updated from transifex 2017-12-24 02:18:35 +01:00
Jenkins for ownCloud
6ee48c8f15 [tx-robot] updated from transifex 2017-12-23 02:18:34 +01:00
Tomaz Canabrava
60ef722b60 [CSE] Update the metadata when a file is being uploaded. 2017-12-22 23:05:39 +01:00
Tomaz Canabrava
e70bf44aaf [CSE] Fix the generation of the data for the update Metadata 2017-12-22 22:39:45 +01:00
Tomaz Canabrava
124a7253a4 [CSE] Create job to Update Metadata 2017-12-22 22:02:16 +01:00
Jenkins for ownCloud
6af823b36a [tx-robot] updated from transifex 2017-12-22 02:18:56 +01:00
Olivier Goffart
a642d99d4b Merge remote-tracking branch 'origin/2.4'
Conflicts:
	VERSION.cmake
        src/CMakeLists.txt
2017-12-21 12:51:01 +01:00
Roeland Jago Douma
65dfc47ac7 Set public key once certificate is retrieved
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-21 10:20:03 +01:00
Roeland Jago Douma
0dc7831336 Key is already base64 decoded
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-21 09:49:31 +01:00
Jenkins for ownCloud
8c7ea61623 [tx-robot] updated from transifex 2017-12-21 02:18:35 +01:00
Tomaz Canabrava
b72113a53d [CSE] Prepare the beginning of the upload.
I still need to send the metadata.
2017-12-21 00:35:23 +01:00
Tomaz Canabrava
df5fd3fbe6 [CSE] More debug output, fix input file path 2017-12-21 00:00:27 +01:00
Tomaz Canabrava
7be5f0a736 [CSE] Update the finished signal 2017-12-20 23:36:49 +01:00
Tomaz Canabrava
d87648c99a [CSE] Use the metadata as pointer. 2017-12-20 23:30:51 +01:00
Tomaz Canabrava
25d58ccd58 Revert "Store metadata keys as keys"
This commit broke decryption.

This reverts commit b9f094cd94.
2017-12-20 23:16:42 +01:00
Tomaz Canabrava
dd0528037d [CSE] Generate a random name for the temporary file 2017-12-20 23:09:28 +01:00
Tomaz Canabrava
7e83f0591b [CSE] Create the Encrypted File on Disk 2017-12-20 22:32:38 +01:00
Tomaz Canabrava
3760b86e07 [CSE] Mobe fileEncryption to a static function
and I'll move all of those to a namespace latter.
2017-12-20 22:28:01 +01:00
Tomaz Canabrava
20198c5c7b Merge branch 'clientSideEncryptionV3' of github.com:nextcloud/client into clientSideEncryptionV3 2017-12-20 22:11:46 +01:00
Roeland Jago Douma
3c301a8282 Add missing FolderMetadata functions
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 22:08:57 +01:00
Roeland Jago Douma
74bc9213c5 Generate encrypted metadata on the fly
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 22:04:26 +01:00
Tomaz Canabrava
679bb1f18e [CSE] Expose EncryptionHelper 2017-12-20 21:33:25 +01:00
Tomaz Canabrava
14b18b146d Merge branch 'clientSideEncryptionV3' of github.com:nextcloud/client into clientSideEncryptionV3 2017-12-20 21:29:54 +01:00
Roeland Jago Douma
5e23ca9658 FolderMetaData: store metadataKeys in a QMap
* This allows us to pick the right key for files

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 21:25:27 +01:00
Roeland Jago Douma
b9f094cd94 Store metadata keys as keys
Don't store them base64 encoded. But store them directly useable
2017-12-20 21:17:41 +01:00
Roeland Jago Douma
c35b57cfba Parse the files in the metadata
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 20:49:16 +01:00
Tomaz Canabrava
1e899f4172 [CSE] Do not create QPointer from raw pointers 2017-12-20 20:00:59 +01:00
Tomaz Canabrava
0347cf4e9e [CSE] Store the sharing keys in memory 2017-12-20 19:40:58 +01:00
Roeland Jago Douma
fc73ad7476 Salt should not be hardcoded
We append the salt (just like the IV) to the ciphertext of the private
key. This means we also have to split it off properly.

This breaks compartibility with currently stored keys on your server.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 16:07:33 +01:00
Markus Goetz
067508c082 VERSION.cmake: This branch is now 2.4.1 2017-12-20 16:03:35 +01:00
Roeland Jago Douma
b924ad7282 Lower mnemonic when generating password
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 15:41:38 +01:00
Roeland Jago Douma
4551bbe0e0 Forget key + cert + mnemonic on account removal
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 15:35:23 +01:00
Roeland Jago Douma
a48a3e0acc Cleanup old functions
Those functions had no use anymore since we store the key and cert in
the keychain. Removed them so we don't use them by accident.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 13:41:13 +01:00
Roeland Jago Douma
ee281963fe Base64 magic:
* metadata keys: bin -> b64 -> enc -> b64
* sharing metadat: string -> b64 -> enc -> b64

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-20 10:22:35 +01:00
Jenkins for ownCloud
79065ba5c6 [tx-robot] updated from transifex 2017-12-20 02:18:53 +01:00
Tomaz Canabrava
ab89231ca2 [CSE] Remove unused debug 2017-12-20 00:25:56 +01:00
Tomaz Canabrava
d26ade1870 [CSE] Fix the result of the decryption
However the text still looks like encrypted.
2017-12-20 00:25:39 +01:00
Tomaz Canabrava
a1e6901ecc [CSE] Decrypt correctly the metadata
There's a bug that's returning an empty bytearray, need to look
into that.
2017-12-20 00:20:27 +01:00
Tomaz Canabrava
494ae31de9 [CSE] Fix correct json object 2017-12-19 23:09:39 +01:00
Tomaz Canabrava
a02246dc65 [CSE] Fix Metadata bugs p1
The RFC was misleading, I took the chance to fix a few
inconsistencies regarding the QJsonDocument.
2017-12-19 22:47:05 +01:00
Tomaz Canabrava
5609a1dbe8 [CSE] Remove old debug code so I can focus. 2017-12-19 17:02:23 +01:00
Jenkins for ownCloud
3fbd156c83 [tx-robot] updated from transifex 2017-12-19 02:18:35 +01:00
Jenkins for ownCloud
8fb191afcf [tx-robot] updated from transifex 2017-12-18 02:18:34 +01:00
Tomaz Canabrava
aa36cc4a5c [CSE] Reduce probability of conflicts when rebasing
Creates a new file/class to handle upload,
propagateuploadencrypted.h/cpp. This should have all the logic to deal
with the encryption and upload.
2017-12-17 22:38:43 +01:00
Tomaz Canabrava
b9cdc8e922 [CSE] Fix the url to delete the metadata 2017-12-17 21:19:32 +01:00
Tomaz Canabrava
23f832caf4 [CSE] Code Cleanup 2017-12-17 19:19:44 +01:00
Tomaz Canabrava
7ef2489f1d [CSE] Fix infoForFileId
We need to traverse the path recursivelly.
2017-12-17 19:14:34 +01:00
Jenkins for ownCloud
ab37856a91 [tx-robot] updated from transifex 2017-12-17 02:18:35 +01:00
Hefee
844e03d000 Also disable fstack-protector for alpha plattform.
This fixes #6211.

(cherry picked from commit 69e81e8f65)
2017-12-16 14:08:08 +01:00
Hefee
69e81e8f65 Also disable fstack-protector for alpha plattform.
This fixes #6211.
2017-12-16 14:03:59 +01:00
Jenkins for ownCloud
46e796303e [tx-robot] updated from transifex 2017-12-16 02:18:35 +01:00
Tomaz Canabrava
ce41e3e42f [CSE] Work the Set Decrypted Bit 2017-12-15 23:32:41 +01:00
Olivier Goffart
1940c2f9bf Exclude: Use Qt to load the exclude file
fopen does not work well with relative path tand forward slashes on windows
This fix the windows textexcludedfiles test.
And also make the code simpler.

Note that the 'trimmed' might be a behavior change, but i think it is ok
2017-12-15 19:16:20 +01:00
Christian Kamm
83e94c3ec7 Fix compile after rebase 2017-12-15 18:05:44 +01:00
Christian Kamm
a7c0cfc8eb Upload conflict files #4557
If the server has the 'uploadConflictFiles' capability conflict
files will be uploaded instead of ignored.

Uploaded conflict files have the following headers set during upload
  OC-Conflict: 1
  OC-ConflictBaseFileId: 172489174instanceid
  OC-ConflictBaseMtime: 1235789213
  OC-ConflictBaseEtag: myetag
when the data is available. Downloads accept the same headers in return
when downloading a conflict file.

In the absence of server support clients will identify conflict files
through the file name pattern and attempt to deduce the base fileid.
Base etag and mtime can't be deduced though.

The upload job for a new conflict file will be triggered directly from
the job that created the conflict file now. No second sync run is
necessary anymore.

This commit does not yet introduce a 'username' like identifier that
automatically gets added to conflict file filenames (to name the files
foo_conflict-Fred-1345.txt instead of just foo_conflict-1345.txt).
2017-12-15 18:03:53 +01:00
Christian Kamm
7ae8ba35de Remove unused csync test file
Now found at
test/csync/csync_tests/check_csync_update.cpp
2017-12-15 18:02:04 +01:00
Christian Kamm
8eebc53728 Unify item type enum
Previously, there was csync_ftw_type_e and SyncFileItem::Type. Having
two enums lead to a bug where Type::Unknown == Type::File that went
unnoticed for a good while.

This patch keeps only a single enum.
2017-12-15 18:02:04 +01:00
Tomaz Canabrava
2e516dfc67 Merge branch 'clientSideEncryptionV3' of github.com:nextcloud/client into clientSideEncryptionV3 2017-12-15 15:05:51 +01:00
Tomaz Canabrava
250c8ff1bf [CSE] Add job to delete metadata
This is needed for the correct functioning of the Set Folder
as Decrypted
2017-12-15 15:02:43 +01:00
Olivier Goffart
ee366df58f Fix the TestFolderMan on Windows 2017-12-15 14:51:00 +01:00
Olivier Goffart
482ee875a1 Fix TestSyncEngine on windows 2017-12-15 14:39:01 +01:00
Tomaz Canabrava
5607e27f20 [CSE] Actually save the http response result 2017-12-15 14:25:57 +01:00
Olivier Goffart
b10edfecfc Workaround MSVC bug with enum in bitfield
MSVC stores the enum as signed in the bitfield (contrary to the C++ spec)
Which means that once we store a value such as SyncFileItem::DetailError
in a bitfield, we get a negative value back, then of course, further
comparison fails.
2017-12-15 14:18:45 +01:00
Tomaz Canabrava
43332d3ac7 [CSE] Properly update UI status to encrypted / decrypted 2017-12-15 14:00:42 +01:00
Roeland Jago Douma
8c178bd035 Merge pull request #95 from nextcloud/fix-libcloudproviders-conditions
Fix build on windows
2017-12-15 12:58:13 +01:00
Julius Härtl
49a16ffb4b Fix build on windows
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-15 10:59:14 +01:00
Klaas Freitag
3b96097cf6 Config: Look for exclude file in a relative path.
If the application binary is not installed in /usr/bin the client
with this patch considers to check the relative location
../../etc/owncloud-client/ to find the system exclude.

This is an important bit for AppImage based packages of the client,
as this runs from a temporar mountpoint and the system file can not
be found under /etc.
2017-12-15 09:54:40 +01:00
Christian Kamm
298f1ab570 Disable stack protection for mingw win32 builds in 2.4
Mingw builds could have it enabled! But we need to ship libssp and test
this more. For the upcoming 2.4 release it should be disabled.
2017-12-15 09:16:59 +01:00
Jenkins for ownCloud
79dd8e9074 [tx-robot] updated from transifex 2017-12-15 02:18:52 +01:00
Roeland Jago Douma
99b4381591 Don't try to decrypt twice
The DecryptMetaDataKeys already base64 decoded

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-14 23:11:40 +01:00
Roeland Jago Douma
69a201a62d Percentencode the json we send so special chars don't cause trouble
The + sign was lost in transfer.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-14 23:11:07 +01:00
Roeland Jago Douma
56028759d5 Merge branch 'master' into clientSideEncryptionV3 2017-12-14 20:47:05 +01:00
Markus Goetz
8d5afff0a4 Update ChangeLog for 2.4.0 2017-12-14 20:07:14 +01:00
Roeland Jago Douma
be3afd1291 Add FileEncryptJob and FileDecryptJob
This handles encryption and decryption of files.
Just create the job and start off.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-14 16:54:56 +01:00
Roeland Jago Douma
ac524d8e85 Merge pull request #92 from nextcloud/drone_up
Bump drone images
2017-12-14 14:54:46 +01:00
Tomaz Canabrava
82c07236c1 [CSE] Add new method "infoForFolderId"
we need to query the model for the subfolderinfo, but we don't
have the model index, we have the folder id. this returns it.
2017-12-14 14:39:07 +01:00
Roeland Jago Douma
76b8d2536b Bump drone images
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-14 12:57:16 +01:00
Olivier Goffart
4dc49ff3b0 SyncEngine: Recover when the PUT reply (or chunkin's MOVE) is lost
This can happen if the upload of a file is finished, but we just got
disconnected right before recieving the reply containing the etag.
So nothing was save din the DB, and we are not sure if the server
recieved the file properly or not. Further local update of the file
will cause a conflict.

In order to fix this, store the checksum of the uploading file in
the uploadinfo table of the local db (even if there is no chunking
involved).  And when we have a conflict, check that it is not because
of this situation by checking the entry in the uploadinfo table.

Issue #5106
2017-12-14 11:56:12 +01:00
Olivier Goffart
4369853ddb TestSystem: Add QIODevice in the serverOverride function, and add a DelayedReply
Preparing to add test that needs the QIODevice.
Also make the DelayedReply so we can generalize the existing delay on FakeChunkMoveReply
to any reply.
2017-12-14 11:56:12 +01:00
Roeland Jago Douma
de4492a2fd Merge pull request #55 from nextcloud/libcloudproviders-integration
Integrate libcloudproviders support
2017-12-14 11:50:43 +01:00
Christian Kamm
d870729709 Require Qt >= 5.6 #6241 2017-12-14 11:31:30 +01:00
Julius Härtl
1cedb1919f Integrate libcloudproviders support
This commit integrates support for libcloudproviders
desktop integration API. If build with the library it
will check on startup if the DBus interface is available
and then use it instead of the legacy status icon.

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-14 11:19:25 +01:00
Roeland Jago Douma
09fa5966da Merge pull request #90 from nextcloud/oc_up
Merge upstream
2017-12-14 11:18:54 +01:00
Roeland Jago Douma
fe4bb52a6d Merge remote-tracking branch 'oc/master' into oc_up 2017-12-14 10:27:11 +01:00
Christian Kamm
f40cceaf04 Share link: Adjust design of folder sharing permissions #6192 2017-12-14 08:34:44 +01:00
Jenkins for ownCloud
b357003a95 [tx-robot] updated from transifex 2017-12-14 02:18:37 +01:00
Daniel Hansson
042816bd0d Merge pull request #88 from ivaradi/debian-build
Ubuntu/Debian build
2017-12-13 21:40:02 +01:00
Tomaz Canabrava
c592871f94 [CSE] Do not handle b64 inside of the decrypt function
the decrypt function should deal with the raw data always.
2017-12-13 16:37:52 +01:00
rockihack
5cc3b526e8 stack-protector is not supported on hppa.
(cherry picked from commit 8a963a67f2)
2017-12-13 11:28:22 +01:00
rockihack
1b2a8ba6b0 Enable stack-protector-strong on Windows and macOS.
(cherry picked from commit 586fd346ea)
2017-12-13 11:28:22 +01:00
rockihack
8a963a67f2 stack-protector is not supported on hppa. 2017-12-13 11:27:48 +01:00
rockihack
586fd346ea Enable stack-protector-strong on Windows and macOS. 2017-12-13 11:27:48 +01:00
Christian Kamm
e5ed8fc90a Merge remote-tracking branch 'origin/2.4' 2017-12-13 11:03:24 +01:00
Markus Goetz
75676f8830 Notifications: Propagate "Dismiss" as DELETE to server #5922
(cherry picked from commit e86416fff7)
2017-12-13 11:00:40 +01:00
Jenkins for ownCloud
530853c988 [tx-robot] updated from transifex 2017-12-13 02:18:36 +01:00
Tomaz Canabrava
9916583ffa [CSE] More verbose output 2017-12-12 21:50:30 +01:00
Roeland Jago Douma
25734afd39 First base64 decode
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-12-12 21:42:37 +01:00
Tomaz Canabrava
ea3558faf6 [CSE] Fix strings 2017-12-12 21:29:06 +01:00
Tomaz Canabrava
159c0e138f [CSE] Add a DecryptAsync method
Also, cleanup a bit of the old calls. One particular difference
is that I used to set padding to 1 and it should actually be
PKCS1_OAEP_PADDING
2017-12-12 21:23:02 +01:00
Tomaz Canabrava
aca298ca64 [CSE] Be explicit that async encryption uses publicKey 2017-12-12 20:14:31 +01:00
Tomaz Canabrava
2127b2629d [CSE] Move encryption related network jobs to its own file
Move encryption related network jobs to it's own file,
the original file was starting to be just way too big.
2017-12-12 19:36:47 +01:00
István Váradi
c26d986dbf New repository directory name 2017-12-12 17:27:01 +01:00
István Váradi
e55518f820 Fixed IV variable reference 2017-12-12 17:22:29 +01:00
István Váradi
44854beefb Further script and file path renaming 2017-12-12 17:17:23 +01:00
István Váradi
7e41a811dd Fix of script path 2017-12-12 17:14:49 +01:00
István Váradi
d2e159c385 Automatic building of Ubuntu/Debian packages 2017-12-12 17:11:46 +01:00
Tomaz Canabrava
f6f078d1ee [CSE] Rename Variable 2017-12-12 16:15:05 +01:00
Tomaz Canabrava
ce37235cc4 [CSE] Retrieve the Private Key from the KeyChain
This fixes one thing and exposes a bug.
the MetadataKeys are not being correctly unencrypted.
2017-12-12 16:09:49 +01:00
Tomaz Canabrava
0a58ea76e5 [CSE] Start the work with an existing metadata 2017-12-12 15:35:53 +01:00
Olivier Goffart
02283fc686 Merge pull request #6224 from owncloud/deprecated
Remove use of deprecated Qt API
2017-12-12 11:48:04 +01:00
Tomaz Canabrava
e6f835d138 [CSE] Unlock the folder after a lock
This makes sure the folder will be unlocked for next tests
2017-12-12 11:26:54 +01:00
Tomaz Canabrava
33b1fcfe66 Merge branch 'master' into clientSideEncryptionV3 2017-12-12 10:46:43 +01:00
Christian Kamm
dcf0baa9de Journal: 64bit inodes, fix storing uint64s generally
In addition to using the right function when retrieving inodes this
*also* fixes a more general bug ownsql had with storing uint64 values
that didn't fit into an int64.
2017-12-12 10:30:54 +01:00
Martin
cd2057fc04 Update Overlay Icon naming 2017-12-12 10:18:00 +01:00
Jenkins for ownCloud
3e294d5339 [tx-robot] updated from transifex 2017-12-12 02:18:35 +01:00
Olivier Goffart
bae00358b9 Merge pull request #6219 from owncloud/config
Move config and remove most dependencies form the sync engine.
2017-12-11 17:10:18 +01:00
Jenkins for ownCloud
36573a5c6f [tx-robot] updated from transifex 2017-12-11 02:18:33 +01:00
Jenkins for ownCloud
9a835af7ce [tx-robot] updated from transifex 2017-12-10 02:18:34 +01:00
Jenkins for ownCloud
ca48ff793c [tx-robot] updated from transifex 2017-12-09 02:18:34 +01:00
Olivier Goffart
58e8a25869 Enable deprecated warnings 2017-12-08 16:16:06 +01:00
Olivier Goffart
d517d92f6c FolderWizard: don't use deprecated API 2017-12-08 16:16:06 +01:00
Olivier Goffart
71dcf7fc37 SSLButton: Removes some call to deprecated functions 2017-12-08 16:16:02 +01:00
Olivier Goffart
0a59faf03d OcsJob: Use QUrlQuery
Qurl::setEncodedQueryItems is deprecated.
2017-12-08 16:15:48 +01:00
Olivier Goffart
7bd48b1327 cmd: remove usage of deprecated qInstallMsgHandler 2017-12-08 16:15:48 +01:00
Olivier Goffart
8c652e061d Remove uses of deprecated QString::fromAscii 2017-12-08 16:15:48 +01:00
Olivier Goffart
a4816d6a8c Updater: use QUrlQuery
QUrl::addQueryItem is deprecated
2017-12-08 16:15:47 +01:00
Olivier Goffart
1a503d54f6 Remove usage of deprecated qSort 2017-12-08 16:15:47 +01:00
Olivier Goffart
263668b1cb Remove use of deprecated translate call 2017-12-08 16:15:38 +01:00
Olivier Goffart
3df65460f5 Remove usage of QString::null
Replaces by "QString()"
2017-12-08 16:15:22 +01:00
Olivier Goffart
74672d493d Utility: use QUrlQuery
For QUrl::setQuery is deprecated in Qt5
2017-12-08 16:15:17 +01:00
Tomaz Canabrava
0a83d3e743 [CSE] Fix reading the public key for the metadata
This broke when we started to use QSslKey and the Qt Keychain
framework.
2017-12-08 11:24:22 +01:00
Tomaz Canabrava
a08a32ceca [CSE] Fetch the metadata for the upload. 2017-12-08 10:32:05 +01:00
Tomaz Canabrava
6745777ca3 [CSE] Save folder id and token for the lock
So we can unlock it later. - perhaps we should store this
on the disk or something, to make it harder to lose.
2017-12-08 10:19:56 +01:00
Olivier Goffart
f1b7d506ae csync_exclude: fix compilation of non-test builds 2017-12-08 09:43:26 +01:00
Jenkins for ownCloud
fc8c88be41 [tx-robot] updated from transifex 2017-12-08 02:18:35 +01:00
Tomaz Canabrava
70d562668c [CSE] Add handling for side-by-side uploads. 2017-12-07 21:51:42 +01:00
Tomaz Canabrava
ccd8cff4db [CSE] Try to lock repeteadly the folder if needed.
The upload is made in an event loop with more than one
upload at the same time, this confuses the hell out of the
folder locking mechanism.

We need to lock the folder and ask the other trials to try
again in a few seconds in the future to give time for the
uploader to actually upload the current file that's locking
the folder.
2017-12-07 21:31:20 +01:00
Tomaz Canabrava
9f678652f8 [CSE] Lock the folder to upload a file. 2017-12-07 20:52:54 +01:00
Tomaz Canabrava
76916b6c48 [CSE] Request the Folder ID. 2017-12-07 19:39:30 +01:00
Tomaz Canabrava
4878e824e5 [CSE] Fix reading encrypted status of folders. 2017-12-07 19:04:12 +01:00
Tomaz Canabrava
893ca66af8 [CSE] Fix indentation
Parts of the code are indented by spaces, other parts by tabs.
This needs to run in the whole codebase.
2017-12-07 18:12:25 +01:00
Tomaz Canabrava
19120fde9f [CSE] Don't query for files on GetFolderEncryptStatusJob
The request for folders whas also replying for files.
2017-12-07 18:10:14 +01:00
Tomaz Canabrava
7fe4dd2163 [CSE] Renane GetFolderEncryptStatus to GetFolderEncryptStatusJob
it's a network job after all
2017-12-07 18:06:55 +01:00
Olivier Goffart
4581d708ff Account: remove dependency with ConfigFile
Part of #6213
2017-12-07 17:39:16 +01:00
Olivier Goffart
e0a14cac5b ConfigFile: use QStandardPaths::AppConfigLocation for the config file
Also use appName instead of appNameGui in order to compute the path

Issue: #2245

The reason is to respect the XDG spec on Unix (#1601) and might help
on windows roaming profiles (#684)
2017-12-07 17:39:16 +01:00
Olivier Goffart
ac844a2a45 AbstractNetworkJob: move the httpTimeout from the propagator to the network job
Remove one dependency from the config file for the sync engine.
Part of issue #6213
2017-12-07 17:39:16 +01:00
Olivier Goffart
7230fa6b4f SyncOptions: move to its own file
It does not really belong in the discoveryphase.h as it is used also for
propagator option.

Also use C++11 style member initializer
2017-12-07 17:35:38 +01:00
Olivier Goffart
e25af4f0dc csync_exclude: Fix compile
csync_exclude.cpp:428:17: error: assigning to 'char *' from incompatible type 'const char *'
        bname = path;
                ^~~~

The C library's strrchr always return 'char*'
Only the C++'s std::strrchr has two overloads
2017-12-07 17:34:14 +01:00
Tomaz Canabrava
863e86138f [CSE] Pass the folder to the GetEncryptionStatus
Sometimes we are only interested in folders.
2017-12-07 17:32:35 +01:00
Christian Kamm
287670c9d6 Excludes: Remove fnmatch codepath
Now all exclude patterns can be translated to regular expressions.
2017-12-07 14:38:21 +01:00
Christian Kamm
994f3bb644 Excludes: fnmatch doesn't treat '{' as special
Neither the documentation at
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13
nor the fnmatch source code in <glibc>/posix/fnmatch_loop.c points
toward { causing special matching behavior.
2017-12-07 14:38:21 +01:00
Christian Kamm
e5c780ee19 Excludes: Translate full-path patterns to regex
Improves full matches by more than an order of magnitude
and also improves speed of traversal matches by roughly 20%,
judging by the check_csync_exclude performance test.
2017-12-07 14:38:21 +01:00
Christian Kamm
1c3d5ab158 Excludes: Introduce dir-only regex matches 2017-12-07 14:38:21 +01:00
Christian Kamm
5d668eca40 Excludes: Optimize Desktop.ini check 2017-12-07 14:38:21 +01:00
Christian Kamm
7ab127ad53 Excludes: Refactor for pending improvements
Make ExcludedFiles something that is instantiated outside of
the CSYNC context and then given to it as a hook.

ExcludedFiles still lives in csync_exclude and the internal
workings haven't been touched.
2017-12-07 14:38:21 +01:00
Olivier Goffart
dd91f4a86e Merge remote-tracking branch 'origin/2.4'
Conflicts:
	src/csync/csync.cpp
2017-12-07 09:37:50 +01:00
Olivier Goffart
3485109125 Jenkinsfile: Fix compilation
Add a CMAKE_PREFIX_PATH so it finds the right QtKeychain
2017-12-07 09:35:04 +01:00
Jenkins for ownCloud
a1136e7695 [tx-robot] updated from transifex 2017-12-07 02:18:34 +01:00
Hefee
32f38dc5f8 fix typo error: occured-> occurred 2017-12-06 20:02:53 +01:00
Christian Kamm
ceac18c554 Reconcile: Rename maps are consistent with update phase #6212
For duplicate file ids the update phase and reconcile phase determined
the rename mappings independently. If they disagreed (due to different
order of processing), complicated misbehavior would result.

This patch fixes it by letting reconcile try to use the mapping that the
update phase has computed first.
2017-12-06 16:42:11 +01:00
Christian Kamm
99f32dcb99 Clear csync rename mappings after reconcile
They were being preserved *across sync runs*.
2017-12-06 16:42:11 +01:00
Christian Kamm
79fe71db58 Hide selective sync buttons while disconnected #5809
The choices or big folder warnings will pop up again on reconnection.
2017-12-06 16:41:28 +01:00
Jenkins for ownCloud
ac937030f0 [tx-robot] updated from transifex 2017-12-06 02:18:35 +01:00
Olivier Goffart
ed5385faa3 Merge remote-tracking branch 'origin/2.4'
Conflicts:
	src/libsync/connectionvalidator.cpp
     	src/libsync/networkjobs.cpp
2017-12-05 15:58:13 +01:00
Markus Goetz
fe234499dd Update release_template.md 2017-12-05 09:22:23 +01:00
Jenkins for ownCloud
67d77dd6ce [tx-robot] updated from transifex 2017-12-05 02:18:35 +01:00
Tomaz Canabrava
66aecb9626 [CSE] Handle normal uploads in CSE enabled instances 2017-12-04 22:45:10 +01:00
Tomaz Canabrava
6f35cbff6b [CSE] Fetch the Folder information for encryption status 2017-12-04 22:27:13 +01:00
Tomaz Canabrava
387737d908 [CSE] Start to create the upload logic. 2017-12-04 21:33:43 +01:00
Markus Goetz
755ef0119a ChangeLog: More 2.4.0 changes up to now 2017-12-04 13:18:29 +01:00
Hefee
1a1ab92ed9 make doc-man working again. 2017-12-04 12:37:30 +01:00
Michael Stingl
b29e9b931d move man rst files to separate dir 2017-12-04 12:37:30 +01:00
Markus Goetz
0479322c1d fstack-protector: Improve previous commit 2017-12-04 12:37:03 +01:00
Klaas Freitag
0be7b6fe1f Only enable -fstack-protector-strong compiler flag for gcc > 4.9
On older/other compilers this flag is not understood.
2017-12-04 12:37:03 +01:00
Olivier Goffart
ee98daf9ea Shibboleth: Upgrade to OAuth2 When the server supports it
If the server support both Shibboleth and OAuth2, upgrades to OAuth2

Issue #6198
2017-12-04 08:09:34 +01:00
Jenkins for ownCloud
f2beaba3e9 [tx-robot] updated from transifex 2017-12-04 02:18:34 +01:00
Tomaz Canabrava
8c4928d9f6 Merge branch 'uploadImprovements' into clientSideEncryptionV3 2017-12-03 18:15:33 +01:00
Jenkins for ownCloud
823c7469e1 [tx-robot] updated from transifex 2017-12-03 02:18:34 +01:00
Jenkins for ownCloud
10efe1faee [tx-robot] updated from transifex 2017-12-02 02:18:34 +01:00
Olivier Goffart
e0954b0999 test/syncenginetestutils.h: Don't use toTimeZone only to get the UTC 2017-12-01 13:18:09 +01:00
Jenkins for ownCloud
5ff3e448f5 [tx-robot] updated from transifex 2017-12-01 02:18:34 +01:00
Jenkins for ownCloud
58bcbba841 [tx-robot] updated from transifex 2017-11-30 02:18:34 +01:00
Roeland Jago Douma
18b456ea2c Merge pull request #77 from nextcloud/bump_drone
Bump drone images to contain WebEngine
2017-11-29 12:51:59 +01:00
Roeland Jago Douma
529442e0f8 Bump drone images
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-29 12:34:34 +01:00
Olivier Goffart
30e3932af8 FolderWizard: Fix minimum size
There are several bugs in QWizard that needs to be worked around for the minimum
size of the widget to take effect.

Issue #4280
2017-11-29 08:03:06 +01:00
Jenkins for ownCloud
e86937e2e2 [tx-robot] updated from transifex 2017-11-29 02:18:34 +01:00
Tomaz Canabrava
35eb071874 [uploadImprovements] use the new struct on PropagateUploadNg
use the new struct on PropagateUploadNg to make the algorithm
more future proof.
2017-11-28 22:58:52 +01:00
Tomaz Canabrava
a64bd6059b [uploadImprovements] fix struct hole 2017-11-28 22:22:37 +01:00
Tomaz Canabrava
a623b14209 [uploadImprovements] use the new struct info in PropagateUploadV1
Add a new member for the UploadFileInfo in PropagateUploadCommon
to hold the full file path - as it can change if we use a temporary
file to upload.

Adapt propagateuploadv1 to use the new calls.
2017-11-28 22:17:29 +01:00
Tomaz Canabrava
f609336bfc Split file to upload from the file on disk
They can be conceptually equal - I can upload the file
on disk, and that's what I do right now. But if we want
to accept filters in the future, filters that change
the file on disk like shrinking an image, the current
information used is wrong and we need a way to separate those.

This patch introduces a new struct that holds the *actual*
file that will be uploaded, be it a temporary one or
the original file.
2017-11-28 21:28:06 +01:00
Tomaz Canabrava
2cacf2547e Merge branch 'master' into clientSideEncryptionV3 2017-11-28 20:12:57 +01:00
Markus Goetz
6276d9290d utility_mac: Check for NULL from LSSharedFileListItemResolve #6123
Possibly also #6074
2017-11-28 13:35:15 +01:00
Roeland Jago Douma
0f60deb043 Store and retrieve keys in keychain
* Store privatekey, certificate and mnemonic in keychain
* Retrieve private + public key from server
  - ask for mnemonic to decrypt private key

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-28 12:36:35 +01:00
Markus Goetz
cde6589af8 owncloudcmd: Don't need Qt Sql module 2017-11-28 10:18:01 +01:00
Jenkins for ownCloud
482d538559 [tx-robot] updated from transifex 2017-11-28 02:18:53 +01:00
Tomaz Canabrava
c4d3d0987d [CSE] Find the start of the upload 2017-11-27 22:20:24 +01:00
Tomaz Canabrava
47b5cd0fbb [CSE] Shows correctly Encrypt / Decrypt in the menu 2017-11-27 21:19:54 +01:00
Tomaz Canabrava
dd903d447f [CSE] Store the encryption status without the webdav url
The Folder information on the desktop client doesn't
knows about the webdav layout aparently.
2017-11-27 21:09:13 +01:00
Tomaz Canabrava
d2d2df4c75 [CSE] Try to find the webdav url of a folder. 2017-11-27 21:06:38 +01:00
Roeland Jago Douma
8c411b32f7 Merge pull request #67 from edent/patch-3
Update ownCloud references to NextCloud
2017-11-27 20:40:01 +01:00
Roeland Jago Douma
ccd050455a Merge pull request #62 from bceverly/master
Added build support for FreeBSD
2017-11-27 20:39:19 +01:00
Roeland Jago Douma
ffb9f69cf6 Start with moving data to the keychain
* Check for cert + privateKey in keychain
* Work with QSslKey and QSslCertificate
* Abstract reading the BIO's a bit more

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-27 16:21:53 +01:00
Roeland Jago Douma
74c4d27ea0 Indent
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-27 16:12:56 +01:00
Tomaz Canabrava
e3050f7456 [CSE] Pass by reference, return by value.
Also, Do not create variables in the heap to change it's value
via reference, prefer an aggregation value. use a Typedef to
fully specify what you want in return.
2017-11-27 15:21:29 +01:00
Jenkins for ownCloud
6cc5ce7a66 [tx-robot] updated from transifex 2017-11-27 02:18:35 +01:00
Jenkins for ownCloud
7a80fe4939 [tx-robot] updated from transifex 2017-11-26 02:18:36 +01:00
Roeland Jago Douma
9cbe795045 Move more encryption functions to encryption helper
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-25 21:43:15 +01:00
Olivier Goffart
b8444053b8 AccountSettings: Fix the size of the "Add Sync Folder Connection" button
The problem here is that the QPainter is created on the viewport with is a
QWidget, but QAbstractItemView can have a different font, and the
QStyleOptionViewItem::font is this font. QStyleOptionViewItem::font
was used to compute the sizeHint, and the default font from the QPainter
was used to draw the text, so they could be not in sync.

Fix it by always using the font for QPushButton

Reported in
https://github.com/owncloud/client/issues/6156#issuecomment-346576328
2017-11-25 16:07:06 +01:00
Roeland Jago Douma
0ee0243595 Merge pull request #65 from edent/patch-2
Typo in documentation
2017-11-25 15:55:41 +01:00
Roeland Jago Douma
b6e986bb1b Merge pull request #64 from edent/patch-1
Typo
2017-11-25 15:55:14 +01:00
Roeland Jago Douma
e0fbdfe175 Remove obsolete encryption functions
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-25 15:50:47 +01:00
Olivier Goffart
753d7addb4 libsync: Fix compilation with TOKEN_AUTH_ONLY
This means we cannot use QtGui in libsync.
So this mostly disable the avatar from the account and the avatarjob

Note that there is one logic change: in ConnectionValidator::slotUserFetched
we do the avatar job even if the user is empty. Otherwise we would end up in
a invalid state. This restore the 2.3.x behavior that was broken in
commit e05d6bfcdc
2017-11-25 12:57:16 +01:00
Terence Eden
632570a13b Update ownCloud references to NextCloud
Fixes #66
2017-11-25 10:26:23 +00:00
Terence Eden
e6be710cdb Typo in documentation
Fixes #63
2017-11-25 10:03:36 +00:00
Terence Eden
0b00ab8a15 Typo
Fixes #63
2017-11-25 10:03:00 +00:00
Jenkins for ownCloud
c0ae96e7a8 [tx-robot] updated from transifex 2017-11-25 02:18:35 +01:00
Roeland Jago Douma
12adff76e2 Properly decrypt private key and send it to the server
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-24 22:10:28 +01:00
Roeland Jago Douma
6d145a676b Added EncryptionHelper
This is to move generic encryption methods out of the main code and into
small helper functions. So we don't scatter the encryption code all over
the place.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-24 21:05:21 +01:00
bceverly
5279e2fb37 Added support for FreeBSD 2017-11-24 08:54:29 -05:00
bceverly
51e355e403 Added support for FreeBSD 2017-11-24 08:54:24 -05:00
Jenkins for ownCloud
e99d64011e [tx-robot] updated from transifex 2017-11-24 02:18:38 +01:00
Tomaz Canabrava
45d9323653 [CSE] Update encryption status when folder is updated 2017-11-23 16:55:12 +01:00
Tomaz Canabrava
57e0d7abcb [CSE] Fix pointer to e2e
Qt expects things to be pointers even if they are stack
variables.
2017-11-23 16:54:45 +01:00
Olivier Goffart
72809ef5b1 csync_update: ignore remote files that cannot be encoded
This is mainly for linux, whose local is not UTF-8.
For example, in latin1, it is not possible to encode emoji or chinese character.
If there are such character in the filename, Qt would just save the file using
the replacement character ('?'). Then, on the next sync, client would rename
the files using this replacement character.

Avoid this by ignoring the files which cannot be downloaded because the
filename cannot be represented with the user's locale

Relates to issue #5676 and #5719
2017-11-23 12:51:28 +01:00
Jenkins for ownCloud
7a790c88e8 [tx-robot] updated from transifex 2017-11-23 02:18:33 +01:00
Jenkins for ownCloud
01377f6ea9 [tx-robot] updated from transifex 2017-11-22 02:18:34 +01:00
Christian Kamm
8c94601ef2 User shares: Further avatar tweaks 2017-11-21 16:33:03 +01:00
Christian Kamm
f27ceb7fab User shares: Use background color, remove permission frame #6176 2017-11-21 16:33:03 +01:00
Christian Kamm
60bde048c6 User shares: Fix missing label when there are only link shares
The "not shared with users or groups" label only appeared if there were
no shares at all.
2017-11-21 16:33:03 +01:00
Christian Kamm
3b961204e1 Avatars in user share dialog: Minor tweaks 2017-11-21 16:33:03 +01:00
Christian Kamm
e9907bc8ae AvatarJob improvements
* Drop AvatarJob2
* Allow AvatarJob to retrieve different sizes and users
* Make creating a circular avatar into a function
  (maybe all avatars should be made into that shape in the first place)
2017-11-21 16:33:03 +01:00
Roeland Jago Douma
6b9b5252de User shares: Show avatars
[Sharing] Show placeholders for avatars

Just like on the web show placeholders for avatars in the sharing dialog

[Sharing] Show avatars!

[Sharing] Show same avatar placeholder for group/federated shares as on
web
2017-11-21 16:33:03 +01:00
Roeland Jago Douma
84a093e450 Merge pull request #53 from nextcloud/build_appimage
Automatically start building AppImages on PR's
2017-11-21 14:27:53 +01:00
Roeland Jago Douma
be8b99bf3a Build AppImage on all pushes
This allows quickly testing of the appimages for feedback

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-21 14:20:09 +01:00
Christian Kamm
d949ec6877 Protocol: Introduce context menu with "open in browser" #6121
To do this conveniently a bunch of functionality that's common to
IssueWidget and ProtocolWidget is moved to ProtocolItem.

Also the convenience function to asynchronously retrieve the private
link url is moved from the socket api to the network jobs.
2017-11-21 12:42:10 +01:00
Olivier Goffart
96dede4e84 TestChunkingNG: Test that resuming does not send past data. 2017-11-21 11:19:14 +01:00
Roeland Jago Douma
e7b7b8923f Merge pull request #52 from nextcloud/single_drone
No double building on PR's
2017-11-21 10:18:01 +01:00
Tomaz Canabrava
a118419f0c [CSE] buildfix, use the correct type. 2017-11-21 09:55:44 +01:00
Roeland Jago Douma
407d71b305 Merge pull request #50 from nextcloud/correct_app_password_link
Have correct app password link
2017-11-21 09:48:01 +01:00
Roeland Jago Douma
d63e18aa9d Merge pull request #51 from nextcloud/no_jenkins
We don't use Jenkins
2017-11-21 09:38:37 +01:00
Roeland Jago Douma
26ba89c2a8 No double building on PR's
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-21 09:27:52 +01:00
Roeland Jago Douma
7c5150421c We don't use Jenkins
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-21 09:20:17 +01:00
Roeland Jago Douma
462353d0ee Have correct app password link
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-21 09:17:42 +01:00
Jenkins for ownCloud
72783aa068 [tx-robot] updated from transifex 2017-11-21 02:18:35 +01:00
Tomaz Canabrava
d31aa7836a [CSE] Add job to find what folders are encrypted.
This still needs to be correctly setuped in the call chain.
The job returns a QVariantMap with the folder-webdav-url
and the encrypted status.
2017-11-20 21:38:17 +01:00
Jürgen Weigert
0abe7a77fb Update release_template.md 2017-11-20 18:12:18 +01:00
Jürgen Weigert
ad408c5717 post release checks added
this fixes https://github.com/owncloud/client/issues/5836
2017-11-20 18:12:18 +01:00
Tomaz Canabrava
34e6534813 Merge branch 'clientSideEncryptionV3' of github.com:nextcloud/client into clientSideEncryptionV3 2017-11-20 18:01:48 +01:00
Tomaz Canabrava
6d464d9dc6 Merge branch 'master-nextcloud' into clientSideEncryptionV3 2017-11-20 18:00:58 +01:00
Roeland Jago Douma
2236d05d25 Merge pull request #49 from nextcloud/nc_theme
Nextcloud theme
2017-11-20 16:47:31 +01:00
Roeland Jago Douma
f0537b20d1 Update with NC icons
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-20 16:14:40 +01:00
Roeland Jago Douma
9878559002 Move to NC theme
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-20 15:46:18 +01:00
Markus Goetz
658a8c0609 mirall.desktop.in: Clean bogus comments #5767 2017-11-20 15:29:39 +01:00
Olivier Goffart
e7a91a1169 AccountSettings: Use the proper position to show the menu over sub-folder
The menu can be open with the keyboard shortcut.

(Fixup for the fix of #5596)

Also use popup instead of exec to show the menu: it's safer as it does
not re-enter the event loop.
2017-11-20 15:22:45 +01:00
Roeland Jago Douma
6b3006b325 OwnCloudCPack.cmake to NextcloudCPack.cmake
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-20 14:12:52 +01:00
Roeland Jago Douma
5dc73ffd8b OWNCLOUD.cmake => NEXTCLOUD.cmake
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-20 14:12:52 +01:00
Roeland Jago Douma
b835bdc55b Merge pull request #48 from nextcloud/oc_master
Bump to oc master
2017-11-20 13:43:34 +01:00
Roeland Jago Douma
725be9ff54 Merge branch 'master' of https://github.com/owncloud/client into oc_master 2017-11-20 13:29:59 +01:00
Christian Kamm
14a51458ab Link share: Move 'delete' button to the bottom #6163 2017-11-20 12:42:41 +01:00
Christian Kamm
aafe7c4732 Merge remote-tracking branch 'origin/2.4' 2017-11-20 11:54:56 +01:00
Christian Kamm
86c2e9e825 Tray: Fix 'Open folder' action creation
It looks like the action was created but not added to the menu. Did this
work with previous Qt versions?
2017-11-20 11:48:55 +01:00
Olivier Goffart
480932a58a Checksum: Ignore unkown OC-Checksum header when downloading...
And if there are several checksums, pick the "best" one.

The case of several checksum was reported in
https://github.com/nextcloud/client_theming/issues/213
2017-11-20 10:51:15 +01:00
Jenkins for ownCloud
529bcab009 [tx-robot] updated from transifex 2017-11-20 02:18:34 +01:00
Jenkins for ownCloud
9a4871abeb [tx-robot] updated from transifex 2017-11-19 02:18:36 +01:00
Jenkins for ownCloud
40665c05ac [tx-robot] updated from transifex 2017-11-18 02:18:36 +01:00
Michael Stingl
d832312acc Add 2.3.3 System Requirements to client repo (#5996)
I would like to maintain the System Requirements in the client repo.
2017-11-17 15:05:42 +01:00
Jenkins for ownCloud
63cf0e347b [tx-robot] updated from transifex 2017-11-17 02:18:37 +01:00
Olivier Goffart
2192386d86 test/testsyncengine: test for PR #6168 2017-11-16 13:31:54 +01:00
Christian Kamm
e694ffcd03 PropagateDownload: Adjustments to skipping downloads #6153
Previously we required matching mtimes but that's actually
unnecessary when the question is about whether to skip the
download. We will still update the file's metadata.

Also, adjust behavior when the checksum is weak (Adler32):
in these cases we still depend on equal mtimes.
2017-11-16 13:31:54 +01:00
Christian Kamm
eff401d418 Share links: Confirm deletion explicitly #6163
Also add the "Delete" action to the "..." menu.
2017-11-16 11:16:47 +01:00
Roeland Jago Douma
9394fe6e84 Use openssl functions to get random words
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-16 10:45:57 +01:00
Jenkins for ownCloud
7049ccd7ab [tx-robot] updated from transifex 2017-11-16 02:18:53 +01:00
Markus Goetz
8fb2167fca sqlite: Update bundled version to 3.21
For OS X and Windows.
2017-11-15 21:53:53 +01:00
Markus Goetz
d0b8528022 Changelog: 2.4 changes up to now 2017-11-15 21:47:34 +01:00
Samuel Alfageme
13d80beb83 Changelog Updated with latest changes
Web equivalent PR: https://github.com/owncloud/owncloud.org/pull/1318
2017-11-15 13:37:25 +01:00
Christian Kamm
06ce8dd8bd Wizard: Add explanation text when server error is shown #6157
Just showing a box with the message can be surprising.
2017-11-15 11:01:44 +01:00
Olivier Goffart
9a1ea67a35 Theme: Update the wizard size on high dpi screen
Issue #6156
2017-11-15 10:46:08 +01:00
Christian Kamm
e616f904b6 Share link: Add tooltip to delete button #6163 2017-11-15 10:16:33 +01:00
Christian Kamm
bff24ffd2f PropagateDownload: Fix GET with redirects #6159
The GET jobs were redirected, but the custom incremental handling
in readyRead didn't propagate to the follow-up job.
2017-11-15 10:11:15 +01:00
Jenkins for ownCloud
2cdc969cc5 [tx-robot] updated from transifex 2017-11-15 02:18:34 +01:00
Matthew Setter
b13fd786b6 Fix broken download link 2017-11-14 12:25:48 +01:00
Matthew Setter
89d55d0af8 Fix broken images in the FAQ 2017-11-14 12:25:48 +01:00
Matthew Setter
d46335aba1 Minor formatting fixes
Fix broken header and table
2017-11-14 12:25:48 +01:00
Matthew Setter
e417a4b159 Fix title casing to match style guide 2017-11-14 12:25:48 +01:00
Christian Kamm
b0f986c740 Private links: Account for overwritehost #6146
Retrieve ocs/v1.php/config to determine the desired host and build the
private link urls with that instead.
2017-11-14 12:14:11 +01:00
Christian Kamm
18091f99d4 Private links: Retrieve numeric file id property #6146
Some servers have non-compliant instance ids (that start with a number)
and thereby make deducing the numeric file id from the full id
unreliable.

To circumvent this problem we retrieve the fileid property from the
server with a PROPFIND.
2017-11-14 12:14:11 +01:00
Christian Kamm
3ae2071129 DetermineAuth: Remove concept of Unknown #6148
This restores 2.3 behavior. Some servers reply 404 to GETs and PROPFINDs
to the remote.php/webdav/ url and used to work. Being more picky would
break them.
2017-11-14 12:10:35 +01:00
Christian Kamm
820ebf4b6e Sql: db close() failing isn't fatal
The assert was made fatal when looking at asserts for #5429 #5518
without having a particular problem in mind. Recent reports weakly
suggest that this might lead to occasional crashes for users when
sqlite_close fails in ways that look ignorable.
2017-11-14 12:10:19 +01:00
Jenkins for ownCloud
161f6baba6 [tx-robot] updated from transifex 2017-11-14 02:18:32 +01:00
Tomaz Canabrava
14aeb6921b [CSE] Fix invalid memory access 2017-11-13 18:15:08 +01:00
Tomaz Canabrava
8adfc28de7 [CSE] Store lock-token and retrieve later 2017-11-13 17:54:19 +01:00
Tomaz Canabrava
a0f0e5617a [CSE] Move the e2e object to the Account
This is important as a lot of the code would start
to rely in direct access to the client side encryption
and there are different keys for different accounts.
2017-11-13 17:22:09 +01:00
Tomaz Canabrava
6351c01ee7 [CSE] Remember the token for folders 2017-11-13 17:04:02 +01:00
Tomaz Canabrava
e32fd58578 [CSE] handle success and failure of metadata upload. 2017-11-13 17:03:40 +01:00
Tomaz Canabrava
22a2ab8999 [CSE] Start to send the metadata to the server 2017-11-13 16:46:30 +01:00
Jenkins for ownCloud
89d7dbf2cf [tx-robot] updated from transifex 2017-11-13 02:18:32 +01:00
Tomaz Canabrava
4755b8c8a3 [CSE] More warnings 2017-11-12 13:03:52 +01:00
Tomaz Canabrava
19d64e6308 [CSE] Remove warnings 2017-11-12 12:55:12 +01:00
Jenkins for ownCloud
b1972e56fa [tx-robot] updated from transifex 2017-11-12 02:18:33 +01:00
Tomaz Canabrava
05d826a954 Merge branch 'master' into clientSideEncryptionV3 2017-11-11 16:28:20 +01:00
Tomaz Canabrava
685ceacace [CSE] Memleaks 2017-11-11 16:25:38 +01:00
Jenkins for ownCloud
7d10f9829e [tx-robot] updated from transifex 2017-11-11 02:18:34 +01:00
Jenkins for ownCloud
d2723bc0ac [tx-robot] updated from transifex 2017-11-10 02:18:50 +01:00
Jenkins for ownCloud
a0d43f8ba6 [tx-robot] updated from transifex 2017-11-09 02:18:50 +01:00
Christian Kamm
37c5612aee Discovery: Treat files starting with '.' as hidden #6145
This bug was introduced when strcmp(a, b) != 0 was accidentally
converted to a == b.
2017-11-08 12:53:46 +01:00
Jenkins for ownCloud
f2e73c0887 [tx-robot] updated from transifex 2017-11-08 02:25:47 +01:00
Jenkins for ownCloud
aca36cc1ac [tx-robot] updated from transifex 2017-11-07 02:21:25 +01:00
Tomaz Canabrava
ee4a848d9a [CSE] Correctly Unlock the Folder
Wireshark is love, and life.
2017-11-06 20:58:30 +01:00
Tomaz Canabrava
7290cf2813 [CSE] Adjust the CN accordingly to the server 2017-11-06 20:57:50 +01:00
Christian Kamm
9af6e29f42 DetermineAuthType: Adjustments for tight firewalls #6135
With some firewalls we can't GET /remote.php/webdav/. Here we keep the
GET request to detect shibboleth through the redirect pattern but then
use PROPFIND to figure out the http auth method.

Currently we prefer OAuth to Shibboleth to Basic auth.

This also restores the fallback behavior of assuming basic auth
when no auth type can be determined.
2017-11-06 13:09:10 +01:00
Jenkins for ownCloud
d6db77cce8 [tx-robot] updated from transifex 2017-11-06 02:25:40 +01:00
Jenkins for ownCloud
71d2e3de74 [tx-robot] updated from transifex 2017-11-05 02:26:45 +01:00
Jenkins for ownCloud
a7e07239e3 [tx-robot] updated from transifex 2017-11-04 02:19:35 +01:00
Roeland Jago Douma
131fd4e483 Fix encryptJSON and descryptJSON
Now working with tag
Basically we called EVP_*Update to much which resulted in weird output.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-03 18:00:05 +01:00
Tomaz Canabrava
be9cd358d4 [CSE] Bypass Qt DELETE Bug
It appears that Qt implementation of the DELETE http request
does not send bodyData, and we need that for Nextcloud.
Currently I changed the http request on the server side
to accept a POST instead of a DELETE, so I can actually
develop.

Also, I already poked the Qt developers that did this code.
2017-11-03 17:00:28 +01:00
Tomaz Canabrava
6ad6852045 [CSE] Cleanup - remove commented metadata. 2017-11-03 16:59:39 +01:00
Tomaz Canabrava
832cbef8e7 [CMAKE] Bump minimum version to 3.2
Removes a lot of warnings.
2017-11-03 15:43:57 +01:00
Tomaz Canabrava
5514f14e88 [CSE] Get and send the lock - token 2017-11-03 15:12:12 +01:00
Tomaz Canabrava
ea9e2135a1 [CSE] Remove uneeded comments. 2017-11-03 14:28:13 +01:00
Tomaz Canabrava
b53003792f [CSE] Removed lambdas for Metadata / Lock / Unlock 2017-11-03 12:34:30 +01:00
Tomaz Canabrava
6facd29663 [CSE] Start to break the lambdas
Lambda within a lambda is a terrible idea,
Use default signal / slot connections with a
method instead.
2017-11-03 12:00:25 +01:00
Tomaz Canabrava
3b157caf09 [CSE] Handle encrypt / lock / unlock 2017-11-03 11:21:01 +01:00
Tomaz Canabrava
d7e05c9b05 [CSE] Comment out broken code.
But why it's broken?
2017-11-03 11:20:44 +01:00
Christian Kamm
3608114ec1 Journal: Fix low-disk space errors
Fixes a regression from 4dbe9d4113,
low disk space can lead to IOERR not just CANTOPEN.
2017-11-03 10:44:47 +01:00
Christian Kamm
c9d5a9cea2 HttpCreds: Don't create empty client cert keychain entries #5752
This doesn't do anything about deleting the client cert keychain
entries when the whole account is removed though.
2017-11-03 10:28:56 +01:00
Jenkins for ownCloud
354cdfdbc1 [tx-robot] updated from transifex 2017-11-03 02:19:05 +01:00
Jürgen Weigert
d903afc4bf Adding post-release checks to template (#6109)
copied 3 items from https://github.com/owncloud/client/issues/5889
2017-11-02 16:57:02 +01:00
Christian Kamm
4dbe9d4113 Journal: Don't crash if the db file is readonly #6050
Surprisingly sqlite3_open_v2() returns ok on readonly files with
SQLITE_OPEN_READWRITE. Probably due to the journal mode?
2017-11-02 16:36:51 +01:00
Roeland Jago Douma
8e3e3a4575 Be java compatible and store the tag at the end of the cipher text
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-11-02 12:39:42 +01:00
Christian Kamm
c743cc171a Client certs: Improve error message #6128
"Could not load certificate" can very well just be a bad password.
2017-11-02 11:30:44 +01:00
Jenkins for ownCloud
7963a8322d [tx-robot] updated from transifex 2017-11-02 02:18:48 +01:00
Tomaz Canabrava
8d537fdd3c [CSE] Get Metadata from the server 2017-11-01 18:32:33 +01:00
Tomaz Canabrava
4a66cf11d2 [CSE] Send Metadata to the server 2017-11-01 18:21:30 +01:00
Tomaz Canabrava
2698759525 [CSE] Implement the Folder Unlock api job 2017-11-01 17:54:17 +01:00
Tomaz Canabrava
1b1add5ead [CSE] Add api to lock file 2017-11-01 17:36:54 +01:00
Christian Kamm
6ac44f05cd Credentials: Namespace windows cred keys #6125
The application name is prepended to the key. QtKeychain doesn't
do that automatically on the platform.
2017-11-01 17:03:30 +01:00
Tomaz Canabrava
e5fdcd2f38 [CSE] Add TODO: 2017-11-01 16:48:19 +01:00
Tomaz Canabrava
ef2529ca44 [CSE] Set padding to 0 for the Rsa encryption
Also, commented out the finalization of the decrypt operation
because that was messing with the encryption. There's something
wrong here but I need to get this working and I can fix stuff
later.
2017-11-01 16:13:17 +01:00
Christian Kamm
64a84fda38 Wizard: Don't report confusing error message #6116
For historical reasons CheckServerJob doesn't just check url/ but also
url/owncloud/. However, that means if url/status.php is a 404 and
url/owncloud/status.php is a 404, the user will see the latter url
appear in the error message. That's potentially confusing.

Instead, just show the account url which will be closer to what the
user typed into the account wizard, while being adjusted for protocol
and possible redirects.
2017-11-01 15:57:58 +01:00
Tomaz Canabrava
1a891423e5 [CSE] Call the decryption function to test. 2017-11-01 15:48:40 +01:00
Tomaz Canabrava
41ebcd0b7e [CSE] Decryption of the metadata blob 2017-11-01 15:29:14 +01:00
Tomaz Canabrava
77ec3b086d [CSE] Remember to finalize encryption 2017-11-01 15:24:19 +01:00
Tomaz Canabrava
88d87bf0ca [CSE] Convert encrypted bitearray to Base64
also, start the decrypt.
2017-11-01 14:46:32 +01:00
Jenkins for ownCloud
8eec79680c [tx-robot] updated from transifex 2017-11-01 02:19:02 +01:00
Tomaz Canabrava
eb43fa1459 [CSE] Internal metadata encryption working 2017-10-31 17:52:01 +01:00
Tomaz Canabrava
8793fdbc69 [CSE] Remember to actually use the correct variable 2017-10-31 16:06:01 +01:00
Tomaz Canabrava
4bb7ebb6aa [CSE] Convert the base64 data to raw, for the decyrption 2017-10-31 13:17:22 +01:00
Tomaz Canabrava
3628f3739d [CSE] Start the decryption of the metadata 2017-10-31 13:06:20 +01:00
Tomaz Canabrava
b28b4705de [CSE] Correctly store the encrypted metadata
Missing the conversion to base64.
2017-10-31 12:07:47 +01:00
Tomaz Canabrava
560ce958de [CSE] Remove warning. 2017-10-31 11:24:10 +01:00
Tomaz Canabrava
69d73162aa [CSE] functions for encrypt / decrypt folder
The code was scattered around the slot for the context
menu request and had already too many indentation levels.
2017-10-31 11:09:34 +01:00
Tomaz Canabrava
69dc099b17 [CSE] Dedicated function for the subfolder menu 2017-10-31 11:03:24 +01:00
Tomaz Canabrava
c7d9abbea3 [CSE] Rework pubkeyPath to be able to fetch pubKey 2017-10-30 20:02:55 +01:00
Tomaz Canabrava
a986532442 [CSE] Generate a random password for the metadata. 2017-10-30 19:08:03 +01:00
Tomaz Canabrava
cf56d58241 [CSE] Start the encryption of the metadataKey 2017-10-30 19:05:55 +01:00
Tomaz Canabrava
edb04c137c [CSE] Call the FolderMetadata 2017-10-30 19:05:32 +01:00
Tomaz Canabrava
c695c50c33 [CSE] Implement the empty metadata
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2017-10-30 15:40:05 +01:00
Tomaz Canabrava
5420741edb Merge branch 'master' into clientSideEncryptionV3 2017-10-30 11:21:36 +01:00
Jenkins for ownCloud
0968d74dad [tx-robot] updated from transifex 2017-10-30 02:27:13 +01:00
Jenkins for ownCloud
876a1c5140 [tx-robot] updated from transifex 2017-10-29 02:18:42 +01:00
Jenkins for ownCloud
1455636169 [tx-robot] updated from transifex 2017-10-29 02:21:41 +02:00
Jenkins for ownCloud
7ea9a5ca4e [tx-robot] updated from transifex 2017-10-28 02:18:51 +02:00
Christian Kamm
05c1bfb6cf Merge remote-tracking branch 'origin/2.4' 2017-10-27 10:29:31 +02:00
Jenkins for ownCloud
2d2ec2a576 [tx-robot] updated from transifex 2017-10-27 02:20:55 +02:00
Jürgen Weigert
17126de5c7 APPLICATION_NAME may contain whitespace
Need some quotes to survive in makensis.
2017-10-26 18:44:38 +02:00
Jenkins for ownCloud
e4612ca5d4 [tx-robot] updated from transifex 2017-10-26 02:19:20 +02:00
Jenkins for ownCloud
15af5878b6 [tx-robot] updated from transifex 2017-10-25 02:21:52 +02:00
Jocelyn Turcotte
d9f6468310 Windows: Remove navigation pane entries when uninstalling
Issue #5295
2017-10-24 16:10:53 +02:00
Jocelyn Turcotte
10c6951438 Windows: Add a setting to enable/disable the explorer navigation pane integration
Issue #5295
2017-10-24 16:10:53 +02:00
Jocelyn Turcotte
56e38e6f80 Windows: Add sync folders to Explorer's navigation pane
This is only the navigation pane, the SyncRootManager entries aren't handled yet.

This follows the instructions from:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn889934%28v=vs.85%29.aspx

Issue #5295
2017-10-24 16:10:53 +02:00
Roeland Jago Douma
238f0b3610 Add note
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-10-24 15:53:17 +02:00
Roeland Jago Douma
817baf292d Use EVP_aes_128_gcm
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-10-24 15:51:53 +02:00
Roeland Jago Douma
ca6fa7b341 Update decryp function
* Do not use AAD
* Do not try to decrypt the last 16 bytes as Android adds the tag there
by default

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-10-24 15:51:53 +02:00
Roeland Jago Douma
bacbf337d2 Update encryption function
* Do not use padding
* Do not use the ADD data
* Append the tag to the ciphertext to be compatible with Android

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-10-24 15:51:53 +02:00
Olivier Goffart
c36043a175 ShareDialog: trigger a sync for folder affected by a change of sharing
This allow the sync engine to query the new metadata and update the
overlay icons.

Note: we also need to invalidate the etags because the server does not
change the etag of parent directories that see their share-types changed.

Issue #6098
2017-10-24 15:50:14 +02:00
Olivier Goffart
ee63b36ed3 SyncFileStatusTracker: Detect changed in the shared flag
... even if the file is not changed.

We get an UPDATE_METADATA in that case, so make sure we let the
SyncFileStatusTracker know about it.
That means we need to filter out UPDATE_METADATA in the other listeners
of this signal.

Issue #6098
2017-10-24 15:50:14 +02:00
Olivier Goffart
35d28294cd SyncEngine: remove SyncEngine::syncItemDiscovered
It is unused.
2017-10-24 15:50:14 +02:00
Olivier Goffart
c6bd3ab31a Sharing: remove the ShareManager::_jobContinuation
It is growing indefinitively in case of error, causing a leak.
Use a labda instead to pass the capture
2017-10-24 15:50:14 +02:00
Christian Kamm
9c7ee6ef85 Reconcile: Rename handling fixes: duplicate file ids
When users share the same tree several times (say A/ and A/B/ are both
shared) the remote tree can have several entries that have the same
file id. This needs to be respected in rename detection.

Also adds several tests and fixes for issues noticed during testing.

See #6096
2017-10-24 10:54:23 +02:00
Christian Kamm
e85a339d94 Local discovery: Use db instead of filesystem
We mostly trust the file watchers meaning that we don't re-scan the
local tree if we have done that recently and no file watcher events
have arrived. If the file watchers invalidate a subtree, we rescan
only that subtree.

Since we're not entirely sure the file watchers are reliable, we still
do full local discoveries regularly (1h by default). There is a config
file setting as well as an environment variable to control the interval.
2017-10-24 10:00:20 +02:00
Christian Kamm
66f0ce6616 FolderWatcher: reliability and data-loss signal
Add state and signal to catch the following two known problems:
* Linux: inotify user watch pool is exhausted. Folder watcher becomes
unreliable.
* Windows: buffer is too small, some notifications are lost but watching
stays reliable.
2017-10-24 10:00:20 +02:00
Christian Kamm
fb2d31c9ce Folder: Move FolderWatcher to Folder
This makes it unnecessary for FolderMan to manage the list and removes
the need for some forwarders.

This is done in preparation for follow-up commits that want to add
diagnostics to FolderWatcher that shall be available from within Folder.
2017-10-24 10:00:20 +02:00
Christian Kamm
8865405a32 Version: master branch is future 2.5 now 2017-10-24 09:56:16 +02:00
Christian Kamm
f3ea375083 Wizard: Resolve url/ redirects only if url/status.php not found
Unfortunately checking the base-url for redirects in all cases lead
to incorrect behavior in some SAML/OAuth2 edge cases.

This new iteration checks the base url for redirects only if the
standard CheckServerJob can't reach the server. That way the 2.3
behavior is only changed in cases that would have lead to errors.

See #5954
2017-10-24 09:42:08 +02:00
Jenkins for ownCloud
15b02547e8 [tx-robot] updated from transifex 2017-10-24 02:18:49 +02:00
Tomaz Canabrava
476fe66043 [CSE] Add beginnign of the code to deal with the metadata 2017-10-23 21:06:26 +02:00
Tomaz Canabrava
bb53c2586f [CSE] Add Nlohmann's json library
Because nobody deservers to deal with Qt's JSON API
2017-10-23 21:06:26 +02:00
Tomaz Canabrava
23f5bb7ed9 [CSE] Move network jobs out of networkjobs.h
Since those networkjobs are all about client side
encryption, mvoe them to clientsideencryption.h
This will help with fewer conflicts with the origin.
2017-10-23 21:06:26 +02:00
Jenkins for ownCloud
13b1f8b33e [tx-robot] updated from transifex 2017-10-23 02:19:01 +02:00
Jenkins for ownCloud
ccd32c04a9 [tx-robot] updated from transifex 2017-10-22 02:21:00 +02:00
Jenkins for ownCloud
df19b20d07 [tx-robot] updated from transifex 2017-10-21 02:20:25 +02:00
Olivier Goffart
f41c9fbb7f owncloudsetupwizard: Fix "add new account" if the wizard is already visible
Clicking on the "Add new Account" from the systray menu should raise
the wizard, even if it is already running.

Relates to issue #6105
2017-10-20 12:41:48 +02:00
Olivier Goffart
a0e50670de Shibolleth: raise the browser when clicking on the tray
Issue #6105

Dynamically find the browser trough topLevelWidgets instead of
forwarding the call to the relevant page as it would require to break
many abstration layers (OwncloudSetupWizard -> OwncloudWizard ->
AbstractCredentialsWizardPage -> OwncloudShibbolethCredsPage)
And considering that we want to phase shibboleth down, I tought is
was not worth adding an interface for this.

The OAuth page don't have this problem because it shows a label and
allow the user to re-open the browser.
2017-10-20 10:51:35 +02:00
Jenkins for ownCloud
984631d807 [tx-robot] updated from transifex 2017-10-20 02:21:27 +02:00
Olivier Goffart
a9761a8976 Use qEnvironmentVariable* instead of qgetenv when appropriate
Now that we use Qt5, we should do that. It is slightly more efficient
and declares the intent.
(Modified using clazy)
2017-10-19 13:57:49 +02:00
Jenkins for ownCloud
84d8624e03 [tx-robot] updated from transifex 2017-10-19 02:21:00 +02:00
Tomaz Canabrava
1a47052aa3 [CSE] Remove unused function
This is already being called from somwhere else.
2017-10-18 21:51:39 +02:00
Tomaz Canabrava
e0988f482c [CSE] Build fix
- change the name of one Qt Message Handler
- changed parameter from int to QString
2017-10-18 21:51:39 +02:00
Tomaz Canabrava
d83e8819ce [CSE] SetEncryptionFlagApiJob
This new job sets the Encryption Flag in a folder.
2017-10-18 21:51:39 +02:00
Tomaz Canabrava
623eb29845 [CSE] Helper functions for the URL's 2017-10-18 21:51:39 +02:00
Tomaz Canabrava
1436d5bac1 [CSE] Better debug output 2017-10-18 21:51:39 +02:00
Tomaz Canabrava
0b50afe915 [CSE] Correctly Set's the client as connected
If we manage to encrypt and upload the private key
to the server, the client is in it's connected state.
2017-10-18 21:51:39 +02:00
Tomaz Canabrava
cfb6e3be8c [CSE] Send the Private Key to the server 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
78136a10b0 [CSE] Debug statements to help find the encrypt error 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
08dfe86f37 [CSE] Adjust the calls to ent-to-end encryption
We changed the name.
2017-10-18 21:51:38 +02:00
Tomaz Canabrava
0f1480728e [cse] Use fake data to verify the encryption
beware, this is broken.
2017-10-18 21:51:38 +02:00
Tomaz Canabrava
ba3d2a61d5 [cse] Call the encrypt and decrypt functions on fake data 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
e0d368cbb3 [cse] Update the encrypt and decrypt algorithm to GCM 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
4f7265c04f [aes] Create the Decrypt function. 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
6b53b4f257 [cse] Add the crypt method, based on OpenSSL Wiki 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
77c0309e02 [cse] use PKCS5_PBKDF2_HMAC_SHA1 on the random-word passphrase 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
5395fc56b1 [cse] Start the encryption algorithm for the Private Key 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
fd00e180f5 [aes] fix out of bounds access. 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
60729f1fc4 [cse] Enable OpenSSL for encryption 2017-10-18 21:51:38 +02:00
Tomaz Canabrava
418401a33c [cse] new method, getUnifiedString
Enter a string list, return a string.
2017-10-18 21:51:38 +02:00
Tomaz Canabrava
2111aeaac1 [cse] Add wordlist & related methods. 2017-10-18 21:51:37 +02:00
Tomaz Canabrava
69c709714d [cse] Save signed key on disk 2017-10-18 21:51:37 +02:00
Tomaz Canabrava
090336c928 [cse] Correctly send the CSR
finally.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
307dfd195c [cse] Call the CSR job.
There's something wrong on the CSR job that I need to discover.
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
304231811d [cse] Start the job to sign the public key. 2017-10-18 21:51:37 +02:00
Tomaz Canabrava
ecb05020a9 [cse] Do not save the certificate on disk
Store it on memory, and discard it as soon as no longer
needed.
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
d2992d92ba [cse] Generate the CSE
I still need to send it to the server. It's been a long
learning with the OpenSSL library.
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
c358980448 [cse] Link Against OpenSSL
For some reason, this was working untill I added a call
to X509_REQ_get_subject_name, then the linking suddenly
stopped working (even tougth I'm using a ton of other
OpenSSL calls)

Force to link against 1.0
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
42a3098595 [cse] s/scr/csr 2017-10-18 21:51:37 +02:00
Tomaz Canabrava
58e2e6b30b [cse] Generate the public / private keys and store locally
Now I need to understand what the hell I need to do
to send this to the server.
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
8c342cb1dd [cse] Generate the KeyPair
Not stored anywhere yet, but it's correctly running.
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
17693a75e5 [cse] Request public key from server
This is the first step needed to properly communicate.
Next, get private key.
2017-10-18 21:51:37 +02:00
Tomaz Canabrava
f4bbec1019 [bugfix] Return the error code, don't discard it. 2017-10-18 21:51:37 +02:00
Tomaz Canabrava
29b64640fa [cse] Start to fetch the basics to fetch the key from the server 2017-10-18 21:51:37 +02:00
Tomaz Canabrava
3f4d915a17 [cse] Add files to handle client side encryption
This will be the responsible for encryption,
decryption and talking with the server.
2017-10-18 21:51:36 +02:00
Tomaz Canabrava
7e2085375f [cse] Invalid read of 1 2017-10-18 21:51:36 +02:00
Tomaz Canabrava
1c85f94b00 [cse] Use server capabilities to query for cse 2017-10-18 21:51:36 +02:00
Tomaz Canabrava
920047fa70 [CSE] Remove uneeded includes 2017-10-18 21:51:36 +02:00
Tomaz Canabrava
f7e74f520b [CSE] Call encrypt and unencrypt from the GUI
If the server allows client side encryption, show
the user the menu with the encrypt and unencrupt options
2017-10-18 21:51:36 +02:00
Tomaz Canabrava
5b51346e83 [CSE] New Network Job: DeleteApiJob
This network job does a DELETE http request on a URL. It's the
second class that does basically the same, but this one returns
the http return code, and it's set to do a api call.
2017-10-18 21:51:36 +02:00
Tomaz Canabrava
e2091bb0a3 [CSE] Add FileIdRole for the FolderStatusModel
This way we can actually request the id from outside of the model.
2017-10-18 21:51:36 +02:00
Tomaz Canabrava
9870f39dcb [CSE] Fetch file-id for subfolders
File id is a must if we want to call any API.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2017-10-18 21:51:36 +02:00
Tomaz Canabrava
9318c487b9 [CSE] Display menu for encrytp / decryot folders
If the server supports client syde encryption, display
a menu on right click that should display encrypt and decrypt.
ideally it would show the encrypt if the folder is decrypted, and
decrypt if the folder is encrypted but currently there's no way
for the client to know that.
2017-10-18 21:51:36 +02:00
Tomaz Canabrava
1c32f6bb2e [CSE] Check the server for client side encryption
Call the apps api and check if the response has
the client_side_encryption key.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2017-10-18 21:51:36 +02:00
Roeland Jago Douma
f9b1c724d6 Merge pull request #19 from nextcloud/no_5.6_drone
Our 5.6 container is to old. Lets focus on the others for now
2017-10-18 21:29:47 +02:00
Roeland Jago Douma
4946848d08 Out 5.6 container is to old. Lets focus on the others for now
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-10-18 21:14:19 +02:00
Roeland Jago Douma
f56e1d167d Merge pull request #18 from nextcloud/up_mas
Update to oC master
2017-10-18 21:13:24 +02:00
Roeland Jago Douma
bc7e65b395 Merge branch 'master' of https://github.com/owncloud/client 2017-10-18 21:03:15 +02:00
Markus Goetz
9866010b4c SettingsDialogMac: Fix account display name #6078 2017-10-18 10:41:01 +02:00
Markus Goetz
a3c1052cae owncloudcmd: Fix timestamps, Fix --logdebug
We did not set a log handler so there were no timestamps.
The --debug didn't have an effect, let's use --logdebug like in GUI version.
(Command line always outputs some log)

Found in owncloud/documentation#3436
2017-10-18 09:16:05 +02:00
Jenkins for ownCloud
726cbc160c [tx-robot] updated from transifex 2017-10-18 02:19:58 +02:00
Christian Kamm
bf39343920 Sync: Add capability for invalid filename regexes #6092 2017-10-17 17:15:49 +02:00
Markus Goetz
af24b4132d Packaging: Require ZLIB
For owncloud/enterprise#2295
2017-10-17 16:53:11 +02:00
Markus Goetz
d339b68715 Checksums: Use addData function
Our implementation had bad error handling.
This one now uses a new Qt5 addData function.

owncloud/enterprise#2252
2017-10-17 13:26:54 +02:00
Dominik Schmidt
7f51803d04 Only use $(MAKE) in doc target if make is used as generator
The old behavior broke builds with other CMake generators like Ninja as it obviously has no concept of $(MAKE)
2017-10-17 12:50:34 +02:00
Jenkins for ownCloud
eadc791795 [tx-robot] updated from transifex 2017-10-17 12:43:06 +02:00
Jenkins for ownCloud
408cf11b2b [tx-robot] updated from transifex 2017-10-17 12:40:55 +02:00
Markus Goetz
e3ba8d3209 Merge branch 'master' into 2.4 2017-10-17 12:37:20 +02:00
Christian Kamm
17b1c83ae5 Activity: Allow sorting of issues and protocol #6086
The issues tab uses custom ordering where overall and summary sync
issues are displayed first. This ordering is preserved by creating
special sorting logic for the "time" column.

It needed special handling anyway, since sorting by time-string would
have yielded incorrect results.
2017-10-17 09:47:57 +02:00
Christian Kamm
b2a8ffc577 Abort: Fix crash with early aborts
_chunkCount could be 0, leading to a floating point exception

I also added initializers for several uninitialized integers in the
upload jobs.
2017-10-17 09:44:52 +02:00
Christian Kamm
e2711224ed Propagator: Avoid duplicate async abort 2017-10-17 09:44:52 +02:00
Christian Kamm
2ac7e0200a Test case for #5949 2017-10-17 09:44:52 +02:00
Christian Kamm
e6b971b316 TestUtils: Invalidate etags on PUT or chunk-MOVE 2017-10-17 09:44:52 +02:00
Christian Kamm
111bb485ec UploadNG: Avoid div-by-zero for super fast uploads 2017-10-17 09:44:52 +02:00
Piotr Mrowczynski
e10775d34f Fix paused sync file move issue #5949
Dont abort final chunk immedietally

Use sync and async aborts
2017-10-17 09:44:52 +02:00
Jenkins for ownCloud
30957479a3 [tx-robot] updated from transifex 2017-10-17 02:18:34 +02:00
Jenkins for ownCloud
b4ab53dd32 [tx-robot] updated from transifex 2017-10-16 02:18:33 +02:00
Jenkins for ownCloud
a314eeb892 [tx-robot] updated from transifex 2017-10-15 02:18:35 +02:00
Jenkins for ownCloud
644ddf318c [tx-robot] updated from transifex 2017-10-14 02:18:36 +02:00
Christian Kamm
f598ac89ac HttpCreds: Fix retry after wrong password #5989
This is an ugly solution.
2017-10-13 14:24:37 +02:00
Christian Kamm
3f7b3ca962 Checksums: Improve logging and add global disable #5017 2017-10-13 13:08:20 +02:00
Jenkins for ownCloud
104c6edcde [tx-robot] updated from transifex 2017-10-13 02:18:37 +02:00
Jenkins for ownCloud
94b673dc8e [tx-robot] updated from transifex 2017-10-12 02:18:38 +02:00
Christian Kamm
096cd348f0 Doc: Update FAQ entry on deeply nested directories #1067 2017-10-11 16:01:46 +02:00
Christian Kamm
01c2ffe2ae PropagateDownload: Read Content-md5 header #6088 2017-10-11 09:06:23 +02:00
Jenkins for ownCloud
0a4370236d [tx-robot] updated from transifex 2017-10-11 02:18:35 +02:00
Jenkins for ownCloud
fe8d2b397e [tx-robot] updated from transifex 2017-10-10 02:18:44 +02:00
Christian Kamm
92e90f9c55 Context menu: More detailed status messages
Previously it could only display synchronization progress or "up to
date". Now it also communicates the same overall state that the icon
shows.

See owncloud/enterprise#2134
2017-10-09 14:14:31 +02:00
Roeland Jago Douma
9eabd2a32a Merge pull request #6 from nextcloud/mergeWithOrigin
Update master from current owncloud master
2017-10-09 08:50:13 +02:00
Jenkins for ownCloud
3eb2642b11 [tx-robot] updated from transifex 2017-10-09 02:18:35 +02:00
Jenkins for ownCloud
99192a6dec [tx-robot] updated from transifex 2017-10-08 02:18:36 +02:00
Jenkins for ownCloud
cffc1fd1c4 [tx-robot] updated from transifex 2017-10-07 02:18:37 +02:00
Olivier Goffart
b8f7c6daae CMakeLists.txt: Put -pie as a linker flag were it belongs
Fixes warning introduced by PR #6040
2017-10-06 14:35:56 +02:00
Markus Goetz
cd07865da6 Settings Dialog: Fix display name compilation for macOS #6078 2017-10-06 13:34:40 +02:00
Thomas Müller
315e38e814 Use display-name from the ocs call in the settings dialog 2017-10-06 10:59:20 +02:00
Jenkins for ownCloud
95b90271b6 [tx-robot] updated from transifex 2017-10-06 02:18:35 +02:00
Christian Kamm
19c6757a0f Rename detection: File size must be equal
Comparison of file sizes for potential conflicts was added in
0eb9401c62, but did not extend to checking
the file size in case of potential local moves.

This commit adds this check and adds tests for various move+change
scenarios.
2017-10-05 22:01:42 +02:00
Christian Kamm
3636a59830 t9.pl: Make more reliable
Sometimes the 'touch' didn't change the mtime since too little time had
passed!
2017-10-05 22:01:42 +02:00
Markus Goetz
548302c367 ChangeLog: Re-format and re-order 2017-10-05 22:01:42 +02:00
Markus Goetz
a64a33c589 ChangeLog: More 2.4.0 changes 2017-10-05 22:01:42 +02:00
Christian Kamm
01bbbb7d08 Excludes: Fix bug with escapes in the regex, add tests 2017-10-05 22:01:42 +02:00
Christian Kamm
f609ea3bef Excludes: optimize csync_is_windows_reserved_word 2017-10-05 22:01:42 +02:00
Markus Goetz
91223b1a3d Excludes: During directory traversal, use QRegularExpression
On Mac, this halves the time spent in csync_excluded_traversal
when using check_csync_excluded_performance. A similar performance
increase is seen on linux.
2017-10-05 22:01:42 +02:00
Jenkins for ownCloud
ca0f9825ce [tx-robot] updated from transifex 2017-10-05 22:01:42 +02:00
Markus Goetz
f202593ce4 sqlite: Update bundled version to 3.20.1
For OS X and Windows.
2017-10-05 22:01:42 +02:00
Jürgen Weigert
d8ed9e5bde use IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin
We need to test presence of admin folder using ${CMAKE_SOURCE_DIR}, or it is always false. Bad for ox, (good for everything else)
2017-10-05 22:01:39 +02:00
Jenkins for ownCloud
c436b36b89 [tx-robot] updated from transifex 2017-10-05 22:01:39 +02:00
Jenkins for ownCloud
980bab422a [tx-robot] updated from transifex 2017-10-05 22:01:39 +02:00
Jenkins for ownCloud
6fbd3cf61a [tx-robot] updated from transifex 2017-10-05 22:01:39 +02:00
Jenkins for ownCloud
e6e1f765bd [tx-robot] updated from transifex 2017-10-05 22:01:39 +02:00
Jenkins for ownCloud
b2fe501706 [tx-robot] updated from transifex 2017-10-05 22:01:38 +02:00
rockihack
2bfd85e3c7 Linux Hardening
see: https://wiki.debian.org/Hardening#User_Space
2017-10-05 22:01:38 +02:00
Jenkins for ownCloud
e1eb374ac3 [tx-robot] updated from transifex 2017-10-05 22:01:38 +02:00
Jürgen Weigert
ea2c3828cb Update clean_tarball.sh
warning against removing sqlite. it is used with Linux with cmake switch on CentOS6
USE_OUR_OWN_SQLITE3=TRUE
2017-10-05 22:01:38 +02:00
Jürgen Weigert
c1e2bdc3d2 Update CMakeLists.txt
Make admin folder optional. It is needed for osx, but it is deleted from Linux builds for the sake of easier license review as discussed in https://github.com/owncloud/client/issues/6005
2017-10-05 22:01:38 +02:00
Jürgen Weigert
09c3043c85 support old sqlite before 3.7.7
quickfix: define the symbol for backwards compat
or FIXME: better solution #ifdef SQLITE_IOERR_SHMMAP where needed...
2017-10-05 22:01:38 +02:00
Olivier Goffart
0a8c394ee9 fixup! [tx-robot] updated from transifex 2017-10-05 22:01:38 +02:00
Olivier Goffart
cd44d8ed77 Test OAuth2
Include a test for PR #6057
2017-10-05 22:01:38 +02:00
Olivier Goffart
cfc38753b4 SyncEngine: _hasNoneFiles should be set when there are INSTRUCTION_UPDATE_METADATA 2017-10-05 22:01:38 +02:00
Olivier Goffart
c424dec7d4 OAuth: fix compilation with old gcc
We need to used QPointer::data in the signal slot connection

Relates to pr #6065
2017-10-05 22:01:38 +02:00
Jenkins for ownCloud
78078b714e [tx-robot] updated from transifex 2017-10-05 22:01:38 +02:00
Markus Goetz
36117336e7 Updater: Rudimentary support for beta channel
So we can get people update from our alpha to the beta and rc
2017-10-05 22:01:38 +02:00
Olivier Goffart
d59c146488 Fix encoding of version string 2017-10-05 22:01:38 +02:00
Olivier Goffart
6583ebdcd9 csync_rename: optimize lookup
Avoid many memory allocations in reconcile
2017-10-05 22:01:38 +02:00
Olivier Goffart
917e2e43c6 csync_reconcile: Optimize reconcile by avoiding alocations
Fix performence regression from commit d66c2b5fae
For every new file we would look up every parent directories. Allocating
a new QByteArreay for every parent riectory just to know if it is in the other
tree is wasting lots of CPU.
Use a ByteArrayRef trick, similar to QStringRef
2017-10-05 22:01:37 +02:00
Dominik Schmidt
bdd3dc743b Set CMAKE_INSTALL_RPATH as RPATH for installed executables 2017-10-05 22:01:37 +02:00
Christian Kamm
9143ddd0ad Packaging: Add options for fine-grained builds #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-10-05 22:01:37 +02:00
Christian Kamm
f46440eb67 Packaging: Adjust APPNAME handling #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-10-05 22:01:37 +02:00
Christian Kamm
96a6d64500 Packaging: Make check for theme.qrc more specific #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-10-05 22:01:37 +02:00
Christian Kamm
08bc21937b Packaging: Change directory for docs #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-10-05 22:01:37 +02:00
Christian Kamm
f64519bfbd Move the --version output text to Theme #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-10-05 22:01:37 +02:00
Jenkins for ownCloud
494df32ee4 [tx-robot] updated from transifex 2017-10-05 22:01:37 +02:00
Olivier Goffart
bbbd2319ed Use QDateTime::currentDateTimeUtc instead of the non utc version
QDateTime::currentDateTime is terribly slow.
2017-10-05 22:01:37 +02:00
Olivier Goffart
79c775bcd8 OAuth: Fix crash when closing the browser while identifying
To reproduce, log in and click "authorize" on the browser, then close
the browser before the client has replied, (but after redirected to localhost,
i.e. when the client is asking the server for the token)

The problem is that socket can be destroyed so we don't need to answer on a
destroyed socket.
2017-10-05 22:01:37 +02:00
Olivier Goffart
a3b1597d17 OwnSQL: don't parse the error message when we are done 2017-10-05 22:01:37 +02:00
Jocelyn Turcotte
ecb4e96794 SyncJournalDb: Reimplement the db_is_empty logic from csync
This reduces the initial sync local discovery time from
2.0 to 0.6 seconds in LargeSyncBench on my machine.
2017-10-05 22:01:37 +02:00
Jocelyn Turcotte
185cb2e39a Use SyncJournalDb in csync
This gets rid of the csync_statedb sqlite layer and use
the same code and same connection as the rest of the SyncEngine.

Missing functions are added to SyncJournalDb and change a few minor
things (like changing SyncJournalFileRecord::_modtime to be an int64
instead of a QDateTime, like it was in csync).
2017-10-05 22:01:37 +02:00
Jocelyn Turcotte
c6610f6fbf SyncJournalDB: Allow callers of getFileRecord if the query failed
The current implementation would return the same value whether the query failed
or if no row would be found. This is something that is currently checked by csync
and needs to be provided if we want to use SyncJournalDB there.

Adjusted all call sites to also check the return value even though they
could still just rely on rec.isValid(), but makes it more explicit as to what
happens for database errors in those cases, if we ever want to gracefully handle
them.
2017-10-05 22:01:37 +02:00
Jocelyn Turcotte
d76ecf015c SyncJournalDB: Bind phash as a qlonglong instead of a QString
This is what csync does and we don't need to pass it as a string
to let sqlite convert it back to a uint64 later.
2017-10-05 22:01:36 +02:00
Jenkins for ownCloud
312f3a9bf3 [tx-robot] updated from transifex 2017-10-05 22:01:36 +02:00
Olivier Goffart
fd9662b803 bandwidthmanager: Fix unregistering devices on delete
from the destroyed signal, qobject_cast won't work because the object
is already destroyed. One must use reinterpret_cast then
2017-10-05 22:01:36 +02:00
Olivier Goffart
37810c0a19 PropagateUpload: Fix another non-normalized connect that appears while profiling 2017-10-05 22:01:36 +02:00
Olivier Goffart
38a76ac5bf benchlargesync: Do several syncs
Make sure there is already a small sync before so the database is queried.
Make also a sync after to run an update with many files in the database.
2017-10-05 22:01:36 +02:00
Olivier Goffart
d100f9ac67 c_utf8_from_locale: optimize the UTF8 case on Linux
Avoid converting to a QString as an intermediate step
2017-10-05 22:01:36 +02:00
Olivier Goffart
5fc864adb6 csync: use a unordered_map for the FileMap
Saves more than 10% of csync_update on LargeSyncBench
2017-10-05 22:01:36 +02:00
Jenkins for ownCloud
2738d5d9ab [tx-robot] updated from transifex 2017-10-05 22:01:36 +02:00
Olivier Goffart
0936cfee5d chsck_vio: fix readdir test by removing it.
The code that was creating the files in the directory was removed in
commit 6906b8d30c. The directory is empty
so the result is expected to be null. It was passing before because the
code was returning an entry for . and ..,  but since commit
35f80bd439 this is no longer the case
2017-10-05 22:01:36 +02:00
Olivier Goffart
38962ca694 csync_update: fix assert
Amend 1dc44c0f62
2017-10-05 22:01:36 +02:00
Jenkins for ownCloud
7e677516ae [tx-robot] updated from transifex 2017-10-05 22:01:36 +02:00
Markus Goetz
cabf7a79d5 macOS: Fix compile 2017-10-05 22:01:36 +02:00
Olivier Goffart
2b12990f19 Httpcreds: Fix double slash in the Request App Password url
Issue #6044
2017-10-05 22:01:36 +02:00
Olivier Goffart
3184d4bb32 OAuth2: Fix double slash in URL
We need to use concatPath to avoid possible double '/' in the URLs if the
account url() ends with '/'.

This has become even more of a problem since commit
d1b8370a4a which was resolving the url after
a redirect where most server actually add a '/' if the url is a folder
2017-10-05 22:01:36 +02:00
Jenkins for ownCloud
0cbbea9796 [tx-robot] updated from transifex 2017-10-05 22:01:35 +02:00
Olivier Goffart
b19677ea97 csync_vio_local: merge readdir and stat in the same call
For the remote this was already done long time ago
For windows, this was already partially done

The goal is to avoid needless conversion of the path to local encoding.
2017-10-05 22:01:35 +02:00
Olivier Goffart
dc0a0841fa csync_update/reconcile: replace CSYNC_LOG with qDebug/qInfo
CSYNC_LOG has quite an overhead as it uses vsprintf and it might
be run even if the category is disabled
2017-10-05 22:01:35 +02:00
Christian Kamm
351e65309c SyncEngine: Adjust free space messaging
Before, the way the info message was phrased implied a failure. And
since the large numbers can be hard to compare that can be confusing.
2017-10-05 22:01:35 +02:00
Olivier Goffart
e36c8678d9 csync: remove unused type 2017-10-05 22:01:35 +02:00
Olivier Goffart
f793de4629 RemotePermissions: Store in a class rather than in a QByteArray to save memory
Create a specific type that parses the permissions so we can store
it in a short rather than in a QByteArray

Note: in RemotePermissions::toString, we make sure the string is not
empty by adding a space, this was already existing before commit
e8f7adc7ca where it was removed by mistake.
2017-10-05 22:01:35 +02:00
Jenkins for ownCloud
cd4908ac6a [tx-robot] updated from transifex 2017-10-05 22:01:35 +02:00
Olivier Goffart
0ad05aee0d Port to new signal-slot syntax what cannot be done automatically
Some slot were protected or private but needed to be public.
Some needed a static_cast (can't use qOverload because it is in Qt 5.7)

This is not only a partial change.
2017-10-05 22:01:35 +02:00
Olivier Goffart
190f821d93 DiscoveryPhase: use the new syntax in disconnect
Since we used the new syntax in connect, we need to use it in disconnect
2017-10-05 22:01:35 +02:00
Olivier Goffart
7aca2352be Use the Qt5 connection syntax (automated with clazy)
This is motivated by the fact that QMetaObject::noralizeSignature takes 7.35%
CPU of the LargeSyncBench. (Mostly from ABstractNetworkJob::setupConnections and
PropagateUploadFileV1::startNextChunk). It could be fixed by using normalized
signature in the connection statement, but i tought it was a good oportunity
to modernize the code.

This commit only contains calls that were automatically converted with clazy.
2017-10-05 22:01:35 +02:00
Olivier Goffart
3143b32aa5 test/stub: add some call required by the next patches
As we use the new connection syntax in folderman.cpp, some more symbol
need to be mocked
2017-10-05 22:01:35 +02:00
Olivier Goffart
e8a76859c1 Include <QAuthenticator> from code that connect to signal that uses it
The new connection syntax will need that
2017-10-05 22:01:35 +02:00
Olivier Goffart
c219ceea52 Gui: Use lambda instead of QSignalMapper
It's simpler, and QSignalMapper is deprecated in Qt 5.10
2017-10-05 22:01:34 +02:00
Olivier Goffart
608f5034ef Remove settingsdialog.cpp.Rbt431 2017-10-05 22:01:34 +02:00
Jenkins for ownCloud
78458662a5 [tx-robot] updated from transifex 2017-10-05 22:01:34 +02:00
Markus Goetz
800dd485ef ChangeLog: More 2.4.0 changes 2017-10-05 22:01:34 +02:00
Jenkins for ownCloud
f4ca43293b [tx-robot] updated from transifex 2017-10-05 22:01:34 +02:00
Christian Kamm
6161b5519b Fix compile with bad strrchr signature 2017-10-05 22:01:34 +02:00
Christian Kamm
2cac928810 Conflicts: Upload them files if env variable says so
Set OWNCLOUD_UPLOAD_CONFLICT_FILES=1 to trigger this behavior.

Note that this is experimental and unsupported. The real feature is
likely to end up in 2.5.

Uploading conflict files is simply done by removing the pattern from
csync_exclude. The rest here deals with making the conflict notification
ui approximately work.

There are still some concerns about where an uploaded conflict file
appears in the sync protocol and issues list (it should be in both, but
is only in one of them currently!).

See #4557.
2017-10-05 22:01:34 +02:00
Christian Kamm
05927b68a8 Private links: Retrieve link through propfind property #6020
* The sharing ui does a propfind anyway: use that to query the new
property as well!
* For the socket api, asynchronously query the server for the right url
when an action that needs it is triggered.

The old, manually generated URL will be used as fallback in case the
server doesn't support the new property or the property can't be
retrieved for some reason.

Depends on owncloud/core#29021
2017-10-05 22:01:34 +02:00
Jenkins for ownCloud
b3f90111e2 [tx-robot] updated from transifex 2017-10-05 22:01:34 +02:00
Jocelyn Turcotte
254f6291df Fix the build (make install) 2017-10-05 22:01:34 +02:00
Olivier Goffart
faa7fd1b32 Gui: Allow to add multiple sync folder connection of the same folder
... or child folders

There is also no real reason to forbid the user from syncing the same
folder to multiple location on its hardrive.
A real use case is when the user uncheck a big directory using "choose
what to sync", but would still like to sync a folder within this disabled
tree. The user can now do this with the "add folder" feature

Since 2.3, we even support syncing the same local folder to multiple
remote folder, so why not allow syncing the same remote folder several
times?

Relates to issue #3645
2017-10-05 22:01:34 +02:00
Jocelyn Turcotte
76d95f8b87 SyncJournalDB: Only reset_and_clear_bindings once
We only need to do it once between each query execution and
that can be right before the first bind.
2017-10-05 22:01:34 +02:00
Jocelyn Turcotte
4e90bd7a5a csync_update: Remove the check for csync_get_statedb_exists
This always returns true since _csync_statedb_is_empty also always
returns true. This function was initially intended to be a shortcut
in case the database doesn't contain any row, but has been broken since
27fb5d9128 and now won't return false
unless the statement fails.

The _last_db_return_error in _csync_detect_update would take care
of that code path in a more direct and clearer way anyway.
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
81e32e1a08 Move SyncJournalDB to src/common 2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
98ef3050d8 Reverse the dependency between SyncJournalFileRecord and SyncFileItem
This will allow us to also use the SyncJournalDB in csync.
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
4c2e078eac Move non-csync-dependent parts of FileSystem to src/common
This keep the csync-dependent parts in src/libsync, slitting the namespace
over two files.
This will allow moving SyncJournalDB to src/common as well.
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
dc3c3195b5 Update sync-algorithm.md
The rbtree was replaced by a std::map.
2017-10-05 22:01:33 +02:00
Christian Kamm
cda72effe2 Checksums: Clearer behavior and added testing 2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
0f21ed6a5b Remove SyncFileItem::_isDirectory
It's always equivalent to _type == SyncFileItem::Directory.
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
85a93efe51 Remove SyncFileItem::log
This remove the remaining "other" fields of the sync log to save a
bit of memory.

other_etag and other_fileId don't give much information to the users
and other_instruction will always be INST_NONE anyway.

other_modtime and other_size are kept since they are sometimes used.
They were renamed to have a bit more meaningful name.

SyncEngine::checkPermissions will now fetch its information from the
csync trees since they are now preserved until right after this point.

Fixes #3213
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
82dd1775eb Remove SyncEngine::_remotePerms
Now that csync is using a more convenient data structure for
its file trees, wait a little bit longer before destroying them and
fetch the remote permissions from the remote tree there instead.
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
3bc1f63b0a Remove the usage of phash in csync
Only store the path since they represent the same thing, and do the
phash conversion during DB lookup like done in libsync.
We could get rid of everything since we also have an index on the path
column, but since it's the primary key this makes the migration non-trivial.
2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
2276df1eec Replace the custom rbtree by a std::map 2017-10-05 22:01:33 +02:00
Jocelyn Turcotte
ec52807e29 csync: Keep the csync_file_stat_t instances created during discovery
Now that they use the same structure, avoid _csync_detect_update
having to recreate another instance and transfer everything manually.
Any instance created during discovery should now be used all the way
up to SyncEngine::treewalkFile.

This also makes sure that the path and types are properly set in that
object instead of having to pass everything as separate parameters.

This gets rid of csync_ftw_flags_e which was now converted from,
and to csync_ftw_type_e, already in the csync_file_stat_t.

Issue #1817
2017-10-05 22:01:33 +02:00
Jenkins for ownCloud
7f88a3e1cd [tx-robot] updated from transifex 2017-10-05 22:01:33 +02:00
Jenkins for ownCloud
74049e3e92 [tx-robot] updated from transifex 2017-10-05 22:01:33 +02:00
Jenkins for ownCloud
d01c7dc7db [tx-robot] updated from transifex 2017-10-05 22:01:33 +02:00
Christian Kamm
b92de38c31 AbstractNetworkJob: Allow relative redirect
Previously all redirects were considered absolute.
2017-10-05 22:01:32 +02:00
Christian Kamm
78b082a23c Reduce timeout for some admin jobs
The oauth token jobs and the wizard redirect check job shouldn't have
5min timeouts.
2017-10-05 22:01:32 +02:00
Christian Kamm
1aa1e7f833 Wizard: Handle url-shortener redirects #5954
Grab any permanent redirects from the base url the user entered
before attempting to connect to a modified url (with status.php
added).
2017-10-05 22:01:32 +02:00
Christian Kamm
4d2261420d HttpCreds: Remove migration code from 1.7 2017-10-05 22:01:32 +02:00
Christian Kamm
23153a4866 Credentials: Use per-account keychain entries #5830
This requires a lot of migration code: the old entries need to be read,
saved to the new locations and then deleted.
2017-10-05 22:01:32 +02:00
Christian Kamm
7f75a533d1 Journal: Second attempt at journal mode fallback #5723
Some filesystems, vms or other limitations make using the WAL journal
mode impossible. We are notified of this problem through an sqlite
IOERR for SHMMAP. In that case We want to attempt to fall back to the
DELETE journal mode.
2017-10-05 22:01:32 +02:00
Christian Kamm
e47b8ffaca OAuth: Don't use implicit POST bodies
The query args of POST requests become the request body. If there's a
redirect, the redirected url will therefore not contain the query
arguments. Use an explicit request body to make the redirection work.
2017-10-05 22:01:32 +02:00
Christian Kamm
a79b0a3791 OAuth: Pass client auth in header instead of url
To play more nicely with redirects.
2017-10-05 22:01:32 +02:00
Christian Kamm
ce51ea34b9 OAuth: Use redirectable jobs for oauth token management 2017-10-05 22:01:32 +02:00
Christian Kamm
0e8ce9c3db PropagateUpload: Model of remote quota, avoid some uploads #5537
When we see a 507 error, assume that quota is < uploaded size.
2017-10-05 22:01:32 +02:00
Christian Kamm
76faf4937b SyncOptions/Propagator: Parallelism as an option
Very useful for changing it on a per-test basis.
2017-10-05 22:01:32 +02:00
Christian Kamm
df05042e7f Make DetailError different from BlacklistedError
It's quite different in regard to blacklist handling and overall
sync failure changes.
2017-10-05 22:01:32 +02:00
Helmut K. C. Tessarek
e8f17f5b0b remove qt4 code 2017-10-05 22:01:32 +02:00
Jenkins for ownCloud
7d1285d313 [tx-robot] updated from transifex 2017-10-05 22:01:31 +02:00
Christian Kamm
72131ff4ce Excludes: Allow escaping # #6012
Otherwise adding patterns that start with # are impossible to add, since
they get treated as comments. Also add this escaping for patterns added
in the ui.
2017-10-05 22:01:06 +02:00
Jenkins for ownCloud
c03d53e1dd [tx-robot] updated from transifex 2017-10-05 22:01:05 +02:00
Jenkins for ownCloud
bc5a6527f9 [tx-robot] updated from transifex 2017-10-05 22:01:05 +02:00
Markus Goetz
7ca1107ea0 ChunkingNgTest: CI debuggability #6015 2017-10-05 22:01:05 +02:00
Christian Kamm
4acb70e79d Journal: Fall back to DELETE on IO error #5723
Also add logging of extended error codes for this IO error, maybe we can
become more specific about which situations should trigger a journal
mode switch.
2017-10-05 22:01:05 +02:00
Christian Kamm
755b18db61 Folder: Check etag again after active sync #4116
Maybe more things were happening on the server?
2017-10-05 22:01:05 +02:00
Jenkins for ownCloud
bf8151a8ad [tx-robot] updated from transifex 2017-10-05 22:01:05 +02:00
Christian Kamm
b810ce7768 Update server url in case of permanent redirection #5972
This is the first time the account url may update outside of
account setup.

Summary of redirection handling:
1. During account setup (wizard)
   - status.php gets permanently redirected -> adjust url
   - authed PROPFIND gets *any* redirection -> adjust url
2. During connectivity ping (ConnectionValidator)
   - status.php gets permanently redirected -> adjust url (new!)

All other redirections should be followed transparently and
don't update the account url in the settings.
2017-10-05 22:01:05 +02:00
Christian Kamm
1c0d80c20d Use DetermineAuthTypeJob in HttpCredentials
* Move it to networkjobs
* Minor adjustments to its logic
* Fixes redirect handling for oauth/basic http auth check #6003
2017-10-05 22:01:05 +02:00
Markus Goetz
ed9977a2b3 Add clean_tarball.sh #6005 2017-10-05 22:01:05 +02:00
Jenkins for ownCloud
546c7c420a [tx-robot] updated from transifex 2017-10-05 22:01:05 +02:00
Jocelyn Turcotte
bdf3f1e271 Windows: Make sure that the folder and Desktop.ini have the right attributes (#6018)
When created from scratch, the owncloud icon won't be picked-up by
explorer unless the right attributes are set on both the sync root and the
Desktop.ini file.

Issue #2446
2017-10-05 22:01:04 +02:00
rockihack
4e90179065 Enable DEP & ASLR on Windows 2017-10-05 22:01:04 +02:00
Markus Goetz
43f85a787b Remove qtkeychain submodule #6004 2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
a8c33885bb Fix the macOS Sparkle build 2017-10-05 22:01:04 +02:00
Christian Kamm
3591849279 Http credentials: Fix behavior for bad password #5989
When the GET request from askFromUser is scheduled on the QNAM inside
the slot that handles the QNetworkReply::finished signal, it seems to
not get processed at all.

This workaround moves the sending of the new GET to the event loop,
sidestepping the problem.
2017-10-05 22:01:04 +02:00
Christian Kamm
8a094d2b0e Fix compile errors
cmocka seems to #define fail to something inappropriate.
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
deb123b80d csync_statedb: (really) Make sure children of non-synced items aren't read from the DB
No tests are covering this and I reversed the original logic.
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
7a97dc1783 csync_statedb: Make sure children of non-synced items aren't read from the DB
Fix a regression during C++ conversion from 704ca366b3
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
41f215fd8d Fix build after C++ conversion of csync
Use the same macro as in SyncFileItem for bitfields on enums.

Fixes #5993
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
e0fa5723eb Use a C++ contructor and destructor for CSYNC
Merge csync_create and csync_init into the constructor and
replace csync_destroy with the destructor.

Also use a QByteArray for csync_s::root_perms and flatten
csync_rename_s as a rename sub-struct of csync_s since it
can now handle C++ types.
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
4947dc22ab Remove csync_s::replica
The only difference with csync_s::current is that it's
assigned the value of csync_s::local::type and
csync_s::remote::type, which never change. So might as
well only use the "current" field with constants.
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
157e933ae5 Replace TREE_WALK_FILE with csync_file_stat_t
Just expose csync_file_stat_t since we don't need an abstraction layer
anymore. Also pass the nodes of both trees directly to the visitor
function.

Issue #1817
2017-10-05 22:01:04 +02:00
Jocelyn Turcotte
7fad474863 Replace csync_vio_file_stat_t with csync_file_stat_t
Also move csync_normalize_etag to common/utility since we
don't need the char* function anymore.

Remove the single space file_stat->remotePerm codepath since
this won't be used in csync anymore since
8de3bda0b1.

Issue #1817
2017-10-05 22:01:04 +02:00
Matthew Setter
26dde9b543 Fix link to download the ownCloud client
This was requested in https://github.com/owncloud/documentation/issues/3354.
2017-10-05 22:01:04 +02:00
Matthew Setter
b43e948167 Fix broken images in FAQ
This relates to https://github.com/owncloud/documentation/issues/3354.
2017-10-05 22:01:03 +02:00
Jürgen Weigert
9da3822305 Update ChangeLog 2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
61d949730b Make csync_file_stat_t public and partly convert to C++
This is the first commit trying to unify csync_file_stat_s,
csync_vio_file_stat_s and csync_tree_walk_file_s. Use QByteArray
and unique_ptr already since I'm not used to track memory allocations
and this will make the transition easier.

Issue #1817
2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
bfc7ea562d Move Utility to a new common static library
Now that csync builds as C++, this will avoid having to implement
functionalities needed by csync mandatorily in csync itself.

This library is built as part of libocsync and symbols exported
through it.
This requires a relicense of Utility as LGPL. All classes moved into
this library from src/libsync will need to be relicensed as well.
2017-10-05 22:01:03 +02:00
Christian Kamm
6d8c98f6b4 Add minor unittest for numeric id extraction #5933 2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
4aca1b9697 StatusTracker: Fix different case paths not matching (#5981)
Use a custom std::map comparator functor to do all comparisons
on contained QStrings using Qt::CaseInsensitive on macOS and Windows.

Issue #5257
2017-10-05 22:01:03 +02:00
Jürgen Weigert
f96990b489 fix branded nemo and caja shell integration (#5966)
* Update createcajaplugin.sh

* first apply branding, then create copies. Better.
Fixes https://github.com/owncloud/ownbrander/issues/753

* fix https://github.com/owncloud/ownbrander/issues/752 too.
2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
7280359c66 Fix cmocka deprecation warnings
Just use cmocka_run_group_tests like we already use in
some of those tests.
2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
b30c3202f0 Enable csync logs in unit tests
Go through the Logger to enable the csync-QDebug bridge.
2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
ac4be17192 Compile almost all of csync as C++
This will allow us to unify data structures between csync and libsync.

Utility functions like csync_time and c_std are still compiled as C
since we won't need to be coupled with Qt in the short term.
2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
39e9938cad Use .cpp for existing csync .cc files
Make this consistent with the rest of the client code.
2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
f897a91354 Move csync to src/csync 2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
5948f26884 Move csync/tests to test/csync 2017-10-05 22:01:03 +02:00
Jocelyn Turcotte
95579b3de1 Move csync/tests/ownCloud to test/scripts/txpl 2017-10-05 22:00:57 +02:00
Christian Kamm
90befac901 Rename detection: File size must be equal
Comparison of file sizes for potential conflicts was added in
0eb9401c62, but did not extend to checking
the file size in case of potential local moves.

This commit adds this check and adds tests for various move+change
scenarios.
2017-10-05 14:17:07 +02:00
Christian Kamm
22f71ce17e t9.pl: Make more reliable
Sometimes the 'touch' didn't change the mtime since too little time had
passed!
2017-10-05 14:13:10 +02:00
Markus Goetz
0931f25747 ChangeLog: Re-format and re-order 2017-10-05 13:07:42 +02:00
Markus Goetz
971f2391cf ChangeLog: More 2.4.0 changes 2017-10-05 12:52:50 +02:00
Christian Kamm
43a26eb50a Excludes: Fix bug with escapes in the regex, add tests 2017-10-05 10:40:53 +02:00
Christian Kamm
99d406072f Excludes: optimize csync_is_windows_reserved_word 2017-10-05 10:19:48 +02:00
Markus Goetz
3a1a56c7ad Excludes: During directory traversal, use QRegularExpression
On Mac, this halves the time spent in csync_excluded_traversal
when using check_csync_excluded_performance. A similar performance
increase is seen on linux.
2017-10-05 10:19:48 +02:00
Jenkins for ownCloud
57cbba81e7 [tx-robot] updated from transifex 2017-10-05 02:18:35 +02:00
Markus Goetz
e48d55d126 sqlite: Update bundled version to 3.20.1
For OS X and Windows.
2017-10-04 17:12:12 +02:00
Jürgen Weigert
1c03fa8642 use IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin
We need to test presence of admin folder using ${CMAKE_SOURCE_DIR}, or it is always false. Bad for ox, (good for everything else)
2017-10-04 07:49:27 +02:00
Jenkins for ownCloud
670ff36024 [tx-robot] updated from transifex 2017-10-04 02:18:35 +02:00
Jenkins for ownCloud
6b3f6d9860 [tx-robot] updated from transifex 2017-10-03 02:18:33 +02:00
Jenkins for ownCloud
ac5876e94e [tx-robot] updated from transifex 2017-10-02 02:18:33 +02:00
Jenkins for ownCloud
b13f44023d [tx-robot] updated from transifex 2017-10-01 02:18:33 +02:00
Jenkins for ownCloud
2f15d8aef5 [tx-robot] updated from transifex 2017-09-30 02:18:32 +02:00
rockihack
ecaa37efbe Linux Hardening
see: https://wiki.debian.org/Hardening#User_Space
2017-09-29 14:34:30 +02:00
Jenkins for ownCloud
33e421473c [tx-robot] updated from transifex 2017-09-29 02:18:33 +02:00
Jürgen Weigert
eb1a96c164 Update clean_tarball.sh
warning against removing sqlite. it is used with Linux with cmake switch on CentOS6
USE_OUR_OWN_SQLITE3=TRUE
2017-09-28 21:09:43 +02:00
Jürgen Weigert
2afcac763d Update CMakeLists.txt
Make admin folder optional. It is needed for osx, but it is deleted from Linux builds for the sake of easier license review as discussed in https://github.com/owncloud/client/issues/6005
2017-09-28 19:32:55 +02:00
Jürgen Weigert
28fe903aee support old sqlite before 3.7.7
quickfix: define the symbol for backwards compat
or FIXME: better solution #ifdef SQLITE_IOERR_SHMMAP where needed...
2017-09-28 19:01:55 +02:00
Olivier Goffart
253d197ccb fixup! [tx-robot] updated from transifex 2017-09-28 18:38:33 +02:00
Olivier Goffart
0ceb806f1a Test OAuth2
Include a test for PR #6057
2017-09-28 18:38:33 +02:00
Olivier Goffart
800b9cf167 SyncEngine: _hasNoneFiles should be set when there are INSTRUCTION_UPDATE_METADATA 2017-09-28 11:15:36 +02:00
Olivier Goffart
1da398e6c6 OAuth: fix compilation with old gcc
We need to used QPointer::data in the signal slot connection

Relates to pr #6065
2017-09-28 10:55:28 +02:00
Jenkins for ownCloud
074cb132bb [tx-robot] updated from transifex 2017-09-28 02:18:36 +02:00
Markus Goetz
2df74fd9d7 Updater: Rudimentary support for beta channel
So we can get people update from our alpha to the beta and rc
2017-09-27 16:23:34 +02:00
Roeland Jago Douma
cba78eb11f Merge pull request #2 from nextcloud/update-readme
Update README
2017-09-27 14:03:23 +02:00
Roeland Jago Douma
cc7cb6b650 Remove templates for now
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-09-27 14:02:49 +02:00
Christoph Wurst
8eb466c9c5 Update README
Adjust branding and remove some sections
2017-09-27 14:00:02 +02:00
Olivier Goffart
d68b07dfc7 Fix encoding of version string 2017-09-27 12:06:49 +02:00
Olivier Goffart
a52dff713b csync_rename: optimize lookup
Avoid many memory allocations in reconcile
2017-09-27 11:41:55 +02:00
Olivier Goffart
041c5e6d44 csync_reconcile: Optimize reconcile by avoiding alocations
Fix performence regression from commit d66c2b5fae
For every new file we would look up every parent directories. Allocating
a new QByteArreay for every parent riectory just to know if it is in the other
tree is wasting lots of CPU.
Use a ByteArrayRef trick, similar to QStringRef
2017-09-27 11:41:55 +02:00
Dominik Schmidt
a2ce739192 Set CMAKE_INSTALL_RPATH as RPATH for installed executables 2017-09-27 09:13:44 +02:00
Christian Kamm
ca4ad58a06 Packaging: Add options for fine-grained builds #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-09-27 09:13:44 +02:00
Christian Kamm
89df8fb692 Packaging: Adjust APPNAME handling #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-09-27 09:13:44 +02:00
Christian Kamm
9a021d2279 Packaging: Make check for theme.qrc more specific #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-09-27 09:13:44 +02:00
Christian Kamm
82e87805c3 Packaging: Change directory for docs #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-09-27 09:13:44 +02:00
Christian Kamm
844bfc5f25 Move the --version output text to Theme #5957
Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt
2017-09-27 09:13:44 +02:00
Jenkins for ownCloud
706c68f69c [tx-robot] updated from transifex 2017-09-27 02:18:33 +02:00
Olivier Goffart
13e0cc6b50 Use QDateTime::currentDateTimeUtc instead of the non utc version
QDateTime::currentDateTime is terribly slow.
2017-09-26 16:14:17 +02:00
Olivier Goffart
7af81f7665 OAuth: Fix crash when closing the browser while identifying
To reproduce, log in and click "authorize" on the browser, then close
the browser before the client has replied, (but after redirected to localhost,
i.e. when the client is asking the server for the token)

The problem is that socket can be destroyed so we don't need to answer on a
destroyed socket.
2017-09-26 14:56:57 +02:00
Olivier Goffart
278129b286 OwnSQL: don't parse the error message when we are done 2017-09-26 11:03:23 +02:00
Jocelyn Turcotte
54c522c861 SyncJournalDb: Reimplement the db_is_empty logic from csync
This reduces the initial sync local discovery time from
2.0 to 0.6 seconds in LargeSyncBench on my machine.
2017-09-26 11:03:23 +02:00
Jocelyn Turcotte
a034ee894c Use SyncJournalDb in csync
This gets rid of the csync_statedb sqlite layer and use
the same code and same connection as the rest of the SyncEngine.

Missing functions are added to SyncJournalDb and change a few minor
things (like changing SyncJournalFileRecord::_modtime to be an int64
instead of a QDateTime, like it was in csync).
2017-09-26 11:03:23 +02:00
Jocelyn Turcotte
6f46764daa SyncJournalDB: Allow callers of getFileRecord if the query failed
The current implementation would return the same value whether the query failed
or if no row would be found. This is something that is currently checked by csync
and needs to be provided if we want to use SyncJournalDB there.

Adjusted all call sites to also check the return value even though they
could still just rely on rec.isValid(), but makes it more explicit as to what
happens for database errors in those cases, if we ever want to gracefully handle
them.
2017-09-26 11:03:23 +02:00
Jocelyn Turcotte
e1d482ea7c SyncJournalDB: Bind phash as a qlonglong instead of a QString
This is what csync does and we don't need to pass it as a string
to let sqlite convert it back to a uint64 later.
2017-09-26 11:03:23 +02:00
Jenkins for ownCloud
c34ec00d3a [tx-robot] updated from transifex 2017-09-26 02:18:33 +02:00
Olivier Goffart
090abdee87 bandwidthmanager: Fix unregistering devices on delete
from the destroyed signal, qobject_cast won't work because the object
is already destroyed. One must use reinterpret_cast then
2017-09-25 12:56:20 +02:00
Olivier Goffart
ce04a76b17 PropagateUpload: Fix another non-normalized connect that appears while profiling 2017-09-25 12:49:55 +02:00
Olivier Goffart
2953eed729 benchlargesync: Do several syncs
Make sure there is already a small sync before so the database is queried.
Make also a sync after to run an update with many files in the database.
2017-09-25 12:49:55 +02:00
Olivier Goffart
bf2b089c5c c_utf8_from_locale: optimize the UTF8 case on Linux
Avoid converting to a QString as an intermediate step
2017-09-25 10:35:28 +02:00
Olivier Goffart
3107e63040 csync: use a unordered_map for the FileMap
Saves more than 10% of csync_update on LargeSyncBench
2017-09-25 10:35:28 +02:00
Jenkins for ownCloud
2ec8194d01 [tx-robot] updated from transifex 2017-09-25 02:18:29 +02:00
Olivier Goffart
d113498c7b chsck_vio: fix readdir test by removing it.
The code that was creating the files in the directory was removed in
commit 6906b8d30c. The directory is empty
so the result is expected to be null. It was passing before because the
code was returning an entry for . and ..,  but since commit
35f80bd439 this is no longer the case
2017-09-25 00:17:47 +02:00
Olivier Goffart
d8206ccbc7 csync_update: fix assert
Amend 1dc44c0f62
2017-09-25 00:17:47 +02:00
Jenkins for ownCloud
fbd8de1c24 [tx-robot] updated from transifex 2017-09-24 02:18:33 +02:00
Markus Goetz
81d9f94a29 macOS: Fix compile 2017-09-23 13:42:39 +02:00
Olivier Goffart
382cc444f0 Httpcreds: Fix double slash in the Request App Password url
Issue #6044
2017-09-23 10:10:40 +02:00
Olivier Goffart
0cec6f08ca OAuth2: Fix double slash in URL
We need to use concatPath to avoid possible double '/' in the URLs if the
account url() ends with '/'.

This has become even more of a problem since commit
d1b8370a4a which was resolving the url after
a redirect where most server actually add a '/' if the url is a folder
2017-09-23 10:10:40 +02:00
Jenkins for ownCloud
2112e16cca [tx-robot] updated from transifex 2017-09-23 02:18:30 +02:00
Olivier Goffart
35f80bd439 csync_vio_local: merge readdir and stat in the same call
For the remote this was already done long time ago
For windows, this was already partially done

The goal is to avoid needless conversion of the path to local encoding.
2017-09-22 16:18:18 +02:00
Olivier Goffart
1dc44c0f62 csync_update/reconcile: replace CSYNC_LOG with qDebug/qInfo
CSYNC_LOG has quite an overhead as it uses vsprintf and it might
be run even if the category is disabled
2017-09-22 11:12:19 +02:00
Christian Kamm
eae3f7ce0a SyncEngine: Adjust free space messaging
Before, the way the info message was phrased implied a failure. And
since the large numbers can be hard to compare that can be confusing.
2017-09-22 11:07:27 +02:00
Olivier Goffart
aa322d41aa csync: remove unused type 2017-09-22 09:58:55 +02:00
Olivier Goffart
95d23b1914 RemotePermissions: Store in a class rather than in a QByteArray to save memory
Create a specific type that parses the permissions so we can store
it in a short rather than in a QByteArray

Note: in RemotePermissions::toString, we make sure the string is not
empty by adding a space, this was already existing before commit
e8f7adc7ca where it was removed by mistake.
2017-09-22 09:29:08 +02:00
Jenkins for ownCloud
0464cdb43f [tx-robot] updated from transifex 2017-09-22 02:18:30 +02:00
Olivier Goffart
35e4fe061d Port to new signal-slot syntax what cannot be done automatically
Some slot were protected or private but needed to be public.
Some needed a static_cast (can't use qOverload because it is in Qt 5.7)

This is not only a partial change.
2017-09-21 14:05:39 +02:00
Olivier Goffart
02924ad83e DiscoveryPhase: use the new syntax in disconnect
Since we used the new syntax in connect, we need to use it in disconnect
2017-09-21 14:05:39 +02:00
Olivier Goffart
ff4213b59f Use the Qt5 connection syntax (automated with clazy)
This is motivated by the fact that QMetaObject::noralizeSignature takes 7.35%
CPU of the LargeSyncBench. (Mostly from ABstractNetworkJob::setupConnections and
PropagateUploadFileV1::startNextChunk). It could be fixed by using normalized
signature in the connection statement, but i tought it was a good oportunity
to modernize the code.

This commit only contains calls that were automatically converted with clazy.
2017-09-21 14:05:39 +02:00
Olivier Goffart
c4e51247d8 test/stub: add some call required by the next patches
As we use the new connection syntax in folderman.cpp, some more symbol
need to be mocked
2017-09-21 14:05:39 +02:00
Olivier Goffart
1218a38f2c Include <QAuthenticator> from code that connect to signal that uses it
The new connection syntax will need that
2017-09-21 14:05:39 +02:00
Olivier Goffart
797f8087bc Gui: Use lambda instead of QSignalMapper
It's simpler, and QSignalMapper is deprecated in Qt 5.10
2017-09-21 14:05:39 +02:00
Olivier Goffart
bf77ac6ba5 Remove settingsdialog.cpp.Rbt431 2017-09-21 09:25:45 +02:00
Jenkins for ownCloud
eafb006649 [tx-robot] updated from transifex 2017-09-21 02:18:30 +02:00
Markus Goetz
a9bf7a90ed ChangeLog: More 2.4.0 changes 2017-09-20 14:44:33 +02:00
Jenkins for ownCloud
ee7593bbe3 [tx-robot] updated from transifex 2017-09-20 02:18:35 +02:00
Christian Kamm
30843cd368 Fix compile with bad strrchr signature 2017-09-19 12:44:59 +02:00
Christian Kamm
53195b064a Conflicts: Upload them files if env variable says so
Set OWNCLOUD_UPLOAD_CONFLICT_FILES=1 to trigger this behavior.

Note that this is experimental and unsupported. The real feature is
likely to end up in 2.5.

Uploading conflict files is simply done by removing the pattern from
csync_exclude. The rest here deals with making the conflict notification
ui approximately work.

There are still some concerns about where an uploaded conflict file
appears in the sync protocol and issues list (it should be in both, but
is only in one of them currently!).

See #4557.
2017-09-19 11:45:38 +02:00
Christian Kamm
dca2664707 Private links: Retrieve link through propfind property #6020
* The sharing ui does a propfind anyway: use that to query the new
property as well!
* For the socket api, asynchronously query the server for the right url
when an action that needs it is triggered.

The old, manually generated URL will be used as fallback in case the
server doesn't support the new property or the property can't be
retrieved for some reason.

Depends on owncloud/core#29021
2017-09-19 10:51:03 +02:00
Jenkins for ownCloud
e1dfc38a90 [tx-robot] updated from transifex 2017-09-19 02:18:38 +02:00
Jocelyn Turcotte
2e90e9c35b Fix the build (make install) 2017-09-18 15:32:05 +02:00
Olivier Goffart
8f5110900c Gui: Allow to add multiple sync folder connection of the same folder
... or child folders

There is also no real reason to forbid the user from syncing the same
folder to multiple location on its hardrive.
A real use case is when the user uncheck a big directory using "choose
what to sync", but would still like to sync a folder within this disabled
tree. The user can now do this with the "add folder" feature

Since 2.3, we even support syncing the same local folder to multiple
remote folder, so why not allow syncing the same remote folder several
times?

Relates to issue #3645
2017-09-18 15:17:06 +02:00
Jocelyn Turcotte
5e332983e2 SyncJournalDB: Only reset_and_clear_bindings once
We only need to do it once between each query execution and
that can be right before the first bind.
2017-09-18 14:00:52 +02:00
Jocelyn Turcotte
6e240a3e9c csync_update: Remove the check for csync_get_statedb_exists
This always returns true since _csync_statedb_is_empty also always
returns true. This function was initially intended to be a shortcut
in case the database doesn't contain any row, but has been broken since
27fb5d9128 and now won't return false
unless the statement fails.

The _last_db_return_error in _csync_detect_update would take care
of that code path in a more direct and clearer way anyway.
2017-09-18 14:00:52 +02:00
Jocelyn Turcotte
a1f1775d15 Move SyncJournalDB to src/common 2017-09-18 14:00:52 +02:00
Jocelyn Turcotte
5fbed0d1cd Reverse the dependency between SyncJournalFileRecord and SyncFileItem
This will allow us to also use the SyncJournalDB in csync.
2017-09-18 14:00:52 +02:00
Jocelyn Turcotte
bd25225045 Move non-csync-dependent parts of FileSystem to src/common
This keep the csync-dependent parts in src/libsync, slitting the namespace
over two files.
This will allow moving SyncJournalDB to src/common as well.
2017-09-18 14:00:52 +02:00
Jocelyn Turcotte
013eba0e79 Update sync-algorithm.md
The rbtree was replaced by a std::map.
2017-09-18 14:00:52 +02:00
Christian Kamm
78212e03d6 Checksums: Clearer behavior and added testing 2017-09-18 12:52:09 +02:00
Jocelyn Turcotte
a8ea7b0858 Remove SyncFileItem::_isDirectory
It's always equivalent to _type == SyncFileItem::Directory.
2017-09-18 11:46:09 +02:00
Jocelyn Turcotte
0e97770c47 Remove SyncFileItem::log
This remove the remaining "other" fields of the sync log to save a
bit of memory.

other_etag and other_fileId don't give much information to the users
and other_instruction will always be INST_NONE anyway.

other_modtime and other_size are kept since they are sometimes used.
They were renamed to have a bit more meaningful name.

SyncEngine::checkPermissions will now fetch its information from the
csync trees since they are now preserved until right after this point.

Fixes #3213
2017-09-18 11:46:09 +02:00
Jocelyn Turcotte
3d7bd7583b Remove SyncEngine::_remotePerms
Now that csync is using a more convenient data structure for
its file trees, wait a little bit longer before destroying them and
fetch the remote permissions from the remote tree there instead.
2017-09-18 11:46:09 +02:00
Jocelyn Turcotte
bfacac8683 Remove the usage of phash in csync
Only store the path since they represent the same thing, and do the
phash conversion during DB lookup like done in libsync.
We could get rid of everything since we also have an index on the path
column, but since it's the primary key this makes the migration non-trivial.
2017-09-18 11:46:09 +02:00
Jocelyn Turcotte
d66c2b5fae Replace the custom rbtree by a std::map 2017-09-18 11:46:09 +02:00
Jocelyn Turcotte
72e44ce3d7 csync: Keep the csync_file_stat_t instances created during discovery
Now that they use the same structure, avoid _csync_detect_update
having to recreate another instance and transfer everything manually.
Any instance created during discovery should now be used all the way
up to SyncEngine::treewalkFile.

This also makes sure that the path and types are properly set in that
object instead of having to pass everything as separate parameters.

This gets rid of csync_ftw_flags_e which was now converted from,
and to csync_ftw_type_e, already in the csync_file_stat_t.

Issue #1817
2017-09-18 11:46:09 +02:00
Jenkins for ownCloud
0806e0466c [tx-robot] updated from transifex 2017-09-18 02:18:30 +02:00
Jenkins for ownCloud
c05ca51238 [tx-robot] updated from transifex 2017-09-17 02:18:29 +02:00
Jenkins for ownCloud
1a4a5bfc57 [tx-robot] updated from transifex 2017-09-16 02:18:35 +02:00
Christian Kamm
be5d5aea6d AbstractNetworkJob: Allow relative redirect
Previously all redirects were considered absolute.
2017-09-15 15:25:10 +02:00
Christian Kamm
8635b8ac84 Reduce timeout for some admin jobs
The oauth token jobs and the wizard redirect check job shouldn't have
5min timeouts.
2017-09-15 15:25:10 +02:00
Christian Kamm
d1b8370a4a Wizard: Handle url-shortener redirects #5954
Grab any permanent redirects from the base url the user entered
before attempting to connect to a modified url (with status.php
added).
2017-09-15 15:25:10 +02:00
Christian Kamm
1f57fd0407 HttpCreds: Remove migration code from 1.7 2017-09-15 09:29:05 +02:00
Christian Kamm
671599c8b2 Credentials: Use per-account keychain entries #5830
This requires a lot of migration code: the old entries need to be read,
saved to the new locations and then deleted.
2017-09-15 09:29:05 +02:00
Christian Kamm
0b4fd52d63 Journal: Second attempt at journal mode fallback #5723
Some filesystems, vms or other limitations make using the WAL journal
mode impossible. We are notified of this problem through an sqlite
IOERR for SHMMAP. In that case We want to attempt to fall back to the
DELETE journal mode.
2017-09-15 09:28:35 +02:00
Christian Kamm
e05f5fc50d OAuth: Don't use implicit POST bodies
The query args of POST requests become the request body. If there's a
redirect, the redirected url will therefore not contain the query
arguments. Use an explicit request body to make the redirection work.
2017-09-15 09:28:03 +02:00
Christian Kamm
da6250fc1f OAuth: Pass client auth in header instead of url
To play more nicely with redirects.
2017-09-15 09:28:03 +02:00
Christian Kamm
7d075cdcb7 OAuth: Use redirectable jobs for oauth token management 2017-09-15 09:28:03 +02:00
Christian Kamm
3a55ff2119 PropagateUpload: Model of remote quota, avoid some uploads #5537
When we see a 507 error, assume that quota is < uploaded size.
2017-09-15 09:27:07 +02:00
Christian Kamm
b5b055e1ae SyncOptions/Propagator: Parallelism as an option
Very useful for changing it on a per-test basis.
2017-09-15 09:27:07 +02:00
Christian Kamm
0c99673581 Make DetailError different from BlacklistedError
It's quite different in regard to blacklist handling and overall
sync failure changes.
2017-09-15 09:27:07 +02:00
Helmut K. C. Tessarek
709aa27031 remove qt4 code 2017-09-15 07:11:05 +02:00
Jenkins for ownCloud
5b01d63491 [tx-robot] updated from transifex 2017-09-15 02:18:32 +02:00
Jürgen Weigert
46b3d41b20 Update release_template.md 2017-09-15 00:37:12 +02:00
Christian Kamm
0b7ad2c804 Excludes: Allow escaping # #6012
Otherwise adding patterns that start with # are impossible to add, since
they get treated as comments. Also add this escaping for patterns added
in the ui.
2017-09-14 14:53:05 +02:00
Jenkins for ownCloud
8392d6c136 [tx-robot] updated from transifex 2017-09-14 02:18:30 +02:00
Jenkins for ownCloud
4ced7e9c80 [tx-robot] updated from transifex 2017-09-13 02:18:31 +02:00
Markus Goetz
3d120983da ChunkingNgTest: CI debuggability #6015 2017-09-12 17:26:54 +02:00
Christian Kamm
70aafd74a8 Journal: Fall back to DELETE on IO error #5723
Also add logging of extended error codes for this IO error, maybe we can
become more specific about which situations should trigger a journal
mode switch.
2017-09-12 14:12:24 +02:00
Christian Kamm
66415831ea Folder: Check etag again after active sync #4116
Maybe more things were happening on the server?
2017-09-12 13:58:59 +02:00
Jenkins for ownCloud
2b7919fb3a [tx-robot] updated from transifex 2017-09-12 02:18:30 +02:00
Christian Kamm
09173fb727 Update server url in case of permanent redirection #5972
This is the first time the account url may update outside of
account setup.

Summary of redirection handling:
1. During account setup (wizard)
   - status.php gets permanently redirected -> adjust url
   - authed PROPFIND gets *any* redirection -> adjust url
2. During connectivity ping (ConnectionValidator)
   - status.php gets permanently redirected -> adjust url (new!)

All other redirections should be followed transparently and
don't update the account url in the settings.
2017-09-11 19:27:36 +02:00
Christian Kamm
de5de6284c Use DetermineAuthTypeJob in HttpCredentials
* Move it to networkjobs
* Minor adjustments to its logic
* Fixes redirect handling for oauth/basic http auth check #6003
2017-09-11 19:15:43 +02:00
Markus Goetz
de8ab35cb3 Add clean_tarball.sh #6005 2017-09-11 18:56:22 +02:00
Jenkins for ownCloud
237b597e19 [tx-robot] updated from transifex 2017-09-11 16:03:15 +02:00
Jocelyn Turcotte
2d7a4bdb06 Windows: Make sure that the folder and Desktop.ini have the right attributes (#6018)
When created from scratch, the owncloud icon won't be picked-up by
explorer unless the right attributes are set on both the sync root and the
Desktop.ini file.

Issue #2446
2017-09-11 15:32:42 +02:00
rockihack
6f270a3648 Enable DEP & ASLR on Windows 2017-09-11 11:18:18 +02:00
Markus Goetz
8be2aaa751 Remove qtkeychain submodule #6004 2017-09-08 15:23:16 +02:00
Jocelyn Turcotte
5ede5ab4ce Fix the macOS Sparkle build 2017-09-08 13:58:14 +02:00
Christian Kamm
506f7c0764 Http credentials: Fix behavior for bad password #5989
When the GET request from askFromUser is scheduled on the QNAM inside
the slot that handles the QNetworkReply::finished signal, it seems to
not get processed at all.

This workaround moves the sending of the new GET to the event loop,
sidestepping the problem.
2017-09-07 11:23:24 +02:00
Christian Kamm
4b686a4394 Fix compile errors
cmocka seems to #define fail to something inappropriate.
2017-09-07 11:02:05 +02:00
Jocelyn Turcotte
a18a601291 csync_statedb: (really) Make sure children of non-synced items aren't read from the DB
No tests are covering this and I reversed the original logic.
2017-09-07 10:26:19 +02:00
Jocelyn Turcotte
92fc50d4b0 csync_statedb: Make sure children of non-synced items aren't read from the DB
Fix a regression during C++ conversion from 704ca366b3
2017-09-07 10:17:58 +02:00
Jocelyn Turcotte
57c812bc00 Merge pull request #5979 from owncloud/csync-merge-filestat-types
csync: Merge csync_vio_file_stat_t, csync_file_stat_t and TREE_WALK_FILE data structures
2017-09-06 13:09:16 +02:00
Jocelyn Turcotte
715b8c4683 Fix build after C++ conversion of csync
Use the same macro as in SyncFileItem for bitfields on enums.

Fixes #5993
2017-09-06 13:08:23 +02:00
Jocelyn Turcotte
b1bb7ec1a8 Use a C++ contructor and destructor for CSYNC
Merge csync_create and csync_init into the constructor and
replace csync_destroy with the destructor.

Also use a QByteArray for csync_s::root_perms and flatten
csync_rename_s as a rename sub-struct of csync_s since it
can now handle C++ types.
2017-09-06 13:08:23 +02:00
Jocelyn Turcotte
f6136dd036 Remove csync_s::replica
The only difference with csync_s::current is that it's
assigned the value of csync_s::local::type and
csync_s::remote::type, which never change. So might as
well only use the "current" field with constants.
2017-09-06 13:08:23 +02:00
Jocelyn Turcotte
cb49635231 Replace TREE_WALK_FILE with csync_file_stat_t
Just expose csync_file_stat_t since we don't need an abstraction layer
anymore. Also pass the nodes of both trees directly to the visitor
function.

Issue #1817
2017-09-06 13:08:23 +02:00
Jocelyn Turcotte
e8f7adc7ca Replace csync_vio_file_stat_t with csync_file_stat_t
Also move csync_normalize_etag to common/utility since we
don't need the char* function anymore.

Remove the single space file_stat->remotePerm codepath since
this won't be used in csync anymore since
8de3bda0b1.

Issue #1817
2017-09-06 13:08:23 +02:00
Matthew Setter
ab8061a57f Fix link to download the ownCloud client
This was requested in https://github.com/owncloud/documentation/issues/3354.
2017-09-06 09:09:14 +02:00
Matthew Setter
f414355680 Fix broken images in FAQ
This relates to https://github.com/owncloud/documentation/issues/3354.
2017-09-06 09:08:53 +02:00
Jürgen Weigert
6dd043659c Update ChangeLog 2017-09-05 18:20:03 +02:00
Jocelyn Turcotte
704ca366b3 Make csync_file_stat_t public and partly convert to C++
This is the first commit trying to unify csync_file_stat_s,
csync_vio_file_stat_s and csync_tree_walk_file_s. Use QByteArray
and unique_ptr already since I'm not used to track memory allocations
and this will make the transition easier.

Issue #1817
2017-09-05 17:25:19 +02:00
Jocelyn Turcotte
cf15cbf0b3 Move Utility to a new common static library
Now that csync builds as C++, this will avoid having to implement
functionalities needed by csync mandatorily in csync itself.

This library is built as part of libocsync and symbols exported
through it.
This requires a relicense of Utility as LGPL. All classes moved into
this library from src/libsync will need to be relicensed as well.
2017-09-05 17:25:19 +02:00
Christian Kamm
de7c301654 Add minor unittest for numeric id extraction #5933 2017-09-05 13:40:26 +02:00
Jocelyn Turcotte
48d2fc1599 StatusTracker: Fix different case paths not matching (#5981)
Use a custom std::map comparator functor to do all comparisons
on contained QStrings using Qt::CaseInsensitive on macOS and Windows.

Issue #5257
2017-08-31 13:32:00 +02:00
Jürgen Weigert
839361594d fix branded nemo and caja shell integration (#5966)
* Update createcajaplugin.sh

* first apply branding, then create copies. Better.
Fixes https://github.com/owncloud/ownbrander/issues/753

* fix https://github.com/owncloud/ownbrander/issues/752 too.
2017-08-31 13:16:34 +02:00
Jocelyn Turcotte
40abe3f370 Merge pull request #5978 from owncloud/csync-cpp
Move csync to src/ and compile most of it at C++
2017-08-25 15:36:32 +02:00
Roeland Jago Douma
cacba220f9 Merge pull request #48 from nextcloud-gmbh/master-oc
Bump to oc master
2017-08-25 15:06:26 +02:00
Roeland Jago Douma
cdc5c1db43 Merge remote-tracking branch 'oc/master' into master-oc 2017-08-23 15:40:35 +02:00
Jocelyn Turcotte
7a5a706397 Fix cmocka deprecation warnings
Just use cmocka_run_group_tests like we already use in
some of those tests.
2017-08-22 15:22:57 +02:00
Jocelyn Turcotte
59ea79d9e6 Enable csync logs in unit tests
Go through the Logger to enable the csync-QDebug bridge.
2017-08-22 15:22:56 +02:00
Jocelyn Turcotte
4e5898efd7 Compile almost all of csync as C++
This will allow us to unify data structures between csync and libsync.

Utility functions like csync_time and c_std are still compiled as C
since we won't need to be coupled with Qt in the short term.
2017-08-22 15:22:56 +02:00
Jocelyn Turcotte
a512586140 Use .cpp for existing csync .cc files
Make this consistent with the rest of the client code.
2017-08-22 11:18:22 +02:00
Jocelyn Turcotte
28a0971cdf Move csync to src/csync 2017-08-22 11:18:22 +02:00
Jocelyn Turcotte
5c9827a33c Move csync/tests to test/csync 2017-08-22 11:18:22 +02:00
Jocelyn Turcotte
f0362b2332 Move csync/tests/ownCloud to test/scripts/txpl 2017-08-22 11:18:22 +02:00
Martin
5bf48bc68f Merge pull request #5974 from owncloud/Documentation_Activity_Update
Documentation improvement for #5969
2017-08-20 21:09:42 +02:00
Martin
6e47d9a2e5 Documentation improvement for #5969 2017-08-20 18:17:58 +02:00
Jocelyn Turcotte
a480a318fd Hardcode Desktop.ini in the exclude list
This prevents it from being removed from the exclude list, which
would be an issue since the client itself creates this file in a way
that wouldn't match on machines with different installation paths.
2017-08-15 13:37:33 +02:00
Jocelyn Turcotte
251f1d0047 Windows: Use the application icon for the sidebar
By setting the icon in Desktop.ini of the root folder, this adds the icon
both when browsing the folder directly and to the sidebar shortcut.

To avoid overwriting any user setting that could exist in Desktop.ini,
only do this if the file doesn't exist. Editing .ini files on Windows
isn't trivial and isn't worth it given that this file won't exist most
of the time.

Fixes #2446
2017-08-15 13:37:33 +02:00
Markus Goetz
1c3127e43b CMake: Print the Qt version and path #5957 #5932 2017-08-14 14:24:27 +02:00
Roeland Jago Douma
63d99f3e30 Merge pull request #47 from nextcloud-gmbh/drone_qt5.9
Add Qt5.9  to drone
2017-08-05 21:15:30 +02:00
Roeland Jago Douma
067c174e61 Add Qt5.9 to drone
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-08-05 21:08:45 +02:00
Roeland Jago Douma
993e1eb89c Merge pull request #46 from nextcloud-gmbh/drone_57_58
Add qt5.7 and qt5.8 CI tests
2017-08-05 14:37:26 +02:00
Roeland Jago Douma
6cb4131024 Add qt5.7 and qt5.8 CI tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-08-05 14:29:13 +02:00
Markus Goetz
20a979173f Sync Folder: Add file manager favorite also in folder wizard #455
Not only in the account wizard.
2017-08-04 17:38:01 +02:00
Markus Goetz
4aad318446 Upload: Log the checksum / file hash 2017-08-04 15:42:11 +02:00
Markus Goetz
13a5653c4e ChangeLog: More 2.4.0 stuff 2017-08-04 15:23:44 +02:00
Roeland Jago Douma
ceccc661f1 Merge pull request #43 from nextcloud-gmbh/drone
Get drone up and running
2017-08-04 10:55:06 +02:00
Roeland Jago Douma
53087ac803 Add drone test for Qt-5.6
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-08-03 22:29:46 +02:00
Matthew Setter
119ecb4259 Merge pull request #5762 from owncloud/update-docs-to-2.3.2
Update client docs version string to 2.3.2
2017-08-03 13:56:39 +02:00
Matthew Setter
8bd047174a Update client docs version string to 2.4.0
Need to update this to match the latest version.
2017-08-01 17:28:50 +02:00
Matthew Setter
416393a794 Merge pull request #5929 from owncloud/doc-cleanup
Clean up the client docs removing old, outdated, content
2017-08-01 11:52:05 +02:00
Jocelyn Turcotte
9e36cabcbf macos: Add a sidebar icon
In the process, use an iconset to generate the icns using iconutil.
Also add some missing icon resolutions according to the guidelines.

Issue #296
2017-07-31 18:43:47 +02:00
Matthew Setter
3731eba9b6 Clean up the client docs removing old, outdated, content
This makes changes as suggested by @michaelstingl in
https://github.com/owncloud/documentation/issues/3240.
2017-07-31 14:04:02 +02:00
Olivier Goffart
f707a43b3c FolderWizard: fix crash in FolderWizardRemotePath::slotHandleLsColNetworkError
The Job is a LsColJob, not a MkColJob!

Reproduce by entering a name with invalid character that cause an error 400
in the folder wizard's remote path line edit.

(Relates issue #5924)
2017-07-28 11:57:08 +02:00
Jocelyn Turcotte
7a96e8a292 General settings: Put all advanced checkboxes in a layout
The mac style has the concept of Layout Item Rectangle that bleeds
widgets margins into parent margins. This unfortunately doesn't work
when the parent layout doesn't have any margin, like we do when we
have the hierarchy:
 Vertical(normal margin)
   / Horizontal(no margin, uses parent layout spacing)
     /Widget

I guess Qt should propagate remaining uneaten margins to grand-parent
layouts and so on to have this work properly, but nobody seems to
have touched that code since Qt 4.4.
So just try to make the problem less worse by making sure that
all checkboxes we want to align are either in the same layout, or
in a loyout of their own.

Issue #5492
2017-07-27 17:37:27 +02:00
Jocelyn Turcotte
90cce0ab56 Fix the selective sync notification folder list being cropped
The maximumHeight would stay at the last animated value.

Issue #5492
2017-07-27 17:37:27 +02:00
Olivier Goffart
41ed603abf AccountState: reset _waitingForNewCredentials when signin in
Just to force the logic to re-ask the credenticals, in case we were
already asking them when singin off.

Issue: https://github.com/owncloud/client/issues/5893#issuecomment-316949686
2017-07-26 14:58:28 +02:00
Markus Goetz
cdce7f2044 encoding_tests: No more iconv 2017-07-26 11:46:18 +02:00
Olivier Goffart
6ae88514d8 OAuth: clear refresh token when the server claim not to support oauth
Allow upgrade path when the server removes support for oauth
Relates: https://github.com/owncloud/client/issues/5848#issuecomment-317353049

We also need to force the account to commit the config to the disk,
otherwise we may not register we are no longer using owncloud and we
risk sending the password as the token to the token refresh API call
2017-07-25 12:34:13 +02:00
Olivier Goffart
c043840cb1 OAuth: Fix refresh of token after expiration
Before commit d3b00532b1,
fetchFromKeychain was called everytime we detect that the creds are
invalid (in AccountState::slotInvalidCredentials)
But since that commit, AccountState was calling askFromUser directly,
breaking the refresh of the token.

So I made sure AccountState::slotInvalidCredentials still calls
refreshAccessToken.

Another change that was made was too be sure to clear the cookies
in HttpCredentials::invalidateToken even when we are only clearing the
access_token. That's because the session with a cookie may stay valid
longer than the access_token
2017-07-25 12:34:13 +02:00
Olivier Goffart
a831164d65 Revert "Revert "Discovery: consider also the "shared by me" as shared""
This reverts commit efa7821dd2.

This reverts the revert, but also add a check that the server version
is bigger than 10.0

Issue #4788
2017-07-25 12:11:33 +02:00
Jocelyn Turcotte
a41dc00160 Don't keep the list of touched files for the whole sync
We only want to know if they were touched within the last 15 seconds,
so change the data structure to use a QMultiMap, and sort them by
QElapsedTimer. This allows us to iterate over old entries ordered by
time and to stop once we find a recent entry.

This makes the look-up slower but in most cases the folder watcher
will report any change within milliseconds, and we start from the
most recent. What this really makes slower are actual user file
changes while a fast sync is underways which will need to iterate
over the whole map to find out the file isn't there.

This reduces the growth of the memory usage when downloading a large
amount of files.
2017-07-24 17:54:29 +02:00
Jocelyn Turcotte
5a1bf7d8fe windows: Fix a memory leak in FileSystem::longWinPath
Also use c_path_to_UNC directly instead of doing an extra
UTF-8->wchar conversion.
2017-07-24 17:54:29 +02:00
Olivier Goffart
075c423c62 buildint.rst: Put back reference to openssl on windows
OpenSSL might no longer be needed to build the client, but we still need
it to run it.

That reverts part of commit 6e57b0219e for
this file.

Fix #5858
Reported in https://central.owncloud.org/t/locally-built-client-error-creating-ssl-context/8264
2017-07-21 08:57:57 +02:00
Olivier Goffart
d9813dbc90 Propagator: fix a qMax which should have been a qMin 2017-07-18 08:58:07 +02:00
Olivier Goffart
50874eecfa OAuth: Add the user in the authorize call
Issues: #5897, https://github.com/owncloud/oauth2/issues/48
2017-07-17 10:13:12 +02:00
Olivier Goffart
3cea550d08 PropagateUpload: Remove the Qt workaround against data corruption
This was only for Qt <= 5.4, which we don't really support anymore.
And even then, the data corruption is happens very seldomly anyway.
2017-07-17 10:12:48 +02:00
Olivier Goffart
5e9d6f1cbd Merge pull request #5905 from kaustubh-welankar/issue_5692_pull
Fix for issue number #5692 : 

Abort owncloudcmd if the capabilities call fails.
2017-07-17 08:38:57 +02:00
Olivier Goffart
b1363d1a79 AccessManager: Disable HTTP/2 without TLS
Qt would otherwise still try to do HTTP/2 connection even over "http://".
And that does not work with server that does not support it
2017-07-17 08:20:17 +02:00
Olivier Goffart
520923b5a7 HTTP/2 Support
We need Qt 5.9 for HTTP2 because, even if Qt 5.8 already has support
for it, there is some critical bug in the HTTP2 implementation which
make it unusable [ https://codereview.qt-project.org/186050 and
https://codereview.qt-project.org/186066 ]

When using HTTP2, we can use many more parallel network request, this
is especially good for small file handling

Lower the priority of the GET and PUT propagation jobs, so the quota
or selective sync ui PROPFIND will not be blocked by them
2017-07-17 08:20:17 +02:00
Olivier Goffart
2ba46e05ee Merge pull request #5326 from owncloud/cleanup_tests
Use OWNCLOUD_BIN_DIR directly in C++ code.
2017-07-15 14:48:25 +02:00
Kaustubh Welankar
90ed57f478 Change error message. Removed Qt5 if check 2017-07-15 16:50:40 +05:30
Markus Goetz
ab580103c7 csync_vio: Better log for stat errors 2017-07-14 15:37:56 +02:00
Kaustubh Welankar
1c6a83d0dd Fix for issue number 5692 2017-07-14 16:50:49 +05:30
Olivier Goffart
06f3a70f9a OAuth: Better message when loggin in with the wrong username
Since the user is already in the browser, put the error message in the
browser with a message to log out and then log in as the right user.

Issue #5895
2017-07-14 11:17:24 +02:00
Markus Goetz
1fb68e8711 X-Request-ID: Send per request not per account #5853 2017-07-14 09:14:01 +02:00
Christian Kamm
bd107e133f Ensure qsrand is called 2017-07-13 18:06:40 +02:00
Christian Kamm
1c2d5f16c8 Account: Send a X-Request-ID header #5853 2017-07-13 18:06:40 +02:00
Olivier Goffart
5738110cb6 OAuth2: Have a link to the browser in the owncloud UI
When the browser is open, ad a link in the ui to re-open
the browser.

Issue #5893
2017-07-13 16:09:42 +02:00
Kashyap Prajapati
6be122edc4 Broken URL fixed in Dockerfile
Url to mingw repo fixed.
2017-07-13 14:49:00 +02:00
Christian Kamm
7979342edf AccountSettings: Draw a box to indicate pending conflicts 2017-07-13 11:48:10 +02:00
Christian Kamm
2cdf5517cb Conflicts: Detect and show in issues tab
Incidentally fixes a potential issue where conflicts were silently-
ignored and thus deleted if the parent folder was deleted.
2017-07-13 11:48:10 +02:00
Markus Goetz
7adcb76f68 check_vio_ext: Align with new UTF8 behaviour on macOS 2017-07-13 10:01:17 +02:00
Olivier Goffart
acf65b4c23 csync: Use Qt for encodeing/decoding filesystem strings
Issues:
 - #5661   On mac, iconv did not support all of unicode and some
           files with emoji in the filename could not be uploaded

 - #5719 , #5676  On linux, we will now support non utf-8 locale
2017-07-13 10:01:17 +02:00
Olivier Goffart
d099c2a8db csync: Move the locale<->utf8 conversion to a different file
It's a C++ file so we will be able to use Qt from it
2017-07-13 10:01:17 +02:00
Olivier Goffart
20f1257e88 csync: Remove iconv depedency
We use iconv to normalize the string on mac. But the iconv version
on mac does not support full unicode.
So we will use Qt to normalize the string
2017-07-13 10:01:17 +02:00
Christian Kamm
fe0de111fd IssuesWidget: Fix insertion of sync errors before item errors 2017-07-12 10:10:00 +02:00
Christian Kamm
e7a0c1b6d0 SyncEngineTest: _size now correct for uploads #5855 2017-07-12 10:09:04 +02:00
Christian Kamm
da54b3d7e5 Merge remote-tracking branch 'origin/2.3' 2017-07-12 10:06:04 +02:00
Christian Kamm
971abaea80 IssuesWidget: Add button to retry 507 errors #5537
Since these errors are blacklisted, it can take up to 24h to retry items
that had a 507 error for a while. This way users can intervene and cause
an upload attempt immediately.
2017-07-12 09:04:27 +02:00
Christian Kamm
a76670f3b8 IssuesWidget: Hide folder column when possible 2017-07-12 09:04:27 +02:00
Christian Kamm
e13b618a65 Add ElidedLabel
A label that adjusts its text based on Qt::TextElideMode.
2017-07-12 09:04:27 +02:00
Christian Kamm
cd1b89475c PropagateUpload: Better messaging for 507 #5537
It now produces a summary error message indicating the problem.

Adjust blacklist database table to contain 'errorCategory'. This is
useful for two things:
  - Reestablishing summary messages based on blacklisted errors. For
    example if we don't retry a 507ed file, we still want to show the
    message about space on the server
  - Selectively wiping the blacklist: When we have ui for something like
    "I deleted some files, please retry all files now!", we want to
    delete all blacklist entries of a specific category only.
2017-07-12 09:04:27 +02:00
Christian Kamm
5d90b48790 PropagateUpload: Put upload error handling in one function 2017-07-12 09:04:27 +02:00
Christian Kamm
c3cb186952 ProgressInfo: Carry a sync status
* A bunch of code was determining sync status by ad-hoc comparing some
  progress info fields. It can now just check the status, making it
  easier to comprehend.
* There's a clear indication for "a new sync is starting", which helps
  wiping the issues tab at the right time.
2017-07-12 09:04:27 +02:00
Christian Kamm
5ca743dd25 SyncEngine: Introduce overall errors that are not tied to a file #5746
For now we use them for:
* csync errors: This allows them to appear in the sync issues tab
* insufficient local disk space, as a summary of individual file errors

Insufficient remote space will use them too, as might other issues that
are bigger than a single sync item.
2017-07-12 09:04:27 +02:00
Olivier Goffart
d34dbbdb0b OAuth: Redirects to the server in case of sucessfull login
Requires https://github.com/owncloud/oauth2/pull/45

This commit moves the reply after we got the token reply from
the server, that allows to reply with an error to the browser
if the login does not work.
2017-07-11 09:56:04 +02:00
Christian Kamm
1c9b51c330 IssuesTab: Hide filters if they wouldn't be useful
As suggested by @dragotin
2017-07-10 11:13:48 +02:00
Christian Kamm
122854af77 FolderMan: Add missing folderListChanged emits
She signal of a folder list change was not emitted when folders were
deleted from the list.
2017-07-10 11:13:48 +02:00
Christian Kamm
a5ace5e71d Account/Credentials: Have identical lifetimes
The QNAM may continue to outlive both.

Rename Credentials::getQNAM() to createQNAM() while we're at it - it's
used to make a new QNAM that will subsequently be owned by the Account
object.

See d01065b9a1 for rationale.

Relates to
d40c56eda5
147cf798a6
2017-07-08 13:07:13 +02:00
Jocelyn Turcotte
af4f1083b7 shell/windows Build 46: Private links context menu 2017-07-07 18:10:48 +02:00
Jürgen Weigert
186f16e688 Update building.rst 2017-07-07 16:01:20 +02:00
Christian Kamm
99b1f69271 Link share: Remove direct download if unavailable #5837
It would have been much nicer to keep the menu assigned to the
QToolButton, but if one switches away from InstantPopup (to adjust the
entries before they're displayed), the button always gets a menu
indicator that can't be removed.
2017-07-07 11:23:32 +02:00
Christian Kamm
e54be1c4ee Link shares: Add "show file listing" option #5837 2017-07-07 11:23:32 +02:00
Christian Kamm
411621bf03 shell integrations: Change share menu title to "Share..."
Since the appname is in the context submenu title already.

Also drop APPNAME string.
2017-07-07 10:50:07 +02:00
Christian Kamm
ca2ffd4fb3 SocketAPI: Change strings to a consistent _MENU_TITLE postfix 2017-07-07 10:49:51 +02:00
Jocelyn Turcotte
3b20684dc7 shell/macos: Remove legacy (< 10.10) overlay icons
Having to update the plugins to add a submenu in the context menu,
it's more cost-effective to remove support for legacy macOS versions
than implementing and testing this setup.
2017-07-07 10:49:51 +02:00
Jocelyn Turcotte
b6db9789ee shell/macos: Use a submenu to include private link actions 2017-07-07 10:49:51 +02:00
Jocelyn Turcotte
7a4daf799a shell/windows: Use a submenu to include private link actions
Refactor things a bit to be able to reuse some code and
clean things up.
2017-07-07 10:49:51 +02:00
Jocelyn Turcotte
389499d639 SocketApi: Add GET_STRINGS:BEGIN and END
The Windows shell extension relied on the response of
SHARE_MENU_TITLE to advance its state machine, but in order
to use the new GET_STRINGS instead, we need to know when the
last string was received. Also add BEGIN for consistency.
2017-07-07 10:49:51 +02:00
Jocelyn Turcotte
7b58a82840 SocketApi: Adjust the format of the mailto: URL
Minor tweaks that weren't actually an issue, but just in case.
2017-07-07 10:49:51 +02:00
Jocelyn Turcotte
9d818066a7 SocketApi: Improve logging 2017-07-07 10:49:51 +02:00
Christian Kamm
0238a29c7c Introduce private link sharing #5023
* SocketAPI has COPL_LOCAL_LINK / EMAIL_LOCAL_LINK commands
* The nautilus and dolphing shell integrations show a submenu from which
  one can share as well as access the private link.
* The SocketAPI provides a new GET_STRINGS command to access localized
  strings.
* The private link can also be accessed from the user/group sharing
  dialog.
* The numeric file id is extracted from the full id to create the
  private link url.
2017-07-07 10:49:51 +02:00
Christian Kamm
d01065b9a1 Fix crash on account deletion
Calling forgetSensitiveData() on account deletion leads to a timer for
clearQNAMCache() being queued. Then the Account object is deleted. The
Credentials object stays alive for now because it has a deleteLater
deleter.

If the timer calls into a slot on the Credentials object, the _account
pointer will be invalid at this time.

As a workaround, move the target slot to Account - that way it will not
be called as the account object is already destroyed.

However since Account and Credentials are mutually dependent, it would
be much preferable if their lifetimes were linked, avoiding this
category of bugs.

The current behavior was introduced in
d40c56eda5 and I currently don't
understand why - maybe there's another way of dealing with the problem
that existed then.
2017-07-06 14:34:02 +02:00
Hefee
607287a9d6 Use OWNCLOUD_BIN_DIR directly in C++ code.
No need to do a STR replacement and the macro changing the path.
It actually broke test execution for Debian.

See https://bugs.debian.org/844937
2017-07-06 08:41:02 +02:00
ckamm
ce8341ca1f Add a more functional error view #5516 (#5861)
* Add a more functional error view #5516

* Allow filtering of ignores and warnings to see only important bits.
* Navigate from the folder view to the error view by clicking on the
  error list with the red background.
* Move the error list into its own ui file to allow easier extension.
* Fix issue around tab id handling in ActivitySettings.
* Rename "Action" column to "Issue".
* Change mouse cursor to hand over button and new error list area

Several OSX fixes provided by guruz.
2017-07-04 14:08:41 +02:00
Christian Kamm
9493e8f42e AccountState: Add a 1-5min reconnection delay #5872
This only applies when the server was explicitly in maintenance mode or
when it was 503-unavailable.
2017-07-04 13:12:41 +02:00
Christian Kamm
b1aaf055b1 Blacklist: Don't let errors become warnings #5516
Before, blacklisted errors were set to FileIgnored status and hence
displayed as warnings. Now, they have their own BlacklistedError
category which allows them to appear as errors in the issues list and in
the shell integration icons.
2017-07-04 13:07:51 +02:00
Olivier Goffart
34e75f80bc main.cpp: Fix a compiler warning
src/gui/main.cpp:112:9: warning: bool literal returned from 'main' [-Wmain]

Used 1 to keep previous behaviour. I supposed the code was meant
to return success (0), but it does not really matter anyway.
2017-07-04 11:43:07 +02:00
Christian Kamm
0db095e02a SyncEngineTest: Fix test reliability
There was a rounding issue in the mtimes which sometimes resulted in an
off-by-one error. Caused by storing a full QDateTime in the FileInfo but
the mtime saved to the disk being truncated to seconds.
2017-07-04 09:57:22 +02:00
Olivier Goffart
30095a0c3f Fix check_csync_update
Commit 8160963110 changed the
SQL requests from csync to read from the checksumtype table.
So we need to add this table in the fake DB as well
2017-07-03 17:26:29 +02:00
Olivier Goffart
946c6967e9 Fix check_csync_exclude test
Commit 4697f0274f remove .htaccess from
the sync-exclude.lst, so use another known excluded pattern
2017-07-03 17:26:29 +02:00
Piotr Mrowczynski
d1e00099dc Classify chunked items correctly. Issue #5850 2017-07-03 14:41:53 +02:00
Christian Kamm
d018d460e3 csync tests: remove stray 'print' 2017-07-03 13:16:55 +02:00
Christian Kamm
851a3128e4 SyncEngine: Add unittest for SyncFileItem properties #5855
Checks instruction, direction, size, modtime for three common cases.
2017-07-03 12:54:24 +02:00
Christian Kamm
bdb8a4a0cb csync tests: Fix for new owncloudcmd return codes
These were introduced in 4af45394f9
2017-07-03 11:48:38 +02:00
Samuel Alfageme
0f70bd7913 Update central.owncloud.org link
Desktop client category was renamed, old link was 404 - see: https://central.owncloud.org/t/new-central-categories-you-decide
2017-06-29 17:52:00 +02:00
Roeland Jago Douma
d810c13304 Merge pull request #27 from nextcloud-gmbh/wording-fix
Change wording from synchronizing to synchronized
2017-06-29 16:06:07 +02:00
Jan-Christoph Borchardt
3d2f5b6af1 Change wording from synchronizing to synchronized 2017-06-29 15:36:57 +02:00
Roeland Jago Douma
e240904a32 Merge pull request #33 from nextcloud-gmbh/update_doc
Point to NC doc repo
2017-06-28 16:44:31 +02:00
Roeland Jago Douma
58e0c6c630 Point to NC doc repo
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2017-06-28 16:40:42 +02:00
Roeland Jago Douma
501394ec6f Merge pull request #32 from nextcloud-gmbh/oc_master
Oc master
2017-06-28 13:24:24 +02:00
Markus Goetz
59bbbd5e66 Jenkinsfile: Some comments 2017-06-22 15:42:56 +02:00
Markus Goetz
1e98ba27c6 CSyncSqliteTest: Fix test 2017-06-22 15:11:49 +02:00
Markus Goetz
2244b35a6d test_journal.db: Add checksumtype table 2017-06-22 15:11:49 +02:00
Christian Kamm
15ee7b39ac Merge remote-tracking branch 'origin/2.3' 2017-06-22 14:06:31 +02:00
Markus Goetz
cb7d74a063 Jenkinsfile: Compile in debug because of all the asserts 2017-06-21 15:11:55 +02:00
Markus Goetz
bfe095b065 Jenkinsfile: Run verbose tests 2017-06-21 12:18:21 +02:00
Markus Goetz
30bcd45a14 Jenkinsfile: Run full testing 2017-06-21 12:13:01 +02:00
Markus Goetz
f44d3914ef owncloudcmd: Explain --debug parameter 2017-06-21 10:01:32 +02:00
Jocelyn Turcotte
5d24a2dc0f Remove debug messages by default from sync.engine
Other categories were already set properly.
2017-06-15 20:10:30 +02:00
Christian Kamm
8160963110 Compare the hash of files with identical mtime/size #5589
* For conflicts where mtime and size are identical:

  a) If there's no remote checksum, skip (unchanged)
  b) If there's a remote checksum that's a useful hash, create a
     PropagateDownload job and compute the local hash. If the hashes
     are identical, don't download the file and just update metadata.

* Avoid exposing the existence of checksumTypeId beyond the database
  layer. This makes handling checksums easier in general because they
  can usually be treated as a single blob.

  This change was prompted by the difficulty of producing file_stat_t
  entries uniformly from PROPFINDs and the database.
2017-06-15 13:54:16 +02:00
Christian Kamm
d50d8b86cf SyncEngineTest: Add network override
This is useful for monitoring what kind of network requests are
sent to the fake server. Such as "did this sync cause an upload?"
and "was there a propfind for this path?". It can also inject
custom replies.
2017-06-15 13:53:57 +02:00
Christian Kamm
b28e06608c SyncEngineTest: Send 'checksums' in FakePropfind 2017-06-15 13:53:57 +02:00
Christian Kamm
cd411e5fb1 SyncEngineTest: Fix date locale related bug
The client is very picky about date strings it accepts. If dates are
formatted with a non-C locale (such as localized weekday names), it
fails to parse it and tests fail in subtle ways.
2017-06-15 13:53:57 +02:00
Jocelyn Turcotte
9daef50ce6 shell/Windows: Update binaries to build 45 2017-06-14 14:17:50 +02:00
Frederik Juul Christiani
fae178f70b shell_integration/windows: Create _newQueries as a non-signaled auto-reset event.
Since ResetEvent() is never called, the call to WaitForMultipleObjects()
can always return immediately once the event has been signaled.
2017-06-14 12:14:22 +02:00
Frederik Juul Christiani
744208f701 Initialize stop variable.
Avoid stopping the worker thread immediately if the stop variable happens to be true.
2017-06-14 12:14:21 +02:00
Olivier Goffart
85d8ae6b93 AccountSettings: Triggering log in re-ask about previously rejected certificates #5819
Issue #5819
2017-06-14 11:48:24 +02:00
Olivier Goffart
5100a2daf1 OAuth: cleanup debug messages
- Add category to the all messages (they did not have it was merged right after
the patch to add category everywhere, but this code did not have it.)

- Make sure there is no warnings in the normal flow. (The wizard does a request
without authentication to determine the auth type)
2017-06-13 12:08:24 +02:00
Olivier Goffart
6e57b0219e Don't link dirrectly against openssl
All our crypto code is handled by qt nodaways.
No need to carry this dependency.

Especially since it causes warnings on system where there are
twp openssl version installed:
/usr/bin/ld: warning: libcrypto.so.1.0.0, needed by /usr/lib/libQt5Network.so.5.9.0, may conflict with libcrypto.so.1.1
2017-06-13 11:27:23 +02:00
Markus Goetz
3a002a1ddf Update ChangeLog 2017-06-12 18:46:57 +02:00
Christian Kamm
4b0d956b3d OAuth: Fix a typo in the success message 2017-06-12 12:58:20 +02:00
Olivier Goffart
85408961ba Wizard: Don't let the second to last page go back with OAuth2
We don't want to re-open the browser in that case.
2017-06-12 12:58:20 +02:00
Olivier Goffart
04b6794318 OAuth: Error handling in the wizard
Issues: #5813 and #5811
2017-06-12 12:58:20 +02:00
Olivier Goffart
3314a472c3 SyncEngine: SelectiveSync: Remove local files of undelected folder despite other modified files
Issue #5783

When the directry that should be removed by selective sync contains changes,
we ignore the whole sub tree instead of only ignoreing new files.
We cannot ignore the whole directory, we need to ignore only the directory
that do not have files to remove
2017-06-08 14:53:54 +02:00
Christian Kamm
aeeb408c74 Merge branch '2.3' 2017-06-08 13:02:34 +02:00
Olivier Goffart
63c40b45e4 OAuth: Fix the secret to the one from commit 05fd985f9f in the oauth2 repository
05fd985f9f
2017-06-06 14:49:34 +02:00
Olivier Goffart
c17a678385 FolderStatusModel: fix assert in Qt when the list of subfolder is empty
Fix an assert that happens in beginInsertRows when opening a folder
and that folder is empty.
This can only be reproduced with a debug build of Qt.
2017-06-06 14:49:03 +02:00
Olivier Goffart
e2e56f45af ownsql: fix build on jenkins
sqlite3_system_errno was only added in sqlite 3.12
2017-06-06 14:47:11 +02:00
Christian Kamm
05c1dcef9b Add extra logging for SQLITE_CANTOPEN errors #5633 2017-06-06 12:59:57 +02:00
Christian Kamm
cc5fe558ba Fix maintenance mode detection #5755
The server sends "maintenance": "true" which isn't a json boolean...
2017-06-06 10:45:41 +02:00
Olivier Goffart
3d93527a8e Authentication with OAuth2
When the OAuth2 app (https://github.com/owncloud/oauth2) is enabled,
We will open a browser and perform the OAuth2 authentication

Issue: #4798 and https://github.com/owncloud/platform/issues/17
2017-06-01 10:39:33 +02:00
Markus Goetz
8a19f2ac65 ChangeLog: More things that were done until now 2017-06-01 10:37:01 +02:00
Julius Härtl
b7fa50be4c Set proper application name, icon name for freedesktop notifications
Use application name defined in OEM build configuration
2017-06-01 10:01:05 +02:00
Markus Goetz
42751f87d9 Application: debug implies logdebug 2017-05-29 22:05:26 +02:00
Olivier Goffart
f88431adbf Don't call QElapsedTimer::restart on uninitialized timer
That's an undefined behavior.
Since we don't use the return value anyway, we should just use start()
2017-05-29 10:51:05 +02:00
Christian Kamm
03aa7e3044 Sharing: Disable 'set password' button when password is empty #5788 2017-05-22 14:41:06 +02:00
Christian Kamm
91f6cae168 Share dialog: Use default icon if available #5781 2017-05-22 14:15:53 +02:00
Christian Kamm
ddd584077c Share link: Fix disabled API/sharing #5778
* Don't hide the displayed error directly after showing it
* Don't try to fetch shares when sharing isn't possible
2017-05-22 10:59:57 +02:00
Christian Kamm
8201f0b6ea Share Dialog: Remove unused hline 2017-05-22 10:59:57 +02:00
Christian Kamm
f2b5fcd706 Share link: Fix parsing integer ids #5777
Older ownCloud servers like 8.2.0 used to use integer ids.

This broke when switching to QJson because toString() on JSON
values is strict and returns "" for integers.
2017-05-22 10:54:30 +02:00
Christian Kamm
950439e5b8 Sharing dialog: Ensure error labels are expanding #5774 2017-05-22 10:52:52 +02:00
Christian Kamm
f24cdf5a05 Share dialog: Hide the icon when unused
Previously this used up some space when there was no icon, leading
to an oddly indented header.
2017-05-22 10:52:52 +02:00
Christian Kamm
d3b00532b1 Credentials: Simplify credential flow #5728
And as a side effect: don't ask for user password when we can't
connect to the server in the first place.
2017-05-22 10:52:18 +02:00
Christian Kamm
b7ed0fce2a Account: forget credentials on delete #5752 2017-05-22 10:49:11 +02:00
Christian Kamm
57d965aeba Merge branch '2.3' 2017-05-22 10:00:28 +02:00
Christian Kamm
5eaae83a01 Merge remote-tracking branch 'origin/2.3' 2017-05-17 13:10:19 +02:00
Jocelyn Turcotte
c50136d675 Add the account name and folder when starting the sync
This should help clearly delimiting them in the log for multi-account setups.
This information is already available elsewhere in the log in any case.

Issue #5672
2017-05-17 12:39:59 +02:00
Christian Kamm
494ea5c78c Reformatting: Add .git-blame-ignore-revs
For git hyper-blame support
2017-05-17 12:31:49 +02:00
Christian Kamm
c8d0f788e0 Apply clang-format 2017-05-17 12:26:27 +02:00
Christian Kamm
ae263d60bd Reformatting: Reformat some lines that would become really long 2017-05-17 12:26:27 +02:00
Christian Kamm
df3fe25702 Reformatting: Adjust trailing comments
These would otherwise be line-wrapped by clang-format,
and then consecutive reformattings remove the aligned
comment indentation

Example:

int a; // too long comment

->

int a; // too long
       // comment

->

int a; // too long
// comment
2017-05-17 12:26:27 +02:00
Christian Kamm
566e6c813e Add .clang-format style
From http://code.qt.io/cgit/qt/qtrepotools.git/tree/config/_clang-format
2017-05-17 12:26:27 +02:00
Christian Kamm
ee4892e345 Wizard: Skip result page with acceptance instead of closing #5764 2017-05-12 10:21:07 +02:00
Jocelyn Turcotte
7fd2f292e7 Promote a few more logs to info/warning 2017-05-11 17:22:59 +02:00
Markus Goetz
b68d982619 macOS: Fix usage of qCDebug in .mm file 2017-05-11 17:22:59 +02:00
Jocelyn Turcotte
cf058bc537 Add the possiblility to enable debug logging categories
Add a checkbox in the log window as well as a --logdebug command-line
option that should have the same effect.

Issue #5647
2017-05-11 17:22:59 +02:00
Jocelyn Turcotte
cc9680c1e8 Also pass csync logs through QMessageLogger
This allows using logging rules and custom message patterns with csync.
This also pass the a relative verbosity to the message logger.

Issue #5647
2017-05-11 17:22:59 +02:00
Jocelyn Turcotte
b7553d5bdf Upgrade some qCDebug to qCInfo or qCWarning
Use qCInfo for anything that has general value for support and
development. Use qCWarning for any recoverable error and qCCritical
for anything that could result in data loss or would identify a serious
issue with the code.

Issue #5647
2017-05-11 17:22:59 +02:00
Jocelyn Turcotte
4ad190a558 Use Qt logging categories for logging
This gives more insight about the logs and allow setting fine-tuned
logging rules. The categories are set to only output Info by default
so this allows us to provide more concise logging while keeping the
ability to extract more information for a specific category when
developping or debugging customer issues.

Issue #5647
2017-05-11 17:22:59 +02:00
Jocelyn Turcotte
3a193655b3 Improve the logging message pattern
Add the log level and category name in the output. Only output the
thread ID and function name for qCDebug statements as they are not
necessary for general use and make the log harder to read.

Also make sure that the message pattern is set when NO_MSG_HANDLER is
used. Using an environment variable should have priority over it anyway.
2017-05-11 17:22:59 +02:00
Jocelyn Turcotte
e10a08f64d Remove the unused folderwatcher_qt implementation 2017-05-11 17:22:59 +02:00
Markus Goetz
cc94c772cd ChangeLog: 2.4 until now 2017-05-11 12:03:52 +02:00
Christian Kamm
4b6edaa01a Detect maintenance mode #4485
When we first detect a 503 (probably from a PROPFIND) and enter the
ServiceUnavailable state, we new trigger a status.php query that will
switch the state to MaintenanceMode if necessary.
2017-05-11 11:39:49 +02:00
Markus Goetz
8da7919a43 Sharing: Fix UI glitch when sharing is disabled 2017-05-10 15:41:58 +02:00
Markus Goetz
f52d66a954 Sharing: Optionally show warning that links are public
For https://github.com/owncloud/enterprise/issues/1914
2017-05-10 15:41:58 +02:00
Jocelyn Turcotte
4d3212b31f Merge branch 2.3 into master 2017-05-09 18:23:01 +02:00
Markus Goetz
973dc9e1e2 Update release_template.md 2017-05-09 13:12:22 +02:00
Christian Kamm
881641f0b7 Remove stray debug output 2017-05-09 10:37:40 +02:00
Markus Goetz
d1b1da3414 Update release_template.md 2017-05-08 20:34:57 +02:00
Markus Goetz
48a359b69e Update release_template.md 2017-05-08 17:01:37 +02:00
Markus Goetz
2a8f9a7c04 Update release_template.md 2017-05-08 16:17:07 +02:00
Christian Kamm
3da1e9a4b9 Remove 3rdparty qjson #5710 2017-05-08 11:50:33 +02:00
Christian Kamm
f1b42cedda Port PollJob responses to Qt5's QJson #5710 2017-05-08 11:50:33 +02:00
Christian Kamm
2598579d84 Switch JsonApiJob to Qt5's QJson #5710 2017-05-08 11:50:33 +02:00
Christian Kamm
c5b6ec209a Sharing: Switch from QtJson to Qt5's QJson #5710 2017-05-08 11:50:33 +02:00
Olivier Goffart
13705999f7 Discovery: Increase the MAX_DEPTH and show deep folder as ignored
Before this patch, to deep folder would just be ignored, without any feedback.
This patch makes it so deep folder are properly shown as ignored in the UI.

Also increase the MAX_DEPTH

Issue: #1067
2017-05-08 11:29:51 +02:00
Markus Goetz
fbe812b9bc Selective Sync: Open sub folder context menu #5596 2017-05-08 11:24:02 +02:00
Olivier Goffart
4697f0274f Exclude list: remove .htaccess
As per issue #5701, if the server does not support it, let the server
show return an error, but we should not blacklist it localy
2017-05-08 11:17:22 +02:00
Christian Kamm
aff8008baf Downloads: Remove empty temporary if disk space full #5746 2017-05-04 15:12:14 +02:00
Christian Kamm
c922015521 SSL error handling: Remove unnecessary confusing code
I'm confident this is unnecessary. The original bug in #3283 was
to call ignoreSslErrors() without an argument in the 'accept'
case, which meant ignoring *all* subsequent SSL errors.

With that fixed, explicitly aborting the reply and resetting QNAM
is not needed since not ignoring the error will lead to the SSL
handshake failing.

See also:
  75b38d1a2f (workaround introduced)
  89376e14d6 (real fix)
  76ce5adbf0 (cherry-pick of workaround)
2017-05-04 09:19:01 +02:00
Markus Goetz
4ed9edb104 Wizard: Don't show not-so-useful result page #5726
Better immediately show the settings dialog where people can see what's going on.
They can go to sync folder or webinterface from there.
2017-05-03 19:21:46 +02:00
Olivier Goffart
bb244d527c Better words for the error message when one cannot create the database.
Issue #5291
2017-05-03 17:53:46 +02:00
Matthew Setter
7f1d13dfbf Merge pull request #5741 from owncloud/add-checksum-details
Document the checksums addition in 10.0
2017-05-03 13:32:21 +02:00
Matthew Setter
3185b0940b Increase the clarity of the checksum statements
This comes after discussion and feedback with @phil-davis.
2017-05-03 13:17:09 +02:00
Christian Kamm
d709a47b93 Share dialog: Add option to copy/email direct links #5627 2017-05-03 10:26:27 +02:00
Matthew Setter
013a0e25d5 Document the checksums addition in 10.0
This commit documents the new checksums addition in 10.0, specifically
in the desktop client. This fixes owncloud/documentation/issues/2964.
2017-05-02 12:48:08 +02:00
Luca Lorenzetto
3db8d3dfb6 When creating explorer favorite use more specific windows functions (#5690)
Fixes https://github.com/owncloud/client/issues/2719
2017-04-27 10:34:07 +02:00
Tommy Sparber
72a3e08907 Move check for mono icons into separate function 2017-04-26 17:39:01 +02:00
Michael Stingl
4202387c52 templates > .github and create release_template (#5590) 2017-04-24 11:54:53 +02:00
Christian Kamm
cd4e647816 Merge remote-tracking branch 'origin/2.3' 2017-04-24 10:32:53 +02:00
Kiril Vladimiroff
3a31694147 Remove all conditional checks for Qt 4.x (#5505) 2017-04-21 18:13:32 +02:00
Christian Kamm
05236f0a7a Sharing multiple public links: Depend on new capability
See owncloud/core#27709: files_sharing/public/multiple
2017-04-21 14:08:00 +02:00
ckamm
a475526805 Merge pull request #5695 from ckamm/sharedialog-multiplelinkshares
Multiple link shares and UI adjustments for share dialog
2017-04-21 10:17:55 +02:00
Christian Kamm
3c1a2cde33 ShareDialog: Review fixes
* Allow creating nameless shares
* Display token as name for nameless shares
  (both to be consistent with server)
* Allow changing a share's name by editing it in the table
* Minor adjustments
2017-04-21 10:16:08 +02:00
Christian Kamm
a1f7168d2a ShareDialog: Add support for multiple public link shares #5655
Starting from oC 10.0.0 having several public link shares with
different attributes for a path will be supported. This adds
functionality to create, edit and delete these public link shares.

The behavior is currently gated by server version, but should be
adapted to use a capability as soon as one is introduced, see
owncloud/core#27622.

The UI reduces to a single-share version when talking to older servers.

Testing scenarios:
* Link sharing is disabled (by capability, not by theme)
* Required passwords
* Required expiry
* Forbidden 'allow upload' for folders
* New and old servers
2017-04-21 10:10:12 +02:00
Christian Kamm
1e1c2f8de2 Rename ShareWidget to ShareUserLine
There will probably be a ShareLinkLine too, due to #5655
2017-04-21 10:09:01 +02:00
Christian Kamm
76e67db04b ShareDialog: Use a tab widget #5655 2017-04-21 10:09:01 +02:00
Kaustubh Welankar
70c3514996 Removed Magic Numbers in propagator #5685 (#5705) 2017-04-20 11:14:53 +02:00
Olivier Goffart
9aeb587d6c Require Qt5 2017-04-20 09:39:41 +02:00
Dominik Schmidt
51041d0f15 Disable Qt4 CI 2017-04-20 09:39:41 +02:00
dheule
ada2be94f2 added owncloudcmd bandwidth limit parameter (#5707) 2017-04-19 10:32:36 +02:00
Olivier Goffart
8cb3a77022 Merge remote-tracking branch 'origin/avatar_pics'
Also fix compilation because of 22370fdbdadd06f0cacd249a8d7a32f0d3c1374e

Pull request #5482
2017-04-13 11:54:28 +02:00
Olivier Goffart
1ed4eb46f2 Merge remote-tracking branch 'origin/2.3'
Conflicts:
	VERSION.cmake
2017-04-13 10:19:35 +02:00
Christian Kamm
7c31da5a95 AccountSettings: Sync with clean discovery on Ctrl-F6 #5666 2017-04-13 10:11:21 +02:00
Christian Kamm
1f245b3791 AccountSettings: Easier access to selected folder alias 2017-04-13 10:11:21 +02:00
Markus Goetz
554d1b88fc Avatar: macOS support 2017-04-12 17:55:28 +02:00
Christian Kamm
2841714817 owncloudcmd docs: Mention required sync-exclude.lst #5679 2017-04-04 09:38:23 +02:00
Christian Kamm
35af03b2e5 Improve http error messages; cleanup
By default QNetworkReply::errorString() often produces messages like
   "Error downloading <url> - server replied: <reason>"
but the "downloading" part invariably confuses people since the
error might very well have been produced by a PUT request.

This commit produces clearer error messages for HTTP errors.

Additionally:
* Remove some unnecessary null checks from slots connected to
  network job signals and document that these signals never send
  null replies.
* There was a bug where AbstractNetworkJob::_timedout wasn't
  set when derived classes overrode slotTimeout. We now ensure
  it's always set by disallowing overrides of slotTimeout.
  Instead it now calls onTimedOut, which allows custom handling.
* Several subclasses declared errorString, isTimedOut. Move
  these to AbstractNetworkJob.
* Unify handling of OC-ErrorString (via the new, general
  Job::errorString)
* Add documentation in various places.
2017-04-04 09:27:37 +02:00
Samuel Alfageme
ae018eab42 Fixing a duplicate in the build instructions
- The duplicate and some typos were introduced in 42aed56a5a 
- Also fixes some minor format issues. There's a lot of notes in this docs, we should refactor some.
2017-04-03 21:19:39 +02:00
Roeland Jago Douma
68f0f1b404 complete url when using themed wizardUrlPostfix
Before we would only open the part of the url that the users entered.
Now if the wizardUrlPostfix is used this is should be appended to that
when opening the browser on the result page.
2017-03-29 18:09:15 +02:00
Samuel Alfageme
96f152d57c Removed the coverity badge
Following the discussion on da45d99b8f 
Also updated the link to the current building instructions.
2017-03-29 17:26:10 +02:00
Christian Kamm
53c5f03c32 Merge branch 'dynamic_chunking' 2017-03-28 11:35:01 +02:00
Christian Kamm
e86499d990 dynamic chunking: cleanup, fixes, improvements
* make target duration a client option instead of a capability
* simplify algorithm for determining chunk size significantly
* preserve chunk size for the whole propagation, not just per upload
* move options to SyncOptions to avoid depending on ConfigFile
  in the propagator
* move chunk-size adjustment to after a chunk finishes, not when
  a new chunk starts
2017-03-28 11:32:10 +02:00
Piotr M
88e0f97798 dynamic chunking prototype 2017-03-27 13:43:39 +02:00
Jürgen Weigert
e2cda2dc65 Update CMakeLists.txt
remove doc-man target in doc/CMakeLists.txt https://github.com/owncloud/client/issues/2153
2017-03-24 18:31:29 +01:00
ajasja
090d02a65f Documented the usage of environment variables.
In particular the `OWNCLOUD_CHUNK_SIZE` as requested per #2449.
I looked through the code and it seems the env vars override the conf file, but I'm not 100 % sure.
The `OWNCLOUD_CRITICAL_FREE_SPACE_BYTES` and `OWNCLOUD_FREE_SPACE_BYTES` are now mentioned in two places.
2017-03-24 12:26:46 +01:00
Christian Kamm
a0e88477c1 ShareDialog: Make "can edit" partially checked sometimes #5642
Previously the check box was checked if *any* of its sub-permissions
were granted. This can hide the fact that only a limited subset of them
are actually granted.

The new behavior is to display as "partially checked" if only some
of the sub-permissions are available. Clicking the check box itself
still toggles between granting all or none of them.
2017-03-24 09:52:01 +01:00
Markus Goetz
da45d99b8f Update README.md
Fix Jenkins badges
2017-03-23 18:18:36 +01:00
Christian Kamm
f67989afea Wizards: Never propose an existing folder for syncing #5597 2017-03-21 17:07:35 +01:00
Christian Kamm
14fef4a0d3 Wizard: Remove unused oldLocalFolder property 2017-03-21 17:07:35 +01:00
Olivier Goffart
d3439d5526 owncloudsetuppage.ui: Remove that file, it is unused 2017-03-21 16:38:13 +01:00
Olivier Goffart
4597201560 Merge remote-tracking branch 'origin/2.3'
Conflicts:
	src/libsync/owncloudpropagator.h
2017-03-16 14:35:08 +01:00
Olivier Goffart
574435687d Merge remote-tracking branch 'origin/2.3'
Conflicts:
	src/libsync/owncloudpropagator.cpp
2017-03-16 13:51:53 +01:00
Samuel Alfageme
fce194ce08 Using different window flags on the connection method dialog (#5614)
This is a possible fix for #3850, applying custom window flags (http://doc.qt.io/qt-5.8/qt.html#WindowType-enum) on the connection method dialog. These avoid resizing the dialog and displaying a maximize button on OS X and context help button on Windows.
2017-03-15 15:46:51 +01:00
Matthew Setter
5204524691 Merge pull request #5585 from owncloud/add-replace-sync-directory-to-faq
Add explanation of how to replace local sync folder to FAQ
2017-03-10 09:11:38 +01:00
Matthew Setter
9af7e8cff0 Revise the point about starting a clean sync
On review, after feedback from @phil-davis, he's right that users need
to be fully briefed as to the implications of choosing a clean sync —
especially when they have a large amount of data in their account.
2017-03-10 08:35:55 +01:00
Klaas Freitag
5e33898a08 Avatar: Use QImage instead of QPixmap to avoid dep on QApplication.
That fixes the test suite.
2017-03-09 22:34:36 +01:00
Olivier Goffart
1a98b49f1b Fix TestSyncEngine::testDirDownloadWithError
On master, the scheduling is different and the tasks abort in another
order
2017-03-09 10:35:58 +01:00
Olivier Goffart
0e8f0481d4 Merge remote-tracking branch 'origin/2.3'
Conflicts:
	src/libsync/owncloudpropagator.cpp
2017-03-09 09:54:14 +01:00
Matthew Setter
6580af65c1 Add explanation of how to replace local sync folder to FAQ
This fixes owncloud/documentation/issues/2923.
2017-03-07 15:41:24 +01:00
Christian Kamm
cdf16dd905 Remove unreachable code #5582 2017-03-07 13:23:47 +01:00
Olivier Goffart
d30ed7fb8a VERSION: master branch is 2.4 2017-03-03 11:00:33 +01:00
Olivier Goffart
13df7fcee0 Merge branch '2.3'
Conflicts:
	src/libsync/owncloudpropagator.cpp
2017-03-03 10:57:23 +01:00
Matthew Setter
6e4ecd11a1 Update client version from 2.2 to 2.3 (#5568)
As the latest version of 2.3, the version information needs to be
updated as well.
2017-03-01 13:26:49 +01:00
Jocelyn Turcotte
793a994ce6 Don't abort propagation job abortions synchronously from finished
This leads to crashes since we changed the connection to the parent
jobs not to be queued anymore.
We don't really need to bubble up the finished state through
parents in that case, and it would also mean that we'd recurse
all the way through leaves as we go up to each parent. So just call
abort directly on the OwncloudPropagator and make sure the abortion
call is posted to the event loop.
2017-02-23 17:54:33 +01:00
Jocelyn Turcotte
19bf5e2ff1 Reduce the connection data used by PropagateDirectory objects
Avoid using connections to report up the job tree for signals
that we can directly communicate to the OwncloudPropagator.
This slightly reduces the memory usage and avoid passing those calls
through the whole parent chain.
2017-02-23 17:54:33 +01:00
Jocelyn Turcotte
16ad3d5c88 Create PropagateItemJobs only before starting them 2017-02-23 17:54:33 +01:00
Jocelyn Turcotte
ff2d98596f Split running jobs into a separate vector 2017-02-23 17:54:33 +01:00
Jocelyn Turcotte
072698d606 Split the subjob logic out of PropagateDirectory 2017-02-23 17:54:33 +01:00
Jocelyn Turcotte
0b098045f1 Replace WaitForFinishedInParentDirectory with WaitForFinished for directory moves
In preparation for the PropagateDirectory refactoring, simplify things
by removing WaitForFinishedInParentDirectory, which is currently
implemented as a one-level check.

This value is important for directory items, but is however never
used since a directory CSYNC_INSTRUCTION_RENAME item will always be in
PropagateDirectory::_firstJob, which will have to pass through its own
PropagateDirectory job's parallelism() before reaching the parent's
_subJobs optimization.
Since PropagateDirectory::parallelism can only return WaitForFinished
or FullParallelism, that value is lost. So this commit doesn't
change the behavior for directories, and allow file renames to be
scheduled in parallel across directories (which isn't a problem).
2017-02-23 17:54:33 +01:00
Jocelyn Turcotte
ddb6b3b262 Fix TestSyncEngine::abortAfterFailedMkdir (again)
It could be possible that _firstJob is marked as finished if
aborted before its parent PropagateDirectory was marked as finished,
allowing a posted scheduleNextJob call to schedule the child job
in-between.
2017-02-23 17:54:33 +01:00
Matthew Setter
7f2470f1f6 Merge pull request #5549 from owncloud/fix-documentation-build-process
Fix documentation build process
2017-02-21 13:52:45 +01:00
Matthew Setter
488b964c52 Merge branch 'master' into fix-documentation-build-process 2017-02-21 12:07:57 +01:00
Matthew Setter
b4d3f696bf Re-add the Makefile for controlling the build process
I'm not sure, why the file was removed, it was there in 2013, but it was
removed. This commit adds it back so that the build process can be
automated in a UNIX environment.
2017-02-21 11:58:15 +01:00
Matthew Setter
9cc4d363b2 Fix the Sphinx-doc build configuration
I'm not sure what the configuration/setup has been like to date. But as
it stood, it didn't build successfully. Given that, I've created a copy
of doc/conf.py, included in this commit, from the default doc/conf.py.in
and set the appropriate variables as necessary.

NOTE: The build didn't work when the version, release, and latex_logo
values weren't set, either directly or with interpolatable values.
2017-02-21 11:49:23 +01:00
Matthew Setter
b646caffd0 Merge pull request #5547 from owncloud/update-docs-build-configuration
Create a build configuration file
2017-02-21 09:37:01 +01:00
Matthew Setter
b9bc3e36b8 Merge pull request #5545 from owncloud/grammar-updates
Fix grammar and spelling errors in the documentation
2017-02-21 09:28:55 +01:00
Matthew Setter
24aaf7a034 Create a build configuration file
This is no different from the default file, conf.py.in, except for the
specification of the logo file.
2017-02-20 11:04:01 +01:00
Matthew Setter
80f2e40e67 Fixed grammar and spelling errors in the documentation 2017-02-20 10:52:22 +01:00
Klaas Freitag
e95b73dfac Avatar: Set a circle mask around the avatar image.
The server displays the avatar cut into a circle, and so we do.
2017-01-23 21:36:18 +01:00
Klaas Freitag
c00e3e8c0a ConnectionValidator: Set a 20 second timeout for Avatar request. 2017-01-23 21:35:12 +01:00
Klaas Freitag
2a12610a46 Update ASCII-Art describing the connection check flow.
Added Avatar fetching
2017-01-23 21:34:34 +01:00
Klaas Freitag
d466a05915 SettingsDialog: Display the user avatar as action icon if available.
The avatar image is fetched from the server async, thus connect a signal
from the account if the avatar changes.

Server feature https://github.com/owncloud/core/pull/26872 is needed.
2017-01-22 13:58:36 +01:00
Klaas Freitag
e05d6bfcdc Make the Account store the avatar pixmap.
The avatar pixmap is fetched from the server by the Connectionvalidator,
once it has validated the user name, it queries the avatar pixmap.

If the server does not have the avatar route, an empty pixmap is stored.
2017-01-22 13:55:08 +01:00
Klaas Freitag
b49dd02e3d New network job AvatarJob: GETs the account avatar from server. 2017-01-22 13:52:19 +01:00
839 changed files with 95502 additions and 65428 deletions

63
.clang-format Normal file
View File

@@ -0,0 +1,63 @@
# Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
#
# You may use this file under the terms of the 3-clause BSD license.
# See the file LICENSE from this package for details.
# This is the clang-format configuration style to be used by Qt,
# based on the rules from https://wiki.qt.io/Qt_Coding_Style and
# https://wiki.qt.io/Coding_Conventions
---
# Webkit style was loosely based on the Qt style
BasedOnStyle: WebKit
Standard: Cpp11
ColumnLimit: 0
# Disable reflow of qdoc comments: indentation rules are different.
# Translation comments are also excluded
CommentPragmas: "^!|^:"
# We want a space between the type and the star for pointer types
PointerBindsToType: false
# We want to break before the operators, but not before a '='
BreakBeforeBinaryOperators: NonAssignment
# Braces are usually attached, but not after functions or classes declaration
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: true
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
# The coding style does not specify the following, but this is what gives
# results closest to the existing code.
AlignAfterOpenBracket: DontAlign
AlwaysBreakTemplateDeclarations: true
# Ideally we should also allow less short function in a single line, but
# clang-format does not handle that
AllowShortFunctionsOnASingleLine: Inline
# The coding style specifies some include order categories, but also tells to
# separate categories with an empty line. It does not specify the order within
# the categories. Since the SortInclude feature of clang-format does not
# re-order includes separated by empty lines, the feature is not used.
SortIncludes: false
# macros for which the opening brace stays attached
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ]
# Allow two empty lines for structuring
MaxEmptyLinesToKeep: 2
KeepEmptyLinesAtTheStartOfBlocks: false

97
.drone.yml Normal file
View File

@@ -0,0 +1,97 @@
clone:
git:
image: plugins/git
depth: 1
pipeline:
qt-5.7:
image: nextcloudci/client-5.7:client-5.7-2
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt57/bin/qt57-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt57/bin/qt57-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 ../ &&
make"
when:
matrix:
TESTS: qt-5.7
qt-5.8:
image: nextcloudci/client-5.8:client-5.8-2
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt58/bin/qt58-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt58/bin/qt58-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 ../ &&
make"
when:
matrix:
TESTS: qt-5.8
qt-5.9:
image: nextcloudci/client-5.9:client-5.9-3
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt59/bin/qt59-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.8.0 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt59/bin/qt59-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 ../ &&
make"
when:
matrix:
TESTS: qt-5.9
AppImage-5.9:
image: nextcloudci/client-appimage-ci:client-appimage-ci-8
commands:
- /bin/bash -c "./admin/linux/build-appimage.sh"
when:
matrix:
BUILD: AppImage
matrix:
include:
- TESTS: qt-5.7
- TESTS: qt-5.8
- TESTS: qt-5.9
- BUILD: AppImage
branches: [ master, 2.* ]

1
.git-blame-ignore-revs Normal file
View File

@@ -0,0 +1 @@
c8d0f788e00bdae125a26d9159ce9efdd6325cd2 # Initial application of clang-format

6
.gitmodules vendored
View File

@@ -1,6 +1,3 @@
[submodule "doc/ocdoc"]
path = doc/ocdoc
url = https://github.com/owncloud/documentation
[submodule "src/3rdparty/qtmacgoodies"]
path = src/3rdparty/qtmacgoodies
url = https://github.com/guruz/qtmacgoodies.git
@@ -10,6 +7,3 @@
[submodule "src/3rdparty/libcrashreporter-qt"]
path = src/3rdparty/libcrashreporter-qt
url = git://github.com/dschmidt/libcrashreporter-qt.git
[submodule "src/3rdparty/qtkeychain"]
path = src/3rdparty/qtkeychain
url = https://github.com/frankosterfeld/qtkeychain.git

View File

@@ -1,37 +1,38 @@
os: linux
dist: trusty
sudo: required
language: cpp
language: generic
services:
- docker
- docker
branches:
only:
- coverity_scan
env:
matrix:
- BUILD_TYPE=debian
before_install:
- sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Ubuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud-client.list"
- sudo sh -c "echo 'deb-src http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Ubuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud-client.list"
- wget http://download.opensuse.org/repositories/isv:ownCloud:desktop/Ubuntu_14.04/Release.key
- sudo apt-key add - < Release.key
- sudo apt-get update
- sudo apt-get -y build-dep owncloud-client
- checkout=$(git show-ref --head --hash head)
- cd ../
- wget https://scan.coverity.com/download/linux-64 --post-data "token=$token&project=owncloud%2Fmirall" -O coverity_tool.tgz
- mkdir coverity
- tar -xvf coverity_tool.tgz -C coverity --strip-components=1
- export PATH=$PATH:$PWD/coverity/bin/
- cd $TRAVIS_BUILD_DIR
- admin/linux/travis-build.sh before_install
install:
- cd ../
- mkdir client-build
- cd client-build
- cmake -DCMAKE_BUILD_TYPE="Debug" $TRAVIS_BUILD_DIR
- cov-build --dir cov-int make
- tar czvf client.tgz cov-int
- curl --form token=$token --form email=lukas@statuscode.ch --form file=@$PWD/client.tgz --form version="$checkout" --form description="$checkout" https://scan.coverity.com/builds?project=owncloud%2Fmirall
- admin/linux/travis-build.sh install
# Hack to stop processing
script: true
before_script:
- admin/linux/travis-build.sh before_script
script:
- admin/linux/travis-build.sh script
after_success:
- admin/linux/travis-build.sh after_success
deploy:
- provider: script
skip_cleanup: true
script: admin/linux/travis-build.sh ppa_deploy
on:
condition: ($BUILD_TYPE = debian)
branches:
except:
- # Do not build tags that we create when we upload to GitHub Releases
- /^(?i:continuous)$/

View File

@@ -1,9 +1,5 @@
cmake_minimum_required(VERSION 2.6)
cmake_policy(VERSION 2.8.0)
if(POLICY CMP0020)
cmake_policy(SET CMP0020 NEW)
endif()
cmake_minimum_required(VERSION 3.2)
set(CMAKE_CXX_STANDARD 14)
project(client)
@@ -13,7 +9,7 @@ set(OEM_THEME_DIR "" CACHE STRING "Define directory containing a custom theme")
if ( EXISTS ${OEM_THEME_DIR}/OEM.cmake )
include ( ${OEM_THEME_DIR}/OEM.cmake )
else ()
include ( ${CMAKE_SOURCE_DIR}/OWNCLOUD.cmake )
include ( ${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake )
endif()
# need this logic to not mess with re/uninstallations via macosx.pkgproj
if(${APPLICATION_REV_DOMAIN} STREQUAL "com.owncloud.desktopclient")
@@ -22,16 +18,19 @@ else()
set(APPLICATION_REV_DOMAIN_INSTALLER ${APPLICATION_REV_DOMAIN})
endif()
if (NOT DEFINED APPLICATION_SHORTNAME)
set ( APPLICATION_SHORTNAME ${APPLICATION_NAME} )
endif()
# For usage in XML files we preprocess
string(REPLACE "&" "&amp;" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME}")
string(REPLACE "<" "&lt;" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME_XML_ESCAPED}")
string(REPLACE ">" "&gt;" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME_XML_ESCAPED}")
set(PACKAGE "${APPLICATION_SHORTNAME}-client")
if (NOT DEFINED LINUX_PACKAGE_SHORTNAME)
set(LINUX_PACKAGE_SHORTNAME "${APPLICATION_SHORTNAME}")
endif()
if (NOT DEFINED PACKAGE)
set(PACKAGE "${LINUX_PACKAGE_SHORTNAME}-client")
endif()
set( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
if(NOT CRASHREPORTER_EXECUTABLE)
@@ -41,7 +40,13 @@ endif()
include(Warnings)
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
# For config.h
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
# Allows includes based on src/ like #include "common/utility.h" or #include "csync/csync.h"
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}/src
)
# disable the crashreporter if libcrashreporter-qt is not available or we're building for ARM
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/libcrashreporter-qt/CMakeLists.txt")
@@ -52,14 +57,6 @@ if(NOT WITH_CRASHREPORTER)
message(STATUS "Build of crashreporter disabled.")
endif()
#####
## handle DBUS for Fdo notifications
if( UNIX AND NOT APPLE )
add_definitions( -DUSE_FDO_NOTIFICATIONS)
set(WITH_DBUS ON)
endif()
####
include(GNUInstallDirs)
include(DefineInstallationPaths)
include(GenerateExportHeader)
@@ -68,6 +65,12 @@ include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
add_definitions(
-DQT_USE_QSTRINGBUILDER
-DQT_MESSAGELOGCONTEXT #enable function name and line number in debug output
-DQT_DEPRECATED_WARNINGS
)
# if we cannot get it from git, directly try .tag (packages)
# this will work if the tar balls have been properly created
# via git-archive.
@@ -120,7 +123,22 @@ if(NO_MSG_HANDLER)
add_definitions(-DNO_MSG_HANDLER=1)
endif()
# this option creates only libocsync and libowncloudsync
# this option builds the shell integration
option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON)
# this option builds/installs the generic shell integration icons
option(BUILD_SHELL_INTEGRATION_ICONS "BUILD_SHELL_INTEGRATION_ICONS" ON)
# this options builds the dolphin integration plugin
option(BUILD_SHELL_INTEGRATION_DOLPHIN "BUILD_SHELL_INTEGRATION_DOLPHIN" ON)
# this options builds the nautilus (like) integration plugins
option(BUILD_SHELL_INTEGRATION_NAUTILUS "BUILD_SHELL_INTEGRATION_NAUTILUS" ON)
# this option builds the client
option(BUILD_CLIENT "BUILD_CLIENT" ON)
# this option creates only libocsync and libowncloudsync (NOTE: BUILD_CLIENT needs to be on)
option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF)
# When this option is enabled, 5xx errors are not added to the blacklist
@@ -153,56 +171,68 @@ if(APPLE)
set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" )
endif()
find_package(OpenSSL 1.0.0 REQUIRED)
if(BUILD_CLIENT)
if(APPLE)
find_package(Sparkle)
endif(APPLE)
if(APPLE)
find_package(Sparkle)
endif(APPLE)
if(UNIX)
find_package(INotify REQUIRED)
else()
find_package(INotify)
endif()
find_package(Sphinx)
find_package(PdfLatex)
find_package(SQLite3 3.8.0 REQUIRED)
# On some OS, we want to use our own, not the system sqlite
if (USE_OUR_OWN_SQLITE3)
include_directories(BEFORE ${SQLITE3_INCLUDE_DIR})
if (WIN32)
add_definitions(-DSQLITE_API=__declspec\(dllimport\))
if(UNIX)
find_package(INotify REQUIRED)
else()
find_package(INotify)
endif()
find_package(Sphinx)
find_package(PdfLatex)
find_package(OpenSSL REQUIRED VERSION 1.0)
find_package(ZLIB REQUIRED)
find_package(GLib2)
find_package(Gio)
find_package(Libcloudproviders)
endif()
find_package(ZLIB)
if (NOT DEFINED APPLICATION_ICON_NAME)
set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME})
endif()
configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
configure_file(test/test_journal.db "${CMAKE_BINARY_DIR}/test/test_journal.db" COPYONLY)
include(OwnCloudCPack.cmake)
include(NextcloudCPack.cmake)
add_definitions(-DUNICODE)
add_definitions(-D_UNICODE)
if( WIN32 )
add_definitions( -D__USE_MINGW_ANSI_STDIO=1 )
add_definitions( -DNOMINMAX )
# Get APIs from from Vista onwards.
add_definitions( -D_WIN32_WINNT=0x0600)
add_definitions( -DWINVER=0x0600)
endif( WIN32 )
if (APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
# Handle Translations, pick all client_* files from trans directory.
file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts)
set(TRANSLATIONS ${TRANS_FILES})
add_subdirectory(csync)
add_subdirectory(src)
if(NOT BUILD_LIBRARIES_ONLY)
add_subdirectory(shell_integration)
add_subdirectory(doc)
add_subdirectory(doc/dev)
add_subdirectory(admin)
endif(NOT BUILD_LIBRARIES_ONLY)
# Make sure we set this before recursing into child folders.
set(WITH_TESTING ${UNIT_TESTING})
if(BUILD_CLIENT)
add_subdirectory(src)
if(NOT BUILD_LIBRARIES_ONLY)
add_subdirectory(man)
add_subdirectory(doc)
add_subdirectory(doc/dev)
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin)
add_subdirectory(admin)
endif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin)
endif(NOT BUILD_LIBRARIES_ONLY)
endif()
if(BUILD_SHELL_INTEGRATION)
add_subdirectory(shell_integration)
endif()
if(UNIT_TESTING)
include(CTest)
@@ -210,10 +240,13 @@ if(UNIT_TESTING)
add_subdirectory(test)
endif(UNIT_TESTING)
configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
configure_file(version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
if(BUILD_OWNCLOUD_OSX_BUNDLE)
install(FILES sync-exclude.lst DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/)
configure_file(sync-exclude.lst bin/${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/sync-exclude.lst COPYONLY)
else()
elseif(BUILD_CLIENT)
install( FILES sync-exclude.lst DESTINATION ${SYSCONFDIR}/${APPLICATION_SHORTNAME} )
configure_file(sync-exclude.lst bin/sync-exclude.lst COPYONLY)
endif()

View File

@@ -1,20 +1,18 @@
## Submitting Desktop Client issues
If you have questions about how to use the ownCloud Desktop Client, please
direct these to the [mailing list][mailinglist] or our [forum][forum].
If you have questions about how to use the Nextcloud Desktop Client, please
visit our [support site][support] or our [forum][forum].
We are also available on [IRC][irc].
### Bug Reporting Guidelines
* __Important__: Report the issue using our [template][template], it includes all the
information we need to track down the issue.
* __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker
* This repository is *only* for issues within the ownCloud desktop client.
* __SECURITY__: Report any potential security bug by following our [security policy](https://nextcloud.com/security/) instead of filing an issue in our bug tracker
* This repository is *only* for issues within the Nextcloud desktop client.
Issues in other components should be reported in their own repositores:
- [ownCloud server](https://github.com/owncloud/core/issues)
- [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar,
Contacts...)
- [Android client](https://github.com/owncloud/android/issues)
- [iOS client](https://github.com/owncloud/ios-issues/issues)
- [Nextcloud server](https://github.com/nextcloud/server/issues)
- [Android client](https://github.com/nextcloud/android/issues)
- [iOS client](https://github.com/nextcloud/ios/issues)
* Search the existing issues first, it's likely that your issue was already
reported.
@@ -23,27 +21,20 @@ If your issue appears to be a bug, and hasn't been reported, open a new issue.
Help us to maximize the effort we can spend fixing issues and adding new
features, by not reporting duplicate issues.
[template]: https://raw.github.com/owncloud/client/master/issue_template.md
[mailinglist]: https://mail.kde.org/mailman/listinfo/owncloud
[forum]: http://forum.owncloud.org/
[irc]: http://webchat.freenode.net/?channels=owncloud&uio=d4
[template]: https://raw.githubusercontent.com/nextcloud/appstore/master/.github/issue_template.md
[support]: https://nextcloud.com/support/
[forum]: https://help.nextcloud.com/categories
[irc]: https://webchat.freenode.net/?channels=nextcloud
## Contributing to Source Code
Thanks for wanting to contribute source code to ownCloud. That's great!
Thanks for wanting to contribute source code to Nextcloud. That's great!
Before we're able to merge your code to ownCloud Desktop Client, you need to sign
our [Contributor Agreement][agreement].
You do not need to sign a Contributor Agreement, but we ask that you follow our
[Code of Conduct](https://nextcloud.com/code-of-conduct/).
Please read the [Desktop Client Manual][desktopman] and the [Developer
Manuals][devmanual] to get useful info like how to create your first
application or how to test the ownCloud code with phpunit.
[agreement]: http://owncloud.org/about/contributor-agreement/
[devmanual]: http://owncloud.org/dev
[desktopman]: http://doc.owncloud.org/desktop
Please read the [Contribution Guide](https://nextcloud.com/contribute/) to get
started.
## Translations
Please submit translations via [Transifex][transifex].
[transifex]: https://www.transifex.com/projects/p/owncloud/
Please submit translations via [Transifex](https://www.transifex.com/nextcloud/nextcloud/).

View File

@@ -14,7 +14,7 @@ set( OEM_THEME_DIR @OEM_THEME_DIR@ )
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
include ( ${OEM_THEME_DIR}/OEM.cmake )
else ()
include ( "${CMAKE_SOURCE_DIR}/OWNCLOUD.cmake" )
include ( "${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake" )
endif()
set( CRASHREPORTER_EXECUTABLE @CRASHREPORTER_EXECUTABLE@)

111
ChangeLog
View File

@@ -1,23 +1,124 @@
ChangeLog
=========
version 2.3.3 (2017-08-XX)
version 2.4.0 (2017-12-XX)
* If you're using 2.4.0 alpha1, please upgrade as previous alphas/rcs had an issue with hidden files and renames!
* OAuth2 authentication support by opening external browser (#5668)
* Shibboleth: Change to use OAuth2 if supported (#6198)
* Sharing: Add support for multiple public link shares (#5655)
* Sharing: Add option to copy/email private links (#5023, #5627)
* Sharing: Add option "show file listing" (#5837)
* Sharing: Show warning that links are public (#5747)
* Sharing: Sharing dialog redesign: multiple share links support (#5695)
* Sharing: Make "can edit" partially checked sometimes (#5642)
* Sharing: Trigger a sync for folder affected by a change of sharing (#6098)
* Wizard: Never propose an existing folder for syncing (#5597)
* Wizard: Don't show last page anymore, go to settings directly (#5726)
* Wizard: Handle url-shortener redirects (#5954)
* Wizard: Resolve url/ redirects only if url/status.php not found (#5954)
* Wizard: Add explanation text when server error is shown (#6157)
* Wizard: Update the window size on high dpi screen (#6156)
* Wizard: Don't report confusing error message (#6116)
* Gui: Display the user server avatar (#5482)
* Gui: Use display name of user, not internal name
* Server URL: Update configuration in case of permanent redirection (#5972)
* Gui: Allow to add multiple sync folder connection of the same folder (#6032)
* Tray Menu: More detailed status messages
* Tray Menu: Shibboleth: raise the browser when clicking on the tray (#6105)
* Activity: Link errors from the account tab, allow filtering by account/folder (#5861)
* Activity: Present conflicts more prominently (#5894)
* Activity: Allow sorting the columns in issues and protocol tabs (#6093, #6086)
* Selective Sync: Open sub folder context menu (#5596)
* Selective Sync: Skip excluded folders when reading db (#5772)
* Selective Sync: Remove local files of unselected folder despite other modified files (#5783)
* Excludes: Remove .htaccess form list of excluded files (#5701)
* Excludes: Hardcode desktop.ini
* Excludes: Allow escaping "#" (#6012)
* Excludes: Use faster matching via QRegularExpression (#6063)
* Discovery: Increase the MAX_DEPTH and show deep folders as ignored (#1067)
* Discovery: General speed improvements
* Downloads: Remove empty temporary if disk space full (#5746)
* Downloads: Read Content-MD5 header for object store setups
* Checksums: Add global disable environment variable (#5017)
* Quota: PropagateUpload: Model of remote quota, avoid some uploads (#5537)
* Create favorite also in folder wizard (#455)
* Windows: Use the application icon for the Windows 8 sidebar favorite (#2446, #5690)
* macOS: Finder sidebar icon (#296)
* Overlay Icons: Consider also the "shared by me" as shared (#4788)
* Overlay Icons: Update right after sharing (#6115)
* Overlay Icons: Fix different case paths not matching (#5257)
* Overlay Icons: Detect changes in the shared flag (#6098)
* Windows Overlay Icons: Potential hang fixes
* Linux Overlay Icons: fix branded nemo and caja shell integration (#5966)
* Credentials: Fix behavior for bad password (#5989)
* Credentials: Don't create empty client cert keychain entries (#5752)
* Credentials: Namespace windows cred keys (#6125)
* Credentials: Use per-account keychain entries (#5830, #6126)
* AccountSettings: Triggering log in re-ask about previously rejected certificates (#5819)
* owncloudcmd: Added bandwidth limit parameter (#5707)
* owncloudcmd: Fix timestamps, Fix --logdebug
* AccountSettings: Sync with clean discovery on Ctrl-F6 (#5666)
* Sync: Dynamic sizing of chunks in chunked uploads for improved big file upload performance (#5852)
* Sync: Introduce overall errors that are not tied to a file (#5746)
* Sync: Better messaging for 507 Insufficient Storage (#5537)
* Sync: Create conflicts by comparing the hash of files with identical mtime/size (#5589)
* Sync: Avoid downloads by comparing the hash of files with identical mtime/size (#6153)
* Sync: Upload conflict files if OWNCLOUD_UPLOAD_CONFLICT_FILES environment variable is set (#6038)
* Sync: Blacklist: Don't let errors become warnings (#5516)
* Sync: Check etag again after active sync (#4116)
* Sync: Rename handling fixes: duplicate file ids (#6096, #6212)
* Sync: Rename handling fixes: File size must be equal
* Sync: Rename handling: Fix duplicate files on abort/resume sync (#5949)
* Sync: Add capability for invalid filename regexes (#6092)
* SyncJournalDB: Fall back to DELETE journal mode if WAL mode does not seem to work (#5723)
* SyncJournalDB: Don't crash if the db file is readonly (#6050)
* SyncJournalDB: DB close error is not fatal
* Fix at least one memory leak
* Documentation improvements
* Logging improvements (With Qt logging categories) (#5671)
* Logging filtering per account (#5672)
* Crash fixes
* Test improvements
* Small UI layout fixes
* Performance improvements
* Maintenance Mode: Detect maintenance mode (#4485)
* Maintenance Mode: Add a 1 to 5 min reconnection delay (#5872)
* HTTP: Send a unique X-Request-ID with each request (#5853)
* HTTP: Support HTTP2 when built and running with Qt 5.9.x (Official packages still on Qt 5.6.x) (#5659)
* owncloudcmd: Don't start if connection or auth fails (#5692)
* csync: Switch build from C to C++ (#6033)
* csync: Refactor a lot to use common data structures to save memory and memory copying
* csync: Switch some data structures to Qt data structures
* csync: Switch to using upper layer SyncJournalDB (#6087)
* Switch 3rdparty/json usage to Qt5's QJson (#5710)
* OpenSSL: Don't require directly, only via Qt (#5833)
* Remove iconv dependency, use Qt for file system locale encoding/decoding (emoji filename support on macOS) (#5875)
* Compilation: Remove Qt 4 code (#6025, #5702, #5505)
* Harmonize source code style with clang-format (#5732)
* Switch over to Qt 5 function pointer signal/slot syntax (#6041)
* Compile with stack-smashing protection
* Updater: Rudimentary support for beta channel (#6048)
version 2.3.4 (2017-11-02)
* Checksums: Use addData function to avoid endless loop CPU load issues with Office files
* Packaging: Require ZLIB
version 2.3.3 (2017-08-29)
* Chunking NG: Don't use old chunking on new DAV endpoint (#5855)
* Selective Sync: Skip excluded folders when reading DB, don't let them show errors (#5772)
* Settings: Make window bigger so Qt version is always visible (#5760)
* Share links: Show warning that public link shares are public (#5786)
* Downloads: Re-trigger folder discovery on HTTP 404 (#5799)
* Notifications: Propagate "Dismiss" as DELETE to server (#5922)
* Overlay Icons: Fix potential hangs on Windows
* SyncJournalDB: Don't use ._ as filename pattern if that does not work because of SMB storage settings (#5844)
* SyncJournalDB: Log reason for sqlite3 opening errors
* Windows: Fix a memory leak in FileSystem::longWinPath
* Notifications: Proapgate "Dismiss" button action to server (#5922)
* Switch Linux build also to Qt 5.6.2 (#5470)
* Stopped maintaining Qt 4 buildability
version 2.3.2 (2017-05-08)
* Fix more crashes (thanks to everyone submitting to our crash reporter!)
* Improve compatibility with server 10.0 (#5691, OC-Total-Length)
* Improve compatibility with server 10.0 (#5691, X-OC-Total-Size)
* Share dialog: UI improvements, Bring to front on tray click
* owncloudcmd: Align process return value with sync return value (#3936)
* Fix disk free check on Windows when opening the local DB
@@ -129,7 +230,6 @@ version 2.2.0 (release 2016-05-12)
* Documentation Improvements, ie. about overlay icons
* Translation fixes
* Countless other bugfixes
* Sqlite Update to recent version
* Update of QtKeyChain to support Windows credential store
* Packaging of dolphin overlay icon module for bleeding edge distros
@@ -200,7 +300,6 @@ version 2.1 (release 2015-12-03)
* Fixed getting size for selective sync (#3986)
* Re-added close button in the settings window (#3713)
* Added abililty to handle storage limitations gracefully (#3736)
* Updated 3rdparty dependencies: sqlite version 3.9.1
* Organized patches to our base Qt version into admin/qt/patches
* Plus: A lot of unmentioned improvements and fixes

42
Jenkinsfile vendored
View File

@@ -1,42 +0,0 @@
#!groovy
node('CLIENT') {
stage 'Checkout'
checkout scm
sh '''git submodule update --init'''
stage 'Qt5'
sh '''rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE="Debug" -DUNIT_TESTING=1 -DWITH_TESTING=1 -DBUILD_WITH_QT4=OFF ..
make -j4
ctest --output-on-failure'''
stage 'Qt5 - clang'
sh '''rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUNIT_TESTING=1 -DWITH_TESTING=1 -DBUILD_WITH_QT4=OFF ..
make -j4
ctest --output-on-failure'''
stage 'Win32'
def win32 = docker.image('guruz/docker-owncloud-client-win32:latest')
win32.pull() // make sure we have the latest available from Docker Hub
win32.inside {
sh '''
rm -rf build-win32
mkdir build-win32
cd build-win32
../admin/win/download_runtimes.sh
cmake .. -DCMAKE_TOOLCHAIN_FILE=../admin/win/Toolchain-mingw32-openSUSE.cmake -DWITH_CRASHREPORTER=ON
make -j4
make package
ctest .
'''
}
}

22
NEXTCLOUD.cmake Normal file
View File

@@ -0,0 +1,22 @@
set( APPLICATION_NAME "Nextcloud-e2e" )
set( APPLICATION_SHORTNAME "Nextcloud-e2e" )
set( APPLICATION_EXECUTABLE "nextcloud" )
set( APPLICATION_DOMAIN "nextcloud.com" )
set( APPLICATION_VENDOR "Nextcloud GmbH" )
set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE string "URL for updater" )
set( APPLICATION_ICON_NAME "Nextcloud" )
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
set( THEME_CLASS "NextcloudTheme" )
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" )
set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image")
# set( THEME_INCLUDE "${OEM_THEME_DIR}/mytheme.h" )
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
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" )

View File

@@ -5,7 +5,7 @@ set( CPACK_PACKAGE_CONTACT "Dominik Schmidt <domme@tomahawk-player.org>" )
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
include ( "${OEM_THEME_DIR}/OEM.cmake" )
else ()
include ( "${CMAKE_SOURCE_DIR}/OWNCLOUD.cmake" )
include ( "${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake" )
endif()
include( VERSION.cmake )
@@ -48,7 +48,7 @@ if(WIN32)
set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md" ) # File used as a description of a project /path/to/project/ReadMe.txt
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "${APPLICATION_NAME} Syncing Client" ) # Description summary of a project
# CPACK_PACKAGE_EXECUTABLES List of pairs of executables and labels. Used by the NSIS generator to create Start Menu shortcuts. ccmake;CMake
set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_SHORTNAME} ) # Installation directory on the target system -> C:\Program Files\fellody
set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_SHORTNAME} ) # Installation directory on the target system -> C:\Program Files\${APPLICATION_SHORTNAME}
set( CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${APPLICATION_SHORTNAME} ) # Registry key used when installing this project CMake 2.5.0
set( CPACK_PACKAGE_NAME ${APPLICATION_NAME} ) # Package name, defaults to the project name
set( CPACK_PACKAGE_VENDOR "http://${APPLICATION_DOMAIN}" ) # Package vendor name

View File

@@ -1,18 +0,0 @@
set( APPLICATION_NAME "ownCloud" )
set( APPLICATION_EXECUTABLE "owncloud" )
set( APPLICATION_DOMAIN "owncloud.com" )
set( APPLICATION_VENDOR "ownCloud" )
set( APPLICATION_UPDATE_URL "https://updates.owncloud.com/client/" CACHE string "URL for updater" )
set( THEME_CLASS "ownCloudTheme" )
set( APPLICATION_REV_DOMAIN "com.owncloud.desktopclient" )
set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" )
set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image")
# set( THEME_INCLUDE "${OEM_THEME_DIR}/mytheme.h" )
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
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" )

View File

@@ -1,63 +1,37 @@
# ownCloud Desktop Client
| Job | State |
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| client-build-matrix | [![Build Status](https://ci.owncloud.org/job/client-build-matrix-linux/badge/icon)](https://ci.owncloud.org/job/client-build-matrix-linux/) |
| client-test-matrix-linux-no-build | [![Build Status](https://ci.owncloud.org/buildStatus/icon?job=client-test-matrix-linux-no-build)](https://ci.owncloud.org/job/client-test-matrix-linux-no-build/) |
| coverity_scan | [![Build Status](https://img.shields.io/coverity/scan/2482.svg)](https://scan.coverity.com/projects/owncloud-mirall)
# Nextcloud Desktop Client
## Introduction
The ownCloud Desktop Client is a tool to synchronize files from ownCloud Server
The Nextcloud Desktop Client is a tool to synchronize files from Nextcloud Server
with your computer.
## Download
### Binary packages
* Refer to the download page https://owncloud.org/install/#install-clients
* Refer to the [download page https://nextcloud.com/install/#install-clients](https://nextcloud.com/install/#install-clients)
### Source code
The ownCloud Desktop Client is developed in Git. Since Git makes it easy to
The Nextcloud Desktop Client is developed in Git. Since Git makes it easy to
fork and improve the source code and to adapt it to your need, many copies
can be found on the Internet, in particular on GitHub. However, the
authoritative repository maintained by the developers is located at
https://github.com/owncloud/client.
## Building the source code
[Building the Client](http://doc.owncloud.org/desktop/2.2/building.html)
in the ownCloud Desktop Client manual.
## Maintainers and Contributors
The maintainers of this repository are:
* Klaas Freitag <freitag@owncloud.com>
* Daniel Molkentin <danimo@owncloud.com>
* Markus Goetz <guruz@owncloud.com>
* Olivier Goffart <ogoffart@owncloud.com>
ownCloud Desktop Client is developed by the ownCloud community and receives
patches from a variety of authors.
https://github.com/nextcloud/client.
## Reporting issues and contributing
If you find any bugs or have any suggestion for improvement, please
file an issue at https://github.com/owncloud/client/issues. Do not
file an issue at https://github.com/nextcloud/client/issues. Do not
contact the authors directly by mail, as this increases the chance
of your report being lost.
If you created a patch, please submit a [Pull
Request](https://github.com/owncloud/client/pulls). For non-trivial
patches, we need you to sign the [Contributor
Agreement](https://owncloud.org/contribute/agreement) before
we can accept your patch.
Request](https://github.com/nextcloud/client/pulls).
If you want to contact us, e.g. before starting a more complex feature,
you can join us at
[#owncloud-client-dev](irc://irc.freenode.net/#owncloud-client-dev).
[#nextcloud-dev](irc://irc.freenode.net/#nextcloud-dev).
## License

View File

@@ -1,11 +1,11 @@
set( MIRALL_VERSION_MAJOR 2 )
set( MIRALL_VERSION_MINOR 3 )
set( MIRALL_VERSION_PATCH 3 )
set( MIRALL_VERSION_MINOR 5 )
set( MIRALL_VERSION_PATCH 0 )
set( MIRALL_VERSION_YEAR 2017 )
set( MIRALL_SOVERSION 0 )
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
set( MIRALL_VERSION_SUFFIX "") #e.g. beta1, beta2, rc1
set( MIRALL_VERSION_SUFFIX "git") #e.g. beta1, beta2, rc1
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
if( NOT DEFINED MIRALL_VERSION_BUILD )

22
admin/linux/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# This DockerFile is used to create the image used for Jenkins, the CI system (see Jenkinsfile)
# It is not meant to be used to create the production packages.
# Distro with Qt 5.6
FROM ubuntu:yakkety
RUN apt-get update -q && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends \
locales \
build-essential \
clang \
ninja-build \
cmake \
extra-cmake-modules \
libsqlite3-dev \
libssl-dev \
libcmocka-dev \
qt5-default \
qttools5-dev-tools \
libqt5webkit5-dev \
qt5keychain-dev \
kio-dev \
&& apt-get clean

98
admin/linux/build-appimage.sh Executable file
View File

@@ -0,0 +1,98 @@
#! /bin/bash
set -xe
mkdir /app
mkdir /build
#Set Qt-5.9
export QT_BASE_DIR=/opt/qt59
export QTDIR=$QT_BASE_DIR
export PATH=$QT_BASE_DIR/bin:$PATH
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
#set defaults
export SUFFIX=${DRONE_PULL_REQUEST:=master}
if [ $SUFFIX != "master" ]; then
SUFFIX="PR-$SUFFIX"
fi
#QtKeyChain 0.8.0
cd /build
git clone https://github.com/frankosterfeld/qtkeychain.git
cd qtkeychain
git checkout v0.8.0
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr ../
make -j4
make DESTDIR=/app install
#Build client
cd /build
mkdir build-client
cd build-client
cmake -D CMAKE_INSTALL_PREFIX=/usr \
-D NO_SHIBBOLETH=1 \
-D QTKEYCHAIN_LIBRARY=/app/usr/lib/x86_64-linux-gnu/libqt5keychain.so \
-D QTKEYCHAIN_INCLUDE_DIR=/app/usr/include/qt5keychain/ \
-DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \
-DMIRALL_VERSION_BUILD=$DRONE_BUILD_NUMBER \
$DRONE_WORKSPACE
make -j4
make DESTDIR=/app install
# Move stuff around
cd /app
mv ./usr/lib/x86_64-linux-gnu/nextcloud/* ./usr/lib/x86_64-linux-gnu/
mv ./usr/lib/x86_64-linux-gnu/* ./usr/lib/
rm -rf ./usr/lib/nextcloud
rm -rf ./usr/lib/cmake
rm -rf ./usr/include
rm -rf ./usr/mkspecs
rm -rf ./usr/lib/x86_64-linux-gnu/
# Don't bundle nextcloudcmd as we don't run it anyway
rm -rf ./usr/bin/nextcloudcmd
# Don't bundle the explorer extentions as we can't do anything with them in the AppImage
rm -rf ./usr/share/caja-python/
rm -rf ./usr/share/nautilus-python/
rm -rf ./usr/share/nemo-python/
# Move sync exlucde to right location
mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/
rm -rf ./etc
sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' usr/share/applications/nextcloud.desktop # Bug in desktop file?
cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME
# Because distros need to get their shit together
cp -P /lib/x86_64-linux-gnu/libssl.so* ./usr/lib/
cp -P /lib/x86_64-linux-gnu/libcrypto.so* ./usr/lib/
# Use linuxdeployqt to deploy
cd /build
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
chmod a+x linuxdeployqt*.AppImage
./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
rm ./linuxdeployqt-continuous-x86_64.AppImage
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/app/usr/lib/
./squashfs-root/AppRun /app/usr/share/applications/nextcloud.desktop -bundle-non-qt-libs
# Set origin
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0
# Build AppImage
./squashfs-root/AppRun /app/usr/share/applications/nextcloud.desktop -appimage
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
curl --upload-file $(readlink -f ./Nextcloud*.AppImage) https://transfer.sh/Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
echo
echo "Get the AppImage at the link above!"

8
admin/linux/clean_tarball.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
rm -vrf admin/
rm -vrf src/3rdparty/sqlite3 # FIXME: For CentOS6 we have to use our bundled sqlite
rm -vrf binary/
rm -vrf src/3rdparty/libcrashreporter-qt
rm -vrf shell_integration/windows
rm -vrf shell_integration/MacOSX

31
admin/linux/debian/README Normal file
View File

@@ -0,0 +1,31 @@
- .pbuilderrc:
COMPONENTS="main restricted universe multiverse"
OTHERMIRROR="deb [trusted=yes] file:///${HOME}/pbuilder/deps ./"
HOOKDIR="${HOME}/pbuilder/hook.d"
BINDMOUNTS="${HOME}/pbuilder/deps"
EXTRAPACKAGES="apt-utils"
- pbuilder/hook.d/D70setupdeps: hook to create a Packages file for the
packages in pbuilder/deps
- pbuilder-dist trusty create --override-config --othermirror "deb [trusted=yes] file:///${HOME}/pbuilder/deps ./"
The OTHERMIRROR setting in .pbuilderrc is overridden by pbuilder-dist!
- scripts:
config.sh: basic configuration variables
create_debdir.sh <tag> <version> <distribution>:
create the Debian-conformant source directory and .orig.tar.bz2
in the build area
build.sh <tag> <version> <distribution> <debuild options...>:
call create_debdir.sh and then debuild
pbuilder.sh <distribution>:
build the existing source package with pbuilder-dist.
pbuild.sh <distribution>:
build the source packages with build.sh and then call
pbuilder.sh

View File

@@ -0,0 +1,23 @@
nextcloud-client (2.3.3-1.0~artful1) artful; urgency=medium
* Debian build support for the forked client.
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
nextcloud-client (2.3.1-1.0~artful1) artful; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
nextcloud-client (2.3.0-1.0~artful1) artful; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
nextcloud-client (2.2.4-1.4~artful1) artful; urgency=medium
* The locale-specific icon names are correct too
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100

View File

@@ -0,0 +1,4 @@
usr/lib/*/libnextclouddolphinpluginhelper.so
usr/lib/*/qt5/plugins/kf5/overlayicon/nextclouddolphinoverlayplugin.so
usr/lib/*/qt5/plugins/nextclouddolphinactionplugin.so
usr/share/kservices5/nextclouddolphinactionplugin.desktop

View File

@@ -0,0 +1,48 @@
nextcloud-client (2.3.3-1.0~stable1) stable; urgency=medium
* Debian build support for the forked client.
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
nextcloud-client (2.3.1-1.0) stable; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
nextcloud-client (2.3.0-1.0) stable; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
nextcloud-client (2.2.4-1.4) stable; urgency=medium
* The locale-specific icon names are correct too
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
nextcloud-client (2.2.4-1.3) stable; urgency=medium
* Caja syncstate plugin is built.
* The syncstate plugin has application-specific name
-- István Váradi <ivaradi@varadiistvan.hu> Fri, 27 Jan 2017 19:34:18 +0100
nextcloud-client (2.2.4-1.2) stable; urgency=medium
* Fixed appname in the Nemo syncstate extension.
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 19 Jan 2017 16:46:50 +0100
nextcloud-client (2.2.4-1.1) stable; urgency=medium
* Added Nautilus and Nemo syncstate extensions.
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 17 Jan 2017 19:55:32 +0100
nextcloud-client (2.2.4-1.0) stable; urgency=medium
* Initial release.
-- István Váradi <ivaradi@varadiistvan.hu> Wed, 14 Dec 2016 20:07:46 +0100

View File

@@ -0,0 +1,80 @@
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,
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}, 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, ${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.

View File

@@ -0,0 +1,48 @@
nextcloud-client (2.3.3-1.0~yakkety1) yakkety; urgency=medium
* Debian build support for the forked client.
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
nextcloud-client (2.3.1-1.0~yakkety1) yakkety; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
nextcloud-client (2.3.0-1.0~yakkety1) yakkety; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
nextcloud-client (2.2.4-1.4~yakkety1) yakkety; urgency=medium
* The locale-specific icon names are correct too
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
nextcloud-client (2.2.4-1.3~yakkety1) yakkety; urgency=medium
* Caja syncstate plugin is built.
* The syncstate plugin has application-specific name
-- István Váradi <ivaradi@varadiistvan.hu> Fri, 27 Jan 2017 19:34:18 +0100
nextcloud-client (2.2.4-1.2~yakkety1) yakkety; urgency=medium
* Fixed appname in the Nemo syncstate extension.
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 19 Jan 2017 16:46:50 +0100
nextcloud-client (2.2.4-1.1~yakkety1) yakkety; urgency=medium
* Added Nautilus and Nemo syncstate extensions.
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 17 Jan 2017 19:55:32 +0100
nextcloud-client (2.2.4-1.0~yakkety1) yakkety; urgency=medium
* Initial release.
-- István Váradi <ivaradi@varadiistvan.hu> Wed, 14 Dec 2016 20:07:46 +0100

View File

@@ -0,0 +1,4 @@
usr/lib/*/libnextclouddolphinpluginhelper.so
usr/lib/*/qt5/plugins/kf5/overlayicon/nextclouddolphinoverlayplugin.so
usr/lib/*/qt5/plugins/nextclouddolphinactionplugin.so
usr/share/kservices5/nextclouddolphinactionplugin.desktop

View File

@@ -0,0 +1,23 @@
nextcloud-client (2.3.3-1.0~zesty1) zesty; urgency=medium
* Debian build support for the forked client.
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
nextcloud-client (2.3.1-1.0~zesty1) zesty; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
nextcloud-client (2.3.0-1.0~zesty1) zesty; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
nextcloud-client (2.2.4-1.4~zesty1) zesty; urgency=medium
* The locale-specific icon names are correct too
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100

View File

@@ -0,0 +1,4 @@
usr/lib/*/libnextclouddolphinpluginhelper.so
usr/lib/*/qt5/plugins/kf5/overlayicon/nextclouddolphinoverlayplugin.so
usr/lib/*/qt5/plugins/nextclouddolphinactionplugin.so
usr/share/kservices5/nextclouddolphinactionplugin.desktop

View File

@@ -0,0 +1 @@
fs.inotify.max_user_watches = 524288

View File

@@ -0,0 +1,48 @@
nextcloud-client (2.3.3-1.0~xenial1) xenial; urgency=medium
* Debian build support for the forked client.
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
nextcloud-client (2.3.1-1.0~xenial1) xenial; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
nextcloud-client (2.3.0-1.0~xenial1) xenial; urgency=medium
* New upstream version
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
nextcloud-client (2.2.4-1.4~xenial1) xenial; urgency=medium
* The locale-specific icon names are correct too
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
nextcloud-client (2.2.4-1.3~xenial1) xenial; urgency=medium
* Caja syncstate plugin is built.
* The syncstate plugin has application-specific name
-- István Váradi <ivaradi@varadiistvan.hu> Fri, 27 Jan 2017 19:34:18 +0100
nextcloud-client (2.2.4-1.2~xenial1) xenial; urgency=medium
* Fixed appname in the Nemo syncstate extension.
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 19 Jan 2017 16:46:50 +0100
nextcloud-client (2.2.4-1.1~xenial1) xenial; urgency=medium
* Added Nautilus and Nemo syncstate extensions.
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 17 Jan 2017 19:55:32 +0100
nextcloud-client (2.2.4-1.0~xenial1) xenial; urgency=medium
* Initial release.
-- István Váradi <ivaradi@varadiistvan.hu> Wed, 14 Dec 2016 20:07:46 +0100

View File

@@ -0,0 +1 @@
9

View File

@@ -0,0 +1,87 @@
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,
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}, 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

@@ -0,0 +1,3 @@
Files: *
Copyright: 2012-2015 ownCloud, inc.; Nuernberg, Germany., 2016 Nextcloud GmbH
License: GPL-2+

View File

@@ -0,0 +1,3 @@
usr/include
usr/lib/*/libnextcloudsync.so
usr/lib/*/nextcloud/libocsync.so

View File

@@ -0,0 +1,3 @@
etc
usr/lib/*/libnextcloudsync.so.?*
usr/lib/*/nextcloud/libocsync.so.?*

View File

@@ -0,0 +1 @@
usr/share/caja-python

View File

@@ -0,0 +1,4 @@
usr/lib/*/libnextclouddolphinpluginhelper.so
usr/lib/*/plugins/kf5/overlayicon/nextclouddolphinoverlayplugin.so
usr/lib/*/plugins/nextclouddolphinactionplugin.so
usr/share/kservices5/nextclouddolphinactionplugin.desktop

View File

@@ -0,0 +1,2 @@
nextcloud-client-dolphin: package-name-doesnt-match-sonames
nextcloud-client-dolphin: shlib-without-versioned-soname

View File

@@ -0,0 +1 @@
activate-noawait ldconfig

View File

@@ -0,0 +1 @@
usr/share/nextcloud/i18n

View File

@@ -0,0 +1 @@
usr/share/nautilus-python

View File

@@ -0,0 +1 @@
usr/share/nemo-python

View File

@@ -0,0 +1,4 @@
usr/bin
usr/share/applications
usr/share/icons
debian/101-sync-inotify.conf etc/sysctl.d

View File

@@ -0,0 +1,3 @@
nextcloud-client: binary-or-shlib-defines-rpath
nextcloud-client: binary-without-manpage
nextcloud-client: license-problem-convert-utf-code

12
admin/linux/debian/debian/rules Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
#export DH_VERBOSE = 1
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/cmake.mk
DEB_SHLIBDEPS_INCLUDE=$(CURDIR)/$(DEB_BUILDDIR)/csync/src
DEB_SRCDIR=.
DEB_CMAKE_EXTRA_FLAGS = -DCMAKE_SKIP_RPATH=OFF -DCMAKE_SKIP_BUILD_RPATH=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON

View File

@@ -0,0 +1 @@
3.0 (quilt)

View File

@@ -0,0 +1,9 @@
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/bootstrap/static/bootstrap.js line length is 22206 characters (>512)
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/bootstrap/static/jquery.js
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/bootstrap/static/jquery.js line length is 32412 characters (>512)
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/owncloud_com/static/bootstrap.js line length is 22206 characters (>512)
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/owncloud_com/static/jquery.js line length is 32412 characters (>512)
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/owncloud_release/static/bootstrap.js line length is 22206 characters (>512)
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/owncloud_release/static/jquery.js line length is 32412 characters (>512)
nextcloud-client source: source-is-missing client/doc/ocdoc/_shared_assets/themes/owncloud_org/static/js/jquery-1.11.0.min.js
nextcloud-client source: license-problem-convert-utf-code

Binary file not shown.

View File

@@ -0,0 +1,50 @@
#!/bin/bash
set -e -u
scriptdir=`dirname $0`
DEFAULT_DIST=yakkety
package="nextcloud-client"
version="$1"
comment="$2"
distver="${3:-}"
if test -z "${distver}"; then
distver="1"
fi
packagedir="${scriptdir}/../${package}"
now=`date -R`
tmpfile="/tmp/addchange.$$"
for subdir in "${packagedir}/debian"*; do
if test -f "${subdir}/changelog"; then
echo "${subdir}"
bname=`basename "${subdir}"`
dist=`echo "${bname}" | sed 's:debian\.\?::'`
if test -z "${dist}"; then
dist="${DEFAULT_DIST}"
fi
if test "${dist}" = "stable"; then
versuffix=""
else
versuffix="~${dist}${distver}"
fi
cat > "${tmpfile}" <<EOF
${package} (${version}${versuffix}) ${dist}; urgency=medium
* ${comment}
-- István Váradi <ivaradi@varadiistvan.hu> ${now}
EOF
cat "${subdir}/changelog" >> "${tmpfile}"
mv "${tmpfile}" "${subdir}/changelog"
fi
done
rm -f "${tmpfile}"

View File

@@ -0,0 +1,26 @@
# The directory where the sources are found
SOURCES="${HOME}/sources/nextcloud/client"
# The directory into which the packages should be genereated
BUILDAREA="${SOURCES}/build-area"
# The directory containing the Git repositories
GITROOTS="${SOURCES}/git"
# The pbuilder root directory
PBUILDER_ROOT="${HOME}/pbuilder"
# The dependencies directory for pbuilder
PBUILDER_DEPS="${PBUILDER_ROOT}/deps"
# The version of the nextcloud-client package
NEXTCLOUD_CLIENT_VERSION=2.4.0
# The FULL version of the nextcloud-client package
NEXTCLOUD_CLIENT_FULL_VERSION="${NEXTCLOUD_CLIENT_VERSION}-1.0~@DISTRIBUTION@1"
# The tag of the nextcloud-client package
NEXTCLOUD_CLIENT_TAG="v${NEXTCLOUD_CLIENT_VERSION}"
# The number of CPUs that can be used for paralel builds
NUMCPUS=4

View File

@@ -0,0 +1,80 @@
#!/bin/bash
set -e -u
scriptdir=`dirname $0`
scriptdir=`cd "${scriptdir}" && pwd`
. "${scriptdir}/config.sh"
package="nextcloud-client"
tag="${1}"
version="${2}"
distribution="${3}"
gitdir="${GITROOTS}/client"
packagedir="${BUILDAREA}/${package}_${version}"
origtarname="${package}_${version}.orig.tar.bz2"
origtar="${BUILDAREA}/${origtarname}"
archive_submodules()
{
local subdir="${1}"
local treeish="${2}"
local dir="${gitdir}"
local destdir="${packagedir}"
if test "${subdir}"; then
echo " copying submodule ${subdir}"
dir="${dir}/${subdir}"
destdir="${destdir}/${subdir}"
fi
mkdir -p "${destdir}"
(cd "${dir}"; git archive "${treeish}" | tar xf - -C "${destdir}")
(cd "${dir}"; git ls-tree "${treeish}" -r) | while read mode type object file; do
if test "${type}" = "commit"; then
sdir="${file}"
if test "${subdir}"; then
sdir="${subdir}/${sdir}"
fi
archive_submodules "${sdir}" "${object}"
fi
done
}
rm -rf "${packagedir}"
mkdir -p "${packagedir}"
echo "Updating submodules"
commit=`cd "${gitdir}"; git rev-parse HEAD`
(cd "${gitdir}"; git checkout "${tag}"; git submodule update --recursive --init)
echo "Copying sources"
archive_submodules "" "${tag}"
if test -f "${GITROOTS}/${origtarname}"; then
echo "Copying orig archive from ${GITROOTS}"
cp -a "${GITROOTS}/${origtarname}" "${BUILDAREA}"
else
echo "Creating orig archive"
tar cjf "${origtar}" -C "${BUILDAREA}" "${package}_${version}"
fi
echo "Restoring Git state"
(cd "${gitdir}"; git checkout "${commit}")
cd "${scriptdir}"
echo "Copying Debian files"
mkdir -p "${packagedir}/debian"
tar cf - -C "${scriptdir}/../debian" . | tar xf - -C "${packagedir}/debian"
if test -d "${scriptdir}/../debian.${distribution}"; then
tar cf - -C "${scriptdir}/../debian.${distribution}" . | tar xf - -C "${packagedir}/debian"
fi
"${scriptdir}/git2changelog.py" /tmp/git2changelog "${distribution}"
mv "${packagedir}/debian/changelog" "${packagedir}/debian/changelog.old"
cat /tmp/git2changelog "${packagedir}/debian/changelog.old" > "${packagedir}/debian/changelog"

View File

@@ -0,0 +1,8 @@
# Use the configuration below with appropriate changes,
# if you want to support a new client version using
# your own fork. In such a case the tags do not come
# accross to the main repo for a pull request, so
# some hacking is needed
[versionhack]
#commit = 30986d6
#tag = v2.3.3-beta

View File

@@ -0,0 +1,106 @@
#!//usr/bin/env python2.7
import subprocess
import re
import sys
import datetime
import os
import ConfigParser
distribution="yakkety"
versionTagRE = re.compile("^v([0-9]+((\.[0-9]+)+))(-(.+))?$")
def processVersionTag(tag):
m = versionTagRE.match(tag)
if m:
return (m.group(1), "release" if m.group(4) is None else "beta")
else:
return None
def collectEntries(baseCommit, baseVersion, kind):
scriptdir = os.path.dirname(__file__)
configPath = os.path.join(scriptdir, "git2changelog.cfg")
newVersionCommit = None
newVersionTag = None
newVersionOrigTag = None
if os.path.exists(configPath):
config = ConfigParser.SafeConfigParser()
config.read(configPath)
if config.has_section("versionhack"):
if config.has_option("versionhack", "commit") and \
config.has_option("versionhack", "tag"):
newVersionCommit = config.get("versionhack", "commit")
newVersionTag = config.get("versionhack", "tag")
entries = []
args = ["git", "log",
"--format=%h%x09%an%x09%ae%x09%aD%x09%ad%x09%s",
"--date=unix", "--author-date-order", "--reverse"]
try:
output = subprocess.check_output(args + [baseCommit + ".."])
except:
output = subprocess.check_output(args)
lastVersionTag = None
for line in output.splitlines():
(commit, name, email, date, revdate, subject) = line.split("\t")
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
if commit==newVersionCommit:
result = processVersionTag(newVersionTag)
if result:
newVersionOrigTag = lastVersionTag
(baseVersion, kind) = result
for tag in subprocess.check_output(["git", "tag",
"--points-at",
commit]).splitlines():
if tag!=newVersionOrigTag:
result = processVersionTag(tag)
if result:
lastVersionTag = tag
(baseVersion, kind) = result
entries.append((commit, name, email, date, revdate, subject,
baseVersion, kind))
entries.reverse()
return entries
def genChangeLogEntries(f, entries, distribution):
latestBaseVersion = None
latestKind = None
for (commit, name, email, date, revdate, subject, baseVersion, kind) in entries:
if latestBaseVersion is None:
latestBaseVersion = baseVersion
latestKind = kind
upstreamVersion = baseVersion + "-" + revdate
if distribution=="stable":
version = upstreamVersion
else:
version = upstreamVersion + "~" + distribution + "1"
print >> f, "nextcloud-client (%s) %s; urgency=medium" % (version, distribution)
print >> f
print >> f, " * " + subject
print >> f
print >> f, " -- %s <%s> %s" % (name, email, date)
print >> f
return (latestBaseVersion, latestKind)
if __name__ == "__main__":
distribution = sys.argv[2]
#entries = collectEntries("8aade24147b5313f8241a8b42331442b7f40eef9", "2.2.4", "release")
entries = collectEntries("f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1", "2.4.0", "release")
with open(sys.argv[1], "wt") as f:
(baseVersion, kind) = genChangeLogEntries(f, entries, distribution)
print baseVersion, kind

View File

@@ -0,0 +1,17 @@
#!/bin/bash
set -e -u
scriptdir=`dirname $0`
scriptdir=`cd "${scriptdir}" && pwd`
. "${scriptdir}/config.sh"
distribution="${1}"
shift
pushd /
"${scriptdir}/build.sh" "${distribution}" -S "$@"
"${scriptdir}/pbuilder.sh" "${distribution}" "$@"
popd

View File

@@ -0,0 +1,21 @@
#!/bin/bash
set -e -u
scriptdir=`dirname $0`
. "${scriptdir}/config.sh"
distribution="${1}"
shift
resultdir="${PBUILDER_ROOT}/${distribution}_result"
rm -f "${PBUILDER_DEPS}/"*.deb
echo -n > "${PBUILDER_DEPS}/Packages"
rm -f "${resultdir}/"*
source "${HOME}/.pbuilderrc"
dscversion=`echo ${NEXTCLOUD_CLIENT_FULL_VERSION} | sed "s:@DISTRIBUTION@:${distribution}:g"`
pbuilder-dist "${distribution}" build --othermirror "${OTHERMIRROR}" --debbuildopts "-j${NUMCPUS}" "$@" "${BUILDAREA}/nextcloud-client_${dscversion}.dsc"

Binary file not shown.

View File

@@ -0,0 +1,143 @@
#!/bin/bash
set -xe
shopt -s extglob
TRAVIS_BUILD_STEP="$1"
PPA=ppa:nextcloud-devs/client-alpha
PPA_BETA=ppa:nextcloud-devs/client-beta
OBS_PROJECT=home:ivaradi:alpha
OBS_PROJECT_BETA=home:ivaradi:beta
OBS_PACKAGE=nextcloud-client
if [ "$TRAVIS_BUILD_STEP" == "install" ]; then
sudo apt-get update -q
sudo apt-get install -y devscripts cdbs osc
if test "$encrypted_585e03da75ed_key" -a "$encrypted_585e03da75ed_iv"; then
openssl aes-256-cbc -K $encrypted_585e03da75ed_key -iv $encrypted_585e03da75ed_iv -in admin/linux/debian/signing-key.txt.enc -d | gpg --import
echo "DEBUILD_DPKG_BUILDPACKAGE_OPTS='-k7D14AA7B'" >> ~/.devscripts
openssl aes-256-cbc -K $encrypted_585e03da75ed_key -iv $encrypted_585e03da75ed_iv -in admin/linux/debian/oscrc.enc -out ~/.oscrc -d
touch ~/.has_ppa_keys
elif test "$encrypted_8da7a4416c7a_key" -a "$encrypted_8da7a4416c7a_iv"; then
openssl aes-256-cbc -K $encrypted_8da7a4416c7a_key -iv $encrypted_8da7a4416c7a_iv -in admin/linux/debian/oscrc.enc -out ~/.oscrc -d
PPA=ppa:ivaradi/nextcloud-client-exp
elif test "$encrypted_c5306c5c5331_key" -a "$encrypted_c5306c5c5331_key"; then
openssl aes-256-cbc -K $encrypted_c5306c5c5331_key -iv $encrypted_c5306c5c5331_iv -in admin/linux/debian/oscrc.enc -out ~/.oscrc -d
PPA=ppa:ivaradi/nextcloud-client-exp
elif test "$encrypted_5dafbd038603_key" -a "$encrypted_5dafbd038603_iv"; then
openssl aes-256-cbc -K $encrypted_5dafbd038603_key -iv $encrypted_5dafbd038603_iv -in admin/linux/debian/signing-key.txt.enc -d | gpg --import
echo "DEBUILD_DPKG_BUILDPACKAGE_OPTS='-k7D14AA7B'" >> ~/.devscripts
openssl aes-256-cbc -K $encrypted_5dafbd038603_key -iv $encrypted_5dafbd038603_iv -in admin/linux/debian/oscrc.enc -out ~/.oscrc -d
touch ~/.has_ppa_keys
fi
elif [ "$TRAVIS_BUILD_STEP" == "script" ]; then
read basever kind <<<$(admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog stable)
cd ..
echo "$kind" > kind
kind="release"
if test "$encrypted_5dafbd038603_key" -a "$encrypted_5dafbd038603_iv"; then
repo=ivaradi/nextcloud-client-exp
else
if test "$kind" = "beta"; then
repo=nextcloud-devs/client-beta
else
repo=nextcloud-devs/client-alpha
fi
fi
if test -d nextcloud.client; then
gitdir="nextcloud.client"
else
gitdir="client"
fi
origsourceopt=""
if ! wget http://ppa.launchpad.net/${repo}/ubuntu/pool/main/n/nextcloud-client/nextcloud-client_${basever}.orig.tar.bz2; then
mv ${gitdir} nextcloud-client_${basever}
tar cjf nextcloud-client_${basever}.orig.tar.bz2 --exclude .git nextcloud-client_${basever}
mv nextcloud-client_${basever} ${gitdir}
origsourceopt="-sa"
fi
for distribution in xenial zesty artful stable; do
rm -rf nextcloud-client_${basever}
cp -a ${gitdir} nextcloud-client_${basever}
cd nextcloud-client_${basever}
cp -a admin/linux/debian/debian .
if test -d admin/linux/debian/debian.${distribution}; then
tar cf - -C admin/linux/debian/debian.${distribution} . | tar xf - -C debian
fi
admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog ${distribution}
cp /tmp/tmpchangelog debian/changelog
if test -f admin/linux/debian/debian.${distribution}/changelog; then
cat admin/linux/debian/debian.${distribution}/changelog >> debian/changelog
else
cat admin/linux/debian/debian/changelog >> debian/changelog
fi
EDITOR=true dpkg-source --commit . local-changes
if test -f ~/.has_ppa_keys; then
debuild -S ${origsourceopt}
else
debuild -S ${origsourceopt} -us -uc
fi
cd ..
done
elif [ "$TRAVIS_BUILD_STEP" == "ppa_deploy" ]; then
cd ..
kind=`cat kind`
if test "$encrypted_5dafbd038603_key" -a "$encrypted_5dafbd038603_iv"; then
PPA=ppa:ivaradi/nextcloud-client-exp
fi
echo "kind: $kind"
if test "$kind" = "beta"; then
PPA=$PPA_BETA
OBS_PROJECT=$OBS_PROJECT_BETA
fi
OBS_SUBDIR="${OBS_PROJECT}/${OBS_PACKAGE}"
if test -f ~/.has_ppa_keys; then
for changes in nextcloud-client_*~+([a-z])1_source.changes; do
dput $PPA $changes > /dev/null
done
fi
mkdir osc
cd osc
osc co ${OBS_PROJECT} ${OBS_PACKAGE}
if test "$(ls ${OBS_SUBDIR})"; then
osc delete ${OBS_SUBDIR}/*
fi
cp ../nextcloud-client*.orig.tar.* ${OBS_SUBDIR}/
cp ../nextcloud-client_*[0-9.][0-9].dsc ${OBS_SUBDIR}/
cp ../nextcloud-client_*[0-9.][0-9].debian.tar* ${OBS_SUBDIR}/
cp ../nextcloud-client_*[0-9.][0-9]_source.changes ${OBS_SUBDIR}/
osc add ${OBS_SUBDIR}/*
cd ${OBS_SUBDIR}
osc commit -m "Travis update"
fi

19
admin/linux/travis-build.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
# Copyright (C) 2017 Marco Trevisan
set -xe
TRAVIS_BUILD_STEP="$1"
THIS_PATH=$(dirname $0)
if [ -z "$TRAVIS_BUILD_STEP" ]; then
echo "No travis build step defined"
exit 0
fi
if [ "$BUILD_TYPE" == "debian" ]; then
admin/linux/debian/travis-build.sh "$@"
else
echo 'No $BUILD_TYPE defined'
exit 1
fi

View File

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

View File

@@ -506,536 +506,6 @@
<key>UUID</key>
<string>7D7219B7-1897-48C3-8533-842BDEC46F71</string>
</dict>
<dict>
<key>PACKAGE_FILES</key>
<dict>
<key>DEFAULT_INSTALL_LOCATION</key>
<string>/</string>
<key>HIERARCHY</key>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>80</integer>
<key>PATH</key>
<string>Utilities</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>80</integer>
<key>PATH</key>
<string>Applications</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>509</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>80</integer>
<key>PATH</key>
<string>Application Support</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Documentation</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Filesystems</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Frameworks</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Input Methods</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Internet Plug-Ins</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>LaunchAgents</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>LaunchDaemons</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>PreferencePanes</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Preferences</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>80</integer>
<key>PATH</key>
<string>Printers</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>PrivilegedHelperTools</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>QuickLook</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>QuickTime</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Screen Savers</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Library/ScriptingAdditions/SyncStateFinder.osax/Contents</string>
<key>PATH_TYPE</key>
<integer>3</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>3</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>SyncStateFinder.osax</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>2</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>ScriptingAdditions</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>2</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Scripts</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Services</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Widgets</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Library</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Extensions</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Library</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>System</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<dict>
<key>CHILDREN</key>
<array>
<dict>
<key>CHILDREN</key>
<array/>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>Shared</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>1023</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>80</integer>
<key>PATH</key>
<string>Users</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
</array>
<key>GID</key>
<integer>0</integer>
<key>PATH</key>
<string>/</string>
<key>PATH_TYPE</key>
<integer>0</integer>
<key>PERMISSIONS</key>
<integer>493</integer>
<key>TYPE</key>
<integer>1</integer>
<key>UID</key>
<integer>0</integer>
</dict>
<key>PAYLOAD_TYPE</key>
<integer>0</integer>
<key>VERSION</key>
<integer>2</integer>
</dict>
<key>PACKAGE_SCRIPTS</key>
<dict>
<key>POSTINSTALL_PATH</key>
<dict/>
<key>PREINSTALL_PATH</key>
<dict/>
<key>RESOURCES</key>
<array/>
</dict>
<key>PACKAGE_SETTINGS</key>
<dict>
<key>AUTHENTICATION</key>
<integer>1</integer>
<key>CONCLUSION_ACTION</key>
<integer>0</integer>
<key>IDENTIFIER</key>
<string>com.ownCloud.finderPlugin</string>
<key>LOCATION</key>
<integer>0</integer>
<key>NAME</key>
<string>Legacy Finder Plugin (OS X 10.9 or older)</string>
<key>OVERWRITE_PERMISSIONS</key>
<false/>
<key>VERSION</key>
<string>@MIRALL_VERSION_FULL@</string>
</dict>
<key>TYPE</key>
<integer>0</integer>
<key>UUID</key>
<string>39F61FCD-6EAA-4F3A-81C6-25E3F667DFB5</string>
</dict>
</array>
<key>PROJECT</key>
<dict>
@@ -1103,49 +573,6 @@
<key>UUID</key>
<string>9647ADC0-BD53-4D7D-A561-73D383AACDE1</string>
</dict>
<dict>
<key>DESCRIPTION</key>
<array/>
<key>OPTIONS</key>
<dict>
<key>HIDDEN</key>
<false/>
<key>STATE</key>
<integer>1</integer>
</dict>
<key>PACKAGE_UUID</key>
<string>39F61FCD-6EAA-4F3A-81C6-25E3F667DFB5</string>
<key>REQUIREMENTS</key>
<array>
<dict>
<key>BEHAVIOR</key>
<integer>1</integer>
<key>DICTIONARY</key>
<dict>
<key>IC_REQUIREMENT_JAVASCRIPT_FUNCTION</key>
<string>olderOsx</string>
<key>IC_REQUIREMENT_JAVASCRIPT_PARAMETERS</key>
<array/>
</dict>
<key>IDENTIFIER</key>
<string>fr.whitebox.Packages.requirement.javascript</string>
<key>MESSAGE</key>
<array/>
<key>NAME</key>
<string>JavaScript</string>
<key>STATE</key>
<true/>
</dict>
</array>
<key>TITLE</key>
<array/>
<key>TOOLTIP</key>
<array/>
<key>TYPE</key>
<integer>0</integer>
<key>UUID</key>
<string>1D2C47E0-5FD3-4623-B934-1347C66782D0</string>
</dict>
</array>
<key>REMOVED</key>
<dict/>
@@ -1450,18 +877,6 @@
<string>@CMAKE_INSTALL_DIR@</string>
</dict>
</dict>
<key>SHARED_GLOBAL_DATA</key>
<dict>
<key>IC_REQUIREMENT_JAVASCRIPT_SHARED_SOURCE_CODE</key>
<string>
function olderOsx() {
if(system.compareVersions(system.version.ProductVersion, '10.10') == -1) {
return true;
}
return false;
}
</string>
</dict>
<key>TYPE</key>
<integer>0</integer>
<key>VERSION</key>

View File

@@ -3,7 +3,4 @@
# kill the old version. see issue #2044
killall @APPLICATION_EXECUTABLE@
# Unload the Finder plugin. see issue #2105
killall Finder
exit 0

View File

@@ -27,8 +27,8 @@ SET(QT_MKSPECS_DIR ${CMAKE_FIND_ROOT_PATH}/share/qt5/mkspecs)
SET(QT_QT_INCLUDE_DIR ${CMAKE_FIND_ROOT_PATH}/include)
# qt tools
SET(QT_QMAKE_EXECUTABLE ${MINGW_PREFIX}-qmake )
SET(QT_MOC_EXECUTABLE ${MINGW_PREFIX}-moc)
SET(QT_RCC_EXECUTABLE ${MINGW_PREFIX}-rcc)
SET(QT_UIC_EXECUTABLE ${MINGW_PREFIX}-uic)
SET(QT_LRELEASE_EXECUTABLE ${MINGW_PREFIX}-lrelease)
SET(QT_QMAKE_EXECUTABLE ${MINGW_PREFIX}-qmake-qt5)
SET(QT_MOC_EXECUTABLE ${MINGW_PREFIX}-moc-qt5)
SET(QT_RCC_EXECUTABLE ${MINGW_PREFIX}-rcc-qt5)
SET(Qt5Widgets_UIC_EXECUTABLE ${MINGW_PREFIX}-uic-qt5)
SET(QT_LRELEASE_EXECUTABLE ${MINGW_PREFIX}-lrelease-qt5)

View File

@@ -1,22 +1,20 @@
FROM opensuse:42.1
MAINTAINER Daniel Molkentin <danimo@owncloud.com>
ENV TERM ansi
ENV HOME /root
ENV REFRESHED_AT 20160421
ENV REFRESHED_AT 20170113
RUN zypper --non-interactive --gpg-auto-import-keys refresh
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/windows:/mingw/openSUSE_42.1/windows:mingw.repo
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/windows:/mingw/openSUSE_Leap_42.1/windows:mingw.repo
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/isv:ownCloud:toolchains:mingw:win32:2.3/openSUSE_Leap_42.1/isv:ownCloud:toolchains:mingw:win32:2.3.repo
RUN zypper --non-interactive --gpg-auto-import-keys install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
mingw32-headers mingw32-runtime site-config mingw32-libwebp \
mingw32-headers mingw32-runtime site-config mingw32-libwebp mingw32-libssp0 \
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5* \
mingw32-qt5keychain* mingw32-angleproject* \
mingw32-cross-nsis mingw32-libopenssl* \
mingw32-sqlite* kdewin-png2ico \
mingw32-sqlite* png2ico \
osslsigncode wget
# RPM depends on curl for installs from HTTP

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -3,7 +3,7 @@ StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Vis versjonsmerknader"
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Fant ${APPLICATION_EXECUTABLE}-prosess(er) som må stoppes.$\nVil du at installasjonsprogrammet skal stoppe dem for deg?"
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Terminerer ${APPLICATION_EXECUTABLE}-prosesser."
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Fant ikke prosess som skulle termineres!"
StrCpy $PageReinstall_NEW_Field_1 "En eldre versjon av ${APPLICATION_NAME} er installert på systemet ditt. Det anbefales at du avnistallerer den versjonen før installering av ny versjon. Velg hva du vil gjøre og klikk Neste for å fortsette."
StrCpy $PageReinstall_NEW_Field_1 "En eldre versjon av ${APPLICATION_NAME} er installert på systemet ditt. Det anbefales at du avinstallerer den versjonen før installering av ny versjon. Velg hva du vil gjøre og klikk Neste for å fortsette."
StrCpy $PageReinstall_NEW_Field_2 "Avinstaller før installering"
StrCpy $PageReinstall_NEW_Field_3 "Ikke avinstaller"
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Allerede installert"

View File

@@ -1,9 +1,9 @@
# Auto-generated - do not modify
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar las notas de la versión"
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "El/los proceso/s ${APPLICATION_EXECUTABLE} debe/n ser detenidos.$\n¿Quiere que el instalador lo haga por usted?"
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Deteniendo el/los proceso/s ${APPLICATION_EXECUTABLE}."
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "El/los proceso(s) ${APPLICATION_EXECUTABLE} debe(n) ser detenido(s).$\n¿Quiere que el instalador lo haga por usted?"
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Deteniendo el/los proceso(s) ${APPLICATION_EXECUTABLE}."
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "¡Proceso a finalizar no encontrado!"
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda de instalar la versión actual antes de instalar la nueva. Seleccione la operacion deseada y haga click en Siguiente para continuar."
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda desinstalar la versión actual antes de instalar la nueva. Seleccione la operacion deseada y haga click en Siguiente para continuar."
StrCpy $PageReinstall_NEW_Field_2 "Desinstalar antes de instalar"
StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ya está instalado"
@@ -17,13 +17,13 @@ StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Elija la opcion de mantenim
StrCpy $SEC_APPLICATION_DETAILS "Instalando ${APPLICATION_NAME} esenciales."
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integración para Windows Explorer"
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instalando la integración para Windows Explorer"
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Acceso directo al programa Menú de Inicio"
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Acceso directo al programa en Menú de Inicio"
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Añadiendo accesos directos para ${APPLICATION_NAME} en el Menú de Inicio."
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Acceso directo de Escritorio"
StrCpy $OPTION_SECTION_SC_DESKTOP_DetailPrint "Creando accesos directos de escritorio"
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atajo de accceso rápido"
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atajo de acceso rápido"
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "Creando un Acceso Directo al Lanzador Rápido"
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esencial."
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "${APPLICATION_NAME} esenciales."
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Acceso Directo de ${APPLICATION_NAME}"
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Acceso Directo de Escritorio para ${APPLICATION_NAME}"
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Lanzador Rápido de Accesos Director para ${APPLICATION_NAME}."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

45
appveyor.ini Normal file
View File

@@ -0,0 +1,45 @@
[General]
Branch = master
ShallowClone = True
Command=craft
# Variables defined here override the default value
# The variable names are casesensitive
[Variables]
#Values need to be overwritten to create a chache
UseCache = True
CreateCache = False
# Settings applicable for all Crafts matrices
# Settings are Category/key=value
# Category is case sensitive
[GeneralSettings]
General/EMERGE_PKGDSTDIR=${Variables:APPVEYOR_BUILD_FOLDER}/binaries
Paths/python = C:\Python36
Paths/python27 = C:\Python27
Paths/downloaddir = ${Variables:Root}\downloads
ShortPath/Enabled = False
ShortPath/EnableJunctions = True
ShortPath/JunctionDir = C:\CM-SP\
Packager/CacheDir = ${Variables:Root}\cache
Packager/UseCache = ${Variables:UseCache}
Packager/CreateCache = ${Variables:CreateCache}
; Packager/RepositoryUrl = https://files.kde.org/craft/
Packager/PackageType = PortablePackager
Packager/RepositoryUrl = http://ftp.acc.umu.se/mirror/kde.org/files/craft/master/
Compile/BuildType = RelWithDebInfo
ContinuousIntegration/Enabled = True
[BlueprintSettings]
# don't try to pip install on the ci
python-modules.ignored = True
libs/qt5.version = 5.9.3
craft/craft-core.version = master
[windows-msvc2017_64-cl]
General/ABI = windows-msvc2017_64-cl
[windows-msvc2017_32-cl]
General/ABI = windows-msvc2017_32-cl

50
appveyor.yml Normal file
View File

@@ -0,0 +1,50 @@
version: '{build}-{branch}'
branches:
only:
- master
clone_depth: 50
init:
- ps: |
function craft($target) {
& C:\Python36\python.exe "C:\CraftMaster\CraftMaster\CraftMaster.py" --config "$env:APPVEYOR_BUILD_FOLDER\appveyor.ini" --variables "APPVEYOR_BUILD_FOLDER=$env:APPVEYOR_BUILD_FOLDER" --target $target -c $args
if($LASTEXITCODE -ne 0) {exit $LASTEXITCODE}
}
install:
- ps: |
#use cmd to silence powershell behaviour for stderr
& cmd /C "git clone -q --depth=1 git://anongit.kde.org/craftmaster.git C:\CraftMaster\CraftMaster 2>&1"
craft $env:TARGET -i craft
craft $env:TARGET --install-deps owncloud-client
build_script:
- ps: |
craft $env:TARGET --no-cache --src-dir $env:APPVEYOR_BUILD_FOLDER owncloud-client
after_build:
- ps: |
craft $env:TARGET --src-dir $env:APPVEYOR_BUILD_FOLDER --package owncloud-client
on_finish:
- ps: |
Get-ChildItem $env:USERPROFILE\.craft\* | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
test_script:
- ps: |
craft $env:TARGET --src-dir $env:APPVEYOR_BUILD_FOLDER --test owncloud-client
environment:
matrix:
- TARGET: windows-msvc2017_32-cl
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- TARGET: windows-msvc2017_64-cl
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
artifacts:
- path: binaries/*

2
binary

Submodule binary updated: 1818b48380...3425fab2c6

View File

@@ -70,45 +70,64 @@ macro (KDE4_ADD_APP_ICON appsources pattern)
endif(PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE)
endif(WIN32)
if (APPLE)
# first convert image to a tiff using the Mac OS X "sips" utility,
# then use tiff2icns to convert to an icon
find_program(SIPS_EXECUTABLE NAMES sips)
find_program(TIFF2ICNS_EXECUTABLE NAMES tiff2icns)
if (SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE)
file(GLOB_RECURSE files "${pattern}")
# we can only test for the 128-icon like that - we don't use patterns anymore
foreach (it ${files})
if (it MATCHES ".*128.*" )
set (_icon ${it})
endif (it MATCHES ".*128.*")
endforeach (it)
file(GLOB_RECURSE files "${pattern}")
file(MAKE_DIRECTORY ${appsources}.iconset)
if (_icon)
# first, get the basename of our app icon
add_custom_command(OUTPUT ${_outfilename}.icns ${outfilename}.tiff
COMMAND ${SIPS_EXECUTABLE} -s format tiff ${_icon} --out ${outfilename}.tiff
COMMAND ${TIFF2ICNS_EXECUTABLE} ${outfilename}.tiff ${_outfilename}.icns
DEPENDS ${_icon}
)
# List from:
# https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40012302-CH7-SW4
foreach (it ${files})
if (it MATCHES ".*icon-16.*")
configure_file(${it} ${appsources}.iconset/icon_16x16.png COPYONLY)
elseif (it MATCHES ".*icon-32.*")
configure_file(${it} ${appsources}.iconset/icon_16x16@2x.png COPYONLY)
configure_file(${it} ${appsources}.iconset/icon_32x32.png COPYONLY)
elseif (it MATCHES ".*icon-64.*")
configure_file(${it} ${appsources}.iconset/icon_32x32@2x.png COPYONLY)
elseif (it MATCHES ".*icon-128.*")
configure_file(${it} ${appsources}.iconset/icon_128x128.png COPYONLY)
elseif (it MATCHES ".*icon-256.*")
configure_file(${it} ${appsources}.iconset/icon_128x128@2x.png COPYONLY)
configure_file(${it} ${appsources}.iconset/icon_256x256.png COPYONLY)
elseif (it MATCHES ".*icon-512.*")
configure_file(${it} ${appsources}.iconset/icon_256x256@2x.png COPYONLY)
configure_file(${it} ${appsources}.iconset/icon_512x512.png COPYONLY)
elseif (it MATCHES ".*icon-1024.*")
configure_file(${it} ${appsources}.iconset/icon_512x512@2x.png COPYONLY)
endif()
endforeach (it)
# This will register the icon into the bundle
set(MACOSX_BUNDLE_ICON_FILE ${appsources}.icns)
# Copy the sidebar icons in the main app bundle for the FinderSync extension to pick.
# https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Finder.html#//apple_ref/doc/uid/TP40014214-CH15-SW15
foreach (it ${files})
if (it MATCHES ".*sidebar-16.*")
configure_file(${it} ${appsources}.iconset/sidebar_16x16.png COPYONLY)
elseif (it MATCHES ".*sidebar-18.*")
configure_file(${it} ${appsources}.iconset/sidebar_18x18.png COPYONLY)
elseif (it MATCHES ".*sidebar-32.*")
configure_file(${it} ${appsources}.iconset/sidebar_16x16@2x.png COPYONLY)
configure_file(${it} ${appsources}.iconset/sidebar_32x32.png COPYONLY)
elseif (it MATCHES ".*sidebar-36.*")
configure_file(${it} ${appsources}.iconset/sidebar_18x18@2x.png COPYONLY)
elseif (it MATCHES ".*sidebar-64.*")
configure_file(${it} ${appsources}.iconset/sidebar_32x32@2x.png COPYONLY)
endif()
endforeach (it)
# Append the icns file to the sources list so it will be a dependency to the
# main target
list(APPEND ${appsources} ${_outfilename}.icns)
add_custom_command(OUTPUT ${_outfilename}.icns
COMMAND echo === Building bundle icns with iconset:
COMMAND ls -1 ${appsources}.iconset
COMMAND iconutil -c icns -o ${_outfilename}.icns ${appsources}.iconset
DEPENDS ${files}
)
# Install the icon into the Resources dir in the bundle
set_source_files_properties(${_outfilename}.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
# This will register the icon into the bundle
set(MACOSX_BUNDLE_ICON_FILE ${appsources}.icns)
else(_icon)
# TODO - try to scale a non-128 icon...? Try to convert an SVG on the fly?
message(STATUS "Unable to find an 128x128 icon that matches pattern ${pattern} for variable ${appsources} - application will not have an application icon!")
endif(_icon)
# Append the icns file to the sources list so it will be a dependency to the
# main target
list(APPEND ${appsources} ${_outfilename}.icns)
else(SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE)
message(STATUS "Unable to find the sips and tiff2icns utilities - application will not have an application icon!")
endif(SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE)
# Install the icon into the Resources dir in the bundle
set_source_files_properties(${_outfilename}.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
endif(APPLE)
endmacro (KDE4_ADD_APP_ICON)

View File

@@ -0,0 +1,332 @@
#.rst:
# ECMAddAppIcon
# -------------
#
# Add icons to executable files and packages.
#
# ::
#
# ecm_add_app_icon(<sources_var>
# ICONS <icon> [<icon> [...]]
# [SIDEBAR_ICONS <icon> [<icon> [...]] # Since 5.4x
# [OUTFILE_BASE <name>]) # Since 5.4x
# )
#
# The given icons, whose names must match the pattern::
#
# <size>-<other_text>.png
#
# will be added to the executable target whose sources are specified by
# ``<sources_var>`` on platforms that support it (Windows and Mac OS X).
# Other icon files are ignored but on Mac SVG files can be supported and
# it is thus possible to mix those with png files in a single macro call.
#
# ``<size>`` is a numeric pixel size (typically 16, 32, 48, 64, 128 or 256).
# ``<other_text>`` can be any other text. See the platform notes below for any
# recommendations about icon sizes.
#
# ``SIDEBAR_ICONS`` can be used to add Mac OS X sidebar
# icons to the generated iconset. They are used when a folder monitored by the
# application is dragged into Finder's sidebar. Since 5.4x.
#
# ``OUTFILE_BASE`` will be used as the basename for the icon file. If
# you specify it, the icon file will be called ``<OUTFILE_BASE>.icns`` on Mac OS X
# and ``<OUTFILE_BASE>.ico`` on Windows. If you don't specify it, it defaults
# to ``<sources_var>.<ext>``. Since 5.4x.
#
#
# Windows notes
# * Icons are compiled into the executable using a resource file.
# * Icons may not show up in Windows Explorer if the executable
# target does not have the ``WIN32_EXECUTABLE`` property set.
# * The tool png2ico is required. See :find-module:`FindPng2Ico`.
# * Supported sizes: 16, 32, 48, 64, 128.
#
# Mac OS X notes
# * The executable target must have the ``MACOSX_BUNDLE`` property set.
# * Icons are added to the bundle.
# * If the ksvg2icns tool from KIconThemes is available, .svg and .svgz
# files are accepted; the first that is converted successfully to .icns
# will provide the application icon. SVG files are ignored otherwise.
# * The tool iconutil (provided by Apple) is required for bitmap icons.
# * Supported sizes: 16, 32, 64, 128, 256 (and 512, 1024 after OS X 10.9).
# * At least a 128x128px (or an SVG) icon is required.
# * Larger sizes are automatically used to substitute for smaller sizes on
# "Retina" (high-resolution) displays. For example, a 32px icon, if
# provided, will be used as a 32px icon on standard-resolution displays,
# and as a 16px-equivalent icon (with an "@2x" tag) on high-resolution
# displays. That is why you should provide 64px and 1024px icons although
# they are not supported anymore directly. Instead they will be used as
# 32px@2x and 512px@2x. ksvg2icns handles this internally.
# * This function sets the ``MACOSX_BUNDLE_ICON_FILE`` variable to the name
# of the generated icns file, so that it will be used as the
# ``MACOSX_BUNDLE_ICON_FILE`` target property when you call
# ``add_executable``.
# * Sidebar icons should typically provided in 16, 32, 64, 128 and 256px.
#
# Since 1.7.0.
#=============================================================================
# Copyright 2014 Alex Merry <alex.merry@kde.org>
# Copyright 2014 Ralf Habacker <ralf.habacker@freenet.de>
# Copyright 2006-2009 Alexander Neundorf, <neundorf@kde.org>
# Copyright 2006, 2007, Laurent Montel, <montel@kde.org>
# Copyright 2007 Matthias Kretz <kretz@kde.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
include(CMakeParseArguments)
function(ecm_add_app_icon appsources)
set(options)
set(oneValueArgs OUTFILE_BASE)
set(multiValueArgs ICONS SIDEBAR_ICONS)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT ARG_ICONS)
message(FATAL_ERROR "No ICONS argument given to ecm_add_app_icon")
endif()
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unexpected arguments to ecm_add_app_icon: ${ARG_UNPARSED_ARGUMENTS}")
endif()
if(APPLE)
find_program(KSVG2ICNS NAMES ksvg2icns)
foreach(icon ${ARG_ICONS})
get_filename_component(icon_full ${icon} ABSOLUTE)
get_filename_component(icon_type ${icon_full} EXT)
# do we have ksvg2icns in the path and did we receive an svg (or compressed svg) icon?
if(KSVG2ICNS AND (${icon_type} STREQUAL ".svg" OR ${icon_type} STREQUAL ".svgz"))
# convert the svg icon to an icon resource
execute_process(COMMAND ${KSVG2ICNS} "${icon_full}"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} RESULT_VARIABLE KSVG2ICNS_ERROR)
if(${KSVG2ICNS_ERROR})
message(AUTHOR_WARNING "ksvg2icns could not generate an OS X application icon from ${icon}")
else()
# install the icns file we just created
get_filename_component(icon_name ${icon_full} NAME_WE)
set(MACOSX_BUNDLE_ICON_FILE ${icon_name}.icns PARENT_SCOPE)
set(${appsources} "${${appsources}};${CMAKE_CURRENT_BINARY_DIR}/${icon_name}.icns" PARENT_SCOPE)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${icon_name}.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
# we're done now
return()
endif()
endif()
endforeach()
endif()
_ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;32;48;64;128;256;512;1024")
if(ARG_SIDEBAR_ICONS)
_ecm_add_app_icon_categorize_icons("${ARG_SIDEBAR_ICONS}" "sidebar_icons" "16;18;32;36;64")
endif()
set(mac_icons
# Icons: https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40012302-CH7-SW4
${icons_at_16px}
${icons_at_32px}
${icons_at_64px}
${icons_at_128px}
${icons_at_256px}
${icons_at_512px}
${icons_at_1024px}
# Sidebar Icons: https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Finder.html#//apple_ref/doc/uid/TP40014214-CH15-SW15
${sidebar_icons_at_16px}
${sidebar_icons_at_18px}
${sidebar_icons_at_32px}
${sidebar_icons_at_36px}
${sidebar_icons_at_64px})
if (NOT icons_at_128px)
message(AUTHOR_WARNING "No 128px icon provided; this will not work on Mac OS X")
endif()
set(windows_icons ${icons_at_16px}
${icons_at_32px}
${icons_at_48px}
${icons_at_64px}
${icons_at_128px})
if (NOT windows_icons)
message(AUTHOR_WARNING "No icons suitable for use on Windows provided")
endif()
if (ARG_OUTFILE_BASE)
set (_outfilebasename "${ARG_OUTFILE_BASE}")
else()
set (_outfilebasename "${appsources}")
endif()
set (_outfilename "${CMAKE_CURRENT_BINARY_DIR}/${_outfilebasename}")
if (WIN32 AND windows_icons)
set(saved_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_FIND_MODULE_DIR})
find_package(Png2Ico)
set(CMAKE_MODULE_PATH "${saved_CMAKE_MODULE_PATH}")
if (Png2Ico_FOUND)
if (Png2Ico_HAS_RCFILE_ARGUMENT)
add_custom_command(
OUTPUT "${_outfilename}.rc" "${_outfilename}.ico"
COMMAND Png2Ico::Png2Ico
ARGS
--rcfile "${_outfilename}.rc"
"${_outfilename}.ico"
${windows_icons}
DEPENDS ${windows_icons}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
else()
add_custom_command(
OUTPUT "${_outfilename}.ico"
COMMAND Png2Ico::Png2Ico
ARGS "${_outfilename}.ico" ${windows_icons}
DEPENDS ${windows_icons}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
# this bit's a little hacky to make the dependency stuff work
file(WRITE "${_outfilename}.rc.in" "IDI_ICON1 ICON DISCARDABLE \"${_outfilename}.ico\"\n")
add_custom_command(
OUTPUT "${_outfilename}.rc"
COMMAND ${CMAKE_COMMAND}
ARGS -E copy "${_outfilename}.rc.in" "${_outfilename}.rc"
DEPENDS "${_outfilename}.ico"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
endif()
set(${appsources} "${${appsources}};${_outfilename}.rc" PARENT_SCOPE)
else()
message(WARNING "Unable to find the png2ico utility - application will not have an application icon!")
endif()
elseif (APPLE AND mac_icons)
# first generate .iconset directory structure, then convert to .icns format using the Mac OS X "iconutil" utility,
# to create retina compatible icon, you need png source files in pixel resolution 16x16, 32x32, 64x64, 128x128,
# 256x256, 512x512, 1024x1024
find_program(ICONUTIL_EXECUTABLE NAMES iconutil)
if (ICONUTIL_EXECUTABLE)
add_custom_command(
OUTPUT "${_outfilename}.iconset"
COMMAND ${CMAKE_COMMAND}
ARGS -E make_directory "${_outfilename}.iconset"
)
set(iconset_icons)
macro(copy_icon filename sizename type)
add_custom_command(
OUTPUT "${_outfilename}.iconset/${type}_${sizename}.png"
COMMAND ${CMAKE_COMMAND}
ARGS -E copy
"${filename}"
"${_outfilename}.iconset/${type}_${sizename}.png"
DEPENDS
"${_outfilename}.iconset"
"${filename}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
list(APPEND iconset_icons
"${_outfilename}.iconset/${type}_${sizename}.png")
endmacro()
foreach(size 16 32 128 256 512)
math(EXPR double_size "2 * ${size}")
foreach(file ${icons_at_${size}px})
copy_icon("${file}" "${size}x${size}" "icon")
endforeach()
foreach(file ${icons_at_${double_size}px})
copy_icon("${file}" "${size}x${size}@2x" "icon")
endforeach()
endforeach()
foreach(size 16 18 32)
math(EXPR double_size "2 * ${size}")
foreach(file ${sidebar_icons_at_${size}px})
copy_icon("${file}" "${size}x${size}" "sidebar")
endforeach()
foreach(file ${sidebar_icons_at_${double_size}px})
copy_icon("${file}" "${size}x${size}@2x" "sidebar")
endforeach()
endforeach()
# generate .icns icon file
add_custom_command(
OUTPUT "${_outfilename}.icns"
COMMAND ${ICONUTIL_EXECUTABLE}
ARGS
--convert icns
--output "${_outfilename}.icns"
"${_outfilename}.iconset"
DEPENDS "${iconset_icons}"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
# This will register the icon into the bundle
set(MACOSX_BUNDLE_ICON_FILE "${_outfilebasename}.icns" PARENT_SCOPE)
# Append the icns file to the sources list so it will be a dependency to the
# main target
set(${appsources} "${${appsources}};${_outfilename}.icns" PARENT_SCOPE)
# Install the icon into the Resources dir in the bundle
set_source_files_properties("${_outfilename}.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
else()
message(STATUS "Unable to find the iconutil utility - application will not have an application icon!")
endif()
endif()
endfunction()
macro(_ecm_add_app_icon_categorize_icons icons type known_sizes)
set(_${type}_known_sizes)
foreach(size ${known_sizes})
set(${type}_at_${size}px)
list(APPEND _${type}_known_sizes ${size})
endforeach()
foreach(icon ${icons})
get_filename_component(icon_full ${icon} ABSOLUTE)
if (NOT EXISTS "${icon_full}")
message(AUTHOR_WARNING "${icon_full} does not exist, ignoring")
else()
get_filename_component(icon_name ${icon} NAME)
string(REGEX MATCH "([0-9]+)\\-[^/]+\\.([a-z]+)$"
_dummy "${icon_name}")
set(size "${CMAKE_MATCH_1}")
set(ext "${CMAKE_MATCH_2}")
if (NOT (ext STREQUAL "svg" OR ext STREQUAL "svgz"))
if (NOT size)
message(AUTHOR_WARNING "${icon_full} is not named correctly for ecm_add_app_icon - ignoring")
elseif (NOT ext STREQUAL "png")
message(AUTHOR_WARNING "${icon_full} is not a png file - ignoring")
else()
list(FIND _${type}_known_sizes ${size} offset)
if (offset GREATER -1)
list(APPEND ${type}_at_${size}px "${icon_full}")
elseif()
message(STATUS "not found ${type}_at_${size}px ${icon_full}")
endif()
endif()
endif()
endif()
endforeach()
endmacro()

View File

@@ -0,0 +1,297 @@
#.rst:
# ECMFindModuleHelpers
# --------------------
#
# Helper macros for find modules: ecm_find_package_version_check(),
# ecm_find_package_parse_components() and
# ecm_find_package_handle_library_components().
#
# ::
#
# ecm_find_package_version_check(<name>)
#
# Prints warnings if the CMake version or the project's required CMake version
# is older than that required by extra-cmake-modules.
#
# ::
#
# ecm_find_package_parse_components(<name>
# RESULT_VAR <variable>
# KNOWN_COMPONENTS <component1> [<component2> [...]]
# [SKIP_DEPENDENCY_HANDLING])
#
# This macro will populate <variable> with a list of components found in
# <name>_FIND_COMPONENTS, after checking that all those components are in the
# list of KNOWN_COMPONENTS; if there are any unknown components, it will print
# an error or warning (depending on the value of <name>_FIND_REQUIRED) and call
# return().
#
# The order of components in <variable> is guaranteed to match the order they
# are listed in the KNOWN_COMPONENTS argument.
#
# If SKIP_DEPENDENCY_HANDLING is not set, for each component the variable
# <name>_<component>_component_deps will be checked for dependent components.
# If <component> is listed in <name>_FIND_COMPONENTS, then all its (transitive)
# dependencies will also be added to <variable>.
#
# ::
#
# ecm_find_package_handle_library_components(<name>
# COMPONENTS <component> [<component> [...]]
# [SKIP_DEPENDENCY_HANDLING])
# [SKIP_PKG_CONFIG])
#
# Creates an imported library target for each component. The operation of this
# macro depends on the presence of a number of CMake variables.
#
# The <name>_<component>_lib variable should contain the name of this library,
# and <name>_<component>_header variable should contain the name of a header
# file associated with it (whatever relative path is normally passed to
# '#include'). <name>_<component>_header_subdir variable can be used to specify
# which subdirectory of the include path the headers will be found in.
# ecm_find_package_components() will then search for the library
# and include directory (creating appropriate cache variables) and create an
# imported library target named <name>::<component>.
#
# Additional variables can be used to provide additional information:
#
# If SKIP_PKG_CONFIG, the <name>_<component>_pkg_config variable is set, and
# pkg-config is found, the pkg-config module given by
# <name>_<component>_pkg_config will be searched for and used to help locate the
# library and header file. It will also be used to set
# <name>_<component>_VERSION.
#
# Note that if version information is found via pkg-config,
# <name>_<component>_FIND_VERSION can be set to require a particular version
# for each component.
#
# If SKIP_DEPENDENCY_HANDLING is not set, the INTERFACE_LINK_LIBRARIES property
# of the imported target for <component> will be set to contain the imported
# targets for the components listed in <name>_<component>_component_deps.
# <component>_FOUND will also be set to false if any of the compoments in
# <name>_<component>_component_deps are not found. This requires the components
# in <name>_<component>_component_deps to be listed before <component> in the
# COMPONENTS argument.
#
# The following variables will be set:
#
# ``<name>_TARGETS``
# the imported targets
# ``<name>_LIBRARIES``
# the found libraries
# ``<name>_INCLUDE_DIRS``
# the combined required include directories for the components
# ``<name>_DEFINITIONS``
# the "other" CFLAGS provided by pkg-config, if any
# ``<name>_VERSION``
# the value of ``<name>_<component>_VERSION`` for the first component that
# has this variable set (note that components are searched for in the order
# they are passed to the macro), although if it is already set, it will not
# be altered
#
# Note that these variables are never cleared, so if
# ecm_find_package_handle_library_components() is called multiple times with
# different components (typically because of multiple find_package() calls) then
# ``<name>_TARGETS``, for example, will contain all the targets found in any
# call (although no duplicates).
#
# Since pre-1.0.0.
#=============================================================================
# Copyright 2014 Alex Merry <alex.merry@kde.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
include(CMakeParseArguments)
macro(ecm_find_package_version_check module_name)
if(CMAKE_VERSION VERSION_LESS 2.8.12)
message(FATAL_ERROR "CMake 2.8.12 is required by Find${module_name}.cmake")
endif()
if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use Find${module_name}.cmake")
endif()
endmacro()
macro(ecm_find_package_parse_components module_name)
set(ecm_fppc_options SKIP_DEPENDENCY_HANDLING)
set(ecm_fppc_oneValueArgs RESULT_VAR)
set(ecm_fppc_multiValueArgs KNOWN_COMPONENTS DEFAULT_COMPONENTS)
cmake_parse_arguments(ECM_FPPC "${ecm_fppc_options}" "${ecm_fppc_oneValueArgs}" "${ecm_fppc_multiValueArgs}" ${ARGN})
if(ECM_FPPC_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unexpected arguments to ecm_find_package_parse_components: ${ECM_FPPC_UNPARSED_ARGUMENTS}")
endif()
if(NOT ECM_FPPC_RESULT_VAR)
message(FATAL_ERROR "Missing RESULT_VAR argument to ecm_find_package_parse_components")
endif()
if(NOT ECM_FPPC_KNOWN_COMPONENTS)
message(FATAL_ERROR "Missing KNOWN_COMPONENTS argument to ecm_find_package_parse_components")
endif()
if(NOT ECM_FPPC_DEFAULT_COMPONENTS)
set(ECM_FPPC_DEFAULT_COMPONENTS ${ECM_FPPC_KNOWN_COMPONENTS})
endif()
if(${module_name}_FIND_COMPONENTS)
set(ecm_fppc_requestedComps ${${module_name}_FIND_COMPONENTS})
if(NOT ECM_FPPC_SKIP_DEPENDENCY_HANDLING)
# Make sure deps are included
foreach(ecm_fppc_comp ${ecm_fppc_requestedComps})
foreach(ecm_fppc_dep_comp ${${module_name}_${ecm_fppc_comp}_component_deps})
list(FIND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}" ecm_fppc_index)
if("${ecm_fppc_index}" STREQUAL "-1")
if(NOT ${module_name}_FIND_QUIETLY)
message(STATUS "${module_name}: ${ecm_fppc_comp} requires ${${module_name}_${ecm_fppc_comp}_component_deps}")
endif()
list(APPEND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}")
endif()
endforeach()
endforeach()
else()
message(STATUS "Skipping dependency handling for ${module_name}")
endif()
list(REMOVE_DUPLICATES ecm_fppc_requestedComps)
# This makes sure components are listed in the same order as
# KNOWN_COMPONENTS (potentially important for inter-dependencies)
set(${ECM_FPPC_RESULT_VAR})
foreach(ecm_fppc_comp ${ECM_FPPC_KNOWN_COMPONENTS})
list(FIND ecm_fppc_requestedComps "${ecm_fppc_comp}" ecm_fppc_index)
if(NOT "${ecm_fppc_index}" STREQUAL "-1")
list(APPEND ${ECM_FPPC_RESULT_VAR} "${ecm_fppc_comp}")
list(REMOVE_AT ecm_fppc_requestedComps ${ecm_fppc_index})
endif()
endforeach()
# if there are any left, they are unknown components
if(ecm_fppc_requestedComps)
set(ecm_fppc_msgType STATUS)
if(${module_name}_FIND_REQUIRED)
set(ecm_fppc_msgType FATAL_ERROR)
endif()
if(NOT ${module_name}_FIND_QUIETLY)
message(${ecm_fppc_msgType} "${module_name}: requested unknown components ${ecm_fppc_requestedComps}")
endif()
return()
endif()
else()
set(${ECM_FPPC_RESULT_VAR} ${ECM_FPPC_DEFAULT_COMPONENTS})
endif()
endmacro()
macro(ecm_find_package_handle_library_components module_name)
set(ecm_fpwc_options SKIP_PKG_CONFIG SKIP_DEPENDENCY_HANDLING)
set(ecm_fpwc_oneValueArgs)
set(ecm_fpwc_multiValueArgs COMPONENTS)
cmake_parse_arguments(ECM_FPWC "${ecm_fpwc_options}" "${ecm_fpwc_oneValueArgs}" "${ecm_fpwc_multiValueArgs}" ${ARGN})
if(ECM_FPWC_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unexpected arguments to ecm_find_package_handle_components: ${ECM_FPWC_UNPARSED_ARGUMENTS}")
endif()
if(NOT ECM_FPWC_COMPONENTS)
message(FATAL_ERROR "Missing COMPONENTS argument to ecm_find_package_handle_components")
endif()
include(FindPackageHandleStandardArgs)
find_package(PkgConfig)
foreach(ecm_fpwc_comp ${ECM_FPWC_COMPONENTS})
set(ecm_fpwc_dep_vars)
set(ecm_fpwc_dep_targets)
if(NOT SKIP_DEPENDENCY_HANDLING)
foreach(ecm_fpwc_dep ${${module_name}_${ecm_fpwc_comp}_component_deps})
list(APPEND ecm_fpwc_dep_vars "${module_name}_${ecm_fpwc_dep}_FOUND")
list(APPEND ecm_fpwc_dep_targets "${module_name}::${ecm_fpwc_dep}")
endforeach()
endif()
if(NOT ECM_FPWC_SKIP_PKG_CONFIG AND ${module_name}_${ecm_fpwc_comp}_pkg_config)
pkg_check_modules(PKG_${module_name}_${ecm_fpwc_comp} QUIET
${${module_name}_${ecm_fpwc_comp}_pkg_config})
endif()
find_path(${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
NAMES ${${module_name}_${ecm_fpwc_comp}_header}
HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_INCLUDE_DIRS}
PATH_SUFFIXES ${${module_name}_${ecm_fpwc_comp}_header_subdir}
)
find_library(${module_name}_${ecm_fpwc_comp}_LIBRARY
NAMES ${${module_name}_${ecm_fpwc_comp}_lib}
HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_LIBRARY_DIRS}
)
set(${module_name}_${ecm_fpwc_comp}_VERSION "${PKG_${module_name}_${ecm_fpwc_comp}_VERSION}")
if(NOT ${module_name}_VERSION)
set(${module_name}_VERSION ${${module_name}_${ecm_fpwc_comp}_VERSION})
endif()
find_package_handle_standard_args(${module_name}_${ecm_fpwc_comp}
FOUND_VAR
${module_name}_${ecm_fpwc_comp}_FOUND
REQUIRED_VARS
${module_name}_${ecm_fpwc_comp}_LIBRARY
${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
${ecm_fpwc_dep_vars}
VERSION_VAR
${module_name}_${ecm_fpwc_comp}_VERSION
)
mark_as_advanced(
${module_name}_${ecm_fpwc_comp}_LIBRARY
${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
)
if(${module_name}_${ecm_fpwc_comp}_FOUND)
list(APPEND ${module_name}_LIBRARIES
"${${module_name}_${ecm_fpwc_comp}_LIBRARY}")
list(APPEND ${module_name}_INCLUDE_DIRS
"${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}")
set(${module_name}_DEFINITIONS
${${module_name}_DEFINITIONS}
${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS})
if(NOT TARGET ${module_name}::${ecm_fpwc_comp})
add_library(${module_name}::${ecm_fpwc_comp} UNKNOWN IMPORTED)
set_target_properties(${module_name}::${ecm_fpwc_comp} PROPERTIES
IMPORTED_LOCATION "${${module_name}_${ecm_fpwc_comp}_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${ecm_fpwc_dep_targets}"
)
endif()
list(APPEND ${module_name}_TARGETS
"${module_name}::${ecm_fpwc_comp}")
endif()
endforeach()
if(${module_name}_LIBRARIES)
list(REMOVE_DUPLICATES ${module_name}_LIBRARIES)
endif()
if(${module_name}_INCLUDE_DIRS)
list(REMOVE_DUPLICATES ${module_name}_INCLUDE_DIRS)
endif()
if(${module_name}_DEFINITIONS)
list(REMOVE_DUPLICATES ${module_name}_DEFINITIONS)
endif()
if(${module_name}_TARGETS)
list(REMOVE_DUPLICATES ${module_name}_TARGETS)
endif()
endmacro()

View File

@@ -0,0 +1 @@
include(${CMAKE_CURRENT_LIST_DIR}/../modules/ECMFindModuleHelpers.cmake)

View File

@@ -0,0 +1,35 @@
# FindGLib2.cmake
# GLib2_FOUND - System has GLib2
# GLib2_INCLUDES - The GLib2 include directories
# GLib2_LIBRARIES - The libraries needed to use GLib2
# GLib2_DEFINITIONS - Compiler switches required for using GLib2
find_package(PkgConfig)
pkg_check_modules(GLib2 QUIET glib-2.0)
set(GLib2_DEFINITIONS ${GLib2_CFLAGS_OTHER})
find_path(GLib2_INCLUDE_DIR
NAMES glib.h glib-object.h
HINTS ${GLib2_INCLUDEDIR} ${GLib2_INCLUDE_DIRS}
PATH_SUFFIXES glib-2.0)
find_path(GLIBCONFIG_INCLUDE_DIR
NAMES glibconfig.h
HINTS ${LIBDIR} ${LIBRARY_DIRS} ${_GLib2_LIBRARY_DIR}
${GLib2_INCLUDEDIR} ${GLib2_INCLUDE_DIRS}
${CMAKE_EXTRA_INCLUDES} ${CMAKE_EXTRA_LIBRARIES}
PATH_SUFFIXES glib-2.0 glib-2.0/include)
list(APPEND GLib2_INCLUDE_DIR ${GLIBCONFIG_INCLUDE_DIR})
find_library(GLib2_LIBRARY
NAMES glib-2.0 libglib-2.0
HINTS ${GLib2_LIBDIR} ${GLib2_LIBRARY_DIRS})
set(GLib2_LIBRARIES ${GLib2_LIBRARY})
set(GLib2_INCLUDE_DIRS ${GLib2_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GLib2 DEFAULT_MSG
GLib2_LIBRARY GLib2_INCLUDE_DIR)
mark_as_advanced(GLib2_INCLUDE_DIR GLib2_LIBRARY)

View File

@@ -0,0 +1,61 @@
# - Try to find Gio
# Once done this will define
#
# GIO_FOUND - system has Gio
# GIO_INCLUDE_DIR - the Gio include directory
# GIO_LIBRARIES - the libraries needed to use Gio
# GIO_DEFINITIONS - Compiler switches required for using Gio
IF (GIO_INCLUDE_DIR AND GIO_LIBRARIES)
# in cache already
SET(Gio_FIND_QUIETLY TRUE)
ELSE (GIO_INCLUDE_DIR AND GIO_LIBRARIES)
SET(Gio_FIND_QUIETLY FALSE)
ENDIF (GIO_INCLUDE_DIR AND GIO_LIBRARIES)
IF (NOT WIN32)
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
FIND_PACKAGE(PkgConfig)
PKG_CHECK_MODULES(GIO gio-2.0)
#MESSAGE(STATUS "DEBUG: Gio include directory = ${GIO_INCLUDE_DIRS}")
#MESSAGE(STATUS "DEBUG: Gio link directory = ${GIO_LIBRARY_DIRS}")
#MESSAGE(STATUS "DEBUG: Gio CFlags = ${GIO_CFLAGS}")
SET(GIO_DEFINITIONS ${GIO_CFLAGS_OTHER})
ENDIF (NOT WIN32)
FIND_PATH(GIO_INCLUDE_DIR gio.h
PATHS
${GIO_INCLUDEDIR}
${GIO_INCLUDE_DIRS}
PATH_SUFFIXES glib-2.0/gio/
)
FIND_LIBRARY(_GioLibs NAMES gio-2.0 libgio-2.0
PATHS
${GIO_LIBDIR}
${GIO_LIBRARY_DIRS}
)
SET( GIO_LIBRARIES ${_GioLibs} )
SET( GIO_INCLUDE_DIRS ${GIO_INCLUDE_DIR} )
IF (GIO_INCLUDE_DIR AND GIO_LIBRARIES)
SET(GIO_FOUND TRUE)
ELSE (GIO_INCLUDE_DIR AND GIO_LIBRARIES)
SET(GIO_FOUND FALSE)
ENDIF (GIO_INCLUDE_DIR AND GIO_LIBRARIES)
IF (GIO_FOUND)
IF (NOT Gio_FIND_QUIETLY)
MESSAGE(STATUS "Found Gio libraries: ${GIO_LIBRARIES}")
MESSAGE(STATUS "Found Gio includes : ${GIO_INCLUDE_DIR}")
ENDIF (NOT Gio_FIND_QUIETLY)
ELSE (GIO_FOUND)
IF (Gio_FIND_REQUIRED)
MESSAGE(STATUS "Could NOT find Gio")
ENDIF(Gio_FIND_REQUIRED)
ENDIF (GIO_FOUND)
MARK_AS_ADVANCED(GIO_INCLUDE_DIR _GioLibs)

View File

@@ -1,82 +0,0 @@
# - Try to find Iconv
# Once done this will define
#
# ICONV_FOUND - system has Iconv
# ICONV_INCLUDE_DIRS - the Iconv include directory
# ICONV_LIBRARIES - Link these to use Iconv
# ICONV_DEFINITIONS - Compiler switches required for using Iconv
#
# Copyright (c) 2013 Andreas Schneider <asn@cryptomilk.org>
#
# Redistribution and use is allowed according to the terms of the New
# BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
include(CheckIncludeFile)
include(CheckFunctionExists)
include(CheckLibraryExists)
include(CheckPrototypeDefinition)
find_path(ICONV_INCLUDE_DIR
NAMES
iconv.h sys/iconv.h
)
set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR})
check_include_file(iconv.h HAVE_ICONV_H)
check_include_file(sys/iconv.h HAVE_SYS_ICONV_H)
set(CMAKE_REQUIRED_INCLUDES)
find_library(ICONV_LIBRARY
NAMES
iconv
libiconv
PATHS
)
if (ICONV_LIBRARY)
get_filename_component(_ICONV_NAME ${ICONV_LIBRARY} NAME)
get_filename_component(_ICONV_PATH ${ICONV_LIBRARY} PATH)
check_library_exists(${_ICONV_NAME} iconv ${_ICONV_PATH} HAVE_ICONV)
else()
check_function_exists(iconv HAVE_ICONV)
endif()
if (HAVE_ICONV_H OR HAVE_SYS_ICONV_H)
if (HAVE_ICONV_H)
set(_ICONV_PROTO_INCLUDE "iconv.h")
endif (HAVE_ICONV_H)
if (HAVE_SYS_ICONV_H)
set(_ICONV_PROTO_INCLUDE "sys/iconv.h")
endif (HAVE_SYS_ICONV_H)
set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR})
check_prototype_definition(iconv
"size_t iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)"
"-1"
${_ICONV_PROTO_INCLUDE}
HAVE_ICONV_CONST)
set(CMAKE_REQUIRED_INCLUDES)
endif (HAVE_ICONV_H OR HAVE_SYS_ICONV_H)
set(ICONV_INCLUDE_DIRS
${ICONV_INCLUDE_DIR}
)
if (ICONV_LIBRARY)
set(ICONV_LIBRARIES
${ICONV_LIBRARIES}
${ICONV_LIBRARY}
)
endif (ICONV_LIBRARY)
include(FindPackageHandleStandardArgs)
if (ICONV_LIBRARIES)
find_package_handle_standard_args(Iconv DEFAULT_MSG ICONV_LIBRARIES ICONV_INCLUDE_DIRS)
else()
find_package_handle_standard_args(Iconv DEFAULT_MSG ICONV_INCLUDE_DIRS)
endif()
# show the ICONV_INCLUDE_DIRS and ICONV_LIBRARIES variables only in the advanced view
mark_as_advanced(ICONV_INCLUDE_DIRS ICONV_LIBRARIES)

View File

@@ -0,0 +1,22 @@
# FindLibcloudproviders.cmake
find_path(LIBCLOUDPROVIDERS_INCLUDE_DIR
NAMES cloudprovidersproviderexporter.h cloudprovidersaccountexporter.h
PATH_SUFFIXES cloudproviders
)
find_library(LIBCLOUDPROVIDERS_LIBRARY
NAMES
libcloudproviders
cloudproviders
HINTS
/usr/lib
/usr/lib/${CMAKE_ARCH_TRIPLET}
/usr/local/lib
/opt/local/lib
${CMAKE_LIBRARY_PATH}
${CMAKE_INSTALL_PREFIX}/lib
)
message("================> ${LIBCLOUDPROVIDERS_LIBRARY}")
find_package_handle_standard_args(LIBCLOUDPROVIDERS DEFAULT_MSG LIBCLOUDPROVIDERS_INCLUDE_DIR LIBCLOUDPROVIDERS_LIBRARY)

View File

@@ -1,306 +0,0 @@
# - Try to find the OpenSSL encryption library
# Once done this will define
#
# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL
#
# Read-Only variables:
# OPENSSL_FOUND - system has the OpenSSL library
# OPENSSL_INCLUDE_DIR - the OpenSSL include directory
# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL
# OPENSSL_VERSION - This is set to $major.$minor.$revision$path (eg. 0.9.8s)
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
# Copyright 2009-2011 Mathieu Malaterre <mathieu.malaterre@gmail.com>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
if (UNIX)
find_package(PkgConfig QUIET)
pkg_check_modules(_OPENSSL QUIET openssl)
endif (UNIX)
# http://www.slproweb.com/products/Win32OpenSSL.html
SET(_OPENSSL_ROOT_HINTS
$ENV{OPENSSL_ROOT_DIR}
${OPENSSL_ROOT_DIR}
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
)
SET(_OPENSSL_ROOT_PATHS
"$ENV{PROGRAMFILES}/OpenSSL"
"$ENV{PROGRAMFILES}/OpenSSL-Win32"
"$ENV{PROGRAMFILES}/OpenSSL-Win64"
"C:/OpenSSL/"
"C:/OpenSSL-Win32/"
"C:/OpenSSL-Win64/"
)
SET(_OPENSSL_ROOT_HINTS_AND_PATHS
HINTS ${_OPENSSL_ROOT_HINTS}
PATHS ${_OPENSSL_ROOT_PATHS}
)
FIND_PATH(OPENSSL_INCLUDE_DIR
NAMES
openssl/ssl.h
HINTS
${_OPENSSL_INCLUDEDIR}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
include
)
IF(WIN32 AND NOT CYGWIN)
# MINGW should go here too
IF(MSVC)
# /MD and /MDd are the standard values - if someone wants to use
# others, the libnames have to change here too
# use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
# TODO: handle /MT and static lib
# In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
# * MD for dynamic-release
# * MDd for dynamic-debug
# * MT for static-release
# * MTd for static-debug
# Implementation details:
# We are using the libraries located in the VC subdir instead of the parent directory eventhough :
# libeay32MD.lib is identical to ../libeay32.lib, and
# ssleay32MD.lib is identical to ../ssleay32.lib
FIND_LIBRARY(LIB_EAY_DEBUG
NAMES
libeay32MDd
libeay32
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
FIND_LIBRARY(LIB_EAY_RELEASE
NAMES
libeay32MD
libeay32
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
FIND_LIBRARY(SSL_EAY_DEBUG
NAMES
ssleay32MDd
ssleay32
ssl
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
FIND_LIBRARY(SSL_EAY_RELEASE
NAMES
ssleay32MD
ssleay32
ssl
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
set( OPENSSL_LIBRARIES
optimized ${SSL_EAY_RELEASE} debug ${SSL_EAY_DEBUG}
optimized ${LIB_EAY_RELEASE} debug ${LIB_EAY_DEBUG}
)
else()
set( OPENSSL_LIBRARIES ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE} )
endif()
MARK_AS_ADVANCED(SSL_EAY_DEBUG SSL_EAY_RELEASE)
MARK_AS_ADVANCED(LIB_EAY_DEBUG LIB_EAY_RELEASE)
ELSEIF(MINGW)
# same player, for MingW
FIND_LIBRARY(LIB_EAY
NAMES
libeay32
crypto
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"lib/MinGW"
)
FIND_LIBRARY(SSL_EAY
NAMES
ssleay32
ssl
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"lib/MinGW"
)
MARK_AS_ADVANCED(SSL_EAY LIB_EAY)
set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
ELSE(MSVC)
# Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
FIND_LIBRARY(LIB_EAY
NAMES
libeay32
HINTS
${_OPENSSL_LIBDIR}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
lib
)
FIND_LIBRARY(SSL_EAY
NAMES
ssleay32
HINTS
${_OPENSSL_LIBDIR}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
lib
)
MARK_AS_ADVANCED(SSL_EAY LIB_EAY)
set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
ENDIF(MSVC)
ELSE(WIN32 AND NOT CYGWIN)
FIND_LIBRARY(OPENSSL_SSL_LIBRARY
NAMES
ssl
ssleay32
ssleay32MD
HINTS
${_OPENSSL_LIBDIR}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
lib
)
FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARY
NAMES
crypto
HINTS
${_OPENSSL_LIBDIR}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
lib
)
MARK_AS_ADVANCED(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
# compat defines
SET(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
SET(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY})
ENDIF(WIN32 AND NOT CYGWIN)
function(from_hex HEX DEC)
string(TOUPPER "${HEX}" HEX)
set(_res 0)
string(LENGTH "${HEX}" _strlen)
while (_strlen GREATER 0)
math(EXPR _res "${_res} * 16")
string(SUBSTRING "${HEX}" 0 1 NIBBLE)
string(SUBSTRING "${HEX}" 1 -1 HEX)
if (NIBBLE STREQUAL "A")
math(EXPR _res "${_res} + 10")
elseif (NIBBLE STREQUAL "B")
math(EXPR _res "${_res} + 11")
elseif (NIBBLE STREQUAL "C")
math(EXPR _res "${_res} + 12")
elseif (NIBBLE STREQUAL "D")
math(EXPR _res "${_res} + 13")
elseif (NIBBLE STREQUAL "E")
math(EXPR _res "${_res} + 14")
elseif (NIBBLE STREQUAL "F")
math(EXPR _res "${_res} + 15")
else()
math(EXPR _res "${_res} + ${NIBBLE}")
endif()
string(LENGTH "${HEX}" _strlen)
endwhile()
set(${DEC} ${_res} PARENT_SCOPE)
endfunction(from_hex)
if (OPENSSL_INCLUDE_DIR)
if (_OPENSSL_VERSION)
set(OPENSSL_VERSION "${_OPENSSL_VERSION}")
elseif(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h")
file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
# The version number is encoded as 0xMNNFFPPS: major minor fix patch status
# The status gives if this is a developer or prerelease and is ignored here.
# Major, minor, and fix directly translate into the version numbers shown in
# the string. The patch field translates to the single character suffix that
# indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so
# on.
string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$"
"\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}")
list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR)
list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX)
from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX)
list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH)
if (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
from_hex("${OPENSSL_VERSION_PATCH}" _tmp)
# 96 is the ASCII code of 'a' minus 1
math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96")
unset(_tmp)
# Once anyone knows how OpenSSL would call the patch versions beyond 'z'
# this should be updated to handle that, too. This has not happened yet
# so it is simply ignored here for now.
string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING)
endif (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}")
endif (_OPENSSL_VERSION)
endif (OPENSSL_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
if (OPENSSL_VERSION)
find_package_handle_standard_args(OpenSSL
REQUIRED_VARS
OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR
VERSION_VAR
OPENSSL_VERSION
FAIL_MESSAGE
"Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
)
else (OPENSSL_VERSION)
find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR
)
endif (OPENSSL_VERSION)
MARK_AS_ADVANCED(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES)

View File

@@ -0,0 +1,117 @@
#.rst:
# FindPng2Ico
# -----------
#
# Try to find png2ico.
#
# If the png2ico executable is not in your PATH, you can provide
# an alternative name or full path location with the ``Png2Ico_EXECUTABLE``
# variable.
#
# This will define the following variables:
#
# ``Png2Ico_FOUND``
# True if png2ico is available.
#
# ``Png2Ico_EXECUTABLE``
# The png2ico executable.
#
# If ``Png2Ico_FOUND`` is TRUE, it will also define the following imported
# target:
#
# ``Png2Ico::Png2Ico``
# The png2ico executable.
#
# and the following variables:
#
# ``Png2Ico_HAS_COLORS_ARGUMENT``
# Whether png2ico accepts a ``--colors`` argument. `Matthias Benkmann's
# tool <http://www.winterdrache.de/freeware/png2ico/>`_ does, while the
# version of png2ico from the `"KDE On Windows" (kdewin)
# <https://projects.kde.org/projects/kdesupport/kdewin>`_ project does not.
#
# ``Png2Ico_HAS_RCFILE_ARGUMENT``
# Whether png2ico accepts an ``--rcfile`` argument. The version of png2ico
# from the `"KDE On Windows" (kdewin)
# <https://projects.kde.org/projects/kdesupport/kdewin>`_ project does,
# while `Matthias Benkmann's tool
# <http://www.winterdrache.de/freeware/png2ico/>`_ does not.
#
# Since 1.7.0.
#=============================================================================
# Copyright 2014 Alex Merry <alex.merry@kde.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
ecm_find_package_version_check(Png2Ico)
# Find png2ico
find_program(Png2Ico_EXECUTABLE NAMES png2ico)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Png2Ico
FOUND_VAR
Png2Ico_FOUND
REQUIRED_VARS
Png2Ico_EXECUTABLE
)
mark_as_advanced(Png2Ico_EXECUTABLE)
if (Png2Ico_FOUND)
execute_process(
COMMAND "${Png2Ico_EXECUTABLE}" --help
OUTPUT_VARIABLE _png2ico_help_text
ERROR_VARIABLE _png2ico_help_text
)
if (_png2ico_help_text MATCHES ".*--rcfile .*")
set(Png2Ico_HAS_RCFILE_ARGUMENT TRUE)
else()
set(Png2Ico_HAS_RCFILE_ARGUMENT FALSE)
endif()
if (_png2ico_help_text MATCHES ".*--colors .*")
set(Png2Ico_HAS_COLORS_ARGUMENT TRUE)
else()
set(Png2Ico_HAS_COLORS_ARGUMENT FALSE)
endif()
unset(_png2ico_help_text)
if (NOT TARGET Png2Ico::Png2Ico)
add_executable(Png2Ico::Png2Ico IMPORTED)
set_target_properties(Png2Ico::Png2Ico PROPERTIES
IMPORTED_LOCATION "${Png2Ico_EXECUTABLE}"
)
endif()
endif()
include(FeatureSummary)
set_package_properties(Png2Ico PROPERTIES
URL "http://www.winterdrache.de/freeware/png2ico/ or https://projects.kde.org/projects/kdesupport/kdewin"
DESCRIPTION "Executable that converts a collection of PNG files into a Windows icon file"
)

View File

@@ -1,30 +0,0 @@
# - MACRO_ADD_PLUGIN(name [WITH_PREFIX] file1 .. fileN)
#
# Create a plugin from the given source files.
# If WITH_PREFIX is given, the resulting plugin will have the
# prefix "lib", otherwise it won't.
#
# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
# Copyright (c) 2006, Laurent Montel, <montel@kde.org>
# Copyright (c) 2006, Andreas Schneider, <asn@cryptomilk.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
macro (MACRO_ADD_PLUGIN _target_NAME _with_PREFIX)
if (${_with_PREFIX} STREQUAL "WITH_PREFIX")
set(_first_SRC)
else (${_with_PREFIX} STREQUAL "WITH_PREFIX")
set(_first_SRC ${_with_PREFIX})
endif (${_with_PREFIX} STREQUAL "WITH_PREFIX")
add_library(${_target_NAME} MODULE ${_first_SRC} ${ARGN})
if (_first_SRC)
set_target_properties(${_target_NAME} PROPERTIES PREFIX "")
endif (_first_SRC)
endmacro (MACRO_ADD_PLUGIN _name _sources)

View File

@@ -1,37 +0,0 @@
# (c) 2014 Copyright ownCloud GmbH
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING* file.
# - macro_copy_file(_src _dst)
# Copies a file to ${_dst} only if ${_src} is different (newer) than ${_dst}
#
# Example:
# macro_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/icon.png ${CMAKE_CURRENT_BINARY_DIR}/.)
# Copies file icon.png to ${CMAKE_CURRENT_BINARY_DIR} directory
#
# Copyright (c) 2006-2007 Wengo
# Copyright (c) 2006-2008 Andreas Schneider <asn@cryptomilk.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING file.
macro (macro_copy_file _src _dst)
# Removes all path containing .svn or CVS or CMakeLists.txt during the copy
if (NOT ${_src} MATCHES ".*\\.svn|CVS|CMakeLists\\.txt.*")
if (CMAKE_VERBOSE_MAKEFILE)
message(STATUS "Copy file from ${_src} to ${_dst}")
endif (CMAKE_VERBOSE_MAKEFILE)
# Creates directory if necessary
get_filename_component(_path ${_dst} PATH)
file(MAKE_DIRECTORY ${_path})
execute_process(
COMMAND
${CMAKE_COMMAND} -E copy_if_different ${_src} ${_dst}
OUTPUT_QUIET
)
endif (NOT ${_src} MATCHES ".*\\.svn|CVS|CMakeLists\\.txt.*")
endmacro (macro_copy_file)

View File

@@ -461,6 +461,7 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
File "${MING_BIN}\libgcc_s_sjlj-1.dll"
File "${MING_BIN}\libstdc++-6.dll"
File "${MING_BIN}\libwinpthread-1.dll"
File "${MING_BIN}\libssp-0.dll"
;CSync configs
File "${SOURCE_PATH}/sync-exclude.lst"
@@ -603,6 +604,35 @@ Section Uninstall
Abort $UNINSTALL_ABORT
owncloud_installed:
; Delete Navigation Pane entries added for Windows 10.
; On 64bit Windows, the client will be writing to the 64bit registry.
${If} ${RunningX64}
SetRegView 64
${EndIf}
StrCpy $0 0
loop:
; Look at every registered explorer namespace for HKCU and check if it was added by our application
; (we write to a custom "ApplicationName" value there).
EnumRegKey $1 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace" $0
StrCmp $1 "" done
ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\$1" "ApplicationName"
StrCmp $R0 "${APPLICATION_NAME}" deleteClsid
; Increment the index when not deleting the enumerated key.
IntOp $0 $0 + 1
goto loop
deleteClsid:
DetailPrint "Removing Navigation Pane CLSID $1"
; Should match FolderMan::updateCloudStorageRegistry
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\$1"
DeleteRegKey HKCU "Software\Classes\CLSID\$1"
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" $1
goto loop
done:
; Go back to the 32bit registry.
SetRegView lastused
;Delete registry keys.
DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionBuild"
DeleteRegValue HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor"

View File

@@ -1,197 +0,0 @@
# (c) 2014 Copyright ownCloud GmbH
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING* file.
include (MacroOptionalFindPackage)
include (MacroLogFeature)
option(BUILD_WITH_QT4 "Build with Qt4 no matter if Qt5 was found" OFF)
if( BUILD_WITH_QT4 )
message(STATUS "Search for Qt5 was disabled by option BUILD_WITH_QT4")
else( BUILD_WITH_QT4 )
find_package(Qt5Core QUIET)
endif( BUILD_WITH_QT4 )
if( Qt5Core_FOUND )
message(STATUS "Found Qt5 core, checking for further dependencies...")
find_package(Qt5Network REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Concurrent REQUIRED)
if(UNIT_TESTING)
find_package(Qt5Test REQUIRED)
endif()
if(NOT TOKEN_AUTH_ONLY)
find_package(Qt5Widgets REQUIRED)
if(APPLE)
find_package(Qt5MacExtras REQUIRED)
endif(APPLE)
if(NOT NO_SHIBBOLETH)
find_package(Qt5WebKitWidgets)
find_package(Qt5WebKit)
if(NOT Qt5WebKitWidgets_FOUND)
message(FATAL_ERROR "Qt5WebKit required for Shibboleth. Use -DNO_SHIBBOLETH=1 to disable it.")
endif()
endif()
endif()
else( Qt5Core_FOUND )
if(WIN32 OR APPLE)
if (NOT BUILD_WITH_QT4)
message(FATAL_ERROR "Qt 5 not found, but application depends on Qt5 on Windows and Mac OS X")
endif ()
endif(WIN32 OR APPLE)
endif( Qt5Core_FOUND )
if( Qt5Core_FOUND )
message(STATUS "Using Qt 5!")
# We need this to find the paths to qdbusxml2cpp and co
if (WITH_DBUS)
find_package(Qt5DBus REQUIRED)
include_directories(${Qt5DBus_INCLUDES})
add_definitions(${Qt5DBus_DEFINITIONS})
endif (WITH_DBUS)
include_directories(${Qt5Core_INCLUDES})
add_definitions(${Qt5Core_DEFINITIONS})
if (NOT WIN32) #implied on Win32
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif(NOT WIN32)
# set(CMAKE_CXX_FLAGS "${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
if(APPLE AND NOT TOKEN_AUTH_ONLY)
include_directories(${Qt5MacExtras_INCLUDE_DIRS})
add_definitions(${Qt5MacExtras_DEFINITIONS})
set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5MacExtras_LIBRARIES})
endif()
if(NOT BUILD_LIBRARIES_ONLY)
macro(qt_wrap_ui)
qt5_wrap_ui(${ARGN})
endmacro()
else()
# hack
SET(QT_UIC_EXECUTABLE "")
endif()
macro(qt_add_resources)
qt5_add_resources(${ARGN})
endmacro()
if(NOT TOKEN_AUTH_ONLY)
find_package(Qt5LinguistTools)
if(Qt5LinguistTools_FOUND)
macro(qt_add_translation)
qt5_add_translation(${ARGN})
endmacro()
else()
macro(qt_add_translation)
endmacro()
endif()
else()
macro(qt_add_translation)
endmacro()
endif()
macro(qt_add_dbus_interface)
qt5_add_dbus_interface(${ARGN})
endmacro()
macro(qt_add_dbus_adaptor)
qt5_add_dbus_adaptor(${ARGN})
endmacro()
macro(qt_wrap_cpp)
qt5_wrap_cpp(${ARGN})
endmacro()
macro(install_qt_executable)
install_qt5_executable(${ARGN})
endmacro()
macro(setup_qt)
endmacro()
set(QT_RCC_EXECUTABLE "${Qt5Core_RCC_EXECUTABLE}")
#Enable deprecated symbols
add_definitions("-DQT_DISABLE_DEPRECATED_BEFORE=0")
add_definitions("-DQT_USE_QSTRINGBUILDER") #optimize string concatenation
add_definitions("-DQT_MESSAGELOGCONTEXT") #enable function name and line number in debug output
endif( Qt5Core_FOUND )
if(NOT Qt5Core_FOUND)
message(STATUS "Could not find Qt5, searching for Qt4 instead...")
set(NEEDED_QT4_COMPONENTS "QtCore" "QtXml" "QtNetwork" "QtGui" "QtWebkit")
if( BUILD_TESTS )
list(APPEND NEEDED_QT4_COMPONENTS "QtTest")
endif()
find_package(Qt4 4.7.0 COMPONENTS ${NEEDED_QT4_COMPONENTS} )
macro_log_feature(QT4_FOUND "Qt" "A cross-platform application and UI framework" "http://www.qt-project.org" TRUE "" "If you see this, although libqt4-devel is installed, check whether the \n qtwebkit-devel package and whatever contains QtUiTools is installed too")
macro(qt5_use_modules)
endmacro()
macro(qt_wrap_ui)
qt4_wrap_ui(${ARGN})
endmacro()
macro(qt_add_resources)
qt4_add_resources(${ARGN})
endmacro()
macro(qt_add_translation)
qt4_add_translation(${ARGN})
endmacro()
macro(qt_add_dbus_interface)
qt4_add_dbus_interface(${ARGN})
endmacro()
macro(qt_add_dbus_adaptor)
qt4_add_dbus_adaptor(${ARGN})
endmacro()
macro(qt_wrap_cpp)
qt4_wrap_cpp(${ARGN})
endmacro()
macro(install_qt_executable)
install_qt4_executable(${ARGN})
endmacro()
macro(setup_qt)
set(QT_USE_QTGUI TRUE)
set(QT_USE_QTSQL TRUE)
set(QT_USE_QTNETWORK TRUE)
set(QT_USE_QTXML TRUE)
set(QT_USE_QTWEBKIT TRUE)
set(QT_USE_QTDBUS TRUE)
include( ${QT_USE_FILE} )
endmacro()
if (CMAKE_COMPILER_IS_GNUCC)
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)
add_definitions("-DQ_DECL_OVERRIDE=override")
else()
add_definitions("-DQ_DECL_OVERRIDE=")
endif()
else() #clang or others
add_definitions("-DQ_DECL_OVERRIDE=override")
endif()
endif()
if( Qt5Core_DIR )
set( HAVE_QT5 TRUE )
else( Qt5Core_DIR )
set( HAVE_QT5 FALSE )
endif( Qt5Core_DIR )

View File

@@ -1,58 +0,0 @@
# - macro_asciidoc2man(inputfile outputfile)
#
# Create a manpage with asciidoc.
# Example: macro_asciidoc2man(foo.txt foo.1)
#
# Copyright (c) 2006, Andreas Schneider, <asn@cryptomilk.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
include(MacroCopyFile)
macro(MACRO_ASCIIDOC2MAN _a2m_input _a2m_output)
find_program(A2X
NAMES
a2x
)
#message("+++ A2X: ${A2X}")
if (A2X)
#message("+++ ${A2X} --doctype=manpage --format=manpage --destination-dir=${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${_a2m_input}")
macro_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_a2m_input} ${CMAKE_CURRENT_BINARY_DIR}/${_a2m_input})
execute_process(
COMMAND
${A2X} --doctype=manpage --format=manpage ${_a2m_input}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
RESULT_VARIABLE
A2M_MAN_GENERATED
ERROR_QUIET
)
#message("+++ A2M_MAN_GENERATED: ${A2M_MAN_GENERATED}")
if (A2M_MAN_GENERATED EQUAL 0)
find_file(A2M_MAN_FILE
NAME
${_a2m_output}
PATHS
${CMAKE_CURRENT_BINARY_DIR}
NO_DEFAULT_PATH
)
if (A2M_MAN_FILE)
get_filename_component(A2M_MAN_CATEGORY ${A2M_MAN_FILE} EXT)
string(SUBSTRING ${A2M_MAN_CATEGORY} 1 1 A2M_MAN_CATEGORY)
install(
FILES
${A2M_MAN_FILE}
DESTINATION
${MAN_INSTALL_DIR}/man${A2M_MAN_CATEGORY}
)
endif (A2M_MAN_FILE)
endif (A2M_MAN_GENERATED EQUAL 0)
endif (A2X)
endmacro(MACRO_ASCIIDOC2MAN _a2m_input _a2m_file)

View File

@@ -3,8 +3,12 @@
# For details see the accompanying COPYING* file.
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-long-long")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-long-long -Wno-gnu-zero-variadic-macro-arguments")
# Fix sqlite compilation on macOS
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-pointer-types-discards-qualifiers")
# Fix sqlite compilation on MinGW
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-discarded-qualifiers")
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion

View File

@@ -17,12 +17,13 @@
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
#cmakedefine APPLICATION_UPDATE_URL "@APPLICATION_UPDATE_URL@"
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
#cmakedefine SYSCONFDIR "@SYSCONFDIR@"
#cmakedefine SHAREDIR "@SHAREDIR@"
#cmakedefine WITH_UNIT_TESTING 1
#cmakedefine WITH_TESTING 1
#endif

View File

@@ -1,55 +0,0 @@
# global needed variables
set(APPLICATION_NAME "ocsync")
set(LIBRARY_VERSION ${MIRALL_VERSION})
set(LIBRARY_SOVERSION "0")
# add definitions
include(DefineCMakeDefaults)
include(DefinePlatformDefaults)
include(DefineCompilerFlags)
include(DefineOptions.cmake)
include(DefineInstallationPaths)
# add macros
include(MacroAddPlugin)
include(MacroCopyFile)
if (NOT WIN32)
find_package(Iconv)
endif (NOT WIN32)
find_package(SQLite3 3.8.0 REQUIRED)
include(ConfigureChecks.cmake)
set(SOURCE_DIR ${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
macro_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake)
if (MEM_NULL_TESTS)
add_definitions(-DCSYNC_MEM_NULL_TESTS)
endif (MEM_NULL_TESTS)
add_subdirectory(src)
if (UNIT_TESTING)
set(WITH_TESTING ON)
find_package(CMocka)
if (CMOCKA_FOUND)
include(AddCMockaTest)
add_subdirectory(tests)
endif (CMOCKA_FOUND)
endif (UNIT_TESTING)
configure_file(config_csync.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_csync.h)
configure_file(config_test.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_test.h)

View File

@@ -1,12 +0,0 @@
set(UPDATE_TYPE "true")
set(MEMORYCHECK_SUPPRESSIONS_FILE ${CMAKE_SOURCE_DIR}/tests/valgrind-csync.supp)
set(CTEST_PROJECT_NAME "csync")
set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "mock.cryptomilk.org")
set(CTEST_DROP_LOCATION "/submit.php?project=${CTEST_PROJECT_NAME}")
set(CTEST_DROP_SITE_CDASH TRUE)

View File

@@ -1,4 +0,0 @@
set(CTEST_CUSTOM_MEMCHECK_IGNORE
${CTEST_CUSTOM_MEMCHECK_IGNORE}
check_std_c_jhash
)

View File

@@ -1,7 +0,0 @@
/* mind to have trailing slashes! */
#define TESTFILES_DIR "@SOURCE_DIR@/csync/tests/ownCloud/testfiles/"
#define TEST_CONFIG_DIR "@SOURCE_DIR@/csync/tests/ownCloud/"

View File

@@ -1,144 +0,0 @@
project(libcsync)
add_subdirectory(std)
# Statically include sqlite
set(CSYNC_PUBLIC_INCLUDE_DIRS
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_SOURCE_DIR}
CACHE INTERNAL "csync public include directories"
)
set(CSYNC_PRIVATE_INCLUDE_DIRS
${SQLITE3_INCLUDE_DIRS}
${CSTDLIB_PUBLIC_INCLUDE_DIRS}
${CMAKE_BINARY_DIR}
)
set(CSYNC_LIBRARY
ocsync
CACHE INTERNAL "ocsync library"
)
set(CSYNC_LINK_LIBRARIES
${CSTDLIB_LIBRARY}
${CSYNC_REQUIRED_LIBRARIES}
${SQLITE3_LIBRARIES}
)
if(HAVE_ICONV AND WITH_ICONV)
list(APPEND CSYNC_PRIVATE_INCLUDE_DIRS ${ICONV_INCLUDE_DIR})
list(APPEND CSYNC_LINK_LIBRARIES ${ICONV_LIBRARIES})
endif()
# Specific option for builds tied to servers that do not support renaming extensions
set(NO_RENAME_EXTENSION 0 CACHE BOOL "Do not issue rename if the extension changes")
if(NO_RENAME_EXTENSION)
add_definitions(-DNO_RENAME_EXTENSION)
endif()
set(csync_SRCS
csync.c
csync_exclude.c
csync_log.c
csync_statedb.c
csync_time.c
csync_util.c
csync_misc.c
csync_update.c
csync_reconcile.c
csync_rename.cc
vio/csync_vio.c
vio/csync_vio_file_stat.c
)
if (WIN32)
list(APPEND csync_SRCS
vio/csync_vio_local_win.c
)
else()
list(APPEND csync_SRCS
vio/csync_vio_local_unix.c
)
endif()
configure_file(csync_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/csync_version.h)
set(csync_HDRS
${CMAKE_CURRENT_BINARY_DIR}/csync_version.h
csync.h
vio/csync_vio.h
vio/csync_vio_method.h
vio/csync_vio_module.h
)
# Statically include sqlite
if (USE_OUR_OWN_SQLITE3)
list(APPEND csync_SRCS ${SQLITE3_SOURCE})
if (WIN32)
# We want to export sqlite symbols from the ocsync DLL without
# having to patch both sqlite3.h and the amalgation sqlite3.c,
# so do the import/export magic manually through the build system.
remove_definitions(-DSQLITE_API=__declspec\(dllimport\))
add_definitions(-DSQLITE_API=__declspec\(dllexport\))
endif()
endif()
include_directories(
${CSYNC_PUBLIC_INCLUDE_DIRS}
${CSYNC_PRIVATE_INCLUDE_DIRS}
)
add_library(${CSYNC_LIBRARY} SHARED ${csync_SRCS})
#add_library(${CSYNC_LIBRARY}_static STATIC ${csync_SRCS})
generate_export_header( ${CSYNC_LIBRARY}
BASE_NAME ${CSYNC_LIBRARY}
EXPORT_MACRO_NAME OCSYNC_EXPORT
EXPORT_FILE_NAME ocsynclib.h
)
target_link_libraries(${CSYNC_LIBRARY} ${CSYNC_LINK_LIBRARIES})
#target_link_libraries(${CSYNC_LIBRARY}_static ${CSYNC_LINK_LIBRARIES})
set_target_properties(
${CSYNC_LIBRARY}
PROPERTIES
VERSION
${LIBRARY_VERSION}
SOVERSION
${LIBRARY_SOVERSION}
RUNTIME_OUTPUT_DIRECTORY
${BIN_OUTPUT_DIRECTORY}
)
if(BUILD_OWNCLOUD_OSX_BUNDLE)
INSTALL(
TARGETS
${CSYNC_LIBRARY}
LIBRARY DESTINATION
${LIB_INSTALL_DIR}
ARCHIVE DESTINATION
${LIB_INSTALL_DIR}
RUNTIME DESTINATION
${BIN_INSTALL_DIR}
)
else()
INSTALL(
TARGETS
${CSYNC_LIBRARY}
LIBRARY DESTINATION
${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE}
ARCHIVE DESTINATION
${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE}
RUNTIME DESTINATION
${BIN_INSTALL_DIR}/${APPLICATION_EXECUTABLE}
)
endif()

View File

@@ -1,676 +0,0 @@
/*
* libcsync -- a library to sync a directory with another
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
* Copyright (c) 2012-2013 by Klaas Freitag <freitag@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config_csync.h"
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <stdbool.h>
#ifdef HAVE_ICONV_H
#include <iconv.h>
#endif
#ifdef HAVE_SYS_ICONV_H
#include <sys/iconv.h>
#endif
#include "c_lib.h"
#include "csync_private.h"
#include "csync_exclude.h"
#include "csync_statedb.h"
#include "csync_time.h"
#include "csync_util.h"
#include "csync_misc.h"
#include "std/c_private.h"
#include "csync_update.h"
#include "csync_reconcile.h"
#include "vio/csync_vio.h"
#include "csync_log.h"
#include "csync_rename.h"
#include "c_jhash.h"
static int _key_cmp(const void *key, const void *data) {
uint64_t a;
csync_file_stat_t *b;
a = *(uint64_t *) (key);
b = (csync_file_stat_t *) data;
if (a < b->phash) {
return -1;
} else if (a > b->phash) {
return 1;
}
return 0;
}
static int _data_cmp(const void *key, const void *data) {
csync_file_stat_t *a, *b;
a = (csync_file_stat_t *) key;
b = (csync_file_stat_t *) data;
if (a->phash < b->phash) {
return -1;
} else if (a->phash > b->phash) {
return 1;
}
return 0;
}
void csync_create(CSYNC **csync, const char *local) {
CSYNC *ctx;
size_t len = 0;
ctx = c_malloc(sizeof(CSYNC));
ctx->status_code = CSYNC_STATUS_OK;
/* remove trailing slashes */
len = strlen(local);
while(len > 0 && local[len - 1] == '/') --len;
ctx->local.uri = c_strndup(local, len);
ctx->status_code = CSYNC_STATUS_OK;
ctx->current_fs = NULL;
ctx->abort = false;
ctx->ignore_hidden_files = true;
*csync = ctx;
}
void csync_init(CSYNC *ctx, const char *db_file) {
assert(ctx);
/* Do not initialize twice */
assert(!(ctx->status & CSYNC_STATUS_INIT));
ctx->status_code = CSYNC_STATUS_OK;
ctx->local.type = LOCAL_REPLICA;
ctx->remote.type = REMOTE_REPLICA;
SAFE_FREE(ctx->statedb.file);
ctx->statedb.file = c_strdup(db_file);
c_rbtree_create(&ctx->local.tree, _key_cmp, _data_cmp);
c_rbtree_create(&ctx->remote.tree, _key_cmp, _data_cmp);
ctx->remote.root_perms = 0;
ctx->status = CSYNC_STATUS_INIT;
/* initialize random generator */
srand(time(NULL));
}
int csync_update(CSYNC *ctx) {
int rc = -1;
struct timespec start, finish;
if (ctx == NULL) {
errno = EBADF;
return -1;
}
ctx->status_code = CSYNC_STATUS_OK;
/* Path of database file is set in csync_init */
if (csync_statedb_load(ctx, ctx->statedb.file, &ctx->statedb.db) < 0) {
rc = -1;
return rc;
}
ctx->status_code = CSYNC_STATUS_OK;
csync_memstat_check();
if (!ctx->excludes) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "No exclude file loaded or defined!");
}
/* update detection for local replica */
csync_gettime(&start);
ctx->current = LOCAL_REPLICA;
ctx->replica = ctx->local.type;
rc = csync_ftw(ctx, ctx->local.uri, csync_walker, MAX_DEPTH);
if (rc < 0) {
if(ctx->status_code == CSYNC_STATUS_OK) {
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_UPDATE_ERROR);
}
goto out;
}
csync_gettime(&finish);
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
"Update detection for local replica took %.2f seconds walking %zu files.",
c_secdiff(finish, start), c_rbtree_size(ctx->local.tree));
csync_memstat_check();
/* update detection for remote replica */
csync_gettime(&start);
ctx->current = REMOTE_REPLICA;
ctx->replica = ctx->remote.type;
rc = csync_ftw(ctx, "", csync_walker, MAX_DEPTH);
if (rc < 0) {
if(ctx->status_code == CSYNC_STATUS_OK) {
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_UPDATE_ERROR);
}
goto out;
}
csync_gettime(&finish);
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
"Update detection for remote replica took %.2f seconds "
"walking %zu files.",
c_secdiff(finish, start), c_rbtree_size(ctx->remote.tree));
csync_memstat_check();
ctx->status |= CSYNC_STATUS_UPDATE;
rc = 0;
out:
csync_statedb_close(ctx);
return rc;
}
int csync_reconcile(CSYNC *ctx) {
int rc = -1;
struct timespec start, finish;
if (ctx == NULL) {
errno = EBADF;
return -1;
}
ctx->status_code = CSYNC_STATUS_OK;
/* Reconciliation for local replica */
csync_gettime(&start);
if (csync_statedb_load(ctx, ctx->statedb.file, &ctx->statedb.db) < 0) {
rc = -1;
return rc;
}
ctx->current = LOCAL_REPLICA;
ctx->replica = ctx->local.type;
rc = csync_reconcile_updates(ctx);
csync_gettime(&finish);
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
"Reconciliation for local replica took %.2f seconds visiting %zu files.",
c_secdiff(finish, start), c_rbtree_size(ctx->local.tree));
if (rc < 0) {
if (!CSYNC_STATUS_IS_OK(ctx->status_code)) {
ctx->status_code = csync_errno_to_status( errno, CSYNC_STATUS_RECONCILE_ERROR );
}
goto out;
}
/* Reconciliation for remote replica */
csync_gettime(&start);
ctx->current = REMOTE_REPLICA;
ctx->replica = ctx->remote.type;
rc = csync_reconcile_updates(ctx);
csync_gettime(&finish);
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
"Reconciliation for remote replica took %.2f seconds visiting %zu files.",
c_secdiff(finish, start), c_rbtree_size(ctx->remote.tree));
if (rc < 0) {
if (!CSYNC_STATUS_IS_OK(ctx->status_code)) {
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_RECONCILE_ERROR );
}
goto out;
}
ctx->status |= CSYNC_STATUS_RECONCILE;
rc = 0;
out:
csync_statedb_close(ctx);
return 0;
}
/*
* local visitor which calls the user visitor with repacked stat info.
*/
static int _csync_treewalk_visitor(void *obj, void *data) {
int rc = 0;
csync_file_stat_t *cur = NULL;
CSYNC *ctx = NULL;
c_rbtree_visit_func *visitor = NULL;
_csync_treewalk_context *twctx = NULL;
TREE_WALK_FILE trav;
c_rbtree_t *other_tree = NULL;
c_rbnode_t *other_node = NULL;
cur = (csync_file_stat_t *) obj;
ctx = (CSYNC *) data;
if (ctx == NULL) {
return -1;
}
/* we need the opposite tree! */
switch (ctx->current) {
case LOCAL_REPLICA:
other_tree = ctx->remote.tree;
break;
case REMOTE_REPLICA:
other_tree = ctx->local.tree;
break;
default:
break;
}
other_node = c_rbtree_find(other_tree, &cur->phash);
if (!other_node) {
/* Check the renamed path as well. */
int len;
uint64_t h = 0;
char *renamed_path = csync_rename_adjust_path(ctx, cur->path);
if (!c_streq(renamed_path, cur->path)) {
len = strlen( renamed_path );
h = c_jhash64((uint8_t *) renamed_path, len, 0);
other_node = c_rbtree_find(other_tree, &h);
}
SAFE_FREE(renamed_path);
}
if (!other_node) {
/* Check the source path as well. */
int len;
uint64_t h = 0;
char *renamed_path = csync_rename_adjust_path_source(ctx, cur->path);
if (!c_streq(renamed_path, cur->path)) {
len = strlen( renamed_path );
h = c_jhash64((uint8_t *) renamed_path, len, 0);
other_node = c_rbtree_find(other_tree, &h);
}
SAFE_FREE(renamed_path);
}
if (obj == NULL || data == NULL) {
ctx->status_code = CSYNC_STATUS_PARAM_ERROR;
return -1;
}
ctx->status_code = CSYNC_STATUS_OK;
twctx = (_csync_treewalk_context*) ctx->callbacks.userdata;
if (twctx == NULL) {
ctx->status_code = CSYNC_STATUS_PARAM_ERROR;
return -1;
}
if (twctx->instruction_filter > 0 &&
!(twctx->instruction_filter & cur->instruction) ) {
return 0;
}
visitor = (c_rbtree_visit_func*)(twctx->user_visitor);
if (visitor != NULL) {
trav.path = cur->path;
trav.size = cur->size;
trav.modtime = cur->modtime;
trav.mode = cur->mode;
trav.type = cur->type;
trav.instruction = cur->instruction;
trav.rename_path = cur->destpath;
trav.etag = cur->etag;
trav.file_id = cur->file_id;
trav.remotePerm = cur->remotePerm;
trav.directDownloadUrl = cur->directDownloadUrl;
trav.directDownloadCookies = cur->directDownloadCookies;
trav.inode = cur->inode;
trav.error_status = cur->error_status;
trav.has_ignored_files = cur->has_ignored_files;
trav.checksum = cur->checksum;
trav.checksumTypeId = cur->checksumTypeId;
if( other_node ) {
csync_file_stat_t *other_stat = (csync_file_stat_t*)other_node->data;
trav.other.etag = other_stat->etag;
trav.other.file_id = other_stat->file_id;
trav.other.instruction = other_stat->instruction;
trav.other.modtime = other_stat->modtime;
trav.other.size = other_stat->size;
} else {
trav.other.etag = 0;
trav.other.file_id = 0;
trav.other.instruction = CSYNC_INSTRUCTION_NONE;
trav.other.modtime = 0;
trav.other.size = 0;
}
rc = (*visitor)(&trav, twctx->userdata);
cur->instruction = trav.instruction;
if (trav.etag != cur->etag) { // FIXME It would be nice to have this documented
SAFE_FREE(cur->etag);
cur->etag = c_strdup(trav.etag);
}
return rc;
}
ctx->status_code = CSYNC_STATUS_PARAM_ERROR;
return -1;
}
/*
* treewalk function, called from its wrappers below.
*
* it encapsulates the user visitor function, the filter and the userdata
* into a treewalk_context structure and calls the rb treewalk function,
* which calls the local _csync_treewalk_visitor in this module.
* The user visitor is called from there.
*/
static int _csync_walk_tree(CSYNC *ctx, c_rbtree_t *tree, csync_treewalk_visit_func *visitor, int filter)
{
_csync_treewalk_context tw_ctx;
int rc = -1;
if (ctx == NULL) {
errno = EBADF;
return rc;
}
if (visitor == NULL || tree == NULL) {
ctx->status_code = CSYNC_STATUS_PARAM_ERROR;
return rc;
}
tw_ctx.userdata = ctx->callbacks.userdata;
tw_ctx.user_visitor = visitor;
tw_ctx.instruction_filter = filter;
ctx->callbacks.userdata = &tw_ctx;
rc = c_rbtree_walk(tree, (void*) ctx, _csync_treewalk_visitor);
if( rc < 0 ) {
if( ctx->status_code == CSYNC_STATUS_OK )
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_TREE_ERROR);
}
ctx->callbacks.userdata = tw_ctx.userdata;
return rc;
}
/*
* wrapper function for treewalk on the remote tree
*/
int csync_walk_remote_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int filter)
{
c_rbtree_t *tree = NULL;
int rc = -1;
if(ctx != NULL) {
ctx->status_code = CSYNC_STATUS_OK;
ctx->current = REMOTE_REPLICA;
tree = ctx->remote.tree;
}
/* all error handling in the called function */
rc = _csync_walk_tree(ctx, tree, visitor, filter);
return rc;
}
/*
* wrapper function for treewalk on the local tree
*/
int csync_walk_local_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int filter)
{
c_rbtree_t *tree = NULL;
int rc = -1;
if (ctx != NULL) {
ctx->status_code = CSYNC_STATUS_OK;
ctx->current = LOCAL_REPLICA;
tree = ctx->local.tree;
}
/* all error handling in the called function */
rc = _csync_walk_tree(ctx, tree, visitor, filter);
return rc;
}
static void _tree_destructor(void *data) {
csync_file_stat_t *freedata = NULL;
freedata = (csync_file_stat_t *) data;
csync_file_stat_free(freedata);
}
/* reset all the list to empty.
* used by csync_commit and csync_destroy */
static void _csync_clean_ctx(CSYNC *ctx)
{
/* destroy the rbtrees */
if (c_rbtree_size(ctx->local.tree) > 0) {
c_rbtree_destroy(ctx->local.tree, _tree_destructor);
}
if (c_rbtree_size(ctx->remote.tree) > 0) {
c_rbtree_destroy(ctx->remote.tree, _tree_destructor);
}
csync_rename_destroy(ctx);
/* free memory */
c_rbtree_free(ctx->local.tree);
c_rbtree_free(ctx->remote.tree);
SAFE_FREE(ctx->remote.root_perms);
}
int csync_commit(CSYNC *ctx) {
int rc = 0;
if (ctx == NULL) {
return -1;
}
ctx->status_code = CSYNC_STATUS_OK;
if (ctx->statedb.db != NULL
&& csync_statedb_close(ctx) < 0) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ERR: closing of statedb failed.");
rc = -1;
}
ctx->statedb.db = NULL;
_csync_clean_ctx(ctx);
ctx->remote.read_from_db = 0;
ctx->read_remote_from_db = true;
ctx->db_is_empty = false;
/* Create new trees */
c_rbtree_create(&ctx->local.tree, _key_cmp, _data_cmp);
c_rbtree_create(&ctx->remote.tree, _key_cmp, _data_cmp);
ctx->status = CSYNC_STATUS_INIT;
SAFE_FREE(ctx->error_string);
rc = 0;
return rc;
}
int csync_destroy(CSYNC *ctx) {
int rc = 0;
if (ctx == NULL) {
errno = EBADF;
return -1;
}
ctx->status_code = CSYNC_STATUS_OK;
if (ctx->statedb.db != NULL
&& csync_statedb_close(ctx) < 0) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ERR: closing of statedb failed.");
rc = -1;
}
ctx->statedb.db = NULL;
_csync_clean_ctx(ctx);
SAFE_FREE(ctx->statedb.file);
SAFE_FREE(ctx->local.uri);
SAFE_FREE(ctx->error_string);
#ifdef WITH_ICONV
c_close_iconv();
#endif
SAFE_FREE(ctx);
return rc;
}
void *csync_get_userdata(CSYNC *ctx) {
if (ctx == NULL) {
return NULL;
}
return ctx->callbacks.userdata;
}
int csync_set_userdata(CSYNC *ctx, void *userdata) {
if (ctx == NULL) {
return -1;
}
ctx->callbacks.userdata = userdata;
return 0;
}
csync_auth_callback csync_get_auth_callback(CSYNC *ctx) {
if (ctx == NULL) {
return NULL;
}
return ctx->callbacks.auth_function;
}
int csync_set_status(CSYNC *ctx, int status) {
if (ctx == NULL || status < 0) {
return -1;
}
ctx->status = status;
return 0;
}
CSYNC_STATUS csync_get_status(CSYNC *ctx) {
if (ctx == NULL) {
return -1;
}
return ctx->status_code;
}
const char *csync_get_status_string(CSYNC *ctx)
{
return csync_vio_get_status_string(ctx);
}
#ifdef WITH_ICONV
int csync_set_iconv_codec(const char *from)
{
c_close_iconv();
if (from != NULL) {
c_setup_iconv(from);
}
return 0;
}
#endif
void csync_request_abort(CSYNC *ctx)
{
if (ctx != NULL) {
ctx->abort = true;
}
}
void csync_resume(CSYNC *ctx)
{
if (ctx != NULL) {
ctx->abort = false;
}
}
int csync_abort_requested(CSYNC *ctx)
{
if (ctx != NULL) {
return ctx->abort;
} else {
return (1 == 0);
}
}
void csync_file_stat_free(csync_file_stat_t *st)
{
if (st) {
SAFE_FREE(st->directDownloadUrl);
SAFE_FREE(st->directDownloadCookies);
SAFE_FREE(st->etag);
SAFE_FREE(st->destpath);
SAFE_FREE(st->checksum);
SAFE_FREE(st);
}
}

View File

@@ -1,430 +0,0 @@
/*
* libcsync -- a library to sync a directory with another
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config_csync.h"
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "c_lib.h"
#include "c_private.h"
#include "csync_private.h"
#include "csync_exclude.h"
#include "csync_misc.h"
#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
#endif
#define CSYNC_LOG_CATEGORY_NAME "csync.exclude"
#include "csync_log.h"
#ifndef WITH_TESTING
static
#endif
int _csync_exclude_add(c_strlist_t **inList, const char *string) {
size_t i = 0;
// We never want duplicates, so check whether the string is already
// in the list first.
if (*inList) {
for (i = 0; i < (*inList)->count; ++i) {
char *pattern = (*inList)->vector[i];
if (c_streq(pattern, string)) {
return 1;
}
}
}
return c_strlist_add_grow(inList, string);
}
/** Expands C-like escape sequences.
*
* The returned string is heap-allocated and owned by the caller.
*/
static const char *csync_exclude_expand_escapes(const char * input)
{
size_t i_len = strlen(input) + 1;
char *out = c_malloc(i_len); // out can only be shorter
size_t i = 0;
size_t o = 0;
for (; i < i_len; ++i) {
if (input[i] == '\\') {
// at worst input[i+1] is \0
switch (input[i+1]) {
case '\'': out[o++] = '\''; break;
case '"': out[o++] = '"'; break;
case '?': out[o++] = '?'; break;
case '\\': out[o++] = '\\'; break;
case 'a': out[o++] = '\a'; break;
case 'b': out[o++] = '\b'; break;
case 'f': out[o++] = '\f'; break;
case 'n': out[o++] = '\n'; break;
case 'r': out[o++] = '\r'; break;
case 't': out[o++] = '\t'; break;
case 'v': out[o++] = '\v'; break;
default:
out[o++] = input[i];
out[o++] = input[i+1];
break;
}
++i;
} else {
out[o++] = input[i];
}
}
return out;
}
int csync_exclude_load(const char *fname, c_strlist_t **list) {
int fd = -1;
int i = 0;
int rc = -1;
int64_t size;
char *buf = NULL;
char *entry = NULL;
mbchar_t *w_fname;
if (fname == NULL) {
return -1;
}
#ifdef _WIN32
_fmode = _O_BINARY;
#endif
w_fname = c_utf8_path_to_locale(fname);
if (w_fname == NULL) {
return -1;
}
fd = _topen(w_fname, O_RDONLY);
c_free_locale_string(w_fname);
if (fd < 0) {
return -1;
}
size = lseek(fd, 0, SEEK_END);
if (size < 0) {
rc = -1;
goto out;
}
lseek(fd, 0, SEEK_SET);
if (size == 0) {
rc = 0;
goto out;
}
buf = c_malloc(size + 1);
if (read(fd, buf, size) != size) {
rc = -1;
goto out;
}
buf[size] = '\0';
/* FIXME: Use fgets and don't add duplicates */
entry = buf;
for (i = 0; i < size; i++) {
if (buf[i] == '\n' || buf[i] == '\r') {
if (entry != buf + i) {
buf[i] = '\0';
if (*entry != '#') {
const char *unescaped = csync_exclude_expand_escapes(entry);
rc = _csync_exclude_add(list, unescaped);
if( rc == 0 ) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Adding entry: %s", unescaped);
}
SAFE_FREE(unescaped);
if (rc < 0) {
goto out;
}
}
}
entry = buf + i + 1;
}
}
rc = 0;
out:
SAFE_FREE(buf);
close(fd);
return rc;
}
// See http://support.microsoft.com/kb/74496 and
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
// Additionally, we ignore '$Recycle.Bin', see https://github.com/owncloud/client/issues/2955
static const char* win_reserved_words[] = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5",
"COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4",
"LPT5", "LPT6", "LPT7", "LPT8", "LPT9", "CLOCK$", "$Recycle.Bin" };
bool csync_is_windows_reserved_word(const char* filename) {
size_t win_reserve_words_len = sizeof(win_reserved_words) / sizeof(char*);
size_t j;
for (j = 0; j < win_reserve_words_len; j++) {
int len_reserved_word = strlen(win_reserved_words[j]);
int len_filename = strlen(filename);
if (len_filename == 2 && filename[1] == ':') {
if (filename[0] >= 'a' && filename[0] <= 'z') {
return true;
}
if (filename[0] >= 'A' && filename[0] <= 'Z') {
return true;
}
}
if (c_strncasecmp(filename, win_reserved_words[j], len_reserved_word) == 0) {
if (len_filename == len_reserved_word) {
return true;
}
if ((len_filename > len_reserved_word) && (filename[len_reserved_word] == '.')) {
return true;
}
}
}
return false;
}
static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const char *path, int filetype, bool check_leading_dirs) {
size_t i = 0;
const char *bname = NULL;
size_t blen = 0;
char *conflict = NULL;
int rc = -1;
CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED;
CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED;
/* split up the path */
bname = strrchr(path, '/');
if (bname) {
bname += 1; // don't include the /
} else {
bname = path;
}
blen = strlen(bname);
rc = csync_fnmatch("._sync_*.db*", bname, 0);
if (rc == 0) {
match = CSYNC_FILE_SILENTLY_EXCLUDED;
goto out;
}
rc = csync_fnmatch(".sync_*.db*", bname, 0);
if (rc == 0) {
match = CSYNC_FILE_SILENTLY_EXCLUDED;
goto out;
}
rc = csync_fnmatch(".csync_journal.db*", bname, 0);
if (rc == 0) {
match = CSYNC_FILE_SILENTLY_EXCLUDED;
goto out;
}
// check the strlen and ignore the file if its name is longer than 254 chars.
// whenever changing this also check createDownloadTmpFileName
if (blen > 254) {
match = CSYNC_FILE_EXCLUDE_LONG_FILENAME;
goto out;
}
#ifdef _WIN32
// Windows cannot sync files ending in spaces (#2176). It also cannot
// distinguish files ending in '.' from files without an ending,
// as '.' is a separator that is not stored internally, so let's
// not allow to sync those to avoid file loss/ambiguities (#416)
if (blen > 1) {
if (bname[blen-1]== ' ') {
match = CSYNC_FILE_EXCLUDE_TRAILING_SPACE;
goto out;
} else if (bname[blen-1]== '.' ) {
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
goto out;
}
}
if (csync_is_windows_reserved_word(bname)) {
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
goto out;
}
// Filter out characters not allowed in a filename on windows
const char *p = NULL;
for (p = path; *p; p++) {
switch (*p) {
case '\\':
case ':':
case '?':
case '*':
case '"':
case '>':
case '<':
case '|':
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
goto out;
default:
break;
}
}
#endif
rc = csync_fnmatch(".owncloudsync.log*", bname, 0);
if (rc == 0) {
match = CSYNC_FILE_SILENTLY_EXCLUDED;
goto out;
}
/* Always ignore conflict files, not only via the exclude list */
rc = csync_fnmatch("*_conflict-*", bname, 0);
if (rc == 0) {
match = CSYNC_FILE_SILENTLY_EXCLUDED;
goto out;
}
if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) {
rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME"));
if (rc < 0) {
goto out;
}
rc = csync_fnmatch(conflict, path, 0);
if (rc == 0) {
match = CSYNC_FILE_SILENTLY_EXCLUDED;
SAFE_FREE(conflict);
goto out;
}
SAFE_FREE(conflict);
}
if( ! excludes ) {
goto out;
}
c_strlist_t *path_components = NULL;
if (check_leading_dirs) {
/* Build a list of path components to check. */
path_components = c_strlist_new(32);
char *path_split = strdup(path);
size_t len = strlen(path_split);
for (i = len; ; --i) {
// read backwards until a path separator is found
if (i != 0 && path_split[i-1] != '/') {
continue;
}
// check 'basename', i.e. for "/foo/bar/fi" we'd check 'fi', 'bar', 'foo'
if (path_split[i] != 0) {
c_strlist_add_grow(&path_components, path_split + i);
}
if (i == 0) {
break;
}
// check 'dirname', i.e. for "/foo/bar/fi" we'd check '/foo/bar', '/foo'
path_split[i-1] = '\0';
c_strlist_add_grow(&path_components, path_split);
}
SAFE_FREE(path_split);
}
/* Loop over all exclude patterns and evaluate the given path */
for (i = 0; match == CSYNC_NOT_EXCLUDED && i < excludes->count; i++) {
bool match_dirs_only = false;
char *pattern = excludes->vector[i];
type = CSYNC_FILE_EXCLUDE_LIST;
if (!pattern[0]) { /* empty pattern */
continue;
}
/* Excludes starting with ']' means it can be cleanup */
if (pattern[0] == ']') {
++pattern;
if (filetype == CSYNC_FTW_TYPE_FILE) {
type = CSYNC_FILE_EXCLUDE_AND_REMOVE;
}
}
/* Check if the pattern applies to pathes only. */
if (pattern[strlen(pattern)-1] == '/') {
if (!check_leading_dirs && filetype == CSYNC_FTW_TYPE_FILE) {
continue;
}
match_dirs_only = true;
pattern[strlen(pattern)-1] = '\0'; /* Cut off the slash */
}
/* check if the pattern contains a / and if, compare to the whole path */
if (strchr(pattern, '/')) {
rc = csync_fnmatch(pattern, path, FNM_PATHNAME);
if( rc == 0 ) {
match = type;
}
/* if the pattern requires a dir, but path is not, its still not excluded. */
if (match_dirs_only && filetype != CSYNC_FTW_TYPE_DIR) {
match = CSYNC_NOT_EXCLUDED;
}
}
/* if still not excluded, check each component and leading directory of the path */
if (match == CSYNC_NOT_EXCLUDED && check_leading_dirs) {
size_t j = 0;
if (match_dirs_only && filetype == CSYNC_FTW_TYPE_FILE) {
j = 1; // skip the first entry, which is bname
}
for (; j < path_components->count; ++j) {
rc = csync_fnmatch(pattern, path_components->vector[j], 0);
if (rc == 0) {
match = type;
break;
}
}
} else if (match == CSYNC_NOT_EXCLUDED && !check_leading_dirs) {
rc = csync_fnmatch(pattern, bname, 0);
if (rc == 0) {
match = type;
}
}
if (match_dirs_only) {
/* restore the '/' */
pattern[strlen(pattern)] = '/';
}
}
c_strlist_destroy(path_components);
out:
return match;
}
CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype) {
return _csync_excluded_common(excludes, path, filetype, false);
}
CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype) {
return _csync_excluded_common(excludes, path, filetype, true);
}

View File

@@ -1,88 +0,0 @@
/*
* libcsync -- a library to sync a directory with another
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _CSYNC_EXCLUDE_H
#define _CSYNC_EXCLUDE_H
#include "ocsynclib.h"
enum csync_exclude_type_e {
CSYNC_NOT_EXCLUDED = 0,
CSYNC_FILE_SILENTLY_EXCLUDED,
CSYNC_FILE_EXCLUDE_AND_REMOVE,
CSYNC_FILE_EXCLUDE_LIST,
CSYNC_FILE_EXCLUDE_INVALID_CHAR,
CSYNC_FILE_EXCLUDE_TRAILING_SPACE,
CSYNC_FILE_EXCLUDE_LONG_FILENAME,
CSYNC_FILE_EXCLUDE_HIDDEN,
CSYNC_FILE_EXCLUDE_STAT_FAILED
};
typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
#ifdef WITH_TESTING
int OCSYNC_EXPORT _csync_exclude_add(c_strlist_t **inList, const char *string);
#endif
/**
* @brief Load exclude list
*
* @param ctx The context of the synchronizer.
* @param fname The filename to load.
*
* @return 0 on success, -1 if an error occurred with errno set.
*/
int OCSYNC_EXPORT csync_exclude_load(const char *fname, c_strlist_t **list);
/**
* @brief Check if the given path should be excluded in a traversal situation.
*
* It does only part of the work that csync_excluded does because it's assumed
* that all leading directories have been run through csync_excluded_traversal()
* before. This can be significantly faster.
*
* That means for '/foo/bar/file' only ('/foo/bar/file', 'file') is checked
* against the exclude patterns.
*
* @param ctx The synchronizer context.
* @param path The patch to check.
*
* @return 2 if excluded and needs cleanup, 1 if excluded, 0 if not.
*/
CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype);
/**
* @brief csync_excluded_no_ctx
* @param excludes
* @param path
* @param filetype
* @return
*/
CSYNC_EXCLUDE_TYPE OCSYNC_EXPORT csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype);
#endif /* _CSYNC_EXCLUDE_H */
/**
* @brief Checks if filename is considered reserved by Windows
* @param file_name filename
* @return true if file is reserved, false otherwise
*/
bool csync_is_windows_reserved_word(const char *file_name);
/* vim: set ft=c.doxygen ts=8 sw=2 et cindent: */

View File

@@ -1,116 +0,0 @@
/*
* libcsync -- a library to sync a directory with another
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config_csync.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include "csync_private.h"
#include "csync_log.h"
CSYNC_THREAD int csync_log_level;
CSYNC_THREAD csync_log_callback csync_log_cb;
CSYNC_THREAD void *csync_log_userdata;
static void csync_log_stderr(int verbosity,
const char *function,
const char *buffer)
{
fprintf(stderr, "[%d] %s", verbosity, function);
fprintf(stderr, " %s\n", buffer);
}
static void csync_log_function(int verbosity,
const char *function,
const char *buffer)
{
csync_log_callback log_fn = csync_get_log_callback();
if (log_fn) {
char buf[1024];
snprintf(buf, sizeof(buf), "%s: %s", function, buffer);
log_fn(verbosity,
function,
buf,
csync_get_log_userdata());
return;
}
csync_log_stderr(verbosity, function, buffer);
}
void csync_log(int verbosity,
const char *function,
const char *format, ...)
{
char buffer[1024];
va_list va;
if (verbosity <= csync_get_log_level()) {
va_start(va, format);
vsnprintf(buffer, sizeof(buffer), format, va);
va_end(va);
csync_log_function(verbosity, function, buffer);
}
}
int csync_set_log_level(int level) {
if (level < 0) {
return -1;
}
csync_log_level = level;
return 0;
}
int csync_get_log_level(void) {
return csync_log_level;
}
int csync_set_log_callback(csync_log_callback cb) {
if (cb == NULL) {
return -1;
}
csync_log_cb = cb;
return 0;
}
csync_log_callback csync_get_log_callback(void) {
return csync_log_cb;
}
void *csync_get_log_userdata(void)
{
return csync_log_userdata;
}
int csync_set_log_userdata(void *data)
{
csync_log_userdata = data;
return 0;
}

View File

@@ -1,75 +0,0 @@
/*
* libcsync -- a library to sync a directory with another
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file csync_log.h
*
* @brief Logging interface of csync
*
* @defgroup csyncLogInternals csync logging internals
* @ingroup csyncInternalAPI
*
* @{
*/
#ifndef _CSYNC_LOG_H
#define _CSYNC_LOG_H
/* GCC have printf type attribute check. */
#ifndef PRINTF_ATTRIBUTE
#ifdef __GNUC__
#ifdef _WIN32
#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__gnu_printf__, a, b)))
#else
#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
#endif
#else
#define PRINTF_ATTRIBUTE(a,b)
#endif /* __GNUC__ */
#endif /* ndef PRINTF_ATTRIBUTE */
enum csync_log_priority_e {
CSYNC_LOG_PRIORITY_NOLOG = 0,
CSYNC_LOG_PRIORITY_FATAL,
CSYNC_LOG_PRIORITY_ALERT,
CSYNC_LOG_PRIORITY_CRIT,
CSYNC_LOG_PRIORITY_ERROR,
CSYNC_LOG_PRIORITY_WARN,
CSYNC_LOG_PRIORITY_NOTICE,
CSYNC_LOG_PRIORITY_INFO,
CSYNC_LOG_PRIORITY_DEBUG,
CSYNC_LOG_PRIORITY_TRACE,
CSYNC_LOG_PRIORITY_NOTSET,
CSYNC_LOG_PRIORITY_UNKNOWN,
};
#define CSYNC_LOG(priority, ...) \
csync_log(priority, __func__, __VA_ARGS__)
void csync_log(int verbosity,
const char *function,
const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
/**
* }@
*/
#endif /* _CSYNC_LOG_H */
/* vim: set ft=c.doxygen ts=4 sw=4 et cindent: */

View File

@@ -1,229 +0,0 @@
/*
* cynapses libc functions
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
* Copyright (c) 2012-2013 by Klaas Freitag <freitag@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file csync_private.h
*
* @brief Private interface of csync
*
* @defgroup csyncInternalAPI csync internal API
*
* @{
*/
#ifndef _CSYNC_PRIVATE_H
#define _CSYNC_PRIVATE_H
#include <stdint.h>
#include <stdbool.h>
#include <sqlite3.h>
#include "config_csync.h"
#include "std/c_lib.h"
#include "std/c_private.h"
#include "csync.h"
#include "csync_misc.h"
#ifdef WITH_ICONV
#include <iconv.h>
#endif
#ifdef HAVE_ICONV_H
#include <iconv.h>
#endif
#ifdef HAVE_SYS_ICONV_H
#include <sys/iconv.h>
#endif
#include "csync_macros.h"
/**
* How deep to scan directories.
*/
#define MAX_DEPTH 50
#define CSYNC_STATUS_INIT 1 << 0
#define CSYNC_STATUS_UPDATE 1 << 1
#define CSYNC_STATUS_RECONCILE 1 << 2
#define CSYNC_STATUS_PROPAGATE 1 << 3
#define CSYNC_STATUS_DONE (CSYNC_STATUS_INIT | \
CSYNC_STATUS_UPDATE | \
CSYNC_STATUS_RECONCILE | \
CSYNC_STATUS_PROPAGATE)
enum csync_replica_e {
LOCAL_REPLICA,
REMOTE_REPLICA
};
typedef struct csync_file_stat_s csync_file_stat_t;
/**
* @brief csync public structure
*/
struct csync_s {
struct {
csync_auth_callback auth_function;
void *userdata;
csync_update_callback update_callback;
void *update_callback_userdata;
/* hooks for checking the white list (uses the update_callback_userdata) */
int (*checkSelectiveSyncBlackListHook)(void*, const char*);
int (*checkSelectiveSyncNewFolderHook)(void*, const char* /* path */, const char* /* remotePerm */);
csync_vio_opendir_hook remote_opendir_hook;
csync_vio_readdir_hook remote_readdir_hook;
csync_vio_closedir_hook remote_closedir_hook;
void *vio_userdata;
/* hook for comparing checksums of files during discovery */
csync_checksum_hook checksum_hook;
void *checksum_userdata;
} callbacks;
c_strlist_t *excludes;
struct {
char *file;
sqlite3 *db;
int exists;
sqlite3_stmt* by_hash_stmt;
sqlite3_stmt* by_fileid_stmt;
sqlite3_stmt* by_inode_stmt;
int lastReturnValue;
} statedb;
struct {
char *uri;
c_rbtree_t *tree;
enum csync_replica_e type;
} local;
struct {
c_rbtree_t *tree;
enum csync_replica_e type;
int read_from_db;
const char *root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */
} remote;
#if defined(HAVE_ICONV) && defined(WITH_ICONV)
struct {
iconv_t iconv_cd;
} options;
#endif
/* replica we are currently walking */
enum csync_replica_e current;
/* replica we want to work on */
enum csync_replica_e replica;
/* Used in the update phase so changes in the sub directories can be notified to
parent directories */
csync_file_stat_t *current_fs;
/* csync error code */
enum csync_status_codes_e status_code;
char *error_string;
int status;
volatile int abort;
void *rename_info;
/**
* Specify if it is allowed to read the remote tree from the DB (default to enabled)
*/
bool read_remote_from_db;
/**
* If true, the DB is considered empty and all reads are skipped. (default is false)
* This is useful during the initial local discovery as it speeds it up significantly.
*/
bool db_is_empty;
bool ignore_hidden_files;
};
#ifdef _MSC_VER
#pragma pack(1)
#endif
struct csync_file_stat_s {
uint64_t phash; /* u64 */
time_t modtime; /* u64 */
int64_t size; /* u64 */
size_t pathlen; /* u64 */
uint64_t inode; /* u64 */
mode_t mode; /* u32 */
unsigned int type : 4;
unsigned int child_modified : 1;
unsigned int has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */
char *destpath; /* for renames */
const char *etag;
char file_id[FILE_ID_BUF_SIZE+1]; /* the ownCloud file id is fixed width in ownCloud. */
char *directDownloadUrl;
char *directDownloadCookies;
char remotePerm[REMOTE_PERM_BUF_SIZE+1];
const char *checksum;
uint32_t checksumTypeId;
CSYNC_STATUS error_status;
enum csync_instructions_e instruction; /* u32 */
char path[1]; /* u8 */
}
#if !defined(__SUNPRO_C) && !defined(_MSC_VER)
__attribute__ ((packed))
#endif
#ifdef _MSC_VER
#pragma pack()
#endif
;
OCSYNC_EXPORT void csync_file_stat_free(csync_file_stat_t *st);
/*
* context for the treewalk function
*/
struct _csync_treewalk_context_s
{
csync_treewalk_visit_func *user_visitor;
int instruction_filter;
void *userdata;
};
typedef struct _csync_treewalk_context_s _csync_treewalk_context;
void set_errno_from_http_errcode( int err );
/**
* }@
*/
#endif /* _CSYNC_PRIVATE_H */
/* vim: set ft=c.doxygen ts=8 sw=2 et cindent: */

View File

@@ -1,385 +0,0 @@
/*
* libcsync -- a library to sync a directory with another
*
* Copyright (c) 2008-2013 by Andreas Schneider <asn@cryptomilk.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config_csync.h"
#include <assert.h>
#include "csync_private.h"
#include "csync_reconcile.h"
#include "csync_util.h"
#include "csync_statedb.h"
#include "csync_rename.h"
#include "c_jhash.h"
#define CSYNC_LOG_CATEGORY_NAME "csync.reconciler"
#include "csync_log.h"
#include "inttypes.h"
/* Check if a file is ignored because one parent is ignored.
* return the node of the ignored directoy if it's the case, or NULL if it is not ignored */
static c_rbnode_t *_csync_check_ignored(c_rbtree_t *tree, const char *path, int pathlen) {
uint64_t h = 0;
c_rbnode_t *node = NULL;
/* compute the size of the parent directory */
int parentlen = pathlen - 1;
while (parentlen > 0 && path[parentlen] != '/') {
parentlen--;
}
if (parentlen <= 0) {
return NULL;
}
h = c_jhash64((uint8_t *) path, parentlen, 0);
node = c_rbtree_find(tree, &h);
if (node) {
csync_file_stat_t *n = (csync_file_stat_t*)node->data;
if (n->instruction == CSYNC_INSTRUCTION_IGNORE) {
/* Yes, we are ignored */
return node;
} else {
/* Not ignored */
return NULL;
}
} else {
/* Try if the parent itself is ignored */
return _csync_check_ignored(tree, path, parentlen);
}
}
/**
* The main function in the reconcile pass.
*
* It's called for each entry in the local and remote rbtrees by
* csync_reconcile()
*
* Before the reconcile phase the trees already know about changes
* relative to the sync journal. This function's job is to spot conflicts
* between local and remote changes and adjust the nodes accordingly.
*
* See doc/dev/sync-algorithm.md for an overview.
*
*
* Older detail comment:
*
* We merge replicas at the file level. The merged replica contains the
* superset of files that are on the local machine and server copies of
* the replica. In the case where the same file is in both the local
* and server copy, the file that was modified most recently is used.
* This means that new files are not deleted, and updated versions of
* existing files are not overwritten.
*
* When a file is updated, the merge algorithm compares the destination
* file with the the source file. If the destination file is newer
* (timestamp is newer), it is not overwritten. If both files, on the
* source and the destination, have been changed, the newer file wins.
*/
static int _csync_merge_algorithm_visitor(void *obj, void *data) {
csync_file_stat_t *cur = NULL;
csync_file_stat_t *other = NULL;
csync_file_stat_t *tmp = NULL;
uint64_t h = 0;
int len = 0;
CSYNC *ctx = NULL;
c_rbtree_t *tree = NULL;
c_rbnode_t *node = NULL;
cur = (csync_file_stat_t *) obj;
ctx = (CSYNC *) data;
/* we need the opposite tree! */
switch (ctx->current) {
case LOCAL_REPLICA:
tree = ctx->remote.tree;
break;
case REMOTE_REPLICA:
tree = ctx->local.tree;
break;
default:
break;
}
node = c_rbtree_find(tree, &cur->phash);
if (!node) {
/* Check the renamed path as well. */
char *renamed_path = csync_rename_adjust_path(ctx, cur->path);
if (!c_streq(renamed_path, cur->path)) {
len = strlen( renamed_path );
h = c_jhash64((uint8_t *) renamed_path, len, 0);
node = c_rbtree_find(tree, &h);
}
SAFE_FREE(renamed_path);
}
if (!node) {
/* Check if it is ignored */
node = _csync_check_ignored(tree, cur->path, cur->pathlen);
/* If it is ignored, other->instruction will be IGNORE so this one will also be ignored */
}
/* file only found on current replica */
if (node == NULL) {
switch(cur->instruction) {
/* file has been modified */
case CSYNC_INSTRUCTION_EVAL:
cur->instruction = CSYNC_INSTRUCTION_NEW;
break;
/* file has been removed on the opposite replica */
case CSYNC_INSTRUCTION_NONE:
case CSYNC_INSTRUCTION_UPDATE_METADATA:
if (cur->has_ignored_files) {
/* Do not remove a directory that has ignored files */
break;
}
if (cur->child_modified) {
/* re-create directory that has modified contents */
cur->instruction = CSYNC_INSTRUCTION_NEW;
break;
}
cur->instruction = CSYNC_INSTRUCTION_REMOVE;
break;
case CSYNC_INSTRUCTION_EVAL_RENAME:
if(ctx->current == LOCAL_REPLICA ) {
/* use the old name to find the "other" node */
tmp = csync_statedb_get_stat_by_inode(ctx, cur->inode);
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Finding opposite temp through inode %" PRIu64 ": %s",
cur->inode, tmp ? "true":"false");
} else if( ctx->current == REMOTE_REPLICA ) {
tmp = csync_statedb_get_stat_by_file_id(ctx, cur->file_id);
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Finding opposite temp through file ID %s: %s",
cur->file_id, tmp ? "true":"false");
} else {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unknown replica...");
}
if( tmp ) {
len = strlen( tmp->path );
if( len > 0 ) {
h = c_jhash64((uint8_t *) tmp->path, len, 0);
/* First, check that the file is NOT in our tree (another file with the same name was added) */
node = c_rbtree_find(ctx->current == REMOTE_REPLICA ? ctx->remote.tree : ctx->local.tree, &h);
if (node) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Origin found in our tree : %s", tmp->path);
} else {
/* Find the temporar file in the other tree. */
node = c_rbtree_find(tree, &h);
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "PHash of temporary opposite (%s): %" PRIu64 " %s",
tmp->path , h, node ? "found": "not found" );
if (node) {
other = (csync_file_stat_t*)node->data;
} else {
/* the renamed file could not be found in the opposite tree. That is because it
* is not longer existing there, maybe because it was renamed or deleted.
* The journal is cleaned up later after propagation.
*/
}
}
}
if(!other) {
cur->instruction = CSYNC_INSTRUCTION_NEW;
} else if (other->instruction == CSYNC_INSTRUCTION_NONE
|| other->instruction == CSYNC_INSTRUCTION_UPDATE_METADATA
|| cur->type == CSYNC_FTW_TYPE_DIR) {
other->instruction = CSYNC_INSTRUCTION_RENAME;
other->destpath = c_strdup( cur->path );
if( !c_streq(cur->file_id, "") ) {
csync_vio_set_file_id( other->file_id, cur->file_id );
}
other->inode = cur->inode;
cur->instruction = CSYNC_INSTRUCTION_NONE;
} else if (other->instruction == CSYNC_INSTRUCTION_REMOVE) {
other->instruction = CSYNC_INSTRUCTION_RENAME;
other->destpath = c_strdup( cur->path );
if( !c_streq(cur->file_id, "") ) {
csync_vio_set_file_id( other->file_id, cur->file_id );
}
other->inode = cur->inode;
cur->instruction = CSYNC_INSTRUCTION_NONE;
} else if (other->instruction == CSYNC_INSTRUCTION_NEW) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "OOOO=> NEW detected in other tree!");
cur->instruction = CSYNC_INSTRUCTION_CONFLICT;
} else {
assert(other->type != CSYNC_FTW_TYPE_DIR);
cur->instruction = CSYNC_INSTRUCTION_NONE;
other->instruction = CSYNC_INSTRUCTION_SYNC;
}
csync_file_stat_free(tmp);
}
break;
default:
break;
}
} else {
bool is_conflict = true;
/*
* file found on the other replica
*/
other = (csync_file_stat_t *) node->data;
switch (cur->instruction) {
case CSYNC_INSTRUCTION_UPDATE_METADATA:
if (other->instruction == CSYNC_INSTRUCTION_UPDATE_METADATA && ctx->current == LOCAL_REPLICA) {
// Remote wins, the SyncEngine will pick relevant local metadata since the remote tree is walked last.
cur->instruction = CSYNC_INSTRUCTION_NONE;
}
break;
case CSYNC_INSTRUCTION_EVAL_RENAME:
/* If the file already exist on the other side, we have a conflict.
Abort the rename and consider it is a new file. */
cur->instruction = CSYNC_INSTRUCTION_NEW;
/* fall trough */
/* file on current replica is changed or new */
case CSYNC_INSTRUCTION_EVAL:
case CSYNC_INSTRUCTION_NEW:
// This operation is usually a no-op and will by default return false
if (csync_file_locked_or_open(ctx->local.uri, cur->path)) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "[Reconciler] IGNORING file %s/%s since it is locked / open", ctx->local.uri, cur->path);
cur->instruction = CSYNC_INSTRUCTION_ERROR;
if (cur->error_status == CSYNC_STATUS_OK) // don't overwrite error
cur->error_status = CYSNC_STATUS_FILE_LOCKED_OR_OPEN;
break;
} else {
//CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "[Reconciler] not ignoring file %s/%s", ctx->local.uri, cur->path);
}
switch (other->instruction) {
/* file on other replica is changed or new */
case CSYNC_INSTRUCTION_NEW:
case CSYNC_INSTRUCTION_EVAL:
if (other->type == CSYNC_FTW_TYPE_DIR &&
cur->type == CSYNC_FTW_TYPE_DIR) {
// Folders of the same path are always considered equals
is_conflict = false;
} else {
is_conflict = ((other->size != cur->size) || (other->modtime != cur->modtime));
// FIXME: do a binary comparision of the file here because of the following
// edge case:
// The files could still have different content, even though the mtime
// and size are the same.
}
if (ctx->current == REMOTE_REPLICA) {
// If the files are considered equal, only update the DB with the etag from remote
cur->instruction = is_conflict ? CSYNC_INSTRUCTION_CONFLICT : CSYNC_INSTRUCTION_UPDATE_METADATA;
other->instruction = CSYNC_INSTRUCTION_NONE;
} else {
cur->instruction = CSYNC_INSTRUCTION_NONE;
other->instruction = is_conflict ? CSYNC_INSTRUCTION_CONFLICT : CSYNC_INSTRUCTION_UPDATE_METADATA;
}
break;
/* file on the other replica has not been modified */
case CSYNC_INSTRUCTION_NONE:
case CSYNC_INSTRUCTION_UPDATE_METADATA:
if (cur->type != other->type) {
// If the type of the entity changed, it's like NEW, but
// needs to delete the other entity first.
cur->instruction = CSYNC_INSTRUCTION_TYPE_CHANGE;
other->instruction = CSYNC_INSTRUCTION_NONE;
} else if (cur->type == CSYNC_FTW_TYPE_DIR) {
cur->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA;
other->instruction = CSYNC_INSTRUCTION_NONE;
} else {
cur->instruction = CSYNC_INSTRUCTION_SYNC;
other->instruction = CSYNC_INSTRUCTION_NONE;
}
break;
case CSYNC_INSTRUCTION_IGNORE:
cur->instruction = CSYNC_INSTRUCTION_IGNORE;
break;
default:
break;
}
default:
break;
}
}
//hide instruction NONE messages when log level is set to debug,
//only show these messages on log level trace
const char *repo = ctx->current == REMOTE_REPLICA ? "server" : "client";
if(cur->instruction ==CSYNC_INSTRUCTION_NONE)
{
if(cur->type == CSYNC_FTW_TYPE_DIR)
{
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
"%-30s %s dir: %s",
csync_instruction_str(cur->instruction),
repo,
cur->path);
}
else
{
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE,
"%-30s %s file: %s",
csync_instruction_str(cur->instruction),
repo,
cur->path);
}
}
else
{
if(cur->type == CSYNC_FTW_TYPE_DIR)
{
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
"%-30s %s dir: %s",
csync_instruction_str(cur->instruction),
repo,
cur->path);
}
else
{
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG,
"%-30s %s file: %s",
csync_instruction_str(cur->instruction),
repo,
cur->path);
}
}
return 0;
}
int csync_reconcile_updates(CSYNC *ctx) {
int rc;
c_rbtree_t *tree = NULL;
switch (ctx->current) {
case LOCAL_REPLICA:
tree = ctx->local.tree;
break;
case REMOTE_REPLICA:
tree = ctx->remote.tree;
break;
default:
break;
}
rc = c_rbtree_walk(tree, (void *) ctx, _csync_merge_algorithm_visitor);
if( rc < 0 ) {
ctx->status_code = CSYNC_STATUS_RECONCILE_ERROR;
}
return rc;
}
/* vim: set ts=8 sw=2 et cindent: */

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