Comparar commits

..

52 Commits

Autor SHA1 Mensagem Data
Klaas Freitag 10d6a99c20 local_vio_win: Also ignore the IO_REPARSE_TAG_DEDUP with symlinks.
Fix handling files that have been deduplicated as part of Windows
SIS or Data Deduplication
2016-04-20 14:15:38 +02:00
Klaas Freitag f9b4aa0926 Fix the logging format string. 2016-04-20 14:14:05 +02:00
Klaas Freitag 78934f4cd7 Windows readdir: Do not consider SIS deduplicated files as Symlinks. 2016-04-20 11:59:04 +02:00
Klaas Freitag 12a4635249 more logging. 2016-04-07 17:24:10 +02:00
Klaas Freitag 0d73ef1d7c Logging in csync_update. 2016-04-07 17:22:58 +02:00
Klaas Freitag 8ed9f62d6d More logging for symlink info 2016-04-07 16:56:30 +02:00
Klaas Freitag d880e8db29 vio_local_win: Check for MOUNTED_FOLDER option.
That is done to prevent false positive SYMLINKS as described
in https://github.com/owncloud/enterprise/issues/1225

Also a bit more helpful debugging code.
2016-04-04 15:57:36 +02:00
Olivier Goffart 434d16941b SyncEngine: fixed restoring files when they are moved in a new directory
Imagine tgus scenario on a read only share that you move file from
one location to a new directory in the read only share.
Creating the read only directory fails for permission error.
But we should also restore the files that have been moved.

IL issue 542
2016-04-04 10:41:12 +02:00
Olivier Goffart 3d157cbb02 User-Agent: put the actual version string in there
It contains the build id in addition

(cherry picked from commit e0e793fb14)
2016-03-17 10:52:55 +01:00
Olivier Goffart 80b5f3f43d Never overwrite the size from the db when updating the metadata
the size on the server might be different from the size on the client
with certain backend so it should be ignored.

(cherry picked from commit 9222db6df9)
2016-03-17 10:48:49 +01:00
Christian Kamm 4900703970 SqlQuery: Write NULL when intended #4548
In SQLite bindings are not cleared by sqlite3_reset() calls, so
skipping a sqlite3_bind call to create a NULL value doesn't work,
instead the previous value will be written.

To fix this, I clear all bindings in SqlQuery::reset and make sure
to explicitly bind NULL when desired in SqlQuery::bind.

To make sure there's no confusion about SqlQuery::reset and
sqlite3_reset, I rename our method to reset_and_clear_bindings().

(cherry picked from commit 7bd4f95b8c)
2016-03-15 15:17:35 +01:00
Markus Goetz ecd44f70de Submodule: Use https path
Else I got a git hickup here
2016-03-15 11:55:28 +01:00
Markus Goetz 9d5307d04c Propagator: On remove move, take size from DB
Some servers can claim different sizes for on-the-fly protected/encrypted
MS Office files during discovery.
2016-03-15 10:28:47 +01:00
Markus Goetz 9460aa7f21 SyncEngine: Also emit item in other code path
Else a user of this library cannot build a complete list of items.
2016-03-14 18:12:07 +01:00
Carla Schroder 6493421109 Merge pull request #4509 from owncloud/build-client
improve client build instructions
2016-02-29 08:00:12 -08:00
Carla Schroder 0052386b41 correct OBS url for client building 2016-02-26 08:41:33 -08:00
Carla Schroder e1909c3bd1 add OBS link for client building 2016-02-26 08:37:54 -08:00
Carla Schroder 8ce9388d29 corrections to client building instructions 2016-02-26 08:32:52 -08:00
Carla Schroder c13637b105 improve client build instructions 2016-02-24 13:31:19 -08:00
Carla Schroder 424bf6f06a Merge pull request #4503 from owncloud/client-regkeys
Add note that branded clients have custom windows registry key names
2016-02-23 09:47:10 -08:00
Carla Schroder 46c3c9e0fc fix formatting 2016-02-23 09:45:30 -08:00
Carla Schroder 85f6c5fda8 Add note that branded clients have custom windows registry key names 2016-02-23 09:42:40 -08:00
Hefee 74f74e0363 fix typo occured->occurred 2016-02-20 10:33:13 +01:00
Daniel Molkentin bd72408e7a Merge pull request #4488 from owncloud/21-updates
doc updates for 2.1.1 release
2016-02-19 09:16:37 +01:00
Carla Schroder a32381a2a4 doc updates for 2.1.1 release 2016-02-18 10:31:51 -08:00
Olivier Goffart cd83772112 SyncJounral: add an index on the error blacklist table
https://github.com/owncloud/enterprise/issues/1035
2016-02-11 14:38:38 +01:00
Olivier Goffart 893e22691d ConnectionValidator: Make sure we intercept propfind error
If the PROPFIND return an invalid code (like 200) then we would
not recieve the error signal and we would never sync again.

Found while investigating https://github.com/owncloud/enterprise/issues/1068
2016-02-10 15:38:21 +01:00
Daniel Molkentin c98bf174ed ChangeLog: Set release date 2016-02-09 15:57:01 +01:00
Klaas Freitag ae3b9f112c Linux shell integration: Do not call sed from absolute path.
sed is in /bin/ rather than in /usr/bin on some systems, which
makes the scripts fail in the build environment. sed should be
in the PATH tough.
2016-02-09 13:01:03 +01:00
Jenkins for ownCloud 7fd9e751e0 [tx-robot] updated from transifex 2016-02-09 02:18:41 -05:00
Jenkins for ownCloud 95a58e74ca [tx-robot] updated from transifex 2016-02-08 10:11:58 -05:00
Klaas Freitag b70a95ba30 nsi translations: finally escape the NSIS lineends correctly.
This will now finally fix #3519
2016-02-08 16:11:18 +01:00
Daniel Molkentin 72e14643f7 Update ChangeLog 2016-02-08 15:55:29 +01:00
Jocelyn Turcotte f140d3447c OS X: Fix the file system watcher ignoring unicode paths #4424
Add a missing string normalization when fetching the path
from the file system event.
2016-02-08 13:30:08 +01:00
Olivier Goffart 6b643c7501 Discovery: don't ignore recall file #4420
The ".sys.admin#recall#" is the recall file and should not be ignored
even if hidden.

The remote discovery do not need to detect hidden files because it
is already detected by csync in all cases. So this avoid code duplication
2016-02-08 12:07:34 +01:00
Daniel Molkentin 24920a4ad1 update Changelog 2016-02-08 00:21:57 +01:00
Daniel Molkentin 65655584e9 Doc: Instruct to use sha256 for Authenticode signing 2016-02-06 15:01:31 +01:00
Klaas Freitag e397056d2e Enable replacement of strange substrings also for nsh files. 2016-02-05 17:59:34 +01:00
Olivier Goffart 54a278edb9 fix compilation with TOKEN_AUTH_ONLY 2016-02-05 15:30:29 +01:00
Daniel Molkentin b0acc475b0 Bring build documentation up to date, use docker for Win32 xbuild 2016-02-05 14:55:29 +01:00
Daniel Molkentin 834a971e2a Add Dockerfile that allows cross compiling the client 2016-02-05 12:17:31 +01:00
Daniel Molkentin 6701927840 Move ocdoc to current documentation master to catch up with new design 2016-02-04 14:21:23 +01:00
Jocelyn Turcotte e4ae279f7b Fix the crash reporter not launching
The proper path needs to be returned from CopyFramework
in order for install_name_tool to be run on the destination.
2016-02-02 10:43:52 +01:00
Jenkins for ownCloud 25e0d1eac3 [tx-robot] updated from transifex 2016-02-02 02:18:29 -05:00
Jenkins for ownCloud d42faa80a6 [tx-robot] updated from transifex 2016-02-01 02:18:22 -05:00
Jenkins for ownCloud a92c756fa9 [tx-robot] updated from transifex 2016-01-30 02:18:35 -05:00
Klaas Freitag 4cf94ed62a Merge pull request #4396 from owncloud/fix_enum_csync
Use the proper enum representations of file types in csync.
2016-01-29 12:49:54 +01:00
Klaas Freitag 57c7727479 csync_update: Remove unneeded checks of previous commit. 2016-01-29 10:43:31 +01:00
Jenkins for ownCloud 8480fc7ae5 [tx-robot] updated from transifex 2016-01-29 02:18:55 -05:00
Klaas Freitag 5ae81aa96c Nemo Shell Integration: Add missing conversion script.
This script creates the Nemo plugin out of the Nautilus plugin.
Both are source compatible, but need to include the right modules
depending on the name of the file manager.

