mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-08 03:46:49 +02:00
Compare commits
51 Commits
v1.8.1-bet
...
v1.8.1-rc2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5fba476076 | ||
|
|
d63abef718 | ||
|
|
cdba8a7f2f | ||
|
|
21967a130b | ||
|
|
08e78d5d6f | ||
|
|
fe68e1e82c | ||
|
|
25ac3bfdb7 | ||
|
|
4700c604b1 | ||
|
|
356fa737c5 | ||
|
|
520e2eb392 | ||
|
|
e0d2bd4830 | ||
|
|
1dc05f99bf | ||
|
|
b2b176bcd0 | ||
|
|
fde5ccd0df | ||
|
|
d1fe25cc31 | ||
|
|
60c18f75b5 | ||
|
|
c7f3791f3d | ||
|
|
ee9d5e6bf0 | ||
|
|
96fa3a3a1a | ||
|
|
7c4deec800 | ||
|
|
78e82eb920 | ||
|
|
3c91a1ace4 | ||
|
|
3a52db46ad | ||
|
|
137bce6dd0 | ||
|
|
f000e6ce6a | ||
|
|
7c1281dd06 | ||
|
|
60729f2bbd | ||
|
|
0b0ecfcbe4 | ||
|
|
1fe86bced2 | ||
|
|
c6a62a497d | ||
|
|
8be6881093 | ||
|
|
99c8118229 | ||
|
|
6c5ca055c4 | ||
|
|
a6ec8f3090 | ||
|
|
b039c2ce86 | ||
|
|
5a6d286c41 | ||
|
|
ba65187ad3 | ||
|
|
a91f54f0a8 | ||
|
|
d77c1f3e4a | ||
|
|
7390ddbd98 | ||
|
|
32a4b40f0a | ||
|
|
bc1bc2a4f8 | ||
|
|
155c965866 | ||
|
|
6c73f25747 | ||
|
|
2518fd7059 | ||
|
|
56edae6958 | ||
|
|
d8275cd4e1 | ||
|
|
c3dca7a288 | ||
|
|
96ff0076c7 | ||
|
|
8bb4af067a | ||
|
|
df0df76b51 |
46
ChangeLog
46
ChangeLog
@@ -1,6 +1,50 @@
|
|||||||
ChangeLog
|
ChangeLog
|
||||||
=========
|
=========
|
||||||
version 1.8.0 (release 2015-03-xx)
|
version 1.8.1 (release 2015-04-xx)
|
||||||
|
* Make "operation canceled" error a soft error
|
||||||
|
* Do not throw an error for files that are scheduled to be removed,
|
||||||
|
but can not be found on the server. #2919
|
||||||
|
* Windows: Reset QNAM to proper function after hibernation. #2899 #2895 #2973
|
||||||
|
* Fix argument verification of --confdir #2453
|
||||||
|
* Fix a crash when accessing a dangling UploadDevice pointer #2984
|
||||||
|
* Add-folder wizard: Make sure there is a scrollbar if folder names
|
||||||
|
are too long #2962
|
||||||
|
* Add-folder Wizard: Select the newly created folder
|
||||||
|
* Activity: Correctly restore column sizes #3005
|
||||||
|
* SSL Button: do not crash on empty certificate chain
|
||||||
|
* SSL Button: Make menu creation lazy #3007 #2990
|
||||||
|
* Lookup system proxy async to avoid hangs #2993 #2802
|
||||||
|
* ShareDialog: Some GUI refinements
|
||||||
|
* ShareDialog: On creation of a share always retrieve the share
|
||||||
|
This makes sure that if a default expiration date is set this is reflected
|
||||||
|
in the dialog. #2889
|
||||||
|
* ShareDialog: Only show share dialog if we are connected.
|
||||||
|
* HttpCreds: Fill pw dialog with previous password. #2848 #2879
|
||||||
|
* HttpCreds: Delete password from old location. #2186
|
||||||
|
* Do not store Session Cookies in the client cookie storage
|
||||||
|
* CookieJar: Don't accidentally overwrite cookies. #2808
|
||||||
|
* ProtocolWidget: Always add seconds to the DateTime locale. #2535
|
||||||
|
* Updater: Give context as to which app is about to be updated #3040
|
||||||
|
* Windows: Add version information for owncloud.exe. This should help us know
|
||||||
|
what version or build number a crash report was generated with.
|
||||||
|
* Fix a crash on shutdown in ~SocketApi #3057
|
||||||
|
* SyncEngine: Show more timing measurements #3064
|
||||||
|
* Discovery: Add warning if returned etag is 0
|
||||||
|
* Fix a crash caused by an invalid DiscoveryDirectoryResult::iterator #3051
|
||||||
|
* Sync: Fix sync of deletions during 503. #2894
|
||||||
|
* Handle redirect of auth request. #3082
|
||||||
|
* Discovery: Fix parsing of broken XML replies
|
||||||
|
* Sort folder sizes SelectiveSyncTreeView numerically #3112
|
||||||
|
* Sync: PropagateDownload: Read the mtime from the file system after writing it #3103
|
||||||
|
* Sync: Propagate download: Fix restoring files for which the conflict file exists #3106
|
||||||
|
* Use identical User Agents and version for csync and the Qt parts
|
||||||
|
* Prevent another crash in ~SocketApi #3118
|
||||||
|
* Windows: Fix rename of finished file. #3073
|
||||||
|
* AccountWizard: Fix auth error handling. #3155
|
||||||
|
* Documentation fixes
|
||||||
|
* Infrastructure/build fixes
|
||||||
|
|
||||||
|
version 1.8.0 (release 2015-03-17)
|
||||||
* Mac OS: HIDPI support
|
* Mac OS: HIDPI support
|
||||||
* Support Sharing from desktop: Added a share dialog that can be
|
* Support Sharing from desktop: Added a share dialog that can be
|
||||||
opened by context menu in the file managers (Win, Mac, Nautilus)
|
opened by context menu in the file managers (Win, Mac, Nautilus)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ set( MIRALL_VERSION_PATCH 1 )
|
|||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
set( MIRALL_VERSION_SUFFIX "beta1") #e.g. beta1, beta2, rc1
|
set( MIRALL_VERSION_SUFFIX "rc2") #e.g. beta1, beta2, rc1
|
||||||
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|
||||||
if( NOT DEFINED MIRALL_VERSION_BUILD )
|
if( NOT DEFINED MIRALL_VERSION_BUILD )
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ if [ ! -z "$identity" ]; then
|
|||||||
echo "Will try to sign the installer"
|
echo "Will try to sign the installer"
|
||||||
pushd $install_path
|
pushd $install_path
|
||||||
productsign --sign "$identity" "$installer_file" "$installer_file.new"
|
productsign --sign "$identity" "$installer_file" "$installer_file.new"
|
||||||
mv "$installer_file".new $installer_file
|
mv "$installer_file".new "$installer_file"
|
||||||
popd
|
popd
|
||||||
else
|
else
|
||||||
echo "No certificate given, will not sign the pkg"
|
echo "No certificate given, will not sign the pkg"
|
||||||
|
|||||||
@@ -260,12 +260,18 @@ def CopyFramework(path):
|
|||||||
commands.append(args)
|
commands.append(args)
|
||||||
args = ['chmod', 'u+w', os.path.join(full_path, parts[-1])]
|
args = ['chmod', 'u+w', os.path.join(full_path, parts[-1])]
|
||||||
commands.append(args)
|
commands.append(args)
|
||||||
args = ['chmod', 'u+w', os.path.join(frameworks_dir, framework, "Resources")]
|
resources_dir = os.path.join(frameworks_dir, framework, "Resources")
|
||||||
|
|
||||||
|
args = ['mkdir', resources_dir]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['chmod', 'u+w', resources_dir]
|
||||||
commands.append(args)
|
commands.append(args)
|
||||||
|
|
||||||
info_plist = os.path.join(os.path.split(path)[0], '..', '..', 'Contents', 'Info.plist')
|
info_plist = os.path.join(os.path.split(path)[0], '..', '..', 'Contents', 'Info.plist')
|
||||||
|
if not os.path.exists(info_plist):
|
||||||
|
info_plist = os.path.join(os.path.split(path)[0], 'Resources', 'Info.plist')
|
||||||
if os.path.exists(info_plist):
|
if os.path.exists(info_plist):
|
||||||
args = ['cp', '-r', info_plist, os.path.join(frameworks_dir, framework, "Resources")]
|
args = ['cp', '-r', info_plist, resources_dir]
|
||||||
commands.append(args)
|
commands.append(args)
|
||||||
return os.path.join(full_path, parts[-1])
|
return os.path.join(full_path, parts[-1])
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh -x
|
#!/bin/sh -xe
|
||||||
|
|
||||||
[ "$#" -lt 2 ] && echo "Usage: sign_app.sh <app> <identity>" && exit
|
[ "$#" -lt 2 ] && echo "Usage: sign_app.sh <app> <identity>" && exit
|
||||||
|
|
||||||
@@ -7,6 +7,6 @@ identity="$2"
|
|||||||
|
|
||||||
codesign -s "$identity" --force --verbose=4 --deep "$src_app"
|
codesign -s "$identity" --force --verbose=4 --deep "$src_app"
|
||||||
|
|
||||||
# Just for our debug purposes:
|
# Verify the signature
|
||||||
spctl -a -t exec -vv $src_app
|
spctl -a -t exec -vv $src_app
|
||||||
codesign -dv $src_app
|
codesign -dv $src_app
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ StrCpy $UNINSTALL_ABORT "A desinstalaci
|
|||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Acceso de inicio rápido (n/d)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Acceso de inicio rápido (n/d)"
|
||||||
StrCpy $INIT_NO_DESKTOP "Atallo no escritorio (sobrescribe o existente)"
|
StrCpy $INIT_NO_DESKTOP "Atallo no escritorio (sobrescribe o existente)"
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Non foi posíbel elevalo, erro:"
|
StrCpy $UAC_ERROR_ELEVATE "Non foi posíbel elevalo, erro:"
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador require acceso de administrador, tenteo de novo"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Este instalador require acceso de administrador, ténteo de novo"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "O instalador xa está en execución."
|
StrCpy $INIT_INSTALLER_RUNNING "O instalador xa está en execución."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de administrador, tenteo de novo"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de administrador, ténteo de novo"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
||||||
StrCpy $SectionGroup_Shortcuts "Atallos"
|
StrCpy $SectionGroup_Shortcuts "Atallos"
|
||||||
|
|||||||
@@ -3,13 +3,7 @@
|
|||||||
# global needed variables
|
# global needed variables
|
||||||
set(APPLICATION_NAME "ocsync")
|
set(APPLICATION_NAME "ocsync")
|
||||||
|
|
||||||
set(APPLICATION_VERSION_MAJOR "0")
|
set(LIBRARY_VERSION ${MIRALL_VERSION})
|
||||||
set(APPLICATION_VERSION_MINOR "91")
|
|
||||||
set(APPLICATION_VERSION_PATCH "5")
|
|
||||||
|
|
||||||
set(APPLICATION_VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}")
|
|
||||||
|
|
||||||
set(LIBRARY_VERSION "0.2.1")
|
|
||||||
set(LIBRARY_SOVERSION "0")
|
set(LIBRARY_SOVERSION "0")
|
||||||
|
|
||||||
# add definitions
|
# add definitions
|
||||||
|
|||||||
@@ -40,8 +40,6 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <config_csync.h>
|
#include <config_csync.h>
|
||||||
|
|
||||||
#include "csync_version.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
#include "csync_private.h"
|
#include "csync_private.h"
|
||||||
|
|
||||||
|
#include "csync_version.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper method to build up a user text for SSL problems, called from the
|
* helper method to build up a user text for SSL problems, called from the
|
||||||
@@ -437,8 +439,8 @@ int dav_connect(CSYNC *csyncCtx, const char *base_url) {
|
|||||||
// Should never take more than some seconds, 30 is really a max.
|
// Should never take more than some seconds, 30 is really a max.
|
||||||
ne_set_connect_timeout(ctx->dav_session.ctx, 30);
|
ne_set_connect_timeout(ctx->dav_session.ctx, 30);
|
||||||
|
|
||||||
snprintf( uaBuf, sizeof(uaBuf), "Mozilla/5.0 (%s) csyncoC/%s",
|
snprintf( uaBuf, sizeof(uaBuf), "Mozilla/5.0 (%s) mirall/%s (csyncoC)",
|
||||||
csync_owncloud_get_platform(), CSYNC_STRINGIFY( LIBCSYNC_VERSION ));
|
CSYNC_STRINGIFY( MIRALL_VERSION ), csync_owncloud_get_platform() );
|
||||||
ne_set_useragent( ctx->dav_session.ctx, uaBuf);
|
ne_set_useragent( ctx->dav_session.ctx, uaBuf);
|
||||||
ne_set_server_auth(ctx->dav_session.ctx, authentication_callback_by_neon, ctx);
|
ne_set_server_auth(ctx->dav_session.ctx, authentication_callback_by_neon, ctx);
|
||||||
|
|
||||||
|
|||||||
@@ -28,22 +28,7 @@ extern "C" {
|
|||||||
#define CSYNC_STRINGIFY(s) CSYNC_TOSTRING(s)
|
#define CSYNC_STRINGIFY(s) CSYNC_TOSTRING(s)
|
||||||
#define CSYNC_TOSTRING(s) #s
|
#define CSYNC_TOSTRING(s) #s
|
||||||
|
|
||||||
/* csync version macros */
|
#define MIRALL_VERSION @MIRALL_VERSION@
|
||||||
#define CSYNC_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c))
|
|
||||||
#define CSYNC_VERSION_DOT(a, b, c) a ##.## b ##.## c
|
|
||||||
#define CSYNC_VERSION(a, b, c) CSYNC_VERSION_DOT(a, b, c)
|
|
||||||
|
|
||||||
/* csync version */
|
|
||||||
#define LIBCSYNC_VERSION_MAJOR @APPLICATION_VERSION_MAJOR@
|
|
||||||
#define LIBCSYNC_VERSION_MINOR @APPLICATION_VERSION_MINOR@
|
|
||||||
#define LIBCSYNC_VERSION_MICRO @APPLICATION_VERSION_PATCH@
|
|
||||||
|
|
||||||
#define LIBCSYNC_VERSION_INT CSYNC_VERSION_INT(LIBCSYNC_VERSION_MAJOR, \
|
|
||||||
LIBCSYNC_VERSION_MINOR, \
|
|
||||||
LIBCSYNC_VERSION_MICRO)
|
|
||||||
#define LIBCSYNC_VERSION CSYNC_VERSION(LIBCSYNC_VERSION_MAJOR, \
|
|
||||||
LIBCSYNC_VERSION_MINOR, \
|
|
||||||
LIBCSYNC_VERSION_MICRO)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
==============
|
||||||
Advanced Usage
|
Advanced Usage
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
=====================
|
||||||
The Automatic Updater
|
The Automatic Updater
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
@@ -9,11 +10,15 @@ users only need to use their normal package managers. However, on Linux systems
|
|||||||
the Updater will check for updates and notify you when a new version is
|
the Updater will check for updates and notify you when a new version is
|
||||||
available.
|
available.
|
||||||
|
|
||||||
|
.. note:: Because of various technical issues, desktop sync clients older than
|
||||||
|
1.7 will not be allowed to connect and sync with the ownCloud 8.1 server. It is
|
||||||
|
highly recommended to keep your client updated.
|
||||||
|
|
||||||
Basic Workflow
|
Basic Workflow
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
The following sections describe how to use the Automatic Updater on different
|
The following sections describe how to use the Automatic Updater on different
|
||||||
operating systems:
|
operating systems.
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
^^^^^^^
|
^^^^^^^
|
||||||
@@ -26,6 +31,9 @@ If an update is available, and has been successfully downloaded, the ownCloud
|
|||||||
client starts a silent update prior to its next launch and then restarts
|
client starts a silent update prior to its next launch and then restarts
|
||||||
itself. Should the silent update fail, the client offers a manual download.
|
itself. Should the silent update fail, the client offers a manual download.
|
||||||
|
|
||||||
|
When you upgrade from 1.7 you should restart Windows to ensure that all the new
|
||||||
|
features in 1.8 are enabled.
|
||||||
|
|
||||||
.. note:: Administrative privileges are required to perform the update.
|
.. note:: Administrative privileges are required to perform the update.
|
||||||
|
|
||||||
Mac OS X
|
Mac OS X
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ including:
|
|||||||
and Nautilus on Linux.
|
and Nautilus on Linux.
|
||||||
* Faster uploads and downloads.
|
* Faster uploads and downloads.
|
||||||
|
|
||||||
|
.. note:: When you upgrade from 1.7, restart Windows to ensure that all new
|
||||||
|
features are visible.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|||||||
@@ -11,3 +11,6 @@ Desktop Sync client enables you to:
|
|||||||
Your files are always automatically synchronized between your ownCloud server
|
Your files are always automatically synchronized between your ownCloud server
|
||||||
and local PC.
|
and local PC.
|
||||||
|
|
||||||
|
.. note:: Because of various technical issues, desktop sync clients older than
|
||||||
|
1.7 will not allowed to connect and sync with the ownCloud 8.1 server. It is
|
||||||
|
highly recommended to keep your client updated.
|
||||||
|
|||||||
@@ -1,23 +1,28 @@
|
|||||||
When invoking the client from the command line, the following options are supported:
|
You have the option of starting your ownCloud desktop client with the
|
||||||
|
``owncloud`` command. The following options are supported:
|
||||||
|
|
||||||
``-h``, ``--help``
|
``owncloud -h`` or ``owncloud --help``
|
||||||
Displays all command options.
|
Displays all command options.
|
||||||
|
|
||||||
|
The other options are:
|
||||||
|
|
||||||
``--logwindow``
|
``--logwindow``
|
||||||
Opens a window displaying log output.
|
Opens a window displaying log output.
|
||||||
|
|
||||||
``--logfile`` `<filename>`
|
``--logfile`` `<filename>`
|
||||||
Write log output to the file specified. To write to stdout, specify `-` as the filename.
|
Write log output to the file specified. To write to stdout, specify `-`
|
||||||
|
as the filename.
|
||||||
|
|
||||||
``--logdir`` `<name>`
|
``--logdir`` `<name>`
|
||||||
Writes each synchronization log output in a new file in the specified directory.
|
Writes each synchronization log output in a new file in the specified
|
||||||
|
directory.
|
||||||
|
|
||||||
``--logexpire`` `<hours>`
|
``--logexpire`` `<hours>`
|
||||||
Removes logs older than the value specified (in hours). This command is used with ``--logdir``.
|
Removes logs older than the value specified (in hours). This command is
|
||||||
|
used with ``--logdir``.
|
||||||
|
|
||||||
``--logflush``
|
``--logflush``
|
||||||
Clears (flushes) the log file after each write action.
|
Clears (flushes) the log file after each write action.
|
||||||
|
|
||||||
``--confdir`` `<dirname>`
|
``--confdir`` `<dirname>`
|
||||||
Uses the specified configuration directory.
|
Uses the specified configuration directory.
|
||||||
|
|
||||||
@@ -1,16 +1,14 @@
|
|||||||
The ownCloud Client packages contain a command line client that can be used to
|
The ownCloud Client packages contain a command line client, ``owncloudcmd``, that can
|
||||||
synchronize ownCloud files to client machines. The command line client is
|
be used to synchronize ownCloud files to client machines.
|
||||||
called ``owncloudcmd``.
|
|
||||||
|
|
||||||
owncloudcmd performs a single *sync run* and then exits the synchronization
|
``owncloudcmd`` performs a single *sync run* and then exits the synchronization
|
||||||
process. In this manner, owncloudcmd processes the differences between client
|
process. In this manner, ``owncloudcmd`` processes the differences between
|
||||||
and server directories and propagates the files to bring both repositories to
|
client and server directories and propagates the files to bring both
|
||||||
the same state. Contrary to the GUI-based client, ``owncloudcmd`` does not
|
repositories to the same state. Contrary to the GUI-based client,
|
||||||
repeat
|
``owncloudcmd`` does not repeat synchronizations on its own. It also does not
|
||||||
synchronizations on its own. It also does not monitor for file system changes.
|
monitor for file system changes.
|
||||||
|
|
||||||
To invoke ``owncloudcmd``, you must provide the local and the remote
|
To invoke ``owncloudcmd``, you must provide the local and the remote repository
|
||||||
repository
|
|
||||||
URL using the following command::
|
URL using the following command::
|
||||||
|
|
||||||
owncloudcmd [OPTIONS...] sourcedir owncloudurl
|
owncloudcmd [OPTIONS...] sourcedir owncloudurl
|
||||||
@@ -18,45 +16,41 @@ URL using the following command::
|
|||||||
where ``sourcedir`` is the local directory and ``owncloudurl`` is
|
where ``sourcedir`` is the local directory and ``owncloudurl`` is
|
||||||
the server URL.
|
the server URL.
|
||||||
|
|
||||||
.. note:: Prior to the 1.6 version of owncloudcmd, the tool only accepted
|
Other command line switches supported by ``owncloudcmd`` include the following:
|
||||||
``owncloud://`` or ``ownclouds://`` in place of ``http://`` and ``https://`` as
|
|
||||||
a scheme. See ``Examples`` for details.
|
|
||||||
|
|
||||||
Other comand line switches supported by owncloudcmd include the following:
|
|
||||||
|
|
||||||
``--user``, ``-u`` ``[user]``
|
``--user``, ``-u`` ``[user]``
|
||||||
Use ``user`` as the login name.
|
Specify the user's login name.
|
||||||
|
|
||||||
``--password``, ``-p`` ``[password]``
|
``--password``, ``-p`` ``[password]``
|
||||||
Use ``password`` as the password.
|
Specify the user's password.
|
||||||
|
|
||||||
``-n``
|
``-n``
|
||||||
Use ``netrc (5)`` for login.
|
Use ``netrc (5)`` for login.
|
||||||
|
|
||||||
``--non-interactive``
|
``--non-interactive``
|
||||||
Do not prompt for questions.
|
Do not prompt for questions.
|
||||||
|
|
||||||
``--silent``, ``-s``
|
``--silent``, ``-s``
|
||||||
Inhibits verbose log output.
|
Inhibits verbose log output.
|
||||||
|
|
||||||
``--trust``
|
``--trust``
|
||||||
Trust any SSL certificate, including invalid ones.
|
Trust any SSL certificate, including invalid ones.
|
||||||
|
|
||||||
``--httpproxy http://[user@pass:]<server>:<port>``
|
``--httpproxy http://[user@pass:]<server>:<port>``
|
||||||
Uses the specified ``server`` as the HTTP proxy.
|
Uses the specified ``server`` as the HTTP proxy.
|
||||||
|
|
||||||
|
``--unsyncedfolders [file]``
|
||||||
|
File containing list of folders to not sync
|
||||||
|
|
||||||
Credential Handling
|
Credential Handling
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
By default, ``owncloudcmd`` reads the client configuration and uses the
|
By default, ``owncloudcmd`` reads the client configuration and uses the
|
||||||
credentials of the GUI synchronization client. If no client is configured, or if you choose
|
credentials of the GUI synchronization client. If no client is configured, or if
|
||||||
to use a different user to synchronize, you can specify the user password
|
you choose to use a different user to synchronize, you can specify the user
|
||||||
setting with the usual URL pattern. For example::
|
password setting with the usual URL pattern. For example::
|
||||||
|
|
||||||
https://user:secret@192.168.178.2/remote.php/webdav
|
$ owncloudcmd / https://carla:secret@server/owncloud/remote.php/webdav/
|
||||||
|
|
||||||
Example
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
To synchronize the ownCloud directory ``Music`` to the local directory
|
To synchronize the ownCloud directory ``Music`` to the local directory
|
||||||
``media/music``, through a proxy listening on port ``8080``, and on a gateway
|
``media/music``, through a proxy listening on port ``8080``, and on a gateway
|
||||||
@@ -66,13 +60,5 @@ machine using IP address ``192.168.178.1``, the command line would be::
|
|||||||
$HOME/media/music \
|
$HOME/media/music \
|
||||||
https://server/owncloud/remote.php/webdav/Music
|
https://server/owncloud/remote.php/webdav/Music
|
||||||
|
|
||||||
``owncloudcmd`` will enquire user name and password, unless they have
|
``owncloudcmd`` will prompt for the user name and password, unless they have
|
||||||
been specified on the command line or ``-n`` has been passed.
|
been specified on the command line or ``-n`` has been passed.
|
||||||
|
|
||||||
Using the legacy scheme, the command line would be::
|
|
||||||
|
|
||||||
$ owncloudcmd --httpproxy http://192.168.178.1:8080 \
|
|
||||||
$HOME/media/music \
|
|
||||||
ownclouds://server/owncloud/remote.php/webdav/Music
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "qtlocalpeer.h"
|
#include "qtlocalpeer.h"
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QDataStream>
|
||||||
#include <QTime>
|
#include <QTime>
|
||||||
|
|
||||||
#if defined(Q_OS_WIN)
|
#if defined(Q_OS_WIN)
|
||||||
|
|||||||
@@ -28,9 +28,6 @@ public:
|
|||||||
* @return the list of migrated folder definitions
|
* @return the list of migrated folder definitions
|
||||||
*/
|
*/
|
||||||
QStringList migrateFolderDefinitons();
|
QStringList migrateFolderDefinitons();
|
||||||
signals:
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -772,6 +772,7 @@ void Folder::startSync(const QStringList &pathList)
|
|||||||
_timeSinceLastSyncStart.restart();
|
_timeSinceLastSyncStart.restart();
|
||||||
_syncResult.clearErrors();
|
_syncResult.clearErrors();
|
||||||
_syncResult.setStatus( SyncResult::SyncPrepare );
|
_syncResult.setStatus( SyncResult::SyncPrepare );
|
||||||
|
_syncResult.setSyncFileItemVector(SyncFileItemVector());
|
||||||
emit syncStateChange();
|
emit syncStateChange();
|
||||||
|
|
||||||
qDebug() << "*** Start syncing - client version"
|
qDebug() << "*** Start syncing - client version"
|
||||||
|
|||||||
@@ -219,7 +219,6 @@ void OwncloudSetupWizard::testOwnCloudConnect()
|
|||||||
job->setProperties(QList<QByteArray>() << "getlastmodified");
|
job->setProperties(QList<QByteArray>() << "getlastmodified");
|
||||||
connect(job, SIGNAL(result(QVariantMap)), _ocWizard, SLOT(successfulStep()));
|
connect(job, SIGNAL(result(QVariantMap)), _ocWizard, SLOT(successfulStep()));
|
||||||
connect(job, SIGNAL(finishedWithError()), this, SLOT(slotAuthError()));
|
connect(job, SIGNAL(finishedWithError()), this, SLOT(slotAuthError()));
|
||||||
connect(job, SIGNAL(networkError(QNetworkReply*)), this, SLOT(slotAuthNetworkError(QNetworkReply*)));
|
|
||||||
job->start();
|
job->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,10 +231,11 @@ void OwncloudSetupWizard::slotAuthError()
|
|||||||
qWarning() << "Can't check for authed redirects. This slot should be invoked from PropfindJob!";
|
qWarning() << "Can't check for authed redirects. This slot should be invoked from PropfindJob!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
QNetworkReply* reply = job->reply();
|
||||||
|
|
||||||
// If there were redirects on the *authed* requests, also store
|
// If there were redirects on the *authed* requests, also store
|
||||||
// the updated server URL, similar to redirects on status.php.
|
// the updated server URL, similar to redirects on status.php.
|
||||||
QUrl redirectUrl = job->reply()->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
|
QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
|
||||||
if (!redirectUrl.isEmpty()) {
|
if (!redirectUrl.isEmpty()) {
|
||||||
qDebug() << "authed request was redirected to" << redirectUrl.toString();
|
qDebug() << "authed request was redirected to" << redirectUrl.toString();
|
||||||
|
|
||||||
@@ -250,18 +250,36 @@ void OwncloudSetupWizard::slotAuthError()
|
|||||||
_ocWizard->account()->setUrl(redirectUrl);
|
_ocWizard->account()->setUrl(redirectUrl);
|
||||||
testOwnCloudConnect();
|
testOwnCloudConnect();
|
||||||
return;
|
return;
|
||||||
} else {
|
|
||||||
errorMsg = tr("The authenticated request to the server was redirected to "
|
|
||||||
"'%1'. The URL is bad, the server is misconfigured.")
|
|
||||||
.arg(redirectUrl.toString());
|
|
||||||
}
|
}
|
||||||
}
|
errorMsg = tr("The authenticated request to the server was redirected to "
|
||||||
|
"'%1'. The URL is bad, the server is misconfigured.")
|
||||||
|
.arg(redirectUrl.toString());
|
||||||
|
|
||||||
if (errorMsg.isEmpty()) {
|
// A 404 is actually a success: we were authorized to know that the folder does
|
||||||
|
// not exist. It will be created later...
|
||||||
|
} else if (reply->error() == QNetworkReply::ContentNotFoundError) {
|
||||||
|
_ocWizard->successfulStep();
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Provide messages for other errors, such as invalid credentials.
|
||||||
|
} else if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
errorMsg = reply->errorString();
|
||||||
|
if (!_ocWizard->account()->credentials()->stillValid(reply)) {
|
||||||
|
errorMsg = tr("Access forbidden by server. To verify that you have proper access, "
|
||||||
|
"<a href=\"%1\">click here</a> to access the service with your browser.")
|
||||||
|
.arg(_ocWizard->account()->url().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Something else went wrong, maybe the response was 200 but with invalid data.
|
||||||
|
} else {
|
||||||
errorMsg = tr("There was an invalid response to an authenticated webdav request");
|
errorMsg = tr("There was an invalid response to an authenticated webdav request");
|
||||||
}
|
}
|
||||||
_ocWizard->displayError(errorMsg, false);
|
|
||||||
_ocWizard->show();
|
_ocWizard->show();
|
||||||
|
if (_ocWizard->currentId() == WizardCommon::Page_ShibbolethCreds) {
|
||||||
|
_ocWizard->back();
|
||||||
|
}
|
||||||
|
_ocWizard->displayError(errorMsg, _ocWizard->currentId() == WizardCommon::Page_ServerSetup && checkDowngradeAdvised(reply));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OwncloudSetupWizard::checkDowngradeAdvised(QNetworkReply* reply)
|
bool OwncloudSetupWizard::checkDowngradeAdvised(QNetworkReply* reply)
|
||||||
@@ -287,29 +305,6 @@ bool OwncloudSetupWizard::checkDowngradeAdvised(QNetworkReply* reply)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotAuthNetworkError(QNetworkReply* reply)
|
|
||||||
{
|
|
||||||
QString msg = reply->errorString();
|
|
||||||
switch (reply->error()) {
|
|
||||||
case QNetworkReply::NoError:
|
|
||||||
case QNetworkReply::ContentNotFoundError:
|
|
||||||
_ocWizard->successfulStep();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (!_ocWizard->account()->credentials()->stillValid(reply)) {
|
|
||||||
msg = tr("Access forbidden by server. To verify that you have proper access, "
|
|
||||||
"<a href=\"%1\">click here</a> to access the service with your browser.")
|
|
||||||
.arg(_ocWizard->account()->url().toString());
|
|
||||||
}
|
|
||||||
_ocWizard->show();
|
|
||||||
if (_ocWizard->currentId() == WizardCommon::Page_ShibbolethCreds) {
|
|
||||||
_ocWizard->back();
|
|
||||||
}
|
|
||||||
_ocWizard->displayError(msg, _ocWizard->currentId() == WizardCommon::Page_ServerSetup && checkDowngradeAdvised(reply));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void OwncloudSetupWizard::slotCreateLocalAndRemoteFolders(const QString& localFolder, const QString& remoteFolder)
|
void OwncloudSetupWizard::slotCreateLocalAndRemoteFolders(const QString& localFolder, const QString& remoteFolder)
|
||||||
{
|
{
|
||||||
qDebug() << "Setup local sync folder for new oC connection " << localFolder;
|
qDebug() << "Setup local sync folder for new oC connection " << localFolder;
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ private slots:
|
|||||||
void slotNoOwnCloudFoundAuthTimeout(const QUrl&url);
|
void slotNoOwnCloudFoundAuthTimeout(const QUrl&url);
|
||||||
|
|
||||||
void slotConnectToOCUrl(const QString&);
|
void slotConnectToOCUrl(const QString&);
|
||||||
void slotAuthNetworkError(QNetworkReply*);
|
|
||||||
void slotAuthError();
|
void slotAuthError();
|
||||||
|
|
||||||
void slotCreateLocalAndRemoteFolders(const QString&, const QString&);
|
void slotCreateLocalAndRemoteFolders(const QString&, const QString&);
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ class ShareDialog;
|
|||||||
|
|
||||||
class AbstractCredentials;
|
class AbstractCredentials;
|
||||||
class QuotaInfo;
|
class QuotaInfo;
|
||||||
class MirallAccessManager;
|
|
||||||
class SyncResult;
|
class SyncResult;
|
||||||
|
|
||||||
class ShareDialog : public QDialog
|
class ShareDialog : public QDialog
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ private:
|
|||||||
Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString& argument, QLocalSocket* socket);
|
Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString& argument, QLocalSocket* socket);
|
||||||
QString buildRegisterPathMessage(const QString& path);
|
QString buildRegisterPathMessage(const QString& path);
|
||||||
|
|
||||||
QLocalServer _localServer;
|
|
||||||
QList<QLocalSocket*> _listeners;
|
QList<QLocalSocket*> _listeners;
|
||||||
|
QLocalServer _localServer;
|
||||||
c_strlist_t *_excludes;
|
c_strlist_t *_excludes;
|
||||||
QHash<Folder*, SqlQuery*> _dbQueries;
|
QHash<Folder*, SqlQuery*> _dbQueries;
|
||||||
QHash<Folder*, SqlDatabase*> _openDbs;
|
QHash<Folder*, SqlDatabase*> _openDbs;
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ SystemProxyRunnable::SystemProxyRunnable(const QUrl &url) : QObject(), QRunnable
|
|||||||
void SystemProxyRunnable::run()
|
void SystemProxyRunnable::run()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << "Starting system proxy lookup";
|
qDebug() << Q_FUNC_INFO << "Starting system proxy lookup";
|
||||||
|
qRegisterMetaType<QNetworkProxy>("QNetworkProxy");
|
||||||
QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(_url));
|
QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(_url));
|
||||||
|
|
||||||
if (proxies.isEmpty()) {
|
if (proxies.isEmpty()) {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QNetworkCookie>
|
#include <QNetworkCookie>
|
||||||
|
#include <QDataStream>
|
||||||
|
|
||||||
namespace OCC {
|
namespace OCC {
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class OWNCLOUDSYNC_EXPORT HttpCredentialsGui : public HttpCredentials {
|
class OWNCLOUDSYNC_EXPORT HttpCredentialsGui : public HttpCredentials {
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit HttpCredentialsGui() : HttpCredentials() {}
|
explicit HttpCredentialsGui() : HttpCredentials() {}
|
||||||
HttpCredentialsGui(const QString& user, const QString& password, const QString& certificatePath, const QString& certificatePasswd) : HttpCredentials(user, password, certificatePath, certificatePasswd) {}
|
HttpCredentialsGui(const QString& user, const QString& password, const QString& certificatePath, const QString& certificatePasswd) : HttpCredentials(user, password, certificatePath, certificatePasswd) {}
|
||||||
|
|||||||
@@ -83,21 +83,11 @@ void DiscoveryJob::update_job_update_callback (bool local,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only use for error cases! It will always set an error errno
|
||||||
int get_errno_from_http_errcode( int err, const QString & reason ) {
|
int get_errno_from_http_errcode( int err, const QString & reason ) {
|
||||||
int new_errno = 0;
|
int new_errno = EIO;
|
||||||
|
|
||||||
switch(err) {
|
switch(err) {
|
||||||
case 200: /* OK */
|
|
||||||
case 201: /* Created */
|
|
||||||
case 202: /* Accepted */
|
|
||||||
case 203: /* Non-Authoritative Information */
|
|
||||||
case 204: /* No Content */
|
|
||||||
case 205: /* Reset Content */
|
|
||||||
case 207: /* Multi-Status */
|
|
||||||
case 304: /* Not Modified */
|
|
||||||
new_errno = 0;
|
|
||||||
break;
|
|
||||||
case 401: /* Unauthorized */
|
case 401: /* Unauthorized */
|
||||||
case 402: /* Payment Required */
|
case 402: /* Payment Required */
|
||||||
case 407: /* Proxy Authentication Required */
|
case 407: /* Proxy Authentication Required */
|
||||||
@@ -316,7 +306,7 @@ void DiscoverySingleDirectoryJob::lsJobFinishedWithErrorSlot(QNetworkReply *r)
|
|||||||
// Default keep at EIO, see above
|
// Default keep at EIO, see above
|
||||||
}
|
}
|
||||||
|
|
||||||
emit finishedWithError(errnoCode, msg);
|
emit finishedWithError(errnoCode == 0 ? EIO : errnoCode, msg);
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -339,6 +339,7 @@ void PropagateDownloadFileQNAM::start()
|
|||||||
if (startSize > 0) {
|
if (startSize > 0) {
|
||||||
if (startSize == _item._size) {
|
if (startSize == _item._size) {
|
||||||
qDebug() << "File is already complete, no need to download";
|
qDebug() << "File is already complete, no need to download";
|
||||||
|
_tmpFile.close();
|
||||||
downloadFinished();
|
downloadFinished();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -489,7 +490,6 @@ QString makeConflictFileName(const QString &fn, const QDateTime &dt)
|
|||||||
|
|
||||||
void PropagateDownloadFileQNAM::downloadFinished()
|
void PropagateDownloadFileQNAM::downloadFinished()
|
||||||
{
|
{
|
||||||
|
|
||||||
QString fn = _propagator->getFilePath(_item._file);
|
QString fn = _propagator->getFilePath(_item._file);
|
||||||
|
|
||||||
// In case of file name clash, report an error
|
// In case of file name clash, report an error
|
||||||
|
|||||||
@@ -695,7 +695,8 @@ void PropagateDownloadFileLegacy::start()
|
|||||||
&& !FileSystem::fileEquals(fn, tmpFile.fileName()); // compare the files to see if there was an actual conflict.
|
&& !FileSystem::fileEquals(fn, tmpFile.fileName()); // compare the files to see if there was an actual conflict.
|
||||||
//In case of conflict, make a backup of the old file
|
//In case of conflict, make a backup of the old file
|
||||||
if (isConflict) {
|
if (isConflict) {
|
||||||
QString conflictFileName = makeConflictFileName(fn, Utility::qDateTimeFromTime_t(_item._modtime));
|
auto conflictDate = FileSystem::fileExists(fn) ? FileSystem::getModTime(fn) : _item._modtime;
|
||||||
|
QString conflictFileName = makeConflictFileName(fn, Utility::qDateTimeFromTime_t(conflictDate));
|
||||||
QString renameError;
|
QString renameError;
|
||||||
if (!FileSystem::rename(fn, conflictFileName, &renameError)) {
|
if (!FileSystem::rename(fn, conflictFileName, &renameError)) {
|
||||||
//If the rename fails, don't replace it.
|
//If the rename fails, don't replace it.
|
||||||
|
|||||||
@@ -605,7 +605,14 @@ void SyncEngine::startSync()
|
|||||||
// database creation error!
|
// database creation error!
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileRecordCount >= 1 && isUpdateFrom_1_5) {
|
bool isUpdateFrom_1_8 = _journal->isUpdateFrom_1_8_0();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If 1.8.0 caused missing data in the local tree, this patch gets it
|
||||||
|
* back. For that, the usage of the journal for remote repository is
|
||||||
|
* disabled at the first start.
|
||||||
|
*/
|
||||||
|
if (fileRecordCount >= 1 && (isUpdateFrom_1_5 || isUpdateFrom_1_8)) {
|
||||||
qDebug() << "detected update from 1.5" << fileRecordCount << isUpdateFrom_1_5;
|
qDebug() << "detected update from 1.5" << fileRecordCount << isUpdateFrom_1_5;
|
||||||
// Disable the read from DB to be sure to re-read all the fileid and etags.
|
// Disable the read from DB to be sure to re-read all the fileid and etags.
|
||||||
_csync_ctx->read_remote_from_db = false;
|
_csync_ctx->read_remote_from_db = false;
|
||||||
@@ -999,8 +1006,8 @@ void SyncEngine::checkForPermission()
|
|||||||
it->_direction = SyncFileItem::Down;
|
it->_direction = SyncFileItem::Down;
|
||||||
it->_isRestoration = true;
|
it->_isRestoration = true;
|
||||||
// take the things to write to the db from the "other" node (i.e: info from server)
|
// take the things to write to the db from the "other" node (i.e: info from server)
|
||||||
// ^^ FIXME This might not be needed anymore since we merge the info in treewalkFile
|
|
||||||
it->_modtime = it->log._other_modtime;
|
it->_modtime = it->log._other_modtime;
|
||||||
|
it->_size = it->log._other_size;
|
||||||
it->_fileId = it->log._other_fileId;
|
it->_fileId = it->log._other_fileId;
|
||||||
it->_etag = it->log._other_etag;
|
it->_etag = it->log._other_etag;
|
||||||
it->_errorString = tr("Not allowed to upload this file because it is read-only on the server, restoring");
|
it->_errorString = tr("Not allowed to upload this file because it is read-only on the server, restoring");
|
||||||
|
|||||||
@@ -273,6 +273,8 @@ bool SyncJournalDb::checkConnect()
|
|||||||
}
|
}
|
||||||
|
|
||||||
_possibleUpgradeFromMirall_1_5 = false;
|
_possibleUpgradeFromMirall_1_5 = false;
|
||||||
|
_possibleUpgradeFromMirall_1_8_0 = false;
|
||||||
|
|
||||||
SqlQuery versionQuery("SELECT major, minor, patch FROM version;", _db);
|
SqlQuery versionQuery("SELECT major, minor, patch FROM version;", _db);
|
||||||
if (!versionQuery.next()) {
|
if (!versionQuery.next()) {
|
||||||
// If there was no entry in the table, it means we are likely upgrading from 1.5
|
// If there was no entry in the table, it means we are likely upgrading from 1.5
|
||||||
@@ -292,6 +294,9 @@ bool SyncJournalDb::checkConnect()
|
|||||||
int minor = versionQuery.intValue(1);
|
int minor = versionQuery.intValue(1);
|
||||||
int patch = versionQuery.intValue(2);
|
int patch = versionQuery.intValue(2);
|
||||||
|
|
||||||
|
if( major == 1 && minor == 8 && patch == 0 ) {
|
||||||
|
_possibleUpgradeFromMirall_1_8_0 = true;
|
||||||
|
}
|
||||||
// Not comparing the BUILD id here, correct?
|
// Not comparing the BUILD id here, correct?
|
||||||
if( !(major == MIRALL_VERSION_MAJOR && minor == MIRALL_VERSION_MINOR && patch == MIRALL_VERSION_PATCH) ) {
|
if( !(major == MIRALL_VERSION_MAJOR && minor == MIRALL_VERSION_MINOR && patch == MIRALL_VERSION_PATCH) ) {
|
||||||
createQuery.prepare("UPDATE version SET major=?1, minor=?2, patch =?3, custom=?4 "
|
createQuery.prepare("UPDATE version SET major=?1, minor=?2, patch =?3, custom=?4 "
|
||||||
@@ -753,6 +758,10 @@ bool SyncJournalDb::postSyncCleanup(const QSet<QString>& filepathsToKeep,
|
|||||||
_possibleUpgradeFromMirall_1_5 = false; // should be handled now
|
_possibleUpgradeFromMirall_1_5 = false; // should be handled now
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_possibleUpgradeFromMirall_1_8_0) {
|
||||||
|
_possibleUpgradeFromMirall_1_8_0 = false; // should be handled now
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1322,6 +1331,13 @@ bool SyncJournalDb::isUpdateFrom_1_5()
|
|||||||
return _possibleUpgradeFromMirall_1_5;
|
return _possibleUpgradeFromMirall_1_5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SyncJournalDb::isUpdateFrom_1_8_0()
|
||||||
|
{
|
||||||
|
QMutexLocker lock(&_mutex);
|
||||||
|
checkConnect();
|
||||||
|
return _possibleUpgradeFromMirall_1_8_0;
|
||||||
|
}
|
||||||
|
|
||||||
bool operator==(const SyncJournalDb::DownloadInfo & lhs,
|
bool operator==(const SyncJournalDb::DownloadInfo & lhs,
|
||||||
const SyncJournalDb::DownloadInfo & rhs)
|
const SyncJournalDb::DownloadInfo & rhs)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ public:
|
|||||||
* are updated.
|
* are updated.
|
||||||
*/
|
*/
|
||||||
bool isUpdateFrom_1_5();
|
bool isUpdateFrom_1_5();
|
||||||
|
bool isUpdateFrom_1_8_0();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool updateDatabaseStructure();
|
bool updateDatabaseStructure();
|
||||||
@@ -135,6 +136,7 @@ private:
|
|||||||
QMutex _mutex; // Public functions are protected with the mutex.
|
QMutex _mutex; // Public functions are protected with the mutex.
|
||||||
int _transaction;
|
int _transaction;
|
||||||
bool _possibleUpgradeFromMirall_1_5;
|
bool _possibleUpgradeFromMirall_1_5;
|
||||||
|
bool _possibleUpgradeFromMirall_1_8_0;
|
||||||
QScopedPointer<SqlQuery> _getFileRecordQuery;
|
QScopedPointer<SqlQuery> _getFileRecordQuery;
|
||||||
QScopedPointer<SqlQuery> _setFileRecordQuery;
|
QScopedPointer<SqlQuery> _setFileRecordQuery;
|
||||||
QScopedPointer<SqlQuery> _getDownloadInfoQuery;
|
QScopedPointer<SqlQuery> _getDownloadInfoQuery;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#ifndef _THEME_H
|
#ifndef _THEME_H
|
||||||
#define _THEME_H
|
#define _THEME_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
#include "syncresult.h"
|
#include "syncresult.h"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user