The script is called by cmake.
2016-01-28 11:44:13 +01:00
Klaas Freitag 28907ec0c3 csync_update: Handle comparision of file types properly.
Note that the structs use different enums for the file types, unfortunately.
2016-01-27 14:11:37 +01:00
Klaas Freitag 7ddfa79950 csync_update: Use the csync defines rather than plain numbers. 2016-01-27 14:10:52 +01:00
76 arquivos alterados com 441 adições e 276 exclusões
-1
Ver Arquivo
@@ -7,7 +7,6 @@ CMakeLists.txt.user*
doc/_build/*
*.kate-swp
*.kdev4
win/
admin/win/nsi/l10n/pofiles/*.po
*.swp
*~$
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
url = https://github.com/owncloud/documentation
[submodule "src/3rdparty/qtmacgoodies"]
path = src/3rdparty/qtmacgoodies
url = git://github.com/guruz/qtmacgoodies.git
url = https://github.com/guruz/qtmacgoodies.git
[submodule "binary"]
path = binary
url = git://github.com/owncloud/owncloud-client-binary.git
+4 -2
Ver Arquivo
@@ -1,6 +1,6 @@
ChangeLog
=========
version 2.1.1 (release 2016-01-2x)
version 2.1.1 (release 2016-02-10)
* UI improvements for HiDPI screens, error messages, RTL languages
* Fix occurences of "Connection Closed" when a new unauthenticated TCP socket is used
* Fix undeliberate WiFi scanning done by Qt Network classes
@@ -14,9 +14,11 @@ version 2.1.1 (release 2016-01-2x)
* Allow changeable upload chunk size in owncloud.cfg
* Crash fixes on account deletion
* Forget password on explicit sign-out
* OS X: Fix the file system watcher ignoring unicode paths (#4424)
* Windows Installer: Update to NSIS 2.50, fixes possible DLL injection
* Sync Engine: .lnk files
* Sync Engine: symlinked syn directories
* Sync Engine: Windows: Fix deleting and replacing of read-only files (#4308 #4277)
* Sync Engine: Windows: Fix deleting and replacing of read-only files (#4308, #4277)
* Sync Engine: Fixes for files becoming directories and vice versa (#4302)
* Misc other fixes/improvements
+1 -1
Ver Arquivo
@@ -4,7 +4,7 @@ set( MIRALL_VERSION_PATCH 1 )
set( MIRALL_SOVERSION 0 )
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
set( MIRALL_VERSION_SUFFIX "rc1") #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 )
+2 -2
Ver Arquivo
@@ -262,8 +262,8 @@ def CopyFramework(source_dylib):
dest_dylib_path = os.path.join(frameworks_dir, *parts[i:-1])
break
if os.path.exists(dest_path):
print dest_path, "already exists, skipping..."
return
print dest_path, "already exists, skipping copy..."
return os.path.join(dest_dylib_path, dylib_name)
args = ['mkdir', '-p', dest_dylib_path]
commands.append(args)
+37
Ver Arquivo
@@ -0,0 +1,37 @@
FROM opensuse:42.1
MAINTAINER Daniel Molkentin <danimo@owncloud.com>
ENV TERM ansi
ENV HOME /root
ENV REFRESHED_AT 20160202
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/isv:ownCloud:toolchains:mingw:win32:2.1/openSUSE_Leap_42.1/isv:ownCloud:toolchains:mingw:win32:2.1.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-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5* \
mingw32-qt5keychain* mingw32-angleproject* \
mingw32-cross-nsis mingw32-libopenssl* \
mingw32-sqlite* kdewin-png2ico \
osslsigncode wget
# RPM depends on curl for installs from HTTP
RUN zypper --non-interactive --gpg-auto-import-keys install curl
# sudo needed for building as user
RUN zypper --non-interactive --gpg-auto-import-keys install sudo
# Use packaged UAC dependencies
RUN zypper --non-interactive --gpg-auto-import-keys install mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
# Required for checksumming
RUN zypper --non-interactive --gpg-auto-import-keys install mingw32-zlib-devel
# Required for windres not to crash
RUN zypper --non-interactive --gpg-auto-import-keys install glibc-locale
CMD /bin/bash
+9 -9
Ver Arquivo
@@ -7,13 +7,13 @@ fi
useradd user -u ${2:-1000}
su - user << EOF
cd /home/user/$1
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 .
cd /home/user/$1
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 .
EOF
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
# Auto-generated - do not modify
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de lançamento"
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Processos(s) ${APPLICATION_EXECUTABLE} em execução. Estes processos precisam de ser interrompidos.$\\nDeseja que o instalador os termine automaticamente?"
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Processos(s) ${APPLICATION_EXECUTABLE} em execução. Estes processos precisam de ser interrompidos.$\nDeseja que o instalador os termine automaticamente?"
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "A terminar os processos ${APPLICATION_EXECUTABLE}."
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Não foi encontrado o processo a terminar!"
StrCpy $PageReinstall_NEW_Field_1 "Uma versão antiga de ${APPLICATION_NAME} está instalada no sistema. É recomendado que você desinstale a versão atual antes de instalar a mais recente. Selecione a operação que deseja executar e clique em $\"Avançar$\" para continuar."
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
# Auto-generated - do not modify
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de la versión"
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Se encontrarion ${APPLICATION_EXECUTABLE} proceso(s) que debe/n ser detenidos.$\"$\\n$\"¿Quiere que el instalador lo haga por usted?"
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Se encontrarion ${APPLICATION_EXECUTABLE} proceso(s) que debe/n ser detenidos.$\"$\n$\"¿Quiere que el instalador lo haga por usted?"
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Parando el proceso ${APPLICATION_EXECUTABLE}."
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Proceso a detener no encontrado!"
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} esta instalada en el sistema. Es recomendado que quite esta versión antes de instalar. Elija la operación a realizar y seleccione Siguiente para continuar."
+2 -1
Ver Arquivo
@@ -108,7 +108,8 @@ def escapeNSIS(st):
.replace('\n', r'$\n')\
.replace('\"', r'$\"')\
.replace('$$\\', '$\\')\
.replace('$\\n', r'$\n')
.replace('$\\n', r'$\n')\
.replace('$\\\\n', r'$\n')
translationCache = {}
+17 -17
Ver Arquivo
@@ -317,7 +317,7 @@ typedef const char* (*csync_checksum_hook) (
*
* @param csync The context variable to allocate.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_create(CSYNC **csync, const char *local, const char *remote);
@@ -328,7 +328,7 @@ int csync_create(CSYNC **csync, const char *local, const char *remote);
*
* @param ctx The context to initialize.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_init(CSYNC *ctx);
@@ -337,7 +337,7 @@ int csync_init(CSYNC *ctx);
*
* @param ctx The context to run the update detection on.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_update(CSYNC *ctx);
@@ -346,7 +346,7 @@ int csync_update(CSYNC *ctx);
*
* @param ctx The context to run the reconciliation on.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_reconcile(CSYNC *ctx);
@@ -355,7 +355,7 @@ int csync_reconcile(CSYNC *ctx);
*
* @param ctx The context to commit.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_commit(CSYNC *ctx);
@@ -366,7 +366,7 @@ int csync_commit(CSYNC *ctx);
*
* @param ctx The context to destroy.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_destroy(CSYNC *ctx);
@@ -377,7 +377,7 @@ int csync_destroy(CSYNC *ctx);
*
* @param path The path pointing to the file.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_add_exclude_list(CSYNC *ctx, const char *path);
@@ -394,7 +394,7 @@ void csync_clear_exclude_list(CSYNC *ctx);
* @param ctx The csync context.
*
* @return The userdata saved in the context, NULL if an error
* occured.
* occurred.
*/
void *csync_get_userdata(CSYNC *ctx);
@@ -406,7 +406,7 @@ void *csync_get_userdata(CSYNC *ctx);
*
* @param userdata The userdata to be stored in the context.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_set_userdata(CSYNC *ctx, void *userdata);
@@ -416,7 +416,7 @@ int csync_set_userdata(CSYNC *ctx, void *userdata);
* @param ctx The csync context.
*
* @return The authentication callback set or NULL if an error
* occured.
* occurred.
*/
csync_auth_callback csync_get_auth_callback(CSYNC *ctx);
@@ -427,7 +427,7 @@ csync_auth_callback csync_get_auth_callback(CSYNC *ctx);
*
* @param cb The authentication callback.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_set_auth_callback(CSYNC *ctx, csync_auth_callback cb);
@@ -436,7 +436,7 @@ int csync_set_auth_callback(CSYNC *ctx, csync_auth_callback cb);
*
* @param[in] level The log verbosity.
*
* @return 0 on success, < 0 if an error occured.
* @return 0 on success, < 0 if an error occurred.
*/
int csync_set_log_level(int level);
@@ -451,7 +451,7 @@ int csync_get_log_level(void);
* @brief Get the logging callback set.
*
* @return The logging callback set or NULL if an error
* occured.
* occurred.
*/
csync_log_callback csync_get_log_callback(void);
@@ -460,7 +460,7 @@ csync_log_callback csync_get_log_callback(void);
*
* @param cb The logging callback.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_set_log_callback(csync_log_callback cb);
@@ -476,7 +476,7 @@ void *csync_get_log_userdata(void);
*
* @param[in] data The userdata to set.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_set_log_userdata(void *data);
@@ -495,7 +495,7 @@ typedef int csync_treewalk_visit_func(TREE_WALK_FILE* ,void*);
* @param visitor A callback function to handle the file info.
* @param filter A filter, built from or'ed csync_instructions_e
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_walk_local_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int filter);
@@ -506,7 +506,7 @@ int csync_walk_local_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int fi
* @param visitor A callback function to handle the file info.
* @param filter A filter, built from and'ed csync_instructions_e
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int csync_walk_remote_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int filter);
+1 -1
Ver Arquivo
@@ -43,7 +43,7 @@ int _csync_exclude_add(c_strlist_t **inList, const char *string);
* @param ctx The context of the synchronizer.
* @param fname The filename to load.
*
* @return 0 on success, -1 if an error occured with errno set.
* @return 0 on success, -1 if an error occurred with errno set.
*/
int csync_exclude_load(const char *fname, c_strlist_t **list);
+1 -1
Ver Arquivo
@@ -54,7 +54,7 @@ int csync_get_statedb_exists(CSYNC *ctx);
* @param ctx The csync context.
* @param statedb Path to the statedb file (sqlite3 db).
*
* @return 0 on success, less than 0 if an error occured with errno set.
* @return 0 on success, less than 0 if an error occurred with errno set.
*/
int csync_statedb_load(CSYNC *ctx, const char *statedb, sqlite3 **pdb);
+50 -7
Ver Arquivo
@@ -106,6 +106,42 @@ static bool _last_db_return_error(CSYNC* ctx) {
return ctx->statedb.lastReturnValue != SQLITE_OK && ctx->statedb.lastReturnValue != SQLITE_DONE && ctx->statedb.lastReturnValue != SQLITE_ROW;
}
/*
* This static method is needed because the type members of the two structs use
* different enum values. A direct comparion is not neccessarily correct.
*
* tmp is csync_file_stat_t
* fs is csync_vio_file_stat_t with this vio type:
* enum csync_vio_file_type_e {
* CSYNC_VIO_FILE_TYPE_UNKNOWN,
* CSYNC_VIO_FILE_TYPE_REGULAR,
* CSYNC_VIO_FILE_TYPE_DIRECTORY,
* CSYNC_VIO_FILE_TYPE_FIFO,
* CSYNC_VIO_FILE_TYPE_SOCKET,
* CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE,
* CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE,
* CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK
* };
*
* csync_file_stat_t can be:
* CSYNC_FTW_TYPE_SKIP, CSYNC_FTW_TYPE_FILE
* CSYNC_FTW_TYPE_DIR, CSYNC_FTW_TYPE_SLINK
*/
static bool _csync_filetype_different( const csync_file_stat_t *tmp, const csync_vio_file_stat_t *fs)
{
if( !(tmp && fs)) return false;
if( tmp->type == CSYNC_FTW_TYPE_SKIP ) return true;
if( tmp->type == CSYNC_FTW_TYPE_DIR && fs->type != CSYNC_VIO_FILE_TYPE_DIRECTORY )
return true;
if( tmp->type == CSYNC_FTW_TYPE_FILE && fs->type != CSYNC_VIO_FILE_TYPE_REGULAR )
return true;
if( tmp->type == CSYNC_FTW_TYPE_SLINK && fs->type != CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK )
return true;
return false; // both are NOT different.
}
/* Return true if two mtime are considered equal
* We consider mtime that are one hour difference to be equal if they are one hour appart
@@ -274,8 +310,9 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
st->instruction = CSYNC_INSTRUCTION_EVAL;
// Preserve the EVAL flag later on if the type has changed.
if (tmp->type != fs->type)
if (_csync_filetype_different(tmp, fs)) {
st->child_modified = 1;
}
goto out;
}
@@ -303,8 +340,9 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
}
// Preserve the EVAL flag later on if the type has changed.
if (tmp->type != fs->type)
if (_csync_filetype_different(tmp, fs)) {
st->child_modified = 1;
}
st->instruction = CSYNC_INSTRUCTION_EVAL;
goto out;
@@ -353,10 +391,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
}
/* translate the file type between the two stat types csync has. */
if( tmp && tmp->type == 0 ) {
if( tmp && tmp->type == CSYNC_FTW_TYPE_FILE ) {
tmp_vio_type = CSYNC_VIO_FILE_TYPE_REGULAR;
} else if( tmp && tmp->type == 2 ) {
} else if( tmp && tmp->type == CSYNC_FTW_TYPE_DIR) {
tmp_vio_type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
} else if( tmp && tmp->type == CSYNC_FTW_TYPE_SLINK ) {
tmp_vio_type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
} else {
tmp_vio_type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
}
@@ -389,8 +429,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
return -1;
}
if(tmp ) { /* tmp existing at all */
if ((tmp->type == CSYNC_FTW_TYPE_DIR && fs->type != CSYNC_VIO_FILE_TYPE_DIRECTORY) ||
(tmp->type == CSYNC_FTW_TYPE_FILE && fs->type != CSYNC_VIO_FILE_TYPE_REGULAR)) {
if ( _csync_filetype_different(tmp, fs)) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "WARN: file types different is not!");
st->instruction = CSYNC_INSTRUCTION_NEW;
goto out;
@@ -781,7 +820,9 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
* local stat function.
*/
if( d_name[0] == '.' ) {
dirent->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
if (strcmp(".sys.admin#recall#", d_name) != 0) { /* recall file shall not be ignored (#4420) */
dirent->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
}
}
if( res == 0) {
@@ -808,6 +849,8 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
flag = CSYNC_FTW_FLAG_NSTAT;
}
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Flag for %s: %d", filename, flag);
previous_fs = ctx->current_fs;
/* Call walker function for each file */
+12 -12
Ver Arquivo
@@ -136,7 +136,7 @@ struct c_rbnode_s {
* @param data_compare Callback function to compare a key as data with thee
* data inside a red-black tree node.
*
* @return 0 on success, -1 if an error occured with errno set.
* @return 0 on success, -1 if an error occurred with errno set.
*/
int c_rbtree_create(c_rbtree_t **rbtree, c_rbtree_compare_func *key_compare, c_rbtree_compare_func *data_compare);
@@ -146,7 +146,7 @@ int c_rbtree_create(c_rbtree_t **rbtree, c_rbtree_compare_func *key_compare, c_r
* @param tree Tree to duplicate.
*
* @return Pointer to a new allocated duplicated rbtree. NULL if an error
* occured.
* occurred.
*/
c_rbtree_t *c_rbtree_dup(const c_rbtree_t *tree);
@@ -157,7 +157,7 @@ c_rbtree_t *c_rbtree_dup(const c_rbtree_t *tree);
*
* @param tree The tree to free.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int c_rbtree_free(c_rbtree_t *tree);
@@ -198,7 +198,7 @@ int c_rbtree_free(c_rbtree_t *tree);
* @param data The data to insert into the tree.
*
* @return 0 on success, 1 if a duplicate has been found and < 0 if an error
* occured with errno set.
* occurred with errno set.
* EINVAL if a null pointer has been passed as the tree.
* ENOMEM if there is no memory left.
*/
@@ -223,7 +223,7 @@ c_rbnode_t *c_rbtree_find(c_rbtree_t *tree, const void *key);
*
* @param tree The tree to get the head for.
*
* @return The head node. NULL if an error occured.
* @return The head node. NULL if an error occurred.
*/
c_rbnode_t *c_rbtree_head(c_rbtree_t *tree);
@@ -232,7 +232,7 @@ c_rbnode_t *c_rbtree_head(c_rbtree_t *tree);
*
* @param tree The tree to get the tail for.
*
* @return The tail node. NULL if an error occured.
* @return The tail node. NULL if an error occurred.
*/
c_rbnode_t *c_rbtree_tail(c_rbtree_t *tree);
@@ -254,7 +254,7 @@ c_rbnode_t *c_rbtree_tail(c_rbtree_t *tree);
* @param data Data which should be passed to the visitor function.
* @param visitor Visitor function. This will be called for each node passed.
*
* @return 0 on sucess, less than 0 if an error occured.
* @return 0 on sucess, less than 0 if an error occurred.
*/
int c_rbtree_walk(c_rbtree_t *tree, void *data, c_rbtree_visit_func *visitor);
@@ -263,7 +263,7 @@ int c_rbtree_walk(c_rbtree_t *tree, void *data, c_rbtree_visit_func *visitor);
*
* @param node Node which should be deleted.
*
* @return 0 on success, -1 if an error occured.
* @return 0 on success, -1 if an error occurred.
*/
int c_rbtree_node_delete(c_rbnode_t *node);
@@ -272,7 +272,7 @@ int c_rbtree_node_delete(c_rbnode_t *node);
*
* @param node The node of which you want the next node.
*
* @return The next node, NULL if an error occured.
* @return The next node, NULL if an error occurred.
*/
c_rbnode_t *c_rbtree_node_next(c_rbnode_t *node);
@@ -281,7 +281,7 @@ c_rbnode_t *c_rbtree_node_next(c_rbnode_t *node);
*
* @param node The node of which you want the previous node.
*
* @return The previous node, NULL if an error occured.
* @return The previous node, NULL if an error occurred.
*/
c_rbnode_t *c_rbtree_node_prev(c_rbnode_t *node);
@@ -290,7 +290,7 @@ c_rbnode_t *c_rbtree_node_prev(c_rbnode_t *node);
*
* @param N The node to get the data from.
*
* @return The data, NULL if an error occured.
* @return The data, NULL if an error occurred.
*/
#define c_rbtree_node_data(N) ((N) ? ((N)->data) : NULL)
@@ -301,7 +301,7 @@ c_rbnode_t *c_rbtree_node_prev(c_rbnode_t *node);
*
* @param tree The tree to check.
*
* @return 0 on success, less than 0 if an error occured.
* @return 0 on success, less than 0 if an error occurred.
*/
int c_rbtree_check_sanity(c_rbtree_t *tree);
+40 -37
Ver Arquivo
@@ -137,45 +137,48 @@ static time_t FileTimeToUnixTime(FILETIME *filetime, DWORD *remainder)
csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
dhandle_t *handle = NULL;
csync_vio_file_stat_t *file_stat = NULL;
ULARGE_INTEGER FileIndex;
DWORD rem;
dhandle_t *handle = NULL;
csync_vio_file_stat_t *file_stat = NULL;
ULARGE_INTEGER FileIndex;
DWORD rem;
handle = (dhandle_t *) dhandle;
handle = (dhandle_t *) dhandle;
errno = 0;
file_stat = csync_vio_file_stat_new();
if (file_stat == NULL) {
errno = ENOMEM;
goto err;
}
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
errno = 0;
file_stat = csync_vio_file_stat_new();
if (file_stat == NULL) {
errno = ENOMEM;
goto err;
}
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
// the win32 functions get the first valid entry with the opendir
// thus we must not jump to next entry if it was the first find.
if( handle->firstFind ) {
handle->firstFind = 0;
} else {
if( FindNextFile(handle->hFind, &(handle->ffd)) == 0 ) {
// might be error, check!
int dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES) {
errno = EACCES; // no more files is fine. Otherwise EACCESS
}
goto err;
}
}
file_stat->name = c_utf8_from_locale(handle->ffd.cFileName);
// the win32 functions get the first valid entry with the opendir
// thus we must not jump to next entry if it was the first find.
if( handle->firstFind ) {
handle->firstFind = 0;
} else {
if( FindNextFile(handle->hFind, &(handle->ffd)) == 0 ) {
// might be error, check!
int dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES) {
errno = EACCES; // no more files is fine. Otherwise EACCESS
}
goto err;
}
}
file_stat->name = c_utf8_from_locale(handle->ffd.cFileName);
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT
&& handle->ffd.dwReserved0 & IO_REPARSE_TAG_SYMLINK) {
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "WinStat info: %ld - %ld %s", handle->ffd.dwFileAttributes, handle->ffd.dwReserved0, file_stat->name);
if ( (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
&& (handle->ffd.dwReserved0 & IO_REPARSE_TAG_SYMLINK)
&& (! (handle->ffd.dwReserved0 & IO_REPARSE_TAG_SIS))
&& (! (handle->ffd.dwReserved0 & IO_REPARSE_TAG_DEDUP)) ) { // The SIS flag means MS Deduplication. It is not a normal symlink that we want to ignore.
file_stat->flags = CSYNC_VIO_FILE_FLAGS_SYMLINK;
file_stat->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE
|| handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE
|| handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
|| handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE
|| handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
file_stat->type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
@@ -199,7 +202,7 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME;
file_stat->mtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem);
/* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Local File MTime: %llu", (unsigned long long) buf->mtime ); */
/* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Local File MTime: %llu", (unsigned long long) buf->mtime ); */
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
file_stat->ctime = FileTimeToUnixTime(&handle->ffd.ftCreationTime, &rem);
@@ -208,9 +211,9 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
return file_stat;
err:
SAFE_FREE(file_stat);
SAFE_FREE(file_stat);
return NULL;
return NULL;
}
@@ -229,15 +232,15 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
h = CreateFileW( wuri, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL+FILE_FLAG_BACKUP_SEMANTICS+FILE_FLAG_OPEN_REPARSE_POINT, NULL );
if( h == INVALID_HANDLE_VALUE ) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri );
errno = GetLastError();
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s, error code %ld", uri, errno);
c_free_locale_string(wuri);
return -1;
}
if(!GetFileInformationByHandle( h, &fileInfo ) ) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "GetFileInformationByHandle failed on %s", uri );
errno = GetLastError();
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "GetFileInformationByHandle failed on %s, error code %ld", uri, errno );
c_free_locale_string(wuri);
CloseHandle(h);
return -1;
+9 -1
Ver Arquivo
@@ -87,7 +87,7 @@ To manually override this key, use the same value in ``HKEY_CURRENT_USER``.
To prevent automatic updates and disallow manual overrides:
.. note::This is the preferred method of controlling the updater behavior using
.. note:: This is the preferred method of controlling the updater behavior using
Group Policies.
1. Edit this Registry key:
@@ -98,6 +98,14 @@ To prevent automatic updates and disallow manual overrides:
3. Specify a value of ``1`` to the machine.
.. note:: Enterprise branded clients
(see `Building Branded ownCloud Clients
<https://doc.owncloud.org/branded_clients/>`_) have different key names,
which are set in ownBrander using the Application Vendor and Application
Name fields. Your key names look like this::
``HKEY_LOCAL_MACHINE\Software\Policies\myCompanyName\myAppName``
Preventing Automatic Updates in Mac OS X Environments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+98 -74
Ver Arquivo
@@ -11,25 +11,44 @@ desktop client.
.. note:: Build instructions are subject to change as development proceeds.
Please check the version for which you want to build.
The instructions contained in this topic were updated to work with version 1.7 of the ownCloud Client.
These instructions are updated to work with version 2.1 of the ownCloud Client.
Getting Source Code
-------------------
The :ref:`generic-build-instructions` pull the latest code directly from
GitHub, and work on Linux, Mac OS X, and Windows.
See the next section for instructions on getting source code from Linux
packages.
Linux
-----
1. Add the `ownCloud repository from OBS`_.
2. Install the dependencies (as root, or using ``sudo``) using the following
commands for your specific Linux distribution:
You may wish to use source packages for your Linux distribution, as these give
you the exact sources from which the binary packages are built. These are
hosted on the `ownCloud repository from OBS`_. Go to the `Index of
repositories`_ to see all the Linux client repos.
1. At the `bottom of the page for each distribution
<https://software.opensuse.org/download/package?project=isv:ownCloud:desktop&
package=owncloud-client>`_ is a "Grab binary packages directly" section.
These contain source RPMs for CentOS, RHEL, Fedora, SLES, and openSUSE.
To get the .deb source packages add the source
repo for your Debian or Ubuntu version, like this example for Debian 8
(run as root)::
echo 'deb-src
http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Debian_8.0/ /' >> /etc/apt/sources.list.d/owncloud-client.list
2. Install the dependencies using the following commands for your specific Linux distribution:
* Debian/Ubuntu: ``apt-get update; apt-get build-dep owncloud-client``
* openSUSE: ``zypper ref; zypper si -d owncloud-client``
* Fedora/CentOS: ``yum install yum-utils; yum-builddep owncloud-client``
* openSUSE/SLES: ``zypper ref; zypper si -d owncloud-client``
* Fedora/CentOS/RHEL: ``yum install yum-utils; yum-builddep owncloud-client``
3. Follow the :ref:`generic-build-instructions`.
4. (Optional) Call ``make install`` to install the client to the ``/usr/local/bin`` directory.
.. note:: This step requires the ``mingw32-cross-nsis`` packages be installed on
Windows.
3. Follow the :ref:`generic-build-instructions`, starting with step 2.
Mac OS X
--------
@@ -63,15 +82,17 @@ To set up your build environment for development using HomeBrew_:
5. For compilation of the client, follow the :ref:`generic-build-instructions`.
6. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
6. Install the Packages_ package creation tool.
7. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
<install_dir>``. If you have a developer signing certificate, you can specify
its Common Name as a third parameter (use quotes) to have the package
signed automatically.
.. note:: Contrary to earlier versions, ownCloud 1.7 and later are packaged
as a ``pkg`` installer. Do not call "make package" at any time when
compiling for OS X, as this will build a disk image, and will not
work correctly.
.. note:: Contrary to earlier versions, ownCloud 1.7 and later are packaged
as a ``pkg`` installer. Do not call "make package" at any time when
compiling for OS X, as this will build a disk image, and will not
work correctly.
Windows Development Build
-----------------------
@@ -111,64 +132,62 @@ follow `Windows Installer Build (Cross-Compile)`_ instead.
6. Create the build directory::
mkdir client-build
cd client-build
mkdir client-build
cd client-build
7. Build the client::
cmake -G "MinGW Makefiles" ../client
mingw32-make
cmake -G "MinGW Makefiles" ../client
mingw32-make
.. note:: You can try using ninja to build in parallel using
``cmake -G Ninja ../client`` and ``ninja`` instead.
.. note:: Refer to the :ref:`generic-build-instructions` section for additional options.
.. note:: You can try using ninja to build in parallel using
``cmake -G Ninja ../client`` and ``ninja`` instead.
.. note:: Refer to the :ref:`generic-build-instructions` section for additional options.
The ownCloud binary will appear in the ``bin`` directory.
The ownCloud binary will appear in the ``bin`` directory.
Windows Installer Build (Cross-Compile)
---------------------------------------
Due to the large number of dependencies, building the client installer for Windows
is **currently only officially supported on openSUSE**, by using the MinGW cross compiler.
You can set up openSUSE 13.1, 13.2 or openSUSE Factory in a virtual machine if you do not
You can set up any currently supported version of openSUSE in a virtual machine if you do not
have it installed already.
To cross-compile:
In order to make setup simple, you can use the provided Dockerfile to build your own image.
1. Add the following repository using YaST or ``zypper ar`` (adjust when using another openSUSE version)::
1. Assuming you are in the root of the ownCloud Client's source tree, you can
build an image from this Dockerfile like this::
zypper ar https://build.opensuse.org/project/show/isv:ownCloud:toolchains:mingw:win32:stable
cd admin/win32/docker
docker build . -t ownCloud-client-win32:<version>
2. Install the cross-compiler packages and the cross-compiled dependencies::
Replace ``<version>`` by the version of the client you are building, e.g.
|version| for the release of the client that this document describes.
If you do not wish to use docker, you can run the commands in ``RUN`` manually
in a shell, e.g. to create your own build environment in a virtual machine.
zypper 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-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5*
.. note:: Docker images are specific to releases. This one refers to |version|.
Newer releases may have different dependencies, and thus require a later
version of the docker image! Always pick the docker image fitting your release
of ownCloud client!
3. For the installer, install the NSIS installer package::
2. From within the source tree Run the docker instance::
zypper install mingw32-cross-nsis mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
docker run ownCloud-client-win32:<version> -v "$PWD:/home/jenkins/client" \
admin/win32/docker/build.sh $(id -u)
4. Follow the :ref:`generic-build-instructions`
It will run the build, create an NSIS based installer, as well as run tests.
You will find the resulting binary in an newly created ``build-win32`` subfolder.
.. note:: When building for Windows platforms, you must specify a special
toolchain file that enables cmake to locate the platform-specific tools. To add
this parameter to the call to cmake, enter
``-DCMAKE_TOOLCHAIN_FILE=../client/admin/win/Toolchain-mingw32-openSUSE.cmake``.
If you do not wish to use docker, and ran the ``RUN`` commands above in a virtual machine,
you can run the indented commands in the lower section of ``build.sh`` manually in your
source tree.
5. Build by running ``make``.
4. Finally, you should sign the installer to avoid warnings upon installation.
This requires a `Microsoft Authenticode`_ Certificate ``osslsigncode`` to sign the installer::
.. note:: Using ``make package`` produces an NSIS-based installer, provided
the NSIS mingw32 packages are installed.
6. If you want to sign the installer, acquire a `Microsoft Authenticode`_ Certificate and install ``osslsigncode`` to sign the installer::
zypper install osslsigncode
7. Sign the package::
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha1 \
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha256 \
-pass yourpass \
-n "ACME Client" \
-i "http://acme.com" \
@@ -179,6 +198,7 @@ To cross-compile:
for ``-in``, use the URL to the time stamping server provided by your CA along with the Authenticode certificate. Alternatively,
you may use the official Microsoft ``signtool`` utility on Microsoft Windows.
If you're familiar with docker, you can use the version of ``osslsigncode`` that is part of the docker image.
.. _generic-build-instructions:
@@ -189,35 +209,36 @@ Compared to previous versions, building the desktop sync client has become easie
earlier versions, CSync, which is the sync engine library of the client, is now
part of the client source repository and not a separate module.
You can download the desktop sync client from the ownCloud `Client Download Page`_.
To build the most up-to-date version of the client:
To build the most up to date version of the client:
1. Clone the latest versions of the client from Git_ as follows::
1. Clone the latest versions of the client from Git_ as follows:
git clone git://github.com/owncloud/client.git
git submodule init
git submodule update
``git clone git://github.com/owncloud/client.git``
``git submodule init``
``git submodule update``
2. Create the build directory::
2. Create the build directory:
mkdir client-build
cd client-build
``mkdir client-build``
``cd client-build``
3. Configure the client build::
3. Configure the client build:
cmake -DCMAKE_BUILD_TYPE="Debug" ../client
``cmake -DCMAKE_BUILD_TYPE="Debug" ../client``
.. note:: You must use absolute paths for the ``include`` and ``library``
directories.
..note:: You must use absolute paths for the ``include`` and ``library``
directories.
..note:: On Mac OS X, you need to specify ``-DCMAKE_INSTALL_PREFIX=target``,
where ``target`` is a private location, i.e. in parallel to your build
dir by specifying ``../install``.
.. note:: On Mac OS X, you need to specify ``-DCMAKE_INSTALL_PREFIX=target``,
where ``target`` is a private location, i.e. in parallel to your build
dir by specifying ``../install``.
4. Call ``make``.
The owncloud binary will appear in the ``bin`` directory.
The owncloud binary will appear in the ``bin`` directory.
5. (Optional) Call ``make install`` to install the client to the
``/usr/local/bin`` directory.
The following are known cmake parameters:
@@ -230,14 +251,17 @@ The following are known cmake parameters:
* ``BUILD_WITH_QT4=ON``: Builds using Qt4 (even if Qt5 is found).
* ``CMAKE_INSTALL_PREFIX=path``: Set an install prefix. This is mandatory on Mac OS
.. _`ownCloud repository from OBS`: http://software.opensuse.org/download/package?project=isv:ownCloud:desktop&package=owncloud-client
.. _ownCloud repository from OBS: http://software.opensuse.org/download/package?
project=isv:ownCloud:desktop&package=owncloud-client
.. _CMake: http://www.cmake.org/download
.. _CSync: http://www.csync.org
.. _`Client Download Page`: http://owncloud.org/sync-clients/
.. _Client Download Page: https://owncloud.org/install/#desktop
.. _Git: http://git-scm.com
.. _MacPorts: http://www.macports.org
.. _Homebrew: http://mxcl.github.com/homebrew/
.. _`OpenSSL Windows Build`: http://slproweb.com/products/Win32OpenSSL.html
.. _OpenSSL Windows Build: http://slproweb.com/products/Win32OpenSSL.html
.. _Qt: http://www.qt.io/download
.. _`Microsoft Authenticode`: https://msdn.microsoft.com/en-us/library/ie/ms537361%28v=vs.85%29.aspx
.. _Microsoft Authenticode: https://msdn.microsoft.com/en-us/library/ie/ms537361%28v=vs.85%29.aspx
.. _QtKeychain: https://github.com/frankosterfeld/qtkeychain
.. _Packages: http://s.sudre.free.fr/Software/Packages/about.html
.. _Index of repositories: http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/
+2
Ver Arquivo
@@ -288,3 +288,5 @@ epub_copyright = u'2013, The ownCloud developers'
# Include todos?
todo_include_todos = True
rst_epilog = '.. |version| replace:: %s' % version
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 82 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 72 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 52 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 86 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 99 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 23 KiB

+9 -1
Ver Arquivo
@@ -22,8 +22,16 @@ Improvements and New Features
The 2.1 release of the ownCloud desktop sync client has many new features and
improvements. (See the `complete changelog
<https://owncloud.org/changelog/desktop/>`_.)
* Improved appearance on HiDPI screens
* Improved error messages
* Several fixes/improvements to the sharing dialog
* Several fixes/improvements to the server activity tab
* Allow changeable upload chunk size in owncloud.cfg
* Forget password on explicit sign-out
* Windows: Fix deleting and replacing of read-only files
* Share with internal ownCloud users from your desktop
* Separate views for server activity, sync activity, and errors
* Don't re-upload *eml-files if size and checksum are unchanged
* Improved upload/download progress indicator
+12 -7
Ver Arquivo
@@ -58,11 +58,12 @@ operations.
This menu provides the following options:
* Quick access to your accounts
* Sync status
* Recent Changes, showing latest activities
* Status of your client version (whether it is up to date)
* Settings
* Help menu
* An option to log in or log out of all of your accounts at once
* Quit ownCloud
* Quit ownCloud, logging out and closing the client
A left-click on your systray icon opens the desktop client to the account
settings window.
@@ -82,7 +83,7 @@ have the following features:
* Connection status, showing which ownCloud server you are connected to, and
your ownCloud username.
* An **Account** button, which contains a dropdown menu with **Add New**,
**Sign In/Sign Out**, and **Remove**.
**Log In/Log Out**, and **Remove**.
* Used and available space on the server.
* Current synchronization status.
* **Add Folder Sync Connection** button, which is active only when you have
@@ -124,10 +125,12 @@ button, and re-select the folder tree that you want to sync.
Adding New Accounts
^^^^^^^^^^^^^^^^^^^
You may configure multiple ownCloud accounts in your desktop sync client. Simply
You may configure multiple ownCloud accounts in your desktop sync client.
Simply
click the **Account** > **Add New** button on any account tab to add a new
account, and then follow the account creation wizard. The new account will
appear as a new tab in the settings dialog, where you can adjust its settings at
appear as a new tab in the settings dialog, where you can adjust its settings
at
any time. Use **Account** > **Remove** to delete accounts.
Sharing From Your Desktop
@@ -206,10 +209,12 @@ can use the *Ignored Files Editor* (General tab.)
.. figure:: images/ignored_files_editor.png
For your convenience, the editor is pre-populated with a default list of typical
For your convenience, the editor is pre-populated with a default list of
typical
ignore patterns. These patterns are contained in a system file (typically
``sync-exclude.lst``) located in the ownCloud Client application directory. You
cannot modify these pre-populated patterns directly from the editor. However, if
cannot modify these pre-populated patterns directly from the editor. However,
if
necessary, you can hover over any pattern in the list to show the path and
filename associated with that pattern, locate the file, and edit the
``sync-exclude.lst`` file.
+6
Ver Arquivo
@@ -0,0 +1,6 @@
#!/bin/sh
# this script creates a plugin for nemo, just be replacing
# all occurences of Nautilus with Nemo.
sed -i.org -e 's/autilus/emo/g' syncstate_nemo.py
+1 -1
Ver Arquivo
@@ -3,4 +3,4 @@
# this script replaces the line
# appname = 'ownCloud'
# with the correct branding name in the syncstate.py script
/usr/bin/sed -i.org -e 's/appname\s*=\s*'"'"'ownCloud'"'/appname = '$1'/" syncstate.py
sed -i.org -e 's/appname\s*=\s*'"'"'ownCloud'"'/appname = '$1'/" syncstate.py
+1 -1
Ver Arquivo
@@ -63,7 +63,7 @@ static void callback(
qstring.resize(pathLength);
CFStringGetCharacters(path, CFRangeMake(0, pathLength), reinterpret_cast<UniChar *>(qstring.data()));
paths.append(qstring);
paths.append(qstring.normalized(QString::NormalizationForm_C));
}
reinterpret_cast<FolderWatcherPrivate*>(clientCallBackInfo)->doNotifyParent(paths);
+1 -1
Ver Arquivo
@@ -249,7 +249,7 @@ void SelectiveSyncTreeView::slotLscolFinishedWithError(QNetworkReply *r)
if (r->error() == QNetworkReply::ContentNotFoundError) {
_loading->setText(tr("No subfolders currently on the server."));
} else {
_loading->setText(tr("An error occured while loading the list of sub folders."));
_loading->setText(tr("An error occurred while loading the list of sub folders."));
}
_loading->resize(_loading->sizeHint()); // because it's not in a layout
}
+1 -1
Ver Arquivo
@@ -545,7 +545,7 @@ SyncJournalFileRecord SocketApi::dbFileRecord_capi( Folder *folder, QString file
rec._fileId = query->baValue(4);
rec._remotePerm = query->baValue(5);
}
query->reset();
query->reset_and_clear_bindings();
}
return rec;
}
+6 -1
Ver Arquivo
@@ -67,11 +67,16 @@ set(libsync_SRCS
creds/dummycredentials.cpp
creds/abstractcredentials.cpp
creds/credentialscommon.cpp
creds/httpcredentials.cpp
../3rdparty/qjson/json.cpp
../3rdparty/certificates/p12topem.cpp
)
if(TOKEN_AUTH_ONLY)
set (libsync_SRCS ${libsync_SRCS} creds/tokencredentials.cpp)
else()
set (libsync_SRCS ${libsync_SRCS} creds/httpcredentials.cpp)
endif()
# These headers are installed for libowncloudsync to be used by 3rd party apps
set(owncloudsync_HEADERS
account.h
-4
Ver Arquivo
@@ -24,10 +24,6 @@
#include "accessmanager.h"
#include "utility.h"
#include <QInputDialog>
#include <QMutexLocker>
#include <QApplication>
namespace OCC
{
+1 -1
Ver Arquivo
@@ -173,7 +173,7 @@ void ConnectionValidator::checkAuthentication()
job->setTimeout(timeoutToUseMsec);
job->setProperties(QList<QByteArray>() << "getlastmodified");
connect(job, SIGNAL(result(QVariantMap)), SLOT(slotAuthSuccess()));
connect(job, SIGNAL(networkError(QNetworkReply*)), SLOT(slotAuthFailed(QNetworkReply*)));
connect(job, SIGNAL(finishedWithError(QNetworkReply*)), SLOT(slotAuthFailed(QNetworkReply*)));
job->start();
}
-1
Ver Arquivo
@@ -17,7 +17,6 @@
#include <QDebug>
#include <QNetworkReply>
#include <QSettings>
#include <QInputDialog>
#include <keychain.h>
+7 -1
Ver Arquivo
@@ -121,11 +121,17 @@ bool TokenCredentials::ready() const
return _ready;
}
void TokenCredentials::fetch()
void TokenCredentials::fetchFromKeychain()
{
Q_EMIT fetched();
}
void TokenCredentials::askFromUser()
{
emit asked();
}
bool TokenCredentials::stillValid(QNetworkReply *reply)
{
return ((reply->error() != QNetworkReply::AuthenticationRequiredError)
+2 -1
Ver Arquivo
@@ -44,7 +44,8 @@ public:
QString authType() const Q_DECL_OVERRIDE;
QNetworkAccessManager* getQNAM() const Q_DECL_OVERRIDE;
bool ready() const Q_DECL_OVERRIDE;
void fetch() Q_DECL_OVERRIDE;
void askFromUser() Q_DECL_OVERRIDE;
void fetchFromKeychain() Q_DECL_OVERRIDE;
bool stillValid(QNetworkReply *reply) Q_DECL_OVERRIDE;
void persist() Q_DECL_OVERRIDE;
QString user() const Q_DECL_OVERRIDE;
-3
Ver Arquivo
@@ -325,9 +325,6 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file, con
if( slashPos > -1 ) {
fileRef = file.midRef(slashPos+1);
}
if( fileRef.startsWith(QChar('.')) ) {
file_stat->flags = CSYNC_VIO_FILE_FLAGS_HIDDEN;
}
//qDebug() << "!!!!" << file_stat << file_stat->name << file_stat->file_id << map.count();
_results.append(file_stat);
}
+1 -1
Ver Arquivo
@@ -558,7 +558,7 @@ bool PropfindJob::finished()
} else {
qDebug() << "PROPFIND request *not* successful, http result code is" << http_result_code
<< (http_result_code == 302 ? reply()->header(QNetworkRequest::LocationHeader).toString() : QLatin1String(""));
emit finishedWithError();
emit finishedWithError(reply());
}
return true;
}
+1 -1
Ver Arquivo
@@ -118,7 +118,7 @@ public:
signals:
void result(const QVariantMap &values);
void finishedWithError();
void finishedWithError(QNetworkReply *reply = 0);
private slots:
virtual bool finished() Q_DECL_OVERRIDE;
+3 -3
Ver Arquivo
@@ -300,8 +300,7 @@ void SqlQuery::bindValue(int pos, const QVariant& value)
res = sqlite3_bind_text16(_stmt, pos, str->utf16(),
(str->size()) * sizeof(QChar), SQLITE_TRANSIENT);
} else {
// unbound value create a null entry.
res = SQLITE_OK;
res = sqlite3_bind_null(_stmt, pos);
}
break; }
default: {
@@ -365,9 +364,10 @@ void SqlQuery::finish()
_stmt = 0;
}
void SqlQuery::reset()
void SqlQuery::reset_and_clear_bindings()
{
SQLITE_DO(sqlite3_reset(_stmt));
SQLITE_DO(sqlite3_clear_bindings(_stmt));
}
} // namespace OCC
+1 -1
Ver Arquivo
@@ -82,7 +82,7 @@ public:
void bindValue(int pos, const QVariant& value);
QString lastQuery() const;
int numRowsAffected();
void reset();
void reset_and_clear_bindings();
void finish();
private:
+4
Ver Arquivo
@@ -160,6 +160,10 @@ void PropagateRemoteMove::finalize()
record._path = _item->_renameTarget;
record._contentChecksum = oldRecord._contentChecksum;
record._contentChecksumType = oldRecord._contentChecksumType;
if (record._fileSize != oldRecord._fileSize) {
qDebug() << "Warning: file sizes differ on server vs csync_journal: " << record._fileSize << oldRecord._fileSize;
record._fileSize = oldRecord._fileSize; // server might have claimed different size, we take the old one from the DB
}
_propagator->_journal->setFileRecord(record);
_propagator->_journal->commit("Remote Rename");
+13 -1
Ver Arquivo
@@ -494,6 +494,8 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote )
// Even if the mtime is different on the server, we always want to keep the mtime from
// the file system in the DB, this is to avoid spurious upload on the next sync
item->_modtime = file->other.modtime;
// same for the size
item->_size = file->other.size;
// If the 'W' remote permission changed, update the local filesystem
SyncJournalFileRecord prev = _journal->getFileRecord(item->_file);
@@ -523,6 +525,7 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote )
item->_isDirectory = isDirectory;
_syncItemMap.insert(key, item);
}
emit syncItemDiscovered(*item);
return re;
}
break;
@@ -1040,8 +1043,17 @@ void SyncEngine::checkForPermission()
(*it)->_status = SyncFileItem::NormalError;
(*it)->_errorString = tr("Not allowed because you don't have permission to add subfolders to that folder");
for (SyncFileItemVector::iterator it_next = it + 1; it_next != _syncedItems.end() && (*it_next)->_file.startsWith(path); ++it_next) {
for (SyncFileItemVector::iterator it_next = it + 1; it_next != _syncedItems.end() && (*it_next)->destination().startsWith(path); ++it_next) {
it = it_next;
if ((*it)->_instruction == CSYNC_INSTRUCTION_RENAME) {
// The file was most likely moved in this directory.
// If the file was read only or could not be moved or removed, it should
// be restored. Do that in the next sync by not considering as a rename
// but delete and upload. It will then be restored if needed.
_journal->avoidRenamesOnNextSync((*it)->_file);
_anotherSyncNeeded = true;
qDebug() << "Moving of " << (*it)->_file << " canceled because no permission to add parent folder";
}
(*it)->_instruction = CSYNC_INSTRUCTION_ERROR;
(*it)->_status = SyncFileItem::NormalError;
(*it)->_errorString = tr("Not allowed because you don't have permission to add parent folder");
+39 -32
Ver Arquivo
@@ -613,6 +613,13 @@ bool SyncJournalDb::updateErrorBlacklistTableStructure()
commitInternal("update database structure: add lastTryTime, ignoreDuration cols");
}
SqlQuery query(_db);
query.prepare("CREATE INDEX IF NOT EXISTS blacklist_index ON blacklist(path collate nocase);");
if( !query.exec()) {
sqlFail("updateErrorBlacklistTableStructure: create index blacklit", query);
re = false;
}
return re;
}
@@ -686,7 +693,7 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& _record )
QString remotePerm (record._remotePerm);
if (remotePerm.isEmpty()) remotePerm = QString(); // have NULL in DB (vs empty)
int contentChecksumTypeId = mapChecksumType(record._contentChecksumType);
_setFileRecordQuery->reset();
_setFileRecordQuery->reset_and_clear_bindings();
_setFileRecordQuery->bindValue(1, QString::number(phash));
_setFileRecordQuery->bindValue(2, plen);
_setFileRecordQuery->bindValue(3, record._path );
@@ -715,7 +722,7 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& _record )
<< record._etag << record._fileId << record._remotePerm << record._fileSize << (record._serverHasIgnoredFiles ? 1:0)
<< record._contentChecksum << record._contentChecksumType << contentChecksumTypeId;
_setFileRecordQuery->reset();
_setFileRecordQuery->reset_and_clear_bindings();
return true;
} else {
qDebug() << "Failed to connect database.";
@@ -732,7 +739,7 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively)
// always delete the actual file.
qlonglong phash = getPHash(filename);
_deleteFileRecordPhash->reset();
_deleteFileRecordPhash->reset_and_clear_bindings();
_deleteFileRecordPhash->bindValue( 1, QString::number(phash) );
if( !_deleteFileRecordPhash->exec() ) {
@@ -742,9 +749,9 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively)
return false;
}
qDebug() << _deleteFileRecordPhash->lastQuery() << phash << filename;
_deleteFileRecordPhash->reset();
_deleteFileRecordPhash->reset_and_clear_bindings();
if( recursively) {
_deleteFileRecordRecursively->reset();
_deleteFileRecordRecursively->reset_and_clear_bindings();
_deleteFileRecordRecursively->bindValue(1, filename);
if( !_deleteFileRecordRecursively->exec() ) {
qWarning() << "Exec error of SQL statement: "
@@ -753,7 +760,7 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively)
return false;
}
qDebug() << _deleteFileRecordRecursively->lastQuery() << filename;
_deleteFileRecordRecursively->reset();
_deleteFileRecordRecursively->reset_and_clear_bindings();
}
return true;
} else {
@@ -771,7 +778,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename )
SyncJournalFileRecord rec;
if( checkConnect() ) {
_getFileRecordQuery->reset();
_getFileRecordQuery->reset_and_clear_bindings();
_getFileRecordQuery->bindValue(1, QString::number(phash));
if (!_getFileRecordQuery->exec()) {
@@ -801,7 +808,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename )
QString err = _getFileRecordQuery->error();
qDebug() << "No journal entry found for " << filename;
}
_getFileRecordQuery->reset();
_getFileRecordQuery->reset_and_clear_bindings();
}
return rec;
}
@@ -900,7 +907,7 @@ bool SyncJournalDb::updateFileRecordChecksum(const QString& filename,
int checksumTypeId = mapChecksumType(contentChecksumType);
auto & query = _setFileRecordChecksumQuery;
query->reset();
query->reset_and_clear_bindings();
query->bindValue(1, QString::number(phash));
query->bindValue(2, contentChecksum);
query->bindValue(3, checksumTypeId);
@@ -915,7 +922,7 @@ bool SyncJournalDb::updateFileRecordChecksum(const QString& filename,
qDebug() << query->lastQuery() << phash << contentChecksum
<< contentChecksumType << checksumTypeId;
query->reset();
query->reset_and_clear_bindings();
return true;
}
@@ -957,7 +964,7 @@ static bool deleteBatch(SqlQuery & query, const QStringList & entries, const QSt
qDebug() << "Removing stale " << qPrintable(name) << " entries: " << entries.join(", ");
// FIXME: Was ported from execBatch, check if correct!
foreach( const QString& entry, entries ) {
query.reset();
query.reset_and_clear_bindings();
query.bindValue(1, entry);
if (!query.exec()) {
QString err = query.error();
@@ -966,7 +973,7 @@ static bool deleteBatch(SqlQuery & query, const QStringList & entries, const QSt
return false;
}
}
query.reset(); // viel hilft viel ;-)
query.reset_and_clear_bindings(); // viel hilft viel ;-)
return true;
}
@@ -978,7 +985,7 @@ SyncJournalDb::DownloadInfo SyncJournalDb::getDownloadInfo(const QString& file)
DownloadInfo res;
if( checkConnect() ) {
_getDownloadInfoQuery->reset();
_getDownloadInfoQuery->reset_and_clear_bindings();
_getDownloadInfoQuery->bindValue(1, file);
if (!_getDownloadInfoQuery->exec()) {
@@ -992,7 +999,7 @@ SyncJournalDb::DownloadInfo SyncJournalDb::getDownloadInfo(const QString& file)
} else {
res._valid = false;
}
_getDownloadInfoQuery->reset();
_getDownloadInfoQuery->reset_and_clear_bindings();
}
return res;
}
@@ -1006,7 +1013,7 @@ void SyncJournalDb::setDownloadInfo(const QString& file, const SyncJournalDb::Do
}
if (i._valid) {
_setDownloadInfoQuery->reset();
_setDownloadInfoQuery->reset_and_clear_bindings();
_setDownloadInfoQuery->bindValue(1, file);
_setDownloadInfoQuery->bindValue(2, i._tmpfile);
_setDownloadInfoQuery->bindValue(3, i._etag );
@@ -1018,10 +1025,10 @@ void SyncJournalDb::setDownloadInfo(const QString& file, const SyncJournalDb::Do
}
qDebug() << _setDownloadInfoQuery->lastQuery() << file << i._tmpfile << i._etag << i._errorCount;
_setDownloadInfoQuery->reset();
_setDownloadInfoQuery->reset_and_clear_bindings();
} else {
_deleteDownloadInfoQuery->reset();
_deleteDownloadInfoQuery->reset_and_clear_bindings();
_deleteDownloadInfoQuery->bindValue( 1, file );
if( !_deleteDownloadInfoQuery->exec() ) {
@@ -1029,7 +1036,7 @@ void SyncJournalDb::setDownloadInfo(const QString& file, const SyncJournalDb::Do
return;
}
qDebug() << _deleteDownloadInfoQuery->lastQuery() << file;
_deleteDownloadInfoQuery->reset();
_deleteDownloadInfoQuery->reset_and_clear_bindings();
}
}
@@ -1097,7 +1104,7 @@ SyncJournalDb::UploadInfo SyncJournalDb::getUploadInfo(const QString& file)
if( checkConnect() ) {
_getUploadInfoQuery->reset();
_getUploadInfoQuery->reset_and_clear_bindings();
_getUploadInfoQuery->bindValue(1, file);
if (!_getUploadInfoQuery->exec()) {
@@ -1115,7 +1122,7 @@ SyncJournalDb::UploadInfo SyncJournalDb::getUploadInfo(const QString& file)
res._modtime = Utility::qDateTimeFromTime_t(_getUploadInfoQuery->int64Value(4));
res._valid = ok;
}
_getUploadInfoQuery->reset();
_getUploadInfoQuery->reset_and_clear_bindings();
}
return res;
}
@@ -1129,7 +1136,7 @@ void SyncJournalDb::setUploadInfo(const QString& file, const SyncJournalDb::Uplo
}
if (i._valid) {
_setUploadInfoQuery->reset();
_setUploadInfoQuery->reset_and_clear_bindings();
_setUploadInfoQuery->bindValue(1, file);
_setUploadInfoQuery->bindValue(2, i._chunk);
_setUploadInfoQuery->bindValue(3, i._transferid );
@@ -1143,9 +1150,9 @@ void SyncJournalDb::setUploadInfo(const QString& file, const SyncJournalDb::Uplo
}
qDebug() << _setUploadInfoQuery->lastQuery() << file << i._chunk << i._transferid << i._errorCount;
_setUploadInfoQuery->reset();
_setUploadInfoQuery->reset_and_clear_bindings();
} else {
_deleteUploadInfoQuery->reset();
_deleteUploadInfoQuery->reset_and_clear_bindings();
_deleteUploadInfoQuery->bindValue(1, file);
if( !_deleteUploadInfoQuery->exec() ) {
@@ -1153,7 +1160,7 @@ void SyncJournalDb::setUploadInfo(const QString& file, const SyncJournalDb::Uplo
return;
}
qDebug() << _deleteUploadInfoQuery->lastQuery() << file;
_deleteUploadInfoQuery->reset();
_deleteUploadInfoQuery->reset_and_clear_bindings();
}
}
@@ -1196,7 +1203,7 @@ SyncJournalErrorBlacklistRecord SyncJournalDb::errorBlacklistEntry( const QStrin
// SELECT lastTryEtag, lastTryModtime, retrycount, errorstring
if( checkConnect() ) {
_getErrorBlacklistQuery->reset();
_getErrorBlacklistQuery->reset_and_clear_bindings();
_getErrorBlacklistQuery->bindValue( 1, file );
if( _getErrorBlacklistQuery->exec() ){
if( _getErrorBlacklistQuery->next() ) {
@@ -1208,7 +1215,7 @@ SyncJournalErrorBlacklistRecord SyncJournalDb::errorBlacklistEntry( const QStrin
entry._ignoreDuration = _getErrorBlacklistQuery->int64Value(5);
entry._file = file;
}
_getErrorBlacklistQuery->reset();
_getErrorBlacklistQuery->reset_and_clear_bindings();
} else {
qWarning() << "Exec error blacklist: " << _getErrorBlacklistQuery->lastQuery() << " : "
<< _getErrorBlacklistQuery->error();
@@ -1324,7 +1331,7 @@ void SyncJournalDb::updateErrorBlacklistEntry( const SyncJournalErrorBlacklistRe
qDebug() << "set blacklist entry for " << item._file << item._retryCount
<< item._errorString << item._lastTryTime << item._ignoreDuration
<< item._lastTryModtime << item._lastTryEtag;
_setErrorBlacklistQuery->reset();
_setErrorBlacklistQuery->reset_and_clear_bindings();
}
@@ -1395,7 +1402,7 @@ QStringList SyncJournalDb::getSelectiveSyncList(SyncJournalDb::SelectiveSyncList
return result;
}
_getSelectiveSyncListQuery->reset();
_getSelectiveSyncListQuery->reset_and_clear_bindings();
_getSelectiveSyncListQuery->bindValue(1, int(type));
if (!_getSelectiveSyncListQuery->exec()) {
qWarning() << "SQL query failed: "<< _getSelectiveSyncListQuery->error();
@@ -1427,7 +1434,7 @@ void SyncJournalDb::setSelectiveSyncList(SyncJournalDb::SelectiveSyncListType ty
SqlQuery insQuery("INSERT INTO selectivesync VALUES (?1, ?2)" , _db);
foreach(const auto &path, list) {
insQuery.reset();
insQuery.reset_and_clear_bindings();
insQuery.bindValue(1, path);
insQuery.bindValue(2, int(type));
if (!insQuery.exec()) {
@@ -1519,7 +1526,7 @@ QByteArray SyncJournalDb::getChecksumType(int checksumTypeId)
// Retrieve the id
auto & query = *_getChecksumTypeQuery;
query.reset();
query.reset_and_clear_bindings();
query.bindValue(1, checksumTypeId);
if( !query.exec() ) {
qWarning() << "Error SQL statement getChecksumType: "
@@ -1542,7 +1549,7 @@ int SyncJournalDb::mapChecksumType(const QByteArray& checksumType)
}
// Ensure the checksum type is in the db
_insertChecksumTypeQuery->reset();
_insertChecksumTypeQuery->reset_and_clear_bindings();
_insertChecksumTypeQuery->bindValue(1, checksumType);
if( !_insertChecksumTypeQuery->exec() ) {
qWarning() << "Error SQL statement insertChecksumType: "
@@ -1552,7 +1559,7 @@ int SyncJournalDb::mapChecksumType(const QByteArray& checksumType)
}
// Retrieve the id
_getChecksumTypeIdQuery->reset();
_getChecksumTypeIdQuery->reset_and_clear_bindings();
_getChecksumTypeIdQuery->bindValue(1, checksumType);
if( !_getChecksumTypeIdQuery->exec() ) {
qWarning() << "Error SQL statement getChecksumTypeId: "
+1 -1
Ver Arquivo
@@ -161,7 +161,7 @@ QByteArray Utility::userAgentString()
{
QString re = QString::fromLatin1("Mozilla/5.0 (%1) mirall/%2")
.arg(platform())
.arg(QLatin1String(MIRALL_STRINGIFY(MIRALL_VERSION)));
.arg(QLatin1String(MIRALL_VERSION_STRING));
QLatin1String appName(APPLICATION_SHORTNAME);
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Aturat per l&apos;usuari</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Zrušeno uživatelem</translation>
</message>
+2 -2
Ver Arquivo
@@ -518,7 +518,7 @@ Diese Funktion ist nur für Wartungszwecke gedacht. Es werden keine Dateien entf
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Abbruch durch den Benutzer</translation>
</message>
@@ -2368,7 +2368,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
<message>
<location filename="../src/gui/shareusergroupwidget.cpp" line="217"/>
<source>No results for &apos;%1&apos;</source>
<translation type="unfinished"/>
<translation>Keine Ergebnisse für &apos;%1&apos;</translation>
</message>
</context>
<context>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Ματαιώθηκε από το χρήστη</translation>
</message>
+1 -1
Ver Arquivo
@@ -519,7 +519,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation type="unfinished"></translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Interrumpido por el usuario</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Interrumpido por el usuario</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Kasutaja poolt tühistatud</translation>
</message>
+2 -2
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Erabiltzaileak bertan behera utzita</translation>
</message>
@@ -2855,7 +2855,7 @@ Ez da gomendagarria erabltzea.</translation>
<message>
<location filename="../src/libsync/syncengine.cpp" line="826"/>
<source>File name contains at least one invalid character</source>
<translation type="unfinished"/>
<translation>Fitxategi izenak behintzat baliogabeko karaktere bat du</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1015"/>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>متوقف شده توسط کاربر</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Keskeytetty käyttäjän toimesta</translation>
</message>
+7 -7
Ver Arquivo
@@ -340,7 +340,7 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="419"/>
<source>List of ignored or erroneous files</source>
<translation>Liste de fichiers ignorés ou erronés</translation>
<translation>Liste des fichiers ignorés ou en erreur</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="423"/>
@@ -355,7 +355,7 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="429"/>
<source>Not Synced</source>
<translation>Non Synchronisé</translation>
<translation>Fichiers non synchronisés</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="450"/>
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Interrompu par l&apos;utilisateur</translation>
</message>
@@ -1123,7 +1123,7 @@ Temps restant total %5</translation>
<message>
<location filename="../src/gui/generalsettings.ui" line="129"/>
<source>S&amp;how crash reporter</source>
<translation>A&amp;fficher le rapport d&apos;incident</translation>
<translation>Affic&amp;her le rapport d&apos;incident</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="156"/>
@@ -1457,7 +1457,7 @@ Les éléments dont la suppression automatique est permise seront supprimés s&a
<message>
<location filename="../src/gui/networksettings.cpp" line="128"/>
<source>Qt &gt;= 5.4 is required in order to use the bandwidth limit</source>
<translation>Qt &gt;= 5.4 est requis pour pouvoir utiliser la limite de bande passante</translation>
<translation>Qt &gt;= 5.4 est requis pour utiliser la limite de bande passante</translation>
</message>
</context>
<context>
@@ -1492,7 +1492,7 @@ L&apos;assistant peut demander des privilèges additionnels durant le processus.
<message>
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
<source>%1 version %2 available. Restart application to start the update.</source>
<translation>%1 version %2 disponible. Redémarrez l&apos;application pour démarrer la mise à jour.</translation>
<translation>%1 version %2 disponible. Redémarrez l&apos;application pour commencer la mise à jour.</translation>
</message>
<message>
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
@@ -2352,7 +2352,7 @@ Il est déconseillé de l&apos;utiliser.</translation>
<location filename="../src/gui/sharelinkwidget.cpp" line="505"/>
<location filename="../src/gui/sharelinkwidget.cpp" line="506"/>
<source>&amp;Share link</source>
<translation>&amp;Partager par lien public</translation>
<translation>Partager par &amp;lien public</translation>
</message>
</context>
<context>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Interrompido polo usuario</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Felhasználó megszakította</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Interrotto dall&apos;utente</translation>
</message>
+3 -3
Ver Arquivo
@@ -322,7 +322,7 @@
<message>
<location filename="../src/gui/activityitemdelegate.cpp" line="147"/>
<source>%1 on %2 (disconnected)</source>
<translation type="unfinished"/>
<translation>%2 %1 ()</translation>
</message>
</context>
<context>
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation></translation>
</message>
@@ -3329,7 +3329,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/application.cpp" line="571"/>
<source>QT_LAYOUT_DIRECTION</source>
<translation type="unfinished"/>
<translation>QT_LAYOUT_DIRECTION</translation>
</message>
</context>
<context>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Avbrutt av brukeren</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Afgebroken door de gebruiker</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Anulowane przez użytkownika</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Cancelado pelo utilizador</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Abortado pelo usuário</translation>
</message>
+2 -2
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Прервано пользов</translation>
</message>
@@ -3336,7 +3336,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/application.cpp" line="571"/>
<source>QT_LAYOUT_DIRECTION</source>
<translation type="unfinished"/>
<translation>QT_LAYOUT_DIRECTION</translation>
</message>
</context>
<context>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Zrušené používateľom</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Opravilo je bilo prekinjeno s strani uporabnika</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Прекинуо корисник</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Avbruten av användare</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation></translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Kullanıcı tarafından iptal edildi</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>Перервано користувачем</translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation></translation>
</message>
+1 -1
Ver Arquivo
@@ -517,7 +517,7 @@
<context>
<name>OCC::DiscoveryMainThread</name>
<message>
<location filename="../src/libsync/discoveryphase.cpp" line="539"/>
<location filename="../src/libsync/discoveryphase.cpp" line="536"/>
<source>Aborted by the user</source>
<translation>使</translation>
</message>