Comparar commits
20 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| b6dd13f353 | |||
| e031f7d090 | |||
| d4b72132d6 | |||
| 763016bd8f | |||
| 7f0cc5b699 | |||
| d3a93cbaeb | |||
| 85d3c7a263 | |||
| 159535fe90 | |||
| 088a294fac | |||
| 813bc15a78 | |||
| 567fe87e98 | |||
| a1ba23eea9 | |||
| 194db066b6 | |||
| 129c17651a | |||
| 0469236d80 | |||
| 93e0d52dd3 | |||
| 9f3e576348 | |||
| 5479aaeb5b | |||
| 8dc178a9f3 | |||
| 35d4b96339 |
+1
-30
@@ -1,38 +1,9 @@
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
version 2.2.3 (release 2016-07-xx)
|
||||
* Fix bug with overriding URL in config (#5016)
|
||||
* Sharing: Fix bug with file names containing percent encodes (#5042, #5043)
|
||||
* Sharing: Permissions for federated shares on servers >=9.1 (#4996, #5001)
|
||||
* Overlays: Fix issues with file name casing on OS X and Windows
|
||||
* Windows: Skip symlinks and junctions again (#5019)
|
||||
* Only accept notification API Capability if endpoint is OCS-enabled (#5034)
|
||||
* Fix windows HiDPI (#4994)
|
||||
* SocketAPI: Use different pipe name to avoid unusual delay (#4977)
|
||||
* Tray: Add minimal mode as workaround and testing tool for Linux issues (#4985, #4990)
|
||||
* owncloudcmd: Fix --exclude regression #4979
|
||||
* Small memleak: Use the full file stat destructors (#4992)
|
||||
* Fix small QAction memleak (#5008)
|
||||
* Fix crash on shutting down during propagation (#4979)
|
||||
* Decrease memory usage during sync #4979
|
||||
* Fix a deadlock when shutting down during discovery (#4993)
|
||||
* Setup csync logging earlier to get all log output (#4991)
|
||||
* Enable Shibboleth debug view with OWNCLOUD_SHIBBOLETH_DEBUG env
|
||||
|
||||
version 2.2.2 (release 2016-06-21)
|
||||
* Excludes: Don't redundantly add the same exclude files (memleak) (#4967, #4988)
|
||||
* Excludes: Only log if the pattern was really logged. (#4989)
|
||||
|
||||
version 2.2.1 (release 2016-06-06)
|
||||
version 2.2.1 (release 2016-05-xx)
|
||||
* Fix out of memory error when too many uploads happen (#4611)
|
||||
* Fix display errors in progress display (#4803 #4856)
|
||||
* LockWatcher: Remember to upload files after they become unlocked (#4865)
|
||||
* Fix overlay icons for files with umlauts (#4884)
|
||||
* Certs: Re-ask for different cert after rejection (#4898, #4911)
|
||||
* Progress: Don't count items without propagation jobs (#4856, #4910)
|
||||
* Utility: Fix for the translation of minutes, second (#4855)
|
||||
* SyncEngine: invalid the blacklist entry when the rename destination change
|
||||
|
||||
version 2.2.0 (release 2016-05-12)
|
||||
* Overlay icons: Refactoring - mainly for performance improvements
|
||||
|
||||
externo
-43
@@ -1,43 +0,0 @@
|
||||
#!groovy
|
||||
|
||||
node('CLIENT') {
|
||||
stage 'Checkout'
|
||||
checkout scm
|
||||
sh '''git submodule update --init'''
|
||||
|
||||
stage 'Qt4'
|
||||
sh '''rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DUNIT_TESTING=1 -DBUILD_WITH_QT4=ON ..
|
||||
make
|
||||
ctest --output-on-failure'''
|
||||
|
||||
stage 'Qt4 - clang'
|
||||
sh '''rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUNIT_TESTING=1 -DBUILD_WITH_QT4=ON ..
|
||||
make
|
||||
ctest --output-on-failure'''
|
||||
|
||||
stage 'Qt5'
|
||||
sh '''rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DUNIT_TESTING=1 -DBUILD_WITH_QT4=OFF ..
|
||||
make
|
||||
ctest --output-on-failure'''
|
||||
|
||||
stage 'Qt5 - clang'
|
||||
sh '''rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUNIT_TESTING=1 -DBUILD_WITH_QT4=OFF ..
|
||||
make
|
||||
ctest --output-on-failure'''
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ with your computer.
|
||||
|
||||
### Binary packages
|
||||
|
||||
* Refer to the download page https://owncloud.org/install/#install-clients
|
||||
* Refer to the download page http://owncloud.org/sync-clients/
|
||||
|
||||
### Source code
|
||||
|
||||
|
||||
+3
-3
@@ -1,11 +1,11 @@
|
||||
set( MIRALL_VERSION_MAJOR 2 )
|
||||
set( MIRALL_VERSION_MINOR 2 )
|
||||
set( MIRALL_VERSION_PATCH 3 )
|
||||
set( MIRALL_VERSION_MINOR 3 )
|
||||
set( MIRALL_VERSION_PATCH 0 )
|
||||
set( MIRALL_VERSION_YEAR 2016 )
|
||||
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 )
|
||||
|
||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Z
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "DokonŸeno"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na ve slo§ce '$INSTDIR'.$\n$\nChcete pokraŸovat (nedoporuŸuje se)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na v adres ýi '$INSTDIR'.$\n$\nChcete pokraŸovat (nedoporuŸuje se)?"
|
||||
StrCpy $UNINSTALL_ABORT "Odinstalace zruçena u§ivatelem"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Z stupce rychl‚ho spuçtØn¡ (nen¡ k dispozici)"
|
||||
StrCpy $INIT_NO_DESKTOP "Z stupce na ploçe (pýep¡çe existuj¡c¡)"
|
||||
|
||||
@@ -3,12 +3,12 @@ StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de lançamento"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Existem ${APPLICATION_EXECUTABLE} processo(s) em execução que precisa(m) de ser interrompido(s).$\nDeseja que o instalador o(s) 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."
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Uma versão antiga de ${APPLICATION_NAME} está instalada no sistema. É recomendado que 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."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Desinstalar antes de instalar"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "Não desinstale"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já instalado"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como pretende instalar ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "Uma versão mais recente da aplicação ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalada.$\nSelecione a operação que deseja realizar e clique em 'Seguinte' para continuar."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/Reinstalar Componentes"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||
@@ -25,12 +25,12 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Atalho de início rápido"
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint "A criar atalho de início rápido"
|
||||
StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "O essencial de ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_START_MENU_Desc "Atalho de ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho no ambiente de trabalho de ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_DESKTOP_Desc "Atalho do ambiente de trabalho para ${APPLICATION_NAME}."
|
||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Atalho de início rápido de ${APPLICATION_NAME}."
|
||||
StrCpy $UNINSTALLER_FILE_Detail "A escrever o Desinstalador"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "A escrever chaves de registo do instalador"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Não parece que ${APPLICATION_NAME} esteja instalado no diretório '$INSTDIR'.$\n$\nContinuar na mesma (não recomendado)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Não parece que a aplicação ${APPLICATION_NAME} esteja instalada no diretório '$INSTDIR'.$\n$\nContinuar na mesma (não recomendado)?"
|
||||
StrCpy $UNINSTALL_ABORT "Desinstalação cancelada pelo utilizador"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Atalho de Início Rápido (N/A)"
|
||||
StrCpy $INIT_NO_DESKTOP "Atalho do Ambiente de Trabalho (sobrepõe o existente)"
|
||||
|
||||
@@ -9,6 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Avinstallera inte"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Redan installerad"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Välj hur du vill installera ${APPLICATION_NAME}."
|
||||
StrCpy $PageReinstall_OLD_Field_1 "En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} är redan installerad.$\n$\nVälj den åtgärd du vill utföra och klicka på Nästa för att fortsätta."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Lägg till/Ominstallera komponenter"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Avinstallera ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstallera ${APPLICATION_NAME}"
|
||||
@@ -40,4 +41,3 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Detta avinstallationsprogram kräver adm
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Login-service körs inte, avbryter!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
||||
StrCpy $SectionGroup_Shortcuts "Genvägar"
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
[Paths]
|
||||
Prefix = .
|
||||
Plugins = .
|
||||
Binaries = .
|
||||
Imports = .
|
||||
Qml2Imports = .
|
||||
LibraryExecutables = .
|
||||
+1
-1
Submodule binary updated: 0d89ac7766...d27d472817
@@ -0,0 +1,5 @@
|
||||
--- binary
|
||||
+++ binary
|
||||
@@ -1 +1 @@
|
||||
-Subproject commit 1fb9ddfa9a9a1b4dbc447eee10dbed89172d968a
|
||||
+Subproject commit 01d73965dc8b862d1b2310d3ef801c297b697ec7
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -411,9 +411,6 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
File "@CPACK_RESOURCE_FILE_LICENSE@"
|
||||
;File /oname=NOTES.txt ${NSI_PATH}\RELEASE_NOTES.txt
|
||||
|
||||
;Qt config:
|
||||
File "${NSI_PATH}\qt.conf"
|
||||
|
||||
;Qt stuff:
|
||||
File "${QT_DLL_PATH}\Qt5Core.dll"
|
||||
File "${QT_DLL_PATH}\Qt5Gui.dll"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# (c) 2014 Copyright ownCloud GmbH
|
||||
# (c) 2014 Copyright ownCloud, Inc.
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING* file.
|
||||
|
||||
|
||||
@@ -44,18 +44,6 @@
|
||||
static
|
||||
#endif
|
||||
int _csync_exclude_add(c_strlist_t **inList, const char *string) {
|
||||
size_t i = 0;
|
||||
|
||||
// We never want duplicates, so check whether the string is already
|
||||
// in the list first.
|
||||
if (*inList) {
|
||||
for (i = 0; i < (*inList)->count; ++i) {
|
||||
char *pattern = (*inList)->vector[i];
|
||||
if (c_streq(pattern, string)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return c_strlist_add_grow(inList, string);
|
||||
}
|
||||
|
||||
@@ -151,10 +139,8 @@ int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
||||
buf[i] = '\0';
|
||||
if (*entry != '#') {
|
||||
const char *unescaped = csync_exclude_expand_escapes(entry);
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Adding entry: %s", unescaped);
|
||||
rc = _csync_exclude_add(list, unescaped);
|
||||
if( rc == 0 ) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Adding entry: %s", unescaped);
|
||||
}
|
||||
SAFE_FREE(unescaped);
|
||||
if (rc < 0) {
|
||||
goto out;
|
||||
|
||||
@@ -472,7 +472,7 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
|
||||
|
||||
if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE
|
||||
|| excluded == CSYNC_FILE_SILENTLY_EXCLUDED) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -481,7 +481,7 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
|
||||
|
||||
/* store into result list. */
|
||||
if (c_rbtree_insert(ctx->remote.tree, (void *) st) < 0) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_TREE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -269,8 +269,8 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
tmp = csync_statedb_get_stat_by_hash(ctx, h);
|
||||
|
||||
if(_last_db_return_error(ctx)) {
|
||||
csync_file_stat_free(st);
|
||||
csync_file_stat_free(tmp);
|
||||
SAFE_FREE(st);
|
||||
SAFE_FREE(tmp);
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
return -1;
|
||||
}
|
||||
@@ -357,7 +357,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
enum csync_vio_file_type_e tmp_vio_type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
|
||||
|
||||
/* tmp might point to malloc mem, so free it here before reusing tmp */
|
||||
csync_file_stat_free(tmp);
|
||||
SAFE_FREE(tmp);
|
||||
|
||||
/* check if it's a file and has been renamed */
|
||||
if (ctx->current == LOCAL_REPLICA) {
|
||||
@@ -366,7 +366,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
tmp = csync_statedb_get_stat_by_inode(ctx, fs->inode);
|
||||
|
||||
if(_last_db_return_error(ctx)) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
return -1;
|
||||
}
|
||||
@@ -422,7 +422,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
tmp = csync_statedb_get_stat_by_file_id(ctx, fs->file_id);
|
||||
|
||||
if(_last_db_return_error(ctx)) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
return -1;
|
||||
}
|
||||
@@ -451,7 +451,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
|
||||
if (fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) {
|
||||
if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, path)) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -461,7 +461,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
}
|
||||
} else {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unable to open statedb" );
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL;
|
||||
return -1;
|
||||
}
|
||||
@@ -523,14 +523,14 @@ out:
|
||||
switch (ctx->current) {
|
||||
case LOCAL_REPLICA:
|
||||
if (c_rbtree_insert(ctx->local.tree, (void *) st) < 0) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_TREE_ERROR;
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case REMOTE_REPLICA:
|
||||
if (c_rbtree_insert(ctx->remote.tree, (void *) st) < 0) {
|
||||
csync_file_stat_free(st);
|
||||
SAFE_FREE(st);
|
||||
ctx->status_code = CSYNC_STATUS_TREE_ERROR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,6 @@ void csync_vio_file_stat_destroy(csync_vio_file_stat_t *file_stat) {
|
||||
SAFE_FREE(file_stat->directDownloadUrl);
|
||||
SAFE_FREE(file_stat->directDownloadCookies);
|
||||
SAFE_FREE(file_stat->name);
|
||||
SAFE_FREE(file_stat->original_name);
|
||||
SAFE_FREE(file_stat);
|
||||
}
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
||||
return file_stat;
|
||||
|
||||
err:
|
||||
csync_vio_file_stat_destroy(file_stat);
|
||||
SAFE_FREE(file_stat);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -167,20 +167,16 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
||||
}
|
||||
file_stat->name = c_utf8_from_locale(handle->ffd.cFileName);
|
||||
|
||||
file_stat->flags = CSYNC_VIO_FILE_FLAGS_NONE;
|
||||
file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
|
||||
if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) {
|
||||
// Detect symlinks, and treat junctions as symlinks too.
|
||||
if (handle->ffd.dwReserved0 == IO_REPARSE_TAG_SYMLINK
|
||||
|| handle->ffd.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT) {
|
||||
file_stat->flags |= CSYNC_VIO_FILE_FLAGS_SYMLINK;
|
||||
file_stat->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
|
||||
} else {
|
||||
// The SIS and DEDUP reparse points should be treated as
|
||||
// regular files. We don't know about the other ones yet,
|
||||
// but will also treat them normally for now.
|
||||
file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||
}
|
||||
if ( (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
|
||||
&& (handle->ffd.dwReserved0 & IO_REPARSE_TAG_SYMLINK)
|
||||
// The SIS or DEDUP flag points to a MS deduplication feature of
|
||||
// certain file storage products. It is not a normal symlink
|
||||
// that should be ignored.
|
||||
&& (! (handle->ffd.dwReserved0 & IO_REPARSE_TAG_SIS))
|
||||
&& (! (handle->ffd.dwReserved0 & IO_REPARSE_TAG_DEDUP)) ) {
|
||||
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) {
|
||||
@@ -191,6 +187,7 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
||||
file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||
}
|
||||
|
||||
file_stat->flags = CSYNC_VIO_FILE_FLAGS_NONE;
|
||||
/* Check for the hidden flag */
|
||||
if( handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) {
|
||||
file_stat->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
|
||||
|
||||
@@ -31,6 +31,13 @@ use strict;
|
||||
|
||||
print "Hello, this is t6, a tester for csync with ownCloud.\n";
|
||||
|
||||
# Checking CURL is installed to avoid misleading errors later...
|
||||
system(("curl", "--help", ">", "/dev/null"));
|
||||
if ($? != 0) {
|
||||
print "CURL is needed for this script, aborting with error\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
initTesting();
|
||||
|
||||
sub createPostUpdateScript($)
|
||||
|
||||
+4
-4
@@ -159,8 +159,8 @@ In order to make setup simple, you can use the provided Dockerfile to build your
|
||||
1. Assuming you are in the root of the ownCloud Client's source tree, you can
|
||||
build an image from this Dockerfile like this::
|
||||
|
||||
cd admin/win/docker
|
||||
docker build . -t owncloud-client-win32:<version>
|
||||
cd admin/win32/docker
|
||||
docker build . -t ownCloud-client-win32:<version>
|
||||
|
||||
Replace ``<version>`` by the version of the client you are building, e.g.
|
||||
|version| for the release of the client that this document describes.
|
||||
@@ -174,8 +174,8 @@ In order to make setup simple, you can use the provided Dockerfile to build your
|
||||
|
||||
2. From within the source tree Run the docker instance::
|
||||
|
||||
docker run -v "$PWD:/home/user/client" owncloud-client-win32:<version> \
|
||||
/home/user/client/admin/win/docker/build.sh client/ $(id -u)
|
||||
docker run ownCloud-client-win32:<version> -v "$PWD:/home/jenkins/client" \
|
||||
admin/win32/docker/build.sh $(id -u)
|
||||
|
||||
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.
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ logs.
|
||||
|
||||
1. Output of `owncloud --logwindow` or `owncloud --logfile log.txt`
|
||||
(On Windows using `cmd.exe`, you might need to first `cd` into the ownCloud directory)
|
||||
(See also http://doc.owncloud.org/desktop/1.8/troubleshooting.html#client-logfile )
|
||||
(See also http://doc.owncloud.org/desktop/2.2/troubleshooting.html#client-logfile )
|
||||
|
||||
2. Web server error log:
|
||||
|
||||
|
||||
+10
-290
@@ -20,233 +20,7 @@ X-GNOME-Autostart-Delay=3
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
Comment[oc]=@APPLICATION_NAME@ sincronizacion del client
|
||||
GenericName[oc]=Dorsièr de Sincronizacion
|
||||
Name[oc]=@APPLICATION_NAME@ sincronizacion del client
|
||||
Icon[oc]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ar]=@APPLICATION_NAME@ زبون مزامنة مكتبي
|
||||
GenericName[ar]=مزامنة المجلد
|
||||
Name[ar]=@APPLICATION_NAME@ زبون مزامنة مكتبي
|
||||
Icon[ar]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ca]=Client de sincronització d'escriptori @APPLICATION_NAME@
|
||||
GenericName[ca]=Sincronització de carpetes
|
||||
Name[ca]=Client de sincronització d'escriptori @APPLICATION_NAME@
|
||||
@@ -259,12 +33,6 @@ Comment[de]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
|
||||
GenericName[de]=Ordner-Synchronisation
|
||||
Name[de]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
|
||||
Icon[de]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||
GenericName[ja_JP]=フォルダ同期
|
||||
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||
Icon[ja_JP]=@APPLICATION_EXECUTABLE@
|
||||
GenericName[el]=Συγχρονισμός φακέλου
|
||||
Icon[el]=@APPLICATION_EXECUTABLE@
|
||||
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
|
||||
GenericName[en_GB]=Folder Sync
|
||||
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
|
||||
@@ -277,26 +45,14 @@ Comment[de_DE]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
|
||||
GenericName[de_DE]=Ordner-Synchronisation
|
||||
Name[de_DE]=@APPLICATION_NAME@ Desktop-Synchronisationsclient
|
||||
Icon[de_DE]=@APPLICATION_EXECUTABLE@
|
||||
Comment[pl]=@APPLICATION_NAME@ klient synchronizacji dla komputerów stacjonarnych
|
||||
GenericName[pl]=Folder Synchronizacji
|
||||
Name[pl]=@APPLICATION_NAME@ klient synchronizacji dla komputerów stacjonarnych
|
||||
Icon[pl]=@APPLICATION_EXECUTABLE@
|
||||
Comment[fr]=@APPLICATION_NAME@ synchronisation du client
|
||||
GenericName[fr]=Dossier de Synchronisation
|
||||
Name[fr]=@APPLICATION_NAME@ synchronisation du client
|
||||
Icon[fr]=@APPLICATION_EXECUTABLE@
|
||||
Comment[he]=@APPLICATION_NAME@ לקוח סנכון שולחן עבודה
|
||||
GenericName[he]=סנכון תיקייה
|
||||
Name[he]=@APPLICATION_NAME@ לקוח סנכרון שולחן עבודה
|
||||
Icon[he]=@APPLICATION_EXECUTABLE@
|
||||
Comment[id]=Klien sinkronisasi desktop @APPLICATION_NAME@
|
||||
GenericName[id]=Folder Sync
|
||||
Name[id]=Klien sync desktop @APPLICATION_NAME@
|
||||
Icon[id]=@APPLICATION_EXECUTABLE@
|
||||
Comment[is]=@APPLICATION_NAME@ skjáborðsforrit samstillingar
|
||||
GenericName[is]=Samstilling möppu
|
||||
Name[is]=@APPLICATION_NAME@ skjáborðsforrit samstillingar
|
||||
Icon[is]=@APPLICATION_EXECUTABLE@
|
||||
Comment[it]=Client di sincronizzazione del desktop di @APPLICATION_NAME@
|
||||
GenericName[it]=Sincronizzazione cartella
|
||||
Name[it]=Client di sincronizzazione del desktop di @APPLICATION_NAME@
|
||||
@@ -304,18 +60,10 @@ Icon[it]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
||||
GenericName[ko]=폴더 동기화
|
||||
Name[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
||||
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizációs kliens
|
||||
GenericName[hu_HU]=Könyvtár szinkronizálás
|
||||
Name[hu_HU]=@APPLICATION_NAME@ asztali szinkr. kliens
|
||||
Icon[hu_HU]=@APPLICATION_EXECUTABLE@
|
||||
Comment[nl]=@APPLICATION_NAME@ desktop synchronisatie client
|
||||
GenericName[nl]=Mappen sync
|
||||
Name[nl]=@APPLICATION_NAME@ desktop sync client
|
||||
Icon[nl]=@APPLICATION_EXECUTABLE@
|
||||
Comment[et_EE]=@APPLICATION_NAME@ sünkroonimise klient töölauale
|
||||
GenericName[et_EE]=Kaustade sünkroonimine
|
||||
Name[et_EE]=@APPLICATION_NAME@ sünkroonimise klient töölauale
|
||||
Icon[et_EE]=@APPLICATION_EXECUTABLE@
|
||||
Comment[bg_BG]=@APPLICATION_NAME@ клиент за десктоп синхронизация
|
||||
GenericName[bg_BG]=Синхронизиране на папката
|
||||
Name[bg_BG]=@APPLICATION_NAME@ клиент десктоп синхронизация
|
||||
@@ -328,9 +76,9 @@ Comment[cs_CZ]=@APPLICATION_NAME@ počítačový synchronizační klient
|
||||
GenericName[cs_CZ]=Synchronizace adresáře
|
||||
Name[cs_CZ]=@APPLICATION_NAME@ počítačový synchronizační klient
|
||||
Icon[cs_CZ]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ru]=Настольный клиент синхронизации @НАЗВАНИЕ_ПРИЛОЖЕНИЯ@
|
||||
Comment[ru]=@НАЗВАНИЕ_ПРИЛОЖЕНИЯ@ Клиент синхронизации
|
||||
GenericName[ru]=Синхронизация папки
|
||||
Name[ru]=Настольный клиент синхронизации @НАЗВАНИЕ_ПРИЛОЖЕНИЯ@
|
||||
Name[ru]=@НАЗВАНИЕ_ПРИЛОЖЕНИЯ@ Клиент синхронизации
|
||||
Icon[ru]=@ВЫПОЛНЯЕМОЕ_ПРИЛОЖЕНИЕ@
|
||||
Comment[sl]=@APPLICATION_NAME@ ‒ Program za usklajevanje datotek z namizjem
|
||||
GenericName[sl]=Usklajevanje map
|
||||
@@ -340,49 +88,21 @@ Comment[sq]=Klient njëkohësimesh @APPLICATION_NAME@ për desktop
|
||||
GenericName[sq]=Njëkohësim Dosjesh
|
||||
Name[sq]=Klient njëkohësimesh @APPLICATION_NAME@ për desktop
|
||||
Icon[sq]=@APPLICATION_EXECUTABLE@
|
||||
Comment[sv]=@APPLICATION_NAME@ desktop synkroniseringsklient
|
||||
GenericName[sv]=Mappsynk
|
||||
Name[sv]=@APPLICATION_NAME@ desktop synk-klient
|
||||
Icon[sv]=@APPLICATION_EXECUTABLE@
|
||||
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
|
||||
GenericName[tr]=Dosya Eşitleme
|
||||
Name[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
|
||||
Icon[tr]=@APPLICATION_EXECUTABLE@
|
||||
Comment[uk]=Настільний клієнт синхронізації @APPLICATION_NAME@
|
||||
GenericName[uk]=Синхронізація теки
|
||||
Name[uk]=Настільний клієнт синхронізації @APPLICATION_NAME@
|
||||
Icon[uk]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||
GenericName[ja_JP]=フォルダ同期
|
||||
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||
Icon[ja_JP]=@APPLICATION_EXECUTABLE@
|
||||
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pe desktop
|
||||
GenericName[ro]=Sincronizare director
|
||||
Name[ro]=@APPLICATION_NAME@ client de sincronizare pe desktop
|
||||
Icon[ro]=@APPLICATION_EXECUTABLE@
|
||||
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
||||
GenericName[zh_CN]=文件夹同步
|
||||
Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
||||
Icon[zh_CN]=@APPLICATION_EXECUTABLE@
|
||||
GenericName[zh_TW]=資料夾同步
|
||||
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo programa
|
||||
GenericName[lt_LT]=Katalogo sinchnorizacija
|
||||
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio programa
|
||||
Icon[lt_LT]=@APPLICATION_EXECUTABLE@
|
||||
Comment[pt_PT]=@APPLICATION_NAME@ cliente de sincronização para ambiente de trabalho
|
||||
GenericName[pt_PT]=Sincronizar Pasta
|
||||
Name[pt_PT]=@APPLICATION_NAME@ cliente de sincronização para ambiente de trabalho
|
||||
Icon[pt_PT]=@APPLICATION_EXECUTABLE@
|
||||
Comment[th_TH]=@APPLICATION_NAME@ ไคลเอนต์ประสานข้อมูลเดสก์ท็อป
|
||||
GenericName[th_TH]=ประสานข้อมูลโฟลเดอร์
|
||||
Name[th_TH]= @APPLICATION_NAME@ ไคลเอนต์ประสานข้อมูลเดสก์ท็อป
|
||||
Icon[th_TH]=@APPLICATION_EXECUTABLE@
|
||||
Comment[nb_NO]=@APPLICATION_NAME@ skrivebordssynkroniseringsklient
|
||||
GenericName[nb_NO]=Mappesynkronisering
|
||||
Name[nb_NO]=@APPLICATION_NAME@ skrivebordssynkroniseringsklient
|
||||
Icon[nb_NO]=@APPLICATION_EXECUTABLE@
|
||||
Comment[nn_NO]=@APPLICATION_NAME@ klient for å synkronisera frå skrivebord
|
||||
GenericName[nn_NO]=Mappe synkronisering
|
||||
Name[nn_NO]=@APPLICATION_NAME@ klient for å synkronisera frå skrivebord
|
||||
Icon[nn_NO]=@APPLICATION_EXECUTABLE@
|
||||
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização para PC
|
||||
GenericName[pt_PT]=Sincronizar Pasta
|
||||
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização para PC
|
||||
Icon[pt_PT]=@APPLICATION_EXECUTABLE@
|
||||
Icon[km]=@APPLICATION_EXECUTABLE@
|
||||
Comment[lb]=@APPLICATION_NAME@ Desktop Synchronisatioun Client
|
||||
GenericName[lb]=Dossier Dync
|
||||
Name[lb]=@APPLICATION_NAME@ Desktop Sync Client
|
||||
Icon[lb]=@APPLICATION_EXECUTABLE@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2015 ownCloud GmbH. All rights reserved.
|
||||
* Copyright (c) 2015 ownCloud, Inc. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright (c) 2014 ownCloud GmbH. All rights reserved.
|
||||
* Copyright (c) 2014 ownCloud, Inc. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
|
||||
Arquivo binário não exibido.
@@ -59,22 +59,22 @@
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x86</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x64</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x64</TargetName>
|
||||
</PropertyGroup>
|
||||
@@ -89,13 +89,10 @@
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x86.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCContextMenu.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
@@ -111,17 +108,14 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x86.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCContextMenu.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<ModuleDefinitionFile>OCContextMenu.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>OCUtil_x64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
@@ -133,9 +127,6 @@
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PrecompiledHeader />
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
@@ -143,15 +134,12 @@
|
||||
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCContextMenu.def</ModuleDefinitionFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="ReadMe.txt" />
|
||||
|
||||
@@ -110,17 +110,17 @@ IFACEMETHODIMP OCOverlay::GetPriority(int *pPriority)
|
||||
// we order this in terms of likelyhood
|
||||
switch (_state) {
|
||||
case State_OK:
|
||||
*pPriority = 0; break;
|
||||
*pPriority = 0;
|
||||
case State_OKShared:
|
||||
*pPriority = 1; break;
|
||||
*pPriority = 1;
|
||||
case State_Warning:
|
||||
*pPriority = 2; break;
|
||||
*pPriority = 2;
|
||||
case State_Sync:
|
||||
*pPriority = 3; break;
|
||||
*pPriority = 3;
|
||||
case State_Error:
|
||||
*pPriority = 4; break;
|
||||
*pPriority = 4;
|
||||
default:
|
||||
*pPriority = 5; break;
|
||||
*pPriority = 5;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
||||
Arquivo binário não exibido.
@@ -66,25 +66,25 @@
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x86</TargetName>
|
||||
<TargetExt>.dll</TargetExt>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x64</TargetName>
|
||||
<TargetExt>.dll</TargetExt>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x86</TargetName>
|
||||
<TargetExt>.dll</TargetExt>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x64</TargetName>
|
||||
<TargetExt>.dll</TargetExt>
|
||||
@@ -99,14 +99,11 @@
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCOverlays.def</ModuleDefinitionFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
@@ -117,14 +114,11 @@
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCOverlays.def</ModuleDefinitionFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
@@ -139,14 +133,11 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCOverlays.def</ModuleDefinitionFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
@@ -161,14 +152,11 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>OCUtil_x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>OCOverlays.def</ModuleDefinitionFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\OCUtil</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="DllMain.cpp" />
|
||||
|
||||
@@ -45,7 +45,7 @@ std::wstring getUserName() {
|
||||
std::wstring CommunicationSocket::DefaultPipePath()
|
||||
{
|
||||
auto pipename = std::wstring(L"\\\\.\\pipe\\");
|
||||
pipename += L"ownCloud-";
|
||||
pipename += L"ownCloud\\";
|
||||
pipename += getUserName();
|
||||
return pipename;
|
||||
}
|
||||
|
||||
@@ -67,26 +67,26 @@
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<TargetExt>.dll</TargetExt>
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x86</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<TargetExt>.dll</TargetExt>
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>$(ProjectName)_x64</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<TargetName>$(ProjectName)_x64</TargetName>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<TargetExt>.dll</TargetExt>
|
||||
<TargetName>$(ProjectName)_x86</TargetName>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<OutDir>$(SolutionDir)..\..\binary\shell_integration\windows\$(Configuration)\$(Platform)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Configuration)\$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
@@ -155,7 +155,6 @@
|
||||
<ClInclude Include="CommunicationSocket.h" />
|
||||
<ClInclude Include="FileUtil.h" />
|
||||
<ClInclude Include="RegistryUtil.h" />
|
||||
<ClInclude Include="Version.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="CommunicationSocket.cpp" />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2014 ownCloud GmbH. All rights reserved.
|
||||
* Copyright (c) 2014 ownCloud, Inc. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2014 ownCloud GmbH. All rights reserved.
|
||||
* Copyright (c) 2014 ownCloud, Inc. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2014 ownCloud GmbH. All rights reserved.
|
||||
* Copyright (c) 2014 ownCloud, Inc. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2014 ownCloud GmbH. All rights reserved.
|
||||
* Copyright (c) 2014 ownCloud, Inc. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// This is the number that will end up in the version window of the DLLs.
|
||||
// Increment this version before committing a new build if you are today's shell_integration build master.
|
||||
#define OCEXT_BUILD_NUM 43
|
||||
|
||||
#define STRINGIZE2(s) #s
|
||||
#define STRINGIZE(s) STRINGIZE2(s)
|
||||
|
||||
#define OCEXT_VERSION 1,0,0,OCEXT_BUILD_NUM
|
||||
#define OCEXT_VERSION_STRING STRINGIZE(OCEXT_VERSION)
|
||||
+3
-20
@@ -272,12 +272,6 @@ void selectiveSyncFixup(OCC::SyncJournalDb *journal, const QStringList &newList)
|
||||
int main(int argc, char **argv) {
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
// Ensure OpenSSL config file is only loaded from app directory
|
||||
QString opensslConf = QCoreApplication::applicationDirPath()+QString("/openssl.cnf");
|
||||
qputenv("OPENSSL_CONF", opensslConf.toLocal8Bit());
|
||||
#endif
|
||||
|
||||
qsrand(QTime::currentTime().msec() * QCoreApplication::applicationPid());
|
||||
|
||||
CmdOptions options;
|
||||
@@ -449,27 +443,16 @@ restart_sync:
|
||||
QObject::connect(&engine, SIGNAL(finished(bool)), &app, SLOT(quit()));
|
||||
QObject::connect(&engine, SIGNAL(transmissionProgress(ProgressInfo)), &cmd, SLOT(transmissionProgressSlot()));
|
||||
|
||||
|
||||
// Exclude lists
|
||||
|
||||
bool hasUserExcludeFile = !options.exclude.isEmpty();
|
||||
QString systemExcludeFile = ConfigFile::excludeFileFromSystem();
|
||||
|
||||
// Always try to load the user-provided exclude list if one is specified
|
||||
if ( hasUserExcludeFile ) {
|
||||
engine.excludedFiles().addExcludeFilePath(ConfigFile::excludeFileFromSystem());
|
||||
if( QFile::exists(options.exclude) )
|
||||
engine.excludedFiles().addExcludeFilePath(options.exclude);
|
||||
}
|
||||
// Load the system list if available, or if there's no user-provided list
|
||||
if ( !hasUserExcludeFile || QFile::exists(systemExcludeFile) ) {
|
||||
engine.excludedFiles().addExcludeFilePath(systemExcludeFile);
|
||||
}
|
||||
|
||||
if (!engine.excludedFiles().reloadExcludes()) {
|
||||
// Always make sure at least one list has been loaded
|
||||
qFatal("Cannot load system exclude list or list supplied via --exclude");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
// Have to be done async, else, an error before exec() does not terminate the event loop.
|
||||
QMetaObject::invokeMethod(&engine, "startSync", Qt::QueuedConnection);
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ set(client_SRCS
|
||||
settingsdialog.cpp
|
||||
share.cpp
|
||||
sharedialog.cpp
|
||||
shareemailwidget.cpp
|
||||
sharelinkwidget.cpp
|
||||
shareusergroupwidget.cpp
|
||||
sharee.cpp
|
||||
|
||||
@@ -213,12 +213,14 @@ AccountPtr AccountManager::loadAccountHelper(QSettings& settings)
|
||||
|
||||
QString authType = settings.value(QLatin1String(authTypeC)).toString();
|
||||
QString overrideUrl = Theme::instance()->overrideServerUrl();
|
||||
QString forceAuth = Theme::instance()->forceConfigAuthType();
|
||||
if(!forceAuth.isEmpty() && !overrideUrl.isEmpty() ) {
|
||||
// If forceAuth is set, this might also mean the overrideURL has changed.
|
||||
// See enterprise issues #1126
|
||||
if( !overrideUrl.isEmpty() ) {
|
||||
// if there is a overrideUrl, don't even bother reading from the config as all the accounts
|
||||
// must use the overrideUrl
|
||||
acc->setUrl(overrideUrl);
|
||||
authType = forceAuth;
|
||||
auto forceAuth = Theme::instance()->forceConfigAuthType();
|
||||
if (!forceAuth.isEmpty()) {
|
||||
authType = forceAuth;
|
||||
}
|
||||
} else {
|
||||
acc->setUrl(settings.value(QLatin1String(urlC)).toUrl());
|
||||
}
|
||||
|
||||
@@ -159,13 +159,7 @@ void AccountSettings::createAccountToolbox()
|
||||
|
||||
void AccountSettings::slotOpenAccountWizard()
|
||||
{
|
||||
if (
|
||||
#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
|
||||
qgetenv("QT_QPA_PLATFORMTHEME") == "appmenu-qt5" ||
|
||||
// We can't call isSystemTrayAvailable with appmenu-qt5 because it breaks the systemtray
|
||||
// (issue #4693, #4944)
|
||||
#endif
|
||||
QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||
if (QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||
topLevelWidget()->close();
|
||||
}
|
||||
#ifdef Q_OS_MAC
|
||||
|
||||
@@ -190,8 +190,7 @@ void AccountState::checkConnectivity()
|
||||
} else {
|
||||
// Check the server and then the auth.
|
||||
|
||||
// Let's try this for all OS and see if it fixes the Qt issues we have on Linux #4720 #3888 #4051
|
||||
//#ifdef Q_OS_WIN
|
||||
#ifdef Q_OS_WIN
|
||||
// There seems to be a bug in Qt on Windows where QNAM sometimes stops
|
||||
// working correctly after the computer woke up from sleep. See #2895 #2899
|
||||
// and #2973.
|
||||
@@ -202,7 +201,7 @@ void AccountState::checkConnectivity()
|
||||
// If we don't reset the ssl config a second CheckServerJob can produce a
|
||||
// ssl config that does not have a sensible certificate chain.
|
||||
account()->setSslConfiguration(QSslConfiguration());
|
||||
//#endif
|
||||
#endif
|
||||
conValidator->checkServerAndAuth();
|
||||
}
|
||||
}
|
||||
@@ -210,7 +209,6 @@ void AccountState::checkConnectivity()
|
||||
void AccountState::slotConnectionValidatorResult(ConnectionValidator::Status status, const QStringList& errors)
|
||||
{
|
||||
if (isSignedOut()) {
|
||||
qDebug() << "Signed out, ignoring" << connectionStatusString(status) << _account->url().toString();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -248,6 +248,9 @@ void ActivityWidget::slotBuildNotificationDisplay(const ActivityList& list)
|
||||
QHash<QString, int> accNotified;
|
||||
QString listAccountName;
|
||||
|
||||
// Whether a new notification widget was added to the notificationLayout.
|
||||
bool newNotificationShown = false;
|
||||
|
||||
foreach( auto activity, list ) {
|
||||
if( _blacklistedNotifications.contains(activity)) {
|
||||
qDebug() << Q_FUNC_INFO << "Activity in blacklist, skip";
|
||||
@@ -271,6 +274,7 @@ void ActivityWidget::slotBuildNotificationDisplay(const ActivityList& list)
|
||||
_ui->_notifyScroll->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow);
|
||||
#endif
|
||||
_widgetForNotifId[activity.ident()] = widget;
|
||||
newNotificationShown = true;
|
||||
}
|
||||
|
||||
widget->setActivity( activity );
|
||||
@@ -365,6 +369,10 @@ void ActivityWidget::slotBuildNotificationDisplay(const ActivityList& list)
|
||||
const QString log = tr("%1 Notifications - Action Required").arg(Theme::instance()->appNameGUI());
|
||||
emit guiLog( log, msg);
|
||||
}
|
||||
|
||||
if (newNotificationShown) {
|
||||
emit newNotification();
|
||||
}
|
||||
}
|
||||
|
||||
void ActivityWidget::slotSendNotificationRequest(const QString& accountName, const QString& link, const QByteArray& verb)
|
||||
@@ -517,6 +525,7 @@ ActivitySettings::ActivitySettings(QWidget *parent)
|
||||
connect(_activityWidget, SIGNAL(copyToClipboard()), this, SLOT(slotCopyToClipboard()));
|
||||
connect(_activityWidget, SIGNAL(hideActivityTab(bool)), this, SLOT(setActivityTabHidden(bool)));
|
||||
connect(_activityWidget, SIGNAL(guiLog(QString,QString)), this, SIGNAL(guiLog(QString,QString)));
|
||||
connect(_activityWidget, SIGNAL(newNotification()), SLOT(slotShowActivityTab()));
|
||||
|
||||
_protocolWidget = new ProtocolWidget(this);
|
||||
_tab->insertTab(1, _protocolWidget, Theme::instance()->syncStateIcon(SyncResult::Success), tr("Sync Protocol"));
|
||||
@@ -582,6 +591,13 @@ void ActivitySettings::slotShowIssueItemCount(int cnt)
|
||||
_tab->setTabText(_syncIssueTabId, cntText);
|
||||
}
|
||||
|
||||
void ActivitySettings::slotShowActivityTab()
|
||||
{
|
||||
if (_activityTabId != -1) {
|
||||
_tab->setCurrentIndex(_activityTabId);
|
||||
}
|
||||
}
|
||||
|
||||
void ActivitySettings::slotCopyToClipboard()
|
||||
{
|
||||
QString text;
|
||||
|
||||
@@ -81,7 +81,7 @@ signals:
|
||||
void copyToClipboard();
|
||||
void rowsInserted();
|
||||
void hideActivityTab(bool);
|
||||
void newNotificationList(const ActivityList& list);
|
||||
void newNotification();
|
||||
|
||||
private slots:
|
||||
void slotBuildNotificationDisplay(const ActivityList& list);
|
||||
@@ -143,6 +143,7 @@ private slots:
|
||||
void setActivityTabHidden(bool hidden);
|
||||
void slotRegularNotificationCheck();
|
||||
void slotShowIssueItemCount(int cnt);
|
||||
void slotShowActivityTab();
|
||||
|
||||
signals:
|
||||
void guiLog(const QString&, const QString&);
|
||||
|
||||
@@ -105,12 +105,6 @@ Application::Application(int &argc, char **argv) :
|
||||
{
|
||||
_startedAt.start();
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
// Ensure OpenSSL config file is only loaded from app directory
|
||||
QString opensslConf = QCoreApplication::applicationDirPath()+QString("/openssl.cnf");
|
||||
qputenv("OPENSSL_CONF", opensslConf.toLocal8Bit());
|
||||
#endif
|
||||
|
||||
// TODO: Can't set this without breaking current config paths
|
||||
// setOrganizationName(QLatin1String(APPLICATION_VENDOR));
|
||||
setOrganizationDomain(QLatin1String(APPLICATION_REV_DOMAIN));
|
||||
@@ -145,7 +139,6 @@ Application::Application(int &argc, char **argv) :
|
||||
setupTranslations();
|
||||
|
||||
// Setup global excludes
|
||||
qDebug() << "Loading global exclude list";
|
||||
ConfigFile cfg;
|
||||
ExcludedFiles& excludes = ExcludedFiles::instance();
|
||||
excludes.addExcludeFilePath( cfg.excludeFile(ConfigFile::SystemScope) );
|
||||
@@ -186,6 +179,8 @@ Application::Application(int &argc, char **argv) :
|
||||
|
||||
connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, QString, bool)),
|
||||
_gui, SLOT(slotShowShareDialog(QString, QString, bool)));
|
||||
connect(FolderMan::instance()->socketApi(), SIGNAL(shareEmailCommandReceived(QString,QString,bool)),
|
||||
_gui, SLOT(slowSendShareLink(QString, QString, bool)));
|
||||
|
||||
// startup procedure.
|
||||
connect(&_checkConnectionTimer, SIGNAL(timeout()), this, SLOT(slotCheckConnection()));
|
||||
@@ -342,14 +337,6 @@ void Application::slotownCloudWizardDone( int res )
|
||||
}
|
||||
}
|
||||
|
||||
static void csyncLogCatcher(int /*verbosity*/,
|
||||
const char */*function*/,
|
||||
const char *buffer,
|
||||
void */*userdata*/)
|
||||
{
|
||||
Logger::instance()->csyncLog( QString::fromUtf8(buffer) );
|
||||
}
|
||||
|
||||
void Application::setupLogging()
|
||||
{
|
||||
// might be called from second instance
|
||||
@@ -365,9 +352,6 @@ void Application::setupLogging()
|
||||
.arg(property("ui_lang").toString())
|
||||
.arg(_theme->version());
|
||||
|
||||
// Setup CSYNC logging to forward to our own logger
|
||||
csync_set_log_callback( csyncLogCatcher );
|
||||
csync_set_log_level( Logger::instance()->isNoop() ? 0 : 11 );
|
||||
}
|
||||
|
||||
void Application::slotUseMonoIconsChanged(bool)
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <QMessageBox>
|
||||
#include <QNetworkReply>
|
||||
#include <QSettings>
|
||||
#include <QMainWindow>
|
||||
|
||||
#include "creds/shibboleth/shibbolethwebview.h"
|
||||
#include "creds/shibbolethcredentials.h"
|
||||
@@ -75,23 +74,10 @@ ShibbolethWebView::ShibbolethWebView(AccountPtr account, QWidget* parent)
|
||||
connect(page->networkAccessManager()->cookieJar(),
|
||||
SIGNAL(newCookiesForUrl (QList<QNetworkCookie>, QUrl)),
|
||||
this, SLOT(onNewCookiesForUrl (QList<QNetworkCookie>, QUrl)));
|
||||
|
||||
page->mainFrame()->load(account->url());
|
||||
this->setPage(page);
|
||||
setWindowTitle(tr("%1 - Authenticate").arg(Theme::instance()->appNameGUI()));
|
||||
|
||||
// Debug view to display the cipher suite
|
||||
if( !qgetenv("OWNCLOUD_SHIBBOLETH_DEBUG").isEmpty() ) {
|
||||
// open an additional window to display some cipher debug info
|
||||
QWebPage *debugPage = new UserAgentWebPage(this);
|
||||
debugPage->mainFrame()->load( QUrl("https://cc.dcsec.uni-hannover.de/"));
|
||||
QWebView *debugView = new QWebView(this);
|
||||
debugView->setPage(debugPage);
|
||||
QMainWindow *window = new QMainWindow(this);
|
||||
window->setWindowTitle(tr("SSL Chipher Debug View"));
|
||||
window->setCentralWidget(debugView);
|
||||
window->show();
|
||||
}
|
||||
// If we have a valid cookie, it's most likely expired. We can use this as
|
||||
// as a criteria to tell the user why the browser window pops up
|
||||
QNetworkCookie shibCookie = ShibbolethCredentials::findShibCookie(_account.data(), ShibbolethCredentials::accountCookies(_account.data()));
|
||||
@@ -156,6 +142,7 @@ void ShibbolethWebView::slotLoadFinished(bool success)
|
||||
|
||||
if (!success) {
|
||||
qDebug() << Q_FUNC_INFO << "Could not load Shibboleth login page to log you in.";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+25
-22
@@ -46,6 +46,14 @@
|
||||
|
||||
namespace OCC {
|
||||
|
||||
static void csyncLogCatcher(int /*verbosity*/,
|
||||
const char */*function*/,
|
||||
const char *buffer,
|
||||
void */*userdata*/)
|
||||
{
|
||||
Logger::instance()->csyncLog( QString::fromUtf8(buffer) );
|
||||
}
|
||||
|
||||
|
||||
Folder::Folder(const FolderDefinition& definition,
|
||||
AccountState* accountState,
|
||||
@@ -113,8 +121,6 @@ Folder::Folder(const FolderDefinition& definition,
|
||||
|
||||
Folder::~Folder()
|
||||
{
|
||||
// Reset then engine first as it will abort and try to access members of the Folder
|
||||
_engine.reset();
|
||||
}
|
||||
|
||||
void Folder::checkLocalPath()
|
||||
@@ -314,7 +320,6 @@ void Folder::slotRunEtagJob()
|
||||
// sync if it's different.
|
||||
|
||||
_requestEtagJob = new RequestEtagJob(account, remotePath(), this);
|
||||
_requestEtagJob->setTimeout(60*1000);
|
||||
// check if the etag is different
|
||||
QObject::connect(_requestEtagJob, SIGNAL(etagRetreived(QString)), this, SLOT(etagRetreived(QString)));
|
||||
FolderMan::instance()->slotScheduleETagJob(alias(), _requestEtagJob);
|
||||
@@ -573,10 +578,19 @@ int Folder::slotWipeErrorBlacklist()
|
||||
|
||||
void Folder::slotWatchedPathChanged(const QString& path)
|
||||
{
|
||||
// When no sync is running or it's in the prepare phase, we can
|
||||
// always schedule a new sync.
|
||||
if (! _engine->isSyncRunning() || _syncResult.status() == SyncResult::SyncPrepare) {
|
||||
emit watchedFileChangedExternally(path);
|
||||
emit scheduleToSync(this);
|
||||
return;
|
||||
}
|
||||
|
||||
// The folder watcher fires a lot of bogus notifications during
|
||||
// a sync operation, both for actual user files and the database
|
||||
// and log. Therefore we check notifications against operations
|
||||
// the sync is doing to filter out our own changes.
|
||||
bool ownChange = false;
|
||||
#ifdef Q_OS_MAC
|
||||
Q_UNUSED(path)
|
||||
// On OSX the folder watcher does not report changes done by our
|
||||
@@ -586,23 +600,14 @@ void Folder::slotWatchedPathChanged(const QString& path)
|
||||
const auto maxNotificationDelay = 15*1000;
|
||||
qint64 time = _engine->timeSinceFileTouched(path);
|
||||
if (time != -1 && time < maxNotificationDelay) {
|
||||
return;
|
||||
ownChange = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Check that the mtime actually changed.
|
||||
if (path.startsWith(this->path())) {
|
||||
auto relativePath = path.mid(this->path().size());
|
||||
auto record = _journal.getFileRecord(relativePath);
|
||||
if (record.isValid() && !FileSystem::fileChanged(path, record._fileSize,
|
||||
Utility::qDateTimeToTime_t(record._modtime))) {
|
||||
qDebug() << "Ignoring spurious notification for file" << relativePath;
|
||||
return; // probably a spurious notification
|
||||
}
|
||||
if (! ownChange) {
|
||||
emit watchedFileChangedExternally(path);
|
||||
emit scheduleToSync(this);
|
||||
}
|
||||
|
||||
emit watchedFileChangedExternally(path);
|
||||
emit scheduleToSync(this);
|
||||
}
|
||||
|
||||
void Folder::slotThreadTreeWalkResult(const SyncFileItemVector& items)
|
||||
@@ -625,7 +630,7 @@ void Folder::removeFromSettings() const
|
||||
{
|
||||
auto settings = _accountState->settings();
|
||||
settings->beginGroup(QLatin1String("Folders"));
|
||||
settings->remove(FolderMan::escapeAlias(_definition.alias));
|
||||
settings->remove(_definition.alias);
|
||||
}
|
||||
|
||||
bool Folder::isFileExcludedAbsolute(const QString& fullPath) const
|
||||
@@ -689,10 +694,6 @@ void Folder::wipe()
|
||||
|
||||
bool Folder::setIgnoredFiles()
|
||||
{
|
||||
// Note: Doing this on each sync run and on Folder construction is
|
||||
// unnecessary, because _engine->excludedFiles() persists between
|
||||
// sync runs. This is not a big problem because ExcludedFiles maintains
|
||||
// a QSet of files to load.
|
||||
ConfigFile cfg;
|
||||
QString systemList = cfg.excludeFile(ConfigFile::SystemScope);
|
||||
if( QFile::exists(systemList) ) {
|
||||
@@ -724,6 +725,8 @@ void Folder::startSync(const QStringList &pathList)
|
||||
if (proxyDirty()) {
|
||||
setProxyDirty(false);
|
||||
}
|
||||
csync_set_log_callback( csyncLogCatcher );
|
||||
csync_set_log_level( Logger::instance()->isNoop() ? 0 : 11 );
|
||||
|
||||
if (isBusy()) {
|
||||
qCritical() << "* ERROR csync is still running and new sync requested.";
|
||||
@@ -998,7 +1001,7 @@ void Folder::slotAboutToRemoveAllFiles(SyncFileItem::Direction, bool *cancel)
|
||||
void Folder::slotAboutToRestoreBackup(bool *restore)
|
||||
{
|
||||
QString msg =
|
||||
tr("This sync would reset the files to an erlier time in the sync folder '%1'.\n"
|
||||
tr("This sync would reset the files to an earlier time in the sync folder '%1'.\n"
|
||||
"This might be because a backup was restored on the server.\n"
|
||||
"Continuing the sync as normal will cause all your files to be overwritten by an older "
|
||||
"file in an earlier state. "
|
||||
|
||||
@@ -849,8 +849,7 @@ Folder *FolderMan::folderForPath(const QString &path)
|
||||
foreach(Folder* folder, this->map().values()) {
|
||||
const QString folderPath = folder->cleanPath()+QLatin1Char('/');
|
||||
|
||||
if(absolutePath.startsWith(folderPath, (Utility::isWindows() || Utility::isMac())?
|
||||
Qt::CaseInsensitive : Qt::CaseSensitive)) {
|
||||
if(absolutePath.startsWith(folderPath)) {
|
||||
//qDebug() << "found folder: " << folder->path() << " for " << absolutePath;
|
||||
return folder;
|
||||
}
|
||||
|
||||
@@ -584,7 +584,7 @@ void FolderStatusModel::slotUpdateDirectories(const QStringList &list)
|
||||
QStringList sortedSubfolders = list;
|
||||
// skip the parent item (first in the list)
|
||||
sortedSubfolders.erase(sortedSubfolders.begin());
|
||||
sortedSubfolders.sort();
|
||||
Utility::sortFilenames(sortedSubfolders);
|
||||
|
||||
QVarLengthArray<int, 10> undecidedIndexes;
|
||||
|
||||
|
||||
@@ -51,14 +51,6 @@ static void callback(
|
||||
Q_UNUSED(eventFlags)
|
||||
Q_UNUSED(eventIds)
|
||||
|
||||
const FSEventStreamEventFlags c_interestingFlags
|
||||
= kFSEventStreamEventFlagItemCreated // for new folder/file
|
||||
| kFSEventStreamEventFlagItemRemoved // for rm
|
||||
| kFSEventStreamEventFlagItemInodeMetaMod // for mtime change
|
||||
| kFSEventStreamEventFlagItemRenamed // also coming for moves to trash in finder
|
||||
| kFSEventStreamEventFlagItemModified; // for content change
|
||||
//We ignore other flags, e.g. for owner change, xattr change, Finder label change etc
|
||||
|
||||
qDebug() << "FolderWatcherPrivate::callback by OS X";
|
||||
|
||||
QStringList paths;
|
||||
@@ -70,14 +62,8 @@ static void callback(
|
||||
CFIndex pathLength = CFStringGetLength(path);
|
||||
qstring.resize(pathLength);
|
||||
CFStringGetCharacters(path, CFRangeMake(0, pathLength), reinterpret_cast<UniChar *>(qstring.data()));
|
||||
QString fn = qstring.normalized(QString::NormalizationForm_C);
|
||||
|
||||
if (!(eventFlags[i] & c_interestingFlags)) {
|
||||
qDebug() << "Ignoring non-content changes for" << fn;
|
||||
continue;
|
||||
}
|
||||
|
||||
paths.append(fn);
|
||||
paths.append(qstring.normalized(QString::NormalizationForm_C));
|
||||
}
|
||||
|
||||
reinterpret_cast<FolderWatcherPrivate*>(clientCallBackInfo)->doNotifyParent(paths);
|
||||
|
||||
@@ -308,7 +308,7 @@ void FolderWizardRemotePath::slotUpdateDirectories(const QStringList &list)
|
||||
root->setData(0, Qt::UserRole, "/");
|
||||
}
|
||||
QStringList sortedList = list;
|
||||
sortedList.sort();
|
||||
Utility::sortFilenames(sortedList);
|
||||
foreach (QString path, sortedList) {
|
||||
path.remove(webdavFolder);
|
||||
QStringList paths = path.split('/');
|
||||
|
||||
@@ -161,4 +161,12 @@ void GeneralSettings::slotIgnoreFilesEditor()
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralSettings::slotOpenAccountWizard()
|
||||
{
|
||||
if (QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||
topLevelWidget()->close();
|
||||
}
|
||||
OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)), 0);
|
||||
}
|
||||
|
||||
} // namespace OCC
|
||||
|
||||
@@ -44,6 +44,7 @@ private slots:
|
||||
void slotToggleOptionalDesktopNotifications(bool);
|
||||
void slotUpdateInfo();
|
||||
void slotIgnoreFilesEditor();
|
||||
void slotOpenAccountWizard();
|
||||
|
||||
private:
|
||||
void loadMiscSettings();
|
||||
|
||||
+5
-8
@@ -47,21 +47,18 @@ int main(int argc, char **argv)
|
||||
{
|
||||
Q_INIT_RESOURCE(client);
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#ifndef Q_OS_MAC
|
||||
// If the font size ratio is set on Windows, we need to
|
||||
// enable the auto pixelRatio in Qt since we don't
|
||||
// want to use sizes relative to the font size everywhere.
|
||||
// This is automatic on OS X, but opt-in on Windows and Linux
|
||||
// https://doc-snapshots.qt.io/qt5-5.6/highdpi.html#qt-support
|
||||
// We do not define it on linux so the behaviour is kept the same
|
||||
// as other Qt apps in the desktop environment. (which may or may
|
||||
// not set this envoronment variable)
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
|
||||
qputenv("QT_DEVICE_PIXEL_RATIO", "auto");
|
||||
#else
|
||||
qputenv("QT_DEVICE_PIXEL_RATIO", "auto"); // See #4840, #4994
|
||||
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
|
||||
#endif
|
||||
#endif // !Q_OS_WIN
|
||||
#endif // !Q_OS_MAC
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
Mac::CocoaInitializer cocoaInit; // RIIA
|
||||
|
||||
+4
-19
@@ -47,19 +47,6 @@ void OcsJob::appendPath(const QString &id)
|
||||
setPath(path() + QLatin1Char('/') + id);
|
||||
}
|
||||
|
||||
static QList<QPair<QByteArray, QByteArray>>
|
||||
percentEncodeQueryItems(
|
||||
const QList<QPair<QString, QString>> & items)
|
||||
{
|
||||
QList<QPair<QByteArray, QByteArray>> result;
|
||||
foreach (const auto& item, items) {
|
||||
result.append(qMakePair(
|
||||
QUrl::toPercentEncoding(item.first),
|
||||
QUrl::toPercentEncoding(item.second)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void OcsJob::start()
|
||||
{
|
||||
QNetworkRequest req;
|
||||
@@ -70,9 +57,7 @@ void OcsJob::start()
|
||||
QBuffer *buffer = new QBuffer;
|
||||
|
||||
if (_verb == "GET") {
|
||||
// Note: QUrl::setQueryItems() does not fully percent encode
|
||||
// the query items, see #5042
|
||||
url.setEncodedQueryItems(percentEncodeQueryItems(_params));
|
||||
url.setQueryItems(_params);
|
||||
} else if (_verb == "POST" || _verb == "PUT") {
|
||||
// Url encode the _postParams and put them in a buffer.
|
||||
QByteArray postData;
|
||||
@@ -88,9 +73,9 @@ void OcsJob::start()
|
||||
}
|
||||
|
||||
//We want json data
|
||||
auto queryItems = url.encodedQueryItems();
|
||||
queryItems.append(qMakePair(QByteArray("format"), QByteArray("json")));
|
||||
url.setEncodedQueryItems(queryItems);
|
||||
auto queryItems = url.queryItems();
|
||||
queryItems.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json")));
|
||||
url.setQueryItems(queryItems);
|
||||
|
||||
setReply(davRequest(_verb, url, req, buffer));
|
||||
setupConnections(reply());
|
||||
|
||||
+24
-19
@@ -20,6 +20,7 @@
|
||||
#include "progressdispatcher.h"
|
||||
#include "owncloudsetupwizard.h"
|
||||
#include "sharedialog.h"
|
||||
#include "shareemailwidget.h"
|
||||
#if defined(Q_OS_MAC)
|
||||
# include "settingsdialogmac.h"
|
||||
# include "macwindow.h" // qtmacgoodies
|
||||
@@ -367,7 +368,7 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men
|
||||
menu->addAction(tr("Managed Folders:"))->setDisabled(true);
|
||||
}
|
||||
|
||||
QAction *action = new QAction( tr("Open folder '%1'").arg(folder->shortGuiLocalPath()), menu );
|
||||
QAction *action = new QAction( tr("Open folder '%1'").arg(folder->shortGuiLocalPath()), this );
|
||||
connect(action, SIGNAL(triggered()),_folderOpenActionMapper, SLOT(map()));
|
||||
_folderOpenActionMapper->setMapping( action, folder->alias() );
|
||||
menu->addAction(action);
|
||||
@@ -399,26 +400,8 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men
|
||||
|
||||
}
|
||||
|
||||
static bool minimalTrayMenu()
|
||||
{
|
||||
static QByteArray var = qgetenv("OWNCLOUD_MINIMAL_TRAY_MENU");
|
||||
return !var.isEmpty();
|
||||
}
|
||||
|
||||
void ownCloudGui::setupContextMenu()
|
||||
{
|
||||
// The tray menu is surprisingly problematic. Being able to switch to
|
||||
// a minimal version of it is a useful workaround and testing tool.
|
||||
if (minimalTrayMenu()) {
|
||||
if (!_contextMenu) {
|
||||
_contextMenu.reset(new QMenu());
|
||||
_recentActionsMenu = new QMenu(tr("Recent Changes"), _contextMenu.data());
|
||||
_tray->setContextMenu(_contextMenu.data());
|
||||
_contextMenu->addAction(_actionQuit);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
auto accountList = AccountManager::instance()->accounts();
|
||||
|
||||
bool isConfigured = (!accountList.isEmpty());
|
||||
@@ -929,5 +912,27 @@ void ownCloudGui::slotRemoveDestroyedShareDialogs()
|
||||
}
|
||||
}
|
||||
|
||||
void ownCloudGui::slowSendShareLink(const QString &sharePath, const QString &localPath, bool resharingAllowed)
|
||||
{
|
||||
const auto folder = FolderMan::instance()->folderForPath(localPath);
|
||||
if (!folder) {
|
||||
qDebug() << "Could not open share email widget for" << localPath << "no responsible folder found";
|
||||
return;
|
||||
}
|
||||
|
||||
// For https://github.com/owncloud/client/issues/3783
|
||||
_settingsDialog->hide();
|
||||
|
||||
if (!resharingAllowed) {
|
||||
qDebug() << "Could not open share email widget for" << localPath << "no reshare permissions";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << Q_FUNC_INFO << "Opening share email widget" << sharePath << localPath;
|
||||
ShareEmailWidget *w = new ShareEmailWidget(folder->accountState()->account(), sharePath);
|
||||
w->setAttribute( Qt::WA_DeleteOnClose, true );
|
||||
raiseDialog(w);
|
||||
}
|
||||
|
||||
|
||||
} // end namespace
|
||||
|
||||
@@ -79,6 +79,7 @@ public slots:
|
||||
void slotTrayMessageIfServerUnsupported(Account *account);
|
||||
void slotShowShareDialog(const QString &sharePath, const QString &localPath, bool resharingAllowed);
|
||||
void slotRemoveDestroyedShareDialogs();
|
||||
void slowSendShareLink(const QString &sharePath, const QString &localPath, bool resharingAllowed);
|
||||
|
||||
private slots:
|
||||
void slotDisplayIdle();
|
||||
|
||||
@@ -173,7 +173,7 @@ void OwncloudSetupWizard::slotNoOwnCloudFoundAuth(QNetworkReply *reply)
|
||||
|
||||
// Allow the credentials dialog to pop up again for the same URL.
|
||||
// Maybe the user just clicked 'Cancel' by accident or changed his mind.
|
||||
_ocWizard->account()->resetRejectedCertificates();
|
||||
_ocWizard->account()->resetSslCertErrorState();
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotNoOwnCloudFoundAuthTimeout(const QUrl&url)
|
||||
|
||||
@@ -121,9 +121,17 @@ void ProtocolWidget::hideEvent(QHideEvent *ev)
|
||||
|
||||
void ProtocolWidget::cleanItems(const QString& folder)
|
||||
{
|
||||
int itemCnt = _ui->_treeWidget->topLevelItemCount();
|
||||
|
||||
// Limit the number of items
|
||||
while(itemCnt > 2000) {
|
||||
delete _ui->_treeWidget->takeTopLevelItem(itemCnt - 1);
|
||||
itemCnt--;
|
||||
}
|
||||
|
||||
// The issue list is a state, clear it and let the next sync fill it
|
||||
// with ignored files and propagation errors.
|
||||
int itemCnt = _issueItemView->topLevelItemCount();
|
||||
itemCnt = _issueItemView->topLevelItemCount();
|
||||
for( int cnt = itemCnt-1; cnt >=0 ; cnt-- ) {
|
||||
QTreeWidgetItem *item = _issueItemView->topLevelItem(cnt);
|
||||
QString itemFolder = item->data(2, Qt::UserRole).toString();
|
||||
@@ -231,12 +239,6 @@ void ProtocolWidget::slotItemCompleted(const QString &folder, const SyncFileItem
|
||||
_issueItemView->insertTopLevelItem(0, line);
|
||||
emit issueItemCountUpdated(_issueItemView->topLevelItemCount());
|
||||
} else {
|
||||
// Limit the number of items
|
||||
int itemCnt = _ui->_treeWidget->topLevelItemCount();
|
||||
while(itemCnt > 2000) {
|
||||
delete _ui->_treeWidget->takeTopLevelItem(itemCnt - 1);
|
||||
itemCnt--;
|
||||
}
|
||||
_ui->_treeWidget->insertTopLevelItem(0, line);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ void SelectiveSyncTreeView::slotUpdateDirectories(QStringList list)
|
||||
}
|
||||
}
|
||||
|
||||
list.sort();
|
||||
Utility::sortFilenames(list);
|
||||
foreach (QString path, list) {
|
||||
auto size = job ? job->_sizes.value(path) : 0;
|
||||
path.remove(pathToRemove);
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
#include "shareemailwidget.h"
|
||||
#include "share.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QSharedPointer>
|
||||
#include <QUrl>
|
||||
|
||||
namespace OCC {
|
||||
|
||||
ShareEmailWidget::ShareEmailWidget(AccountPtr account,
|
||||
const QString &sharePath,
|
||||
QWidget *parent)
|
||||
: QWidget(parent),
|
||||
_account(account),
|
||||
_sharePath(sharePath)
|
||||
{
|
||||
resize(200,200);
|
||||
|
||||
_layout.addWidget(&_spinner);
|
||||
_layout.addWidget(&_label);
|
||||
|
||||
_label.setText(tr("Fetching share link"));
|
||||
_spinner.startAnimation();
|
||||
|
||||
setLayout(&_layout);
|
||||
|
||||
/*
|
||||
* Create the share manager and connect it properly
|
||||
*/
|
||||
_manager = new ShareManager(_account, this);
|
||||
connect(_manager, SIGNAL(linkShareCreated(QSharedPointer<LinkShare>)), this, SLOT(slotLinkShareCreated(QSharedPointer<LinkShare>)));
|
||||
|
||||
_manager->createLinkShare(_sharePath);
|
||||
}
|
||||
|
||||
ShareEmailWidget::~ShareEmailWidget()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ShareEmailWidget::slotLinkShareCreated(const QSharedPointer<LinkShare> share)
|
||||
{
|
||||
QUrl mailto("mailto:");
|
||||
|
||||
QString body = tr("I shared a file with you at %1.").arg(share->getLink().toString());
|
||||
|
||||
if (share->getExpireDate().isValid()) {
|
||||
body += tr("\nThis share expires at %1.").arg(share->getExpireDate().toString());
|
||||
}
|
||||
|
||||
mailto.setQuery("body?"+body);
|
||||
|
||||
// Open app
|
||||
QDesktopServices::openUrl(mailto);
|
||||
|
||||
close();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef SHAREEMAILDIALOG_H
|
||||
#define SHAREEMAILDIALOG_H
|
||||
|
||||
#include "accountfwd.h"
|
||||
#include "QProgressIndicator.h"
|
||||
#include "share.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QSharedPointer>
|
||||
#include <QString>
|
||||
#include <QWidget>
|
||||
|
||||
namespace OCC {
|
||||
|
||||
class ShareManager;
|
||||
|
||||
class ShareEmailWidget : public QWidget
|
||||
{
|
||||
public:
|
||||
|
||||
explicit ShareEmailWidget(AccountPtr account,
|
||||
const QString &sharePath,
|
||||
QWidget *parent = 0);
|
||||
~ShareEmailWidget();
|
||||
|
||||
private slots:
|
||||
void slotLinkShareCreated(const QSharedPointer<LinkShare> share);
|
||||
void slotPasswordEnterd();
|
||||
void slotPasswordRequired();
|
||||
|
||||
private:
|
||||
void share(const QString &sharePath, const QString &password);
|
||||
|
||||
AccountPtr _account;
|
||||
QString _sharePath;
|
||||
|
||||
QHBoxLayout _layout;
|
||||
QLabel _label;
|
||||
QProgressIndicator _spinner;
|
||||
|
||||
ShareManager *_manager;
|
||||
};
|
||||
|
||||
}
|
||||
#endif // SHAREEMAILDIALOG_H
|
||||
@@ -248,12 +248,10 @@ void ShareUserGroupWidget::slotCompleterActivated(const QModelIndex & index)
|
||||
layout->addWidget(indicator);
|
||||
|
||||
/*
|
||||
* Don't send the reshare permissions for federated shares for servers <9.1
|
||||
* Don't send the reshare permissions for federataed shares
|
||||
* https://github.com/owncloud/core/issues/22122#issuecomment-185637344
|
||||
* https://github.com/owncloud/client/issues/4996
|
||||
*/
|
||||
if (sharee->type() == Sharee::Federated
|
||||
&& _account->serverVersionInt() < 0x090100) {
|
||||
if (sharee->type() == Sharee::Federated) {
|
||||
int permissions = SharePermissionRead | SharePermissionUpdate;
|
||||
if (!_isFile) {
|
||||
permissions |= SharePermissionCreate | SharePermissionDelete;
|
||||
@@ -337,12 +335,10 @@ ShareWidget::ShareWidget(QSharedPointer<Share> share,
|
||||
connect(_ui->permissionsEdit, SIGNAL(clicked(bool)), SLOT(slotEditPermissionsChanged()));
|
||||
|
||||
/*
|
||||
* We don't show permssion share for federated shares with server <9.1
|
||||
* We don't show permssion share for federated shares
|
||||
* https://github.com/owncloud/core/issues/22122#issuecomment-185637344
|
||||
* https://github.com/owncloud/client/issues/4996
|
||||
*/
|
||||
if (share->getShareType() == Share::TypeRemote
|
||||
&& share->account()->serverVersionInt() < 0x090100) {
|
||||
if (share->getShareType() == Share::TypeRemote) {
|
||||
_ui->permissionShare->setVisible(false);
|
||||
_ui->permissionToolButton->setVisible(false);
|
||||
}
|
||||
|
||||
+61
-1
@@ -74,7 +74,7 @@ SocketApi::SocketApi(QObject* parent)
|
||||
|
||||
if (Utility::isWindows()) {
|
||||
socketPath = QLatin1String("\\\\.\\pipe\\")
|
||||
+ QLatin1String("ownCloud-")
|
||||
+ QLatin1String("ownCloud") + '\\'
|
||||
+ QString::fromLocal8Bit(qgetenv("USERNAME"));
|
||||
// TODO: once the windows extension supports multiple
|
||||
// client connections, switch back to the theme name
|
||||
@@ -453,6 +453,66 @@ void SocketApi::command_SHARE_MENU_TITLE(const QString &, QIODevice* socket)
|
||||
sendMessage(socket, QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI()));
|
||||
}
|
||||
|
||||
void SocketApi::command_SHARE_EMAIL(const QString& localFile, QIODevice* socket)
|
||||
{
|
||||
if (!socket) {
|
||||
qDebug() << Q_FUNC_INFO << "No valid socket object.";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << Q_FUNC_INFO << localFile;
|
||||
|
||||
auto theme = Theme::instance();
|
||||
|
||||
Folder *shareFolder = FolderMan::instance()->folderForPath(localFile);
|
||||
if (!shareFolder) {
|
||||
const QString message = QLatin1String("SHARE_EMAIL:NOP:")+QDir::toNativeSeparators(localFile);
|
||||
// files that are not within a sync folder are not synced.
|
||||
sendMessage(socket, message);
|
||||
} else if (!shareFolder->accountState()->isConnected()) {
|
||||
const QString message = QLatin1String("SHARE_EMAIL:NOTCONNECTED:")+QDir::toNativeSeparators(localFile);
|
||||
// if the folder isn't connected, don't open the share dialog
|
||||
sendMessage(socket, message);
|
||||
} else if (!theme->linkSharing()) {
|
||||
const QString message = QLatin1String("SHARE_EMAIL:NOP:")+QDir::toNativeSeparators(localFile);
|
||||
sendMessage(socket, message);
|
||||
} else {
|
||||
const QString localFileClean = QDir::cleanPath(localFile);
|
||||
const QString file = localFileClean.mid(shareFolder->cleanPath().length()+1);
|
||||
SyncFileStatus fileStatus = shareFolder->syncEngine().syncFileStatusTracker().fileStatus(file);
|
||||
|
||||
// Verify the file is on the server (to our knowledge of course)
|
||||
if (fileStatus.tag() != SyncFileStatus::StatusUpToDate) {
|
||||
const QString message = QLatin1String("SHARE:NOTSYNCED:")+QDir::toNativeSeparators(localFile);
|
||||
sendMessage(socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
const QString remotePath = QDir(shareFolder->remotePath()).filePath(file);
|
||||
|
||||
// Can't share root folder
|
||||
if (remotePath == "/") {
|
||||
const QString message = QLatin1String("SHARE_EMAIL:CANNOTSHAREROOT:")+QDir::toNativeSeparators(localFile);
|
||||
sendMessage(socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
SyncJournalFileRecord rec = shareFolder->journalDb()->getFileRecord(localFileClean);
|
||||
|
||||
bool allowReshare = true; // lets assume the good
|
||||
if( rec.isValid() ) {
|
||||
// check the permission: Is resharing allowed?
|
||||
if( !rec._remotePerm.contains('R') ) {
|
||||
allowReshare = false;
|
||||
}
|
||||
}
|
||||
const QString message = QLatin1String("SHARE_EMAIL:OK:")+QDir::toNativeSeparators(localFile);
|
||||
sendMessage(socket, message);
|
||||
|
||||
emit shareEmailCommandReceived(remotePath, localFileClean, allowReshare);
|
||||
}
|
||||
}
|
||||
|
||||
QString SocketApi::buildRegisterPathMessage(const QString& path)
|
||||
{
|
||||
QFileInfo fi(path);
|
||||
|
||||
@@ -56,6 +56,7 @@ public slots:
|
||||
signals:
|
||||
void shareCommandReceived(const QString &sharePath, const QString &localPath, bool resharingAllowed);
|
||||
void shareUserGroupCommandReceived(const QString &sharePath, const QString &localPath, bool resharingAllowed);
|
||||
void shareEmailCommandReceived(const QString &sharePath, const QString &localPath, bool resharingAllowed);
|
||||
|
||||
private slots:
|
||||
void slotNewConnection();
|
||||
@@ -70,6 +71,7 @@ private:
|
||||
Q_INVOKABLE void command_RETRIEVE_FOLDER_STATUS(const QString& argument, QIODevice* socket);
|
||||
Q_INVOKABLE void command_RETRIEVE_FILE_STATUS(const QString& argument, QIODevice* socket);
|
||||
Q_INVOKABLE void command_SHARE(const QString& localFile, QIODevice* socket);
|
||||
Q_INVOKABLE void command_SHARE_EMAIL(const QString& localFile, QIODevice* socket);
|
||||
|
||||
Q_INVOKABLE void command_VERSION(const QString& argument, QIODevice* socket);
|
||||
|
||||
|
||||
@@ -218,7 +218,6 @@ void OCUpdater::slotVersionInfoArrived()
|
||||
{
|
||||
_timeoutWatchdog->stop();
|
||||
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
|
||||
reply->deleteLater();
|
||||
if( reply->error() != QNetworkReply::NoError ) {
|
||||
qDebug() << "Failed to reach version check url: " << reply->errorString();
|
||||
return;
|
||||
@@ -259,7 +258,6 @@ void NSISUpdater::slotWriteFile()
|
||||
void NSISUpdater::slotDownloadFinished()
|
||||
{
|
||||
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
|
||||
reply->deleteLater();
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
setDownloadState(DownloadFailed);
|
||||
return;
|
||||
|
||||
@@ -242,7 +242,6 @@ void AbstractNetworkJob::slotTimeout()
|
||||
reply()->abort();
|
||||
} else {
|
||||
qDebug() << Q_FUNC_INFO << this << "Timeout reply was NULL";
|
||||
deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+31
-45
@@ -38,6 +38,9 @@ namespace OCC {
|
||||
Account::Account(QObject *parent)
|
||||
: QObject(parent)
|
||||
, _capabilities(QVariantMap())
|
||||
, _am(0)
|
||||
, _credentials(0)
|
||||
, _treatSslErrorsAsFailure(false)
|
||||
, _davPath( Theme::instance()->webDavPath() )
|
||||
, _wasMigrated(false)
|
||||
{
|
||||
@@ -53,6 +56,8 @@ AccountPtr Account::create()
|
||||
|
||||
Account::~Account()
|
||||
{
|
||||
delete _credentials;
|
||||
delete _am;
|
||||
}
|
||||
|
||||
QString Account::davPath() const
|
||||
@@ -113,14 +118,14 @@ bool Account::changed(AccountPtr other, bool ignoreUrlProtocol) const
|
||||
changes = (_url == other->_url);
|
||||
}
|
||||
|
||||
changes |= _credentials->changed(other->credentials());
|
||||
changes |= _credentials->changed(other->_credentials);
|
||||
|
||||
return changes;
|
||||
}
|
||||
|
||||
AbstractCredentials *Account::credentials() const
|
||||
{
|
||||
return _credentials.data();
|
||||
return _credentials;
|
||||
}
|
||||
|
||||
void Account::setCredentials(AbstractCredentials *cred)
|
||||
@@ -131,27 +136,29 @@ void Account::setCredentials(AbstractCredentials *cred)
|
||||
jar = _am->cookieJar();
|
||||
jar->setParent(0);
|
||||
|
||||
_am = QSharedPointer<QNetworkAccessManager>();
|
||||
_am->deleteLater();
|
||||
}
|
||||
|
||||
if (_credentials) {
|
||||
credentials()->deleteLater();
|
||||
}
|
||||
|
||||
// The order for these two is important! Reading the credential's
|
||||
// settings accesses the account as well as account->_credentials,
|
||||
// so deleteLater must be used.
|
||||
_credentials = QSharedPointer<AbstractCredentials>(cred, &QObject::deleteLater);
|
||||
// settings accesses the account as well as account->_credentials
|
||||
_credentials = cred;
|
||||
cred->setAccount(this);
|
||||
|
||||
_am = QSharedPointer<QNetworkAccessManager>(_credentials->getQNAM(), &QObject::deleteLater);
|
||||
|
||||
_am = _credentials->getQNAM();
|
||||
if (jar) {
|
||||
_am->setCookieJar(jar);
|
||||
}
|
||||
connect(_am.data(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
|
||||
connect(_am, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
|
||||
SLOT(slotHandleSslErrors(QNetworkReply*,QList<QSslError>)));
|
||||
connect(_am.data(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
|
||||
connect(_am, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
|
||||
SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
|
||||
connect(_credentials.data(), SIGNAL(fetched()),
|
||||
connect(_credentials, SIGNAL(fetched()),
|
||||
SLOT(slotCredentialsFetched()));
|
||||
connect(_credentials.data(), SIGNAL(asked()),
|
||||
connect(_credentials, SIGNAL(asked()),
|
||||
SLOT(slotCredentialsAsked()));
|
||||
}
|
||||
|
||||
@@ -190,21 +197,18 @@ void Account::resetNetworkAccessManager()
|
||||
|
||||
qDebug() << "Resetting QNAM";
|
||||
QNetworkCookieJar* jar = _am->cookieJar();
|
||||
|
||||
// Use a QSharedPointer to allow locking the life of the QNAM on the stack.
|
||||
// Make it call deleteLater to make sure that we can return to any QNAM stack frames safely.
|
||||
_am = QSharedPointer<QNetworkAccessManager>(_credentials->getQNAM(), &QObject::deleteLater);
|
||||
|
||||
_am->deleteLater();
|
||||
_am = _credentials->getQNAM();
|
||||
_am->setCookieJar(jar); // takes ownership of the old cookie jar
|
||||
connect(_am.data(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
|
||||
connect(_am, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
|
||||
SLOT(slotHandleSslErrors(QNetworkReply*,QList<QSslError>)));
|
||||
connect(_am.data(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
|
||||
connect(_am, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
|
||||
SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
|
||||
}
|
||||
|
||||
QNetworkAccessManager *Account::networkAccessManager()
|
||||
{
|
||||
return _am.data();
|
||||
return _am;
|
||||
}
|
||||
|
||||
QNetworkReply *Account::headRequest(const QString &relPath)
|
||||
@@ -325,9 +329,9 @@ void Account::addApprovedCerts(const QList<QSslCertificate> certs)
|
||||
_approvedCerts += certs;
|
||||
}
|
||||
|
||||
void Account::resetRejectedCertificates()
|
||||
void Account::resetSslCertErrorState()
|
||||
{
|
||||
_rejectedCertificates.clear();
|
||||
_treatSslErrorsAsFailure = false;
|
||||
}
|
||||
|
||||
void Account::setSslErrorHandler(AbstractSslErrorHandler *handler)
|
||||
@@ -408,15 +412,8 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
|
||||
<< error.errorString() << "("<< error.error() << ")" << "\n";
|
||||
}
|
||||
|
||||
bool allPreviouslyRejected = true;
|
||||
foreach (const QSslError &error, errors) {
|
||||
if (!_rejectedCertificates.contains(error.certificate())) {
|
||||
allPreviouslyRejected = false;
|
||||
}
|
||||
}
|
||||
|
||||
// If all certs have previously been rejected by the user, don't ask again.
|
||||
if( allPreviouslyRejected ) {
|
||||
if( _treatSslErrorsAsFailure ) {
|
||||
// User decided once not to trust. Honor this decision.
|
||||
qDebug() << out << "Certs not trusted by user decision, returning.";
|
||||
return;
|
||||
}
|
||||
@@ -427,12 +424,6 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
|
||||
return;
|
||||
}
|
||||
|
||||
// SslDialogErrorHandler::handleErrors will run an event loop that might execute
|
||||
// the deleteLater() of the QNAM before we have the chance of unwinding our stack.
|
||||
// Keep a ref here on our stackframe to make sure that it doesn't get deleted before
|
||||
// handleErrors returns.
|
||||
QSharedPointer<QNetworkAccessManager> qnamLock = _am;
|
||||
|
||||
if (_sslErrorHandler->handleErrors(errors, reply->sslConfiguration(), &approvedCerts, sharedFromThis())) {
|
||||
QSslSocket::addDefaultCaCertificates(approvedCerts);
|
||||
addApprovedCerts(approvedCerts);
|
||||
@@ -445,12 +436,7 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
|
||||
// certificate changes.
|
||||
reply->ignoreSslErrors(errors);
|
||||
} else {
|
||||
// Mark all involved certificates as rejected, so we don't ask the user again.
|
||||
foreach (const QSslError &error, errors) {
|
||||
if (!_rejectedCertificates.contains(error.certificate())) {
|
||||
_rejectedCertificates.append(error.certificate());
|
||||
}
|
||||
}
|
||||
_treatSslErrorsAsFailure = true;
|
||||
// if during normal operation, a new certificate was MITM'ed, and the user does not
|
||||
// ACK it, the running request must be aborted and the QNAM must be reset, to not
|
||||
// treat the new cert as granted. See bug #3283
|
||||
@@ -462,12 +448,12 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
|
||||
|
||||
void Account::slotCredentialsFetched()
|
||||
{
|
||||
emit credentialsFetched(_credentials.data());
|
||||
emit credentialsFetched(_credentials);
|
||||
}
|
||||
|
||||
void Account::slotCredentialsAsked()
|
||||
{
|
||||
emit credentialsAsked(_credentials.data());
|
||||
emit credentialsAsked(_credentials);
|
||||
}
|
||||
|
||||
void Account::handleInvalidCredentials()
|
||||
|
||||
@@ -133,7 +133,7 @@ public:
|
||||
// Usually when a user explicitly rejects a certificate we don't
|
||||
// ask again. After this call, a dialog will again be shown when
|
||||
// the next unknown certificate is encountered.
|
||||
void resetRejectedCertificates();
|
||||
void resetSslCertErrorState();
|
||||
|
||||
// pluggable handler
|
||||
void setSslErrorHandler(AbstractSslErrorHandler *handler);
|
||||
@@ -214,12 +214,9 @@ private:
|
||||
QString _serverVersion;
|
||||
QScopedPointer<AbstractSslErrorHandler> _sslErrorHandler;
|
||||
QuotaInfo *_quotaInfo;
|
||||
QSharedPointer<QNetworkAccessManager> _am;
|
||||
QSharedPointer<AbstractCredentials> _credentials;
|
||||
|
||||
/// Certificates that were explicitly rejected by the user
|
||||
QList<QSslCertificate> _rejectedCertificates;
|
||||
|
||||
QNetworkAccessManager *_am;
|
||||
AbstractCredentials* _credentials;
|
||||
bool _treatSslErrorsAsFailure;
|
||||
static QString _configFileName;
|
||||
QByteArray _pemCertificate;
|
||||
QString _pemPrivateKey;
|
||||
|
||||
@@ -73,8 +73,7 @@ bool Capabilities::shareResharing() const
|
||||
|
||||
bool Capabilities::notificationsAvailable() const
|
||||
{
|
||||
// We require the OCS style API in 9.x, can't deal with the REST one only found in 8.2
|
||||
return _capabilities.contains("notifications") && _capabilities["notifications"].toMap().contains("ocs-endpoints");
|
||||
return _capabilities.contains("notifications");
|
||||
}
|
||||
|
||||
bool Capabilities::isValid() const
|
||||
|
||||
@@ -42,7 +42,7 @@ ExcludedFiles& ExcludedFiles::instance()
|
||||
|
||||
void ExcludedFiles::addExcludeFilePath(const QString& path)
|
||||
{
|
||||
_excludeFiles.insert(path);
|
||||
_excludeFiles.append(path);
|
||||
}
|
||||
|
||||
bool ExcludedFiles::reloadExcludes()
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
#include "owncloudlib.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QSet>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
extern "C" {
|
||||
#include "std/c_string.h"
|
||||
@@ -67,7 +66,7 @@ private:
|
||||
// This is a pointer to the csync exclude list, its is owned by this class
|
||||
// but the pointer can be in a csync_context so that it can itself also query the list.
|
||||
c_strlist_t** _excludesPtr;
|
||||
QSet<QString> _excludeFiles;
|
||||
QStringList _excludeFiles;
|
||||
};
|
||||
|
||||
} // namespace OCC
|
||||
|
||||
@@ -496,16 +496,16 @@ QString FileSystem::fileSystemForPath(const QString & path)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define BUFSIZE qint64(500*1024) // 500 KiB
|
||||
#define BUFSIZE 1024*1024*10
|
||||
|
||||
static QByteArray readToCrypto( const QString& filename, QCryptographicHash::Algorithm algo )
|
||||
{
|
||||
QFile file(filename);
|
||||
const qint64 bufSize = qMin(BUFSIZE, file.size() + 1);
|
||||
QByteArray buf(bufSize, Qt::Uninitialized);
|
||||
const qint64 bufSize = BUFSIZE;
|
||||
QByteArray buf(bufSize,0);
|
||||
QByteArray arr;
|
||||
QCryptographicHash crypto( algo );
|
||||
|
||||
QFile file(filename);
|
||||
if (file.open(QIODevice::ReadOnly)) {
|
||||
qint64 size;
|
||||
while (!file.atEnd()) {
|
||||
@@ -532,11 +532,11 @@ QByteArray FileSystem::calcSha1( const QString& filename )
|
||||
#ifdef ZLIB_FOUND
|
||||
QByteArray FileSystem::calcAdler32( const QString& filename )
|
||||
{
|
||||
QFile file(filename);
|
||||
const qint64 bufSize = qMin(BUFSIZE, file.size() + 1);
|
||||
QByteArray buf(bufSize, Qt::Uninitialized);
|
||||
|
||||
unsigned int adler = adler32(0L, Z_NULL, 0);
|
||||
const qint64 bufSize = BUFSIZE;
|
||||
QByteArray buf(bufSize, 0);
|
||||
|
||||
QFile file(filename);
|
||||
if (file.open(QIODevice::ReadOnly)) {
|
||||
qint64 size;
|
||||
while (!file.atEnd()) {
|
||||
|
||||
@@ -111,9 +111,9 @@ bool OWNCLOUDSYNC_EXPORT rename(const QString& originFileName,
|
||||
*
|
||||
* @return true if the file's mtime or size are not what is expected.
|
||||
*/
|
||||
bool OWNCLOUDSYNC_EXPORT fileChanged(const QString& fileName,
|
||||
qint64 previousSize,
|
||||
time_t previousMtime);
|
||||
bool fileChanged(const QString& fileName,
|
||||
qint64 previousSize,
|
||||
time_t previousMtime);
|
||||
|
||||
/**
|
||||
* @brief Like !fileChanged() but with verbose logging if the file *did* change.
|
||||
|
||||
@@ -388,7 +388,6 @@ private:
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
||||
// access to signals which are protected in Qt4
|
||||
friend class PropagateDownloadFileQNAM;
|
||||
friend class PropagateUploadFileQNAM;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -155,37 +155,16 @@ bool ProgressInfo::isUpdatingEstimates() const
|
||||
return _updateEstimatesTimer.isActive();
|
||||
}
|
||||
|
||||
static bool shouldCountProgress(const SyncFileItem &item)
|
||||
{
|
||||
const auto instruction = item._instruction;
|
||||
|
||||
// Don't worry about directories that won't have propagation
|
||||
// jobs associated with them.
|
||||
if (item._isDirectory
|
||||
&& (instruction == CSYNC_INSTRUCTION_NONE
|
||||
|| instruction == CSYNC_INSTRUCTION_SYNC
|
||||
|| instruction == CSYNC_INSTRUCTION_CONFLICT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Skip any ignored or error files, we do nothing with them.
|
||||
if (instruction == CSYNC_INSTRUCTION_IGNORE
|
||||
|| instruction == CSYNC_INSTRUCTION_ERROR) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ProgressInfo::adjustTotalsForFile(const SyncFileItem &item)
|
||||
{
|
||||
if (!shouldCountProgress(item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
_fileProgress._total += item._affectedItems;
|
||||
if (isSizeDependent(item)) {
|
||||
_sizeProgress._total += item._size;
|
||||
if (!item._isDirectory) {
|
||||
_fileProgress._total++;
|
||||
if (isSizeDependent(item)) {
|
||||
_sizeProgress._total += item._size;
|
||||
}
|
||||
} else if (item._instruction != CSYNC_INSTRUCTION_NONE) {
|
||||
// Added or removed directories certainly count.
|
||||
_fileProgress._total++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,10 +195,6 @@ quint64 ProgressInfo::completedSize() const
|
||||
|
||||
void ProgressInfo::setProgressComplete(const SyncFileItem &item)
|
||||
{
|
||||
if (!shouldCountProgress(item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
_currentItems.remove(item._file);
|
||||
_fileProgress.setCompleted(_fileProgress._completed + item._affectedItems);
|
||||
if (ProgressInfo::isSizeDependent(item)) {
|
||||
@@ -231,10 +206,6 @@ void ProgressInfo::setProgressComplete(const SyncFileItem &item)
|
||||
|
||||
void ProgressInfo::setProgressItem(const SyncFileItem &item, quint64 completed)
|
||||
{
|
||||
if (!shouldCountProgress(item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
_currentItems[item._file]._item = item;
|
||||
_currentItems[item._file]._progress._total = item._size;
|
||||
_currentItems[item._file]._progress.setCompleted(completed);
|
||||
|
||||
@@ -97,9 +97,7 @@ void PUTFileJob::start() {
|
||||
}
|
||||
|
||||
void PUTFileJob::slotTimeout() {
|
||||
qDebug() << "Timeout" << (reply() ? reply()->request().url() : path());
|
||||
if (!reply())
|
||||
return;
|
||||
qDebug() << "Timeout" << reply()->request().url();
|
||||
_errorString = tr("Connection Timeout");
|
||||
reply()->abort();
|
||||
}
|
||||
@@ -234,8 +232,6 @@ void PropagateUploadFileQNAM::slotComputeContentChecksum()
|
||||
|
||||
connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)),
|
||||
SLOT(slotComputeTransmissionChecksum(QByteArray,QByteArray)));
|
||||
connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)),
|
||||
computeChecksum, SLOT(deleteLater()));
|
||||
computeChecksum->start(filePath);
|
||||
}
|
||||
|
||||
@@ -270,8 +266,6 @@ void PropagateUploadFileQNAM::slotComputeTransmissionChecksum(const QByteArray&
|
||||
|
||||
connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)),
|
||||
SLOT(slotStartUpload(QByteArray,QByteArray)));
|
||||
connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)),
|
||||
computeChecksum, SLOT(deleteLater()));
|
||||
const QString filePath = _propagator->getFilePath(_item->_file);
|
||||
computeChecksum->start(filePath);
|
||||
}
|
||||
@@ -779,8 +773,6 @@ void PropagateUploadFileQNAM::slotPutFinished()
|
||||
<< _stopWatch.durationOfLap(QLatin1String("ContentChecksum"))
|
||||
<< _stopWatch.durationOfLap(QLatin1String("TransmissionChecksum"))
|
||||
<< _item->_requestDuration;
|
||||
// The job might stay alive for the whole sync, release this tiny bit of memory.
|
||||
_stopWatch.reset();
|
||||
|
||||
finalize(*_item);
|
||||
}
|
||||
|
||||
@@ -101,10 +101,10 @@ SyncEngine::SyncEngine(AccountPtr account, const QString& localPath,
|
||||
SyncEngine::~SyncEngine()
|
||||
{
|
||||
abort();
|
||||
_thread.quit();
|
||||
_thread.wait();
|
||||
_excludedFiles.reset();
|
||||
csync_destroy(_csync_ctx);
|
||||
_thread.quit();
|
||||
_thread.wait();
|
||||
}
|
||||
|
||||
//Convert an error code from csync to a user readable string.
|
||||
@@ -847,8 +847,6 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
|
||||
|
||||
_hasNoneFiles = false;
|
||||
_hasRemoveFile = false;
|
||||
_hasForwardInTimeFiles = false;
|
||||
_backInTimeFiles = 0;
|
||||
bool walkOk = true;
|
||||
_seenFiles.clear();
|
||||
_temporarilyUnavailablePaths.clear();
|
||||
@@ -1381,13 +1379,13 @@ AccountPtr SyncEngine::account() const
|
||||
|
||||
void SyncEngine::abort()
|
||||
{
|
||||
// Sets a flag for the update phase
|
||||
csync_request_abort(_csync_ctx);
|
||||
qDebug() << Q_FUNC_INFO << _discoveryMainThread;
|
||||
// Aborts the discovery phase job
|
||||
if (_discoveryMainThread) {
|
||||
_discoveryMainThread->abort();
|
||||
}
|
||||
// Sets a flag for the update phase
|
||||
csync_request_abort(_csync_ctx);
|
||||
// For the propagator
|
||||
if(_propagator) {
|
||||
_propagator->abort();
|
||||
|
||||
@@ -76,6 +76,7 @@ SyncFileStatusTracker::SyncFileStatusTracker(SyncEngine *syncEngine)
|
||||
SLOT(slotAboutToPropagate(SyncFileItemVector&)));
|
||||
connect(syncEngine, SIGNAL(itemCompleted(const SyncFileItem&, const PropagatorJob&)),
|
||||
SLOT(slotItemCompleted(const SyncFileItem&)));
|
||||
connect(syncEngine, SIGNAL(started()), SLOT(slotClearDirtyPaths()));
|
||||
connect(syncEngine, SIGNAL(started()), SLOT(slotSyncEngineRunningChanged()));
|
||||
connect(syncEngine, SIGNAL(finished(bool)), SLOT(slotSyncEngineRunningChanged()));
|
||||
}
|
||||
@@ -93,11 +94,9 @@ SyncFileItem SyncFileStatusTracker::rootSyncFileItem()
|
||||
|
||||
SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& relativePath)
|
||||
{
|
||||
// normalization is required for OS X to match file names properly
|
||||
QString normalizedRelativePath = relativePath.normalized(QString::NormalizationForm_C);
|
||||
Q_ASSERT(!normalizedRelativePath.endsWith(QLatin1Char('/')));
|
||||
Q_ASSERT(!relativePath.endsWith(QLatin1Char('/')));
|
||||
|
||||
if (normalizedRelativePath.isEmpty()) {
|
||||
if (relativePath.isEmpty()) {
|
||||
// This is the root sync folder, it doesn't have an entry in the database and won't be walked by csync, so create one manually.
|
||||
return syncFileItemStatus(rootSyncFileItem());
|
||||
}
|
||||
@@ -108,22 +107,22 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& relativePath)
|
||||
// update the exclude list at runtime and doing it statically here removes
|
||||
// our ability to notify changes through the fileStatusChanged signal,
|
||||
// it's an acceptable compromize to treat all exclude types the same.
|
||||
if( _syncEngine->excludedFiles().isExcluded(_syncEngine->localPath() + normalizedRelativePath,
|
||||
if( _syncEngine->excludedFiles().isExcluded(_syncEngine->localPath() + relativePath,
|
||||
_syncEngine->localPath(),
|
||||
_syncEngine->ignoreHiddenFiles()) ) {
|
||||
return SyncFileStatus(SyncFileStatus::StatusWarning);
|
||||
}
|
||||
|
||||
if ( _dirtyPaths.contains(normalizedRelativePath) )
|
||||
if ( _dirtyPaths.contains(relativePath) )
|
||||
return SyncFileStatus::StatusSync;
|
||||
|
||||
SyncFileItem* item = _syncEngine->findSyncItem(normalizedRelativePath);
|
||||
SyncFileItem* item = _syncEngine->findSyncItem(relativePath);
|
||||
if (item) {
|
||||
return syncFileItemStatus(*item);
|
||||
}
|
||||
|
||||
// If we're not currently syncing that file, look it up in the database to know if it's shared
|
||||
SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(normalizedRelativePath);
|
||||
SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(relativePath);
|
||||
if (rec.isValid()) {
|
||||
return syncFileItemStatus(rec.toSyncFileItem());
|
||||
}
|
||||
@@ -155,18 +154,9 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector& items)
|
||||
} else if (showWarningInSocketApi(*item)) {
|
||||
_syncProblems[item->_file] = SyncFileStatus::StatusWarning;
|
||||
}
|
||||
_dirtyPaths.remove(item->destination());
|
||||
emit fileStatusChanged(getSystemDestination(item->destination()), syncFileItemStatus(*item));
|
||||
}
|
||||
|
||||
// Some metadata status won't trigger files to be synced, make sure that we
|
||||
// push the OK status for dirty files that don't need to be propagated.
|
||||
// Swap into a copy since fileStatus() reads _dirtyPaths to determine the status
|
||||
QSet<QString> oldDirtyPaths;
|
||||
std::swap(_dirtyPaths, oldDirtyPaths);
|
||||
for (auto it = oldDirtyPaths.begin(); it != oldDirtyPaths.end(); ++it)
|
||||
emit fileStatusChanged(getSystemDestination(*it), fileStatus(*it));
|
||||
|
||||
// Make sure to push any status that might have been resolved indirectly since the last sync
|
||||
// (like an error file being deleted from disk)
|
||||
for (auto it = _syncProblems.begin(); it != _syncProblems.end(); ++it)
|
||||
@@ -201,6 +191,13 @@ void SyncFileStatusTracker::slotSyncEngineRunningChanged()
|
||||
emit fileStatusChanged(_syncEngine->localPath(), syncFileItemStatus(rootSyncFileItem()));
|
||||
}
|
||||
|
||||
void SyncFileStatusTracker::slotClearDirtyPaths()
|
||||
{
|
||||
// We just assume that during a sync all dirty statuses will be resolved
|
||||
// one way or the other.
|
||||
_dirtyPaths.clear();
|
||||
}
|
||||
|
||||
SyncFileStatus SyncFileStatusTracker::syncFileItemStatus(const SyncFileItem& item)
|
||||
{
|
||||
// Hack to know if the item was taken from the sync engine (Sync), or from the database (UpToDate)
|
||||
|
||||
@@ -47,6 +47,7 @@ private slots:
|
||||
void slotAboutToPropagate(SyncFileItemVector& items);
|
||||
void slotItemCompleted(const SyncFileItem& item);
|
||||
void slotSyncEngineRunningChanged();
|
||||
void slotClearDirtyPaths();
|
||||
|
||||
private:
|
||||
SyncFileStatus syncFileItemStatus(const SyncFileItem& item);
|
||||
|
||||
+22
-11
@@ -35,6 +35,10 @@
|
||||
#else
|
||||
#include <QStandardPaths>
|
||||
#endif
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
|
||||
#include <QCollator>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
#include <sys/statvfs.h>
|
||||
@@ -310,18 +314,13 @@ namespace {
|
||||
value);
|
||||
}
|
||||
};
|
||||
// QTBUG-3945 and issue #4855: QT_TRANSLATE_NOOP does not work with plural form because lupdate
|
||||
// limitation unless we fake more arguments
|
||||
// (it must be in the form ("context", "source", "comment", n)
|
||||
#undef QT_TRANSLATE_NOOP
|
||||
#define QT_TRANSLATE_NOOP(ctx, str, ...) str
|
||||
Q_DECL_CONSTEXPR Period periods[] = {
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n year(s)" , 0, _) , 365*24*3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n month(s)", 0, _) , 30*24*3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n day(s)", 0, _) , 24*3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n hour(s)", 0, _) , 3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n minute(s)", 0, _) , 60*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n second(s)", 0, _ ), 1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n year(s)") , 365*24*3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n month(s)") , 30*24*3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n day(s)") , 24*3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n hour(s)") , 3600*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n minute(s)") , 60*1000LL },
|
||||
{ QT_TRANSLATE_NOOP("Utility", "%n second(s)") , 1000LL },
|
||||
{ 0, 0 }
|
||||
};
|
||||
} // anonymous namespace
|
||||
@@ -546,4 +545,16 @@ quint64 Utility::StopWatch::durationOfLap( const QString& lapName ) const
|
||||
return _lapTimes.value(lapName, 0);
|
||||
}
|
||||
|
||||
void Utility::sortFilenames(QStringList& fileNames)
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
|
||||
QCollator collator;
|
||||
collator.setNumericMode(true);
|
||||
collator.setCaseSensitivity(Qt::CaseInsensitive);
|
||||
qSort(fileNames.begin(), fileNames.end(), collator);
|
||||
#else
|
||||
fileNames.sort(Qt::CaseInsensitive);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace OCC
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <QByteArray>
|
||||
#include <QDateTime>
|
||||
#include <QElapsedTimer>
|
||||
#include <QMap>
|
||||
#include <QHash>
|
||||
|
||||
namespace OCC {
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace Utility
|
||||
|
||||
class OWNCLOUDSYNC_EXPORT StopWatch {
|
||||
private:
|
||||
QMap<QString, quint64> _lapTimes;
|
||||
QHash<QString, quint64> _lapTimes;
|
||||
QDateTime _startTime;
|
||||
QElapsedTimer _timer;
|
||||
public:
|
||||
@@ -136,6 +136,11 @@ namespace Utility
|
||||
quint64 durationOfLap( const QString& lapName ) const;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Sort a QStringList in a way that's appropriate for filenames
|
||||
*/
|
||||
OWNCLOUDSYNC_EXPORT void sortFilenames(QStringList& fileNames);
|
||||
|
||||
}
|
||||
/** @} */ // \addtogroup
|
||||
|
||||
|
||||
@@ -151,13 +151,7 @@ using namespace OCC;
|
||||
};
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
||||
// Qt4 does not have QTEST_GUILESS_MAIN, so we simulate it.
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
TestChecksumValidator tc;
|
||||
return QTest::qExec(&tc, argc, argv);
|
||||
}
|
||||
QTEST_MAIN(TestChecksumValidator)
|
||||
#else
|
||||
QTEST_GUILESS_MAIN(TestChecksumValidator)
|
||||
#endif
|
||||
|
||||
@@ -171,13 +171,7 @@ private slots:
|
||||
};
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
||||
// Qt4 does not have QTEST_GUILESS_MAIN, so we simulate it.
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
TestFolderWatcher tc;
|
||||
return QTest::qExec(&tc, argc, argv);
|
||||
}
|
||||
QTEST_MAIN(TestFolderWatcher)
|
||||
#else
|
||||
QTEST_GUILESS_MAIN(TestFolderWatcher)
|
||||
#endif
|
||||
|
||||
@@ -442,13 +442,7 @@ private slots:
|
||||
};
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
||||
// Qt4 does not have QTEST_GUILESS_MAIN, so we simulate it.
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
TestXmlParse tc;
|
||||
return QTest::qExec(&tc, argc, argv);
|
||||
}
|
||||
QTEST_MAIN(TestXmlParse)
|
||||
#else
|
||||
QTEST_GUILESS_MAIN(TestXmlParse)
|
||||
#endif
|
||||
|
||||
+209
-217
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+175
-181
@@ -110,8 +110,8 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.ui" line="180"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="352"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="690"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="346"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="684"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Zrušit</translation>
|
||||
</message>
|
||||
@@ -141,148 +141,148 @@
|
||||
<translation>Účet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="221"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="215"/>
|
||||
<source>Choose what to sync</source>
|
||||
<translation>Vybrat co sesynchronizovat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="229"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="223"/>
|
||||
<source>Remove folder sync connection</source>
|
||||
<translation>Odstranit připojení synchronizace adresáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="294"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="288"/>
|
||||
<source>Folder creation failed</source>
|
||||
<translation>Vytvoření adresáře selhalo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="295"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="289"/>
|
||||
<source><p>Could not create local folder <i>%1</i>.</source>
|
||||
<translation><p>Nelze vytvořit místní adresář <i>%1</i>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="345"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="339"/>
|
||||
<source>Confirm Folder Sync Connection Removal</source>
|
||||
<translation>Potvrdit odstranění připojení synchronizace adresáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="351"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="345"/>
|
||||
<source>Remove Folder Sync Connection</source>
|
||||
<translation>Odstranit připojení synchronizace adresáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="433"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="427"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>Synchronizace probíhá</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="434"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="428"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>Operace synchronizace právě probíhá.<br/>Přejete si ji ukončit?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="501"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="495"/>
|
||||
<source>%1 in use</source>
|
||||
<translation>%1 používaný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="521"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="515"/>
|
||||
<source>%1 as <i>%2</i></source>
|
||||
<translation>%1 jako <i>%2</i></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="527"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="521"/>
|
||||
<source>The server version %1 is old and unsupported! Proceed at your own risk.</source>
|
||||
<translation>Server verze %1 je zastaralý a nepodporovaný! Pokračujte na vlastní riziko.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="529"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="523"/>
|
||||
<source>Connected to %1.</source>
|
||||
<translation>Připojeno k %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="531"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="525"/>
|
||||
<source>Server %1 is temporarily unavailable.</source>
|
||||
<translation>Server %1 je dočasně nedostupný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="533"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="527"/>
|
||||
<source>Signed out from %1.</source>
|
||||
<translation>Odhlášeno z %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="535"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="529"/>
|
||||
<source>No connection to %1 at %2.</source>
|
||||
<translation>Bez připojení k %1 na %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="558"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="552"/>
|
||||
<source>Log in</source>
|
||||
<translation>Přihlásit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="642"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="636"/>
|
||||
<source>There are new folders that were not synchronized because they are too big: </source>
|
||||
<translation>Jsou dostupné nové adresáře, které nebyly synchronizovány z důvodu jejich nadměrné velikosti:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="682"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="676"/>
|
||||
<source>Confirm Account Removal</source>
|
||||
<translation>Potvrdit odstranění účtu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="683"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="677"/>
|
||||
<source><p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p></source>
|
||||
<translation><p>Opravdu chcete odstranit připojení k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="689"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="683"/>
|
||||
<source>Remove connection</source>
|
||||
<translation>Odstranit připojení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="217"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="211"/>
|
||||
<source>Open folder</source>
|
||||
<translation>Otevřít adresář</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="145"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="560"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="554"/>
|
||||
<source>Log out</source>
|
||||
<translation>Odhlásit se</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="226"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="220"/>
|
||||
<source>Resume sync</source>
|
||||
<translation>Pokračovat v synchronizaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="226"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="220"/>
|
||||
<source>Pause sync</source>
|
||||
<translation>Pozastavit synchronizaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="346"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="340"/>
|
||||
<source><p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p></source>
|
||||
<translation><p>Opravdu chcete zastavit synchronizaci adresáře <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="488"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="482"/>
|
||||
<source>%1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits.</source>
|
||||
<translation>Používaných %1 (%3%) z %2. Některé adresáře včetně připojených síťových nebo sdílených adresářů mohou mít odlišné limity.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="489"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="483"/>
|
||||
<source>%1 of %2 in use</source>
|
||||
<translation>Používaných %1 z %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="498"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="492"/>
|
||||
<source>Currently there is no storage usage information available.</source>
|
||||
<translation>Momentálně nejsou k dispozici žádné informace o využití úložiště.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="541"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="535"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation>Žádné spojení s %1 nenastaveno.</translation>
|
||||
</message>
|
||||
@@ -579,119 +579,119 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="129"/>
|
||||
<location filename="../src/gui/folder.cpp" line="135"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Místní adresář %1 neexistuje.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="132"/>
|
||||
<location filename="../src/gui/folder.cpp" line="138"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 by měl být adresář, ale není.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="135"/>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 není čitelný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="381"/>
|
||||
<location filename="../src/gui/folder.cpp" line="386"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="491"/>
|
||||
<location filename="../src/gui/folder.cpp" line="496"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 byl odebrán.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="498"/>
|
||||
<location filename="../src/gui/folder.cpp" line="503"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 byl stažen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="510"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 byl aktualizován.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="512"/>
|
||||
<location filename="../src/gui/folder.cpp" line="517"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 byl přejmenován na %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="519"/>
|
||||
<location filename="../src/gui/folder.cpp" line="524"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 byl přemístěn do %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="489"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 soubor bude smazán.</numerusform><numerusform>%1 a %n další soubory budou smazány.</numerusform><numerusform>%1 a %n další soubory budou smazány.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="496"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 soubor byl stažen.</numerusform><numerusform>%1 a %n další soubory byly staženy.</numerusform><numerusform>%1 a %n další soubory byly staženy.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="503"/>
|
||||
<location filename="../src/gui/folder.cpp" line="508"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 soubor byl aktualizován.</numerusform><numerusform>%1 a %n další soubory byly aktualizovány.</numerusform><numerusform>%1 a %n další soubory byly aktualizovány.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="510"/>
|
||||
<location filename="../src/gui/folder.cpp" line="515"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 byl přejmenován na %2.</numerusform><numerusform>%1 byl přejmenován na %2 a %n další soubory byly přejmenovány.</numerusform><numerusform>%1 byl přejmenován na %2 a %n další soubory byly přejmenovány.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="517"/>
|
||||
<location filename="../src/gui/folder.cpp" line="522"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 byl přesunut do %2.</numerusform><numerusform>%1 byl přesunut do %2 a %n dalších souborů bylo přesunuto.</numerusform><numerusform>%1 byl přesunut do %2 a %n dalších souborů bylo přesunuto.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="524"/>
|
||||
<location filename="../src/gui/folder.cpp" line="529"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 má problém se synchronizací.</numerusform><numerusform>%1 a %n dalších souborů má problém se synchronizací.</numerusform><numerusform>%1 a %n dalších souborů má problém se synchronizací.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="526"/>
|
||||
<location filename="../src/gui/folder.cpp" line="531"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>%1 má problém se synchronizací. Prosím zkontrolujte chybový soubor.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="531"/>
|
||||
<location filename="../src/gui/folder.cpp" line="536"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 soubor nemůže být synchronizován kvůli chybám. Shlédněte log pro detaily.</numerusform><numerusform>%1 a %n dalších souborů nemohou být synchronizovány kvůli chybám. Shlédněte log pro detaily.</numerusform><numerusform>%1 a %n dalších souborů nemohou být synchronizovány kvůli chybám. Shlédněte log pro detaily.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="533"/>
|
||||
<location filename="../src/gui/folder.cpp" line="538"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 nebyl kvůli chybě synchronizován. Detaily jsou k nalezení v logu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="539"/>
|
||||
<location filename="../src/gui/folder.cpp" line="544"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Průběh synchronizace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="747"/>
|
||||
<location filename="../src/gui/folder.cpp" line="750"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Nezdařilo se přečtení systémového exclude souboru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<location filename="../src/gui/folder.cpp" line="961"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Byl přidán nový adresář %2 větší než %1 MB.
|
||||
Pokud ho chcete stáhnout, přejděte prosím do nastavení a označte ho.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="976"/>
|
||||
<location filename="../src/gui/folder.cpp" line="979"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -700,22 +700,22 @@ Toto může být způsobeno změnou v nastavení synchronizace adresáře nebo t
|
||||
Opravdu chcete provést tuto akci?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="980"/>
|
||||
<location filename="../src/gui/folder.cpp" line="983"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Odstranit všechny soubory?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="982"/>
|
||||
<location filename="../src/gui/folder.cpp" line="985"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Odstranit všechny soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="983"/>
|
||||
<location filename="../src/gui/folder.cpp" line="986"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Ponechat soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1004"/>
|
||||
<source>This sync would reset the files to an erlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -724,17 +724,17 @@ Toto může být způsobeno obnovením zálohy na straně serveru.
|
||||
Pokračováním v synchronizaci způsobí přepsání všech vašich souborů staršími soubory z dřívějšího stavu. Přejete si ponechat své místní nejaktuálnější soubory jako konfliktní soubory?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1006"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1009"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Záloha nalezena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1008"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1011"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Normální synchronizace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1009"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1012"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Ponechat místní soubory jako konflikt</translation>
|
||||
</message>
|
||||
@@ -752,102 +752,102 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st
|
||||
<translation>Byl nalezen starý záznam synchronizace '%1', ale nebylo možné jej odebrat. Ujistěte se, že není aktuálně používán jinou aplikací.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="927"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="926"/>
|
||||
<source> (backup)</source>
|
||||
<translation> (záloha)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="932"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="931"/>
|
||||
<source> (backup %1)</source>
|
||||
<translation> (záloha %1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1139"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1138"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Nedefinovaný stav.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1142"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1141"/>
|
||||
<source>Waiting to start syncing.</source>
|
||||
<translation>Čeká na spuštění synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1145"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1144"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation>Příprava na synchronizaci.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1148"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1147"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Synchronizace probíhá.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1151"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1150"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Poslední synchronizace byla úspěšná.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1156"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1155"/>
|
||||
<source>Last Sync was successful, but with warnings on individual files.</source>
|
||||
<translation>Poslední synchronizace byla úspěšná, ale s varováním u některých souborů</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1159"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1158"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Chyba nastavení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1162"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1161"/>
|
||||
<source>User Abort.</source>
|
||||
<translation>Zrušení uživatelem.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1165"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1164"/>
|
||||
<source>Sync is paused.</source>
|
||||
<translation>Synchronizace pozastavena.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1171"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1170"/>
|
||||
<source>%1 (Sync is paused)</source>
|
||||
<translation>%1 (Synchronizace je pozastavena)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1179"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1178"/>
|
||||
<source>No valid folder selected!</source>
|
||||
<translation>Nebyl vybrán platný adresář!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1190"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1189"/>
|
||||
<source>The selected path is not a folder!</source>
|
||||
<translation>Vybraná cesta nevede do adresáře!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1194"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1193"/>
|
||||
<source>You have no permission to write to the selected folder!</source>
|
||||
<translation>Nemáte oprávnění pro zápis do zvoleného adresáře!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1209"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1208"/>
|
||||
<source>The local folder %1 is already used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Místní adresář %1 je již použit pro synchronizaci odesílání. Zvolte prosím jiný!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1214"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1213"/>
|
||||
<source>The local folder %1 already contains a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Místní adresář %1 již obsahuje podadresář použitý pro synchronizaci odesílání. Zvolte prosím jiný!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1221"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1220"/>
|
||||
<source>The local folder %1 is a symbolic link. The link target already contains a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Místní adresář %1 je symbolickým obsahem. Cíl odkazu již obsahuje adresář použitý pro synchronizaci adresáře. Vyberte prosím jiný!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1228"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1227"/>
|
||||
<source>The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Místní adresář %1 je již obsažen ve adresáři použitém pro synchronizaci. Vyberte prosím jiný!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1234"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1233"/>
|
||||
<source>The local folder %1 is a symbolic link. The link target is already contained in a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Místní adresář %1 je symbolickým obsahem. Cíl odkazu je již obsažen v adresáři použitém pro synchronizaci. Vyberte prosím jiný!</translation>
|
||||
</message>
|
||||
@@ -1380,27 +1380,27 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="329"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Je dostupná nová verze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="335"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Je k dispozici nová verze klienta %1.</p><p><b>%2</b> je k dispozici ke stažení. Momentálně je nainstalována verze %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="348"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Přeskoč tuto verzi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="349"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Tentokrát přeskočit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Get update</source>
|
||||
<translation>Získat aktualizaci</translation>
|
||||
</message>
|
||||
@@ -1902,7 +1902,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PUTFileJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="103"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="101"/>
|
||||
<source>Connection Timeout</source>
|
||||
<translation>Čas spojení vypršel</translation>
|
||||
</message>
|
||||
@@ -1910,7 +1910,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PollJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="160"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="158"/>
|
||||
<source>Invalid JSON reply from the poll URL</source>
|
||||
<translation>Neplatná JSON odpověď z adresy URL</translation>
|
||||
</message>
|
||||
@@ -2100,48 +2100,48 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileQNAM</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="297"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="291"/>
|
||||
<source>File Removed</source>
|
||||
<translation>Soubor odebrán</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="309"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="303"/>
|
||||
<source>Local file changed during syncing. It will be resumed.</source>
|
||||
<translation>Místní soubor se během synchronizace změnil. </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="321"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="710"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="315"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="704"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Místní soubor byl změněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="637"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="631"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="645"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="639"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Soubor zde byl editován, ale je součástí sdílení pouze pro čtení. Původní soubor byl obnoven a editovaná verze je uložena v konfliktním souboru.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="676"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="670"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Chybí adresa URL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="699"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="693"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Místní soubor byl odstraněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="725"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="719"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Server nepotvrdil poslední část dat. (Nebyl nalezen e-tag)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="800"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="792"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Chyba zápisu metadat do databáze</translation>
|
||||
</message>
|
||||
@@ -2481,7 +2481,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Sdílet s uživateli nebo skupinami</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/shareusergroupwidget.cpp" line="224"/>
|
||||
<location filename="../src/gui/shareusergroupwidget.cpp" line="226"/>
|
||||
<source>No results for '%1'</source>
|
||||
<translation>Žádné výsledky pro '%1'</translation>
|
||||
</message>
|
||||
@@ -2545,22 +2545,17 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::ShibbolethWebView</name>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="81"/>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="79"/>
|
||||
<source>%1 - Authenticate</source>
|
||||
<translation>%1 - ověření</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="91"/>
|
||||
<source>SSL Chipher Debug View</source>
|
||||
<translation>Ladící zobrazení šifry SSL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="99"/>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="85"/>
|
||||
<source>Reauthentication required</source>
|
||||
<translation>Vyžadováno opětovné ověření</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="99"/>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="85"/>
|
||||
<source>Your session has expired. You need to re-login to continue to use the client.</source>
|
||||
<translation>Vaše sezení vypršelo. Chcete-li pokračovat v práci, musíte se znovu přihlásit.</translation>
|
||||
</message>
|
||||
@@ -2873,12 +2868,12 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Je dostupných pouze %1, pro spuštění je potřeba alespoň %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1134"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1132"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1141"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1139"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře</translation>
|
||||
</message>
|
||||
@@ -2993,54 +2988,54 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Nelze otevřít synchronizační žurnál</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="889"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="887"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Jméno souboru obsahuje aelspoň jeden neplatný znak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1093"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1100"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1091"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1098"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Ignorováno podle nastavení "vybrat co synchronizovat"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1119"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1117"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1161"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1159"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1178"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1198"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1176"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1196"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Odstranění není povoleno, obnovuji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1209"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Místní soubory a sdílený adresář byly odstraněny.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1267"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1265"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Přesun není povolen, položka obnovena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1278"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1276"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Přesun není povolen, protože %1 je pouze pro čtení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1279"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1277"/>
|
||||
<source>the destination</source>
|
||||
<translation>cílové umístění</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1279"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1277"/>
|
||||
<source>the source</source>
|
||||
<translation>zdroj</translation>
|
||||
</message>
|
||||
@@ -3126,26 +3121,25 @@ Nedoporučuje se jí používat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="390"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="544"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="611"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="526"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="593"/>
|
||||
<source>Log in...</source>
|
||||
<translation>Přihlásit...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="394"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="536"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="613"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="518"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="595"/>
|
||||
<source>Log out</source>
|
||||
<translation>Odhlásit se</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="415"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="456"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="438"/>
|
||||
<source>Recent Changes</source>
|
||||
<translation>Poslední změny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="656"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="638"/>
|
||||
<source>Checking for changes in '%1'</source>
|
||||
<translation>Kontrola změn v '%1'</translation>
|
||||
</message>
|
||||
@@ -3165,27 +3159,27 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Otevřít %1 v prohlížeči</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="598"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="580"/>
|
||||
<source>Unknown status</source>
|
||||
<translation>Neznámý stav</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="600"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="582"/>
|
||||
<source>Settings...</source>
|
||||
<translation>Nastavení...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="601"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="583"/>
|
||||
<source>Details...</source>
|
||||
<translation>Podrobnosti...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="606"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="588"/>
|
||||
<source>Help</source>
|
||||
<translation>Nápověda</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="608"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="590"/>
|
||||
<source>Quit %1</source>
|
||||
<translation>Ukončit %1</translation>
|
||||
</message>
|
||||
@@ -3230,63 +3224,63 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Pozastavit všechny adresáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="515"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="497"/>
|
||||
<source>Unpause all synchronization</source>
|
||||
<translation>Spustit veškerou synchronizaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="517"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="499"/>
|
||||
<source>Unpause synchronization</source>
|
||||
<translation>Spustit synchronizaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="525"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="507"/>
|
||||
<source>Pause all synchronization</source>
|
||||
<translation>Pozastavit veškerou synchronizaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="527"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="509"/>
|
||||
<source>Pause synchronization</source>
|
||||
<translation>Pozastavit synchronizaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="534"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="516"/>
|
||||
<source>Log out of all accounts</source>
|
||||
<translation>Odhlásit ze všech účtů</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="542"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="524"/>
|
||||
<source>Log in to all accounts...</source>
|
||||
<translation>Přihlásit ke všem účtům...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="617"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="599"/>
|
||||
<source>Crash now</source>
|
||||
<comment>Only shows in debug mode to allow testing the crash handler</comment>
|
||||
<translation>Selhání</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="634"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="616"/>
|
||||
<source>No items synced recently</source>
|
||||
<translation>Žádné položky nebyly nedávno synchronizovány</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="661"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="643"/>
|
||||
<source>Syncing %1 of %2 (%3 left)</source>
|
||||
<translation>Synchronizuji %1 ze %2 (zbývá %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="666"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="648"/>
|
||||
<source>Syncing %1 (%2 left)</source>
|
||||
<translation>Synchronizuji %1 (zbývá %2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="686"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="668"/>
|
||||
<source>%1 (%2, %3)</source>
|
||||
<translation>%1 (%2, %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="715"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="697"/>
|
||||
<source>Up to date</source>
|
||||
<translation>Aktuální</translation>
|
||||
</message>
|
||||
@@ -3507,7 +3501,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>QApplication</name>
|
||||
<message>
|
||||
<location filename="../src/gui/application.cpp" line="593"/>
|
||||
<location filename="../src/gui/application.cpp" line="581"/>
|
||||
<source>QT_LAYOUT_DIRECTION</source>
|
||||
<translation>QT_LAYOUT_DIRECTION</translation>
|
||||
</message>
|
||||
@@ -3515,37 +3509,37 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="473"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="468"/>
|
||||
<source>in the future</source>
|
||||
<translation>V budoucnosti</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="469"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="464"/>
|
||||
<source>%n day(s) ago</source>
|
||||
<translation><numerusform>před %n dnyëm</numerusform><numerusform>před %n dny</numerusform><numerusform>před %n dny</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="477"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="472"/>
|
||||
<source>%n hour(s) ago</source>
|
||||
<translation><numerusform>před %n hodinou</numerusform><numerusform>před %n hodinami</numerusform><numerusform>před %n hodinami</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="482"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="477"/>
|
||||
<source>now</source>
|
||||
<translation>nyní</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="484"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="479"/>
|
||||
<source>Less than a minute ago</source>
|
||||
<translation>Méně než před minutou</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="487"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="482"/>
|
||||
<source>%n minute(s) ago</source>
|
||||
<translation><numerusform>před %n minutou</numerusform><numerusform>před %n minutami</numerusform><numerusform>před %n minutami</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="490"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="485"/>
|
||||
<source>Some time ago</source>
|
||||
<translation>Před nějakým časem</translation>
|
||||
</message>
|
||||
@@ -3572,38 +3566,38 @@ Nedoporučuje se jí používat.</translation>
|
||||
<source>%L1 B</source>
|
||||
<translation>%L1 B</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="319"/>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="314"/>
|
||||
<source>%n year(s)</source>
|
||||
<translation><numerusform>%n rok</numerusform><numerusform>%n roky</numerusform><numerusform>%n let</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="320"/>
|
||||
<source>%n month(s)</source>
|
||||
<translation><numerusform>%n měsíc</numerusform><numerusform>%n měsíce</numerusform><numerusform>%n měsíců</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="321"/>
|
||||
<source>%n day(s)</source>
|
||||
<translation><numerusform>%n den</numerusform><numerusform>%n dny</numerusform><numerusform>%n dní</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="322"/>
|
||||
<source>%n hour(s)</source>
|
||||
<translation><numerusform>%n hodina</numerusform><numerusform>%n hodiny</numerusform><numerusform>%n hodin</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="323"/>
|
||||
<source>%n minute(s)</source>
|
||||
<translation><numerusform>%n minuta</numerusform><numerusform>%n minuty</numerusform><numerusform>%n minut</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="324"/>
|
||||
<source>%n second(s)</source>
|
||||
<translation><numerusform>%n sekunda</numerusform><numerusform>%n sekundy</numerusform><numerusform>%n sekund</numerusform></translation>
|
||||
<translation>%n rok(ů)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="348"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="315"/>
|
||||
<source>%n month(s)</source>
|
||||
<translation>%n měsíc(ů)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="316"/>
|
||||
<source>%n day(s)</source>
|
||||
<translation>%n dní</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="317"/>
|
||||
<source>%n hour(s)</source>
|
||||
<translation>%n hodina(y)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="318"/>
|
||||
<source>%n minute(s)</source>
|
||||
<translation>%n minuta(y)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="319"/>
|
||||
<source>%n second(s)</source>
|
||||
<translation>%n sekunda(y)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="343"/>
|
||||
<source>%1 %2</source>
|
||||
<translation>%1 %2</translation>
|
||||
</message>
|
||||
|
||||
+175
-181
@@ -110,8 +110,8 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.ui" line="180"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="352"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="690"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="346"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="684"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Abbrechen</translation>
|
||||
</message>
|
||||
@@ -141,148 +141,148 @@
|
||||
<translation>Benutzerkonto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="221"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="215"/>
|
||||
<source>Choose what to sync</source>
|
||||
<translation>Zu synchronisierende Elemente auswählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="229"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="223"/>
|
||||
<source>Remove folder sync connection</source>
|
||||
<translation>Ordner Synchronisation entfernen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="294"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="288"/>
|
||||
<source>Folder creation failed</source>
|
||||
<translation>Ordner anlegen fehlgeschlagen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="295"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="289"/>
|
||||
<source><p>Could not create local folder <i>%1</i>.</source>
|
||||
<translation><p>Konnte lokalen Ordner <i>%1</i> nicht anlegen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="345"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="339"/>
|
||||
<source>Confirm Folder Sync Connection Removal</source>
|
||||
<translation>Bestätigen Sie die Löschung der Ordner Sychronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="351"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="345"/>
|
||||
<source>Remove Folder Sync Connection</source>
|
||||
<translation>Ordner Synchronisation entfernen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="433"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="427"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>Synchronisation läuft</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="434"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="428"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>Die Synchronisation läuft gerade.<br/>Wollen Sie sie beenden?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="501"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="495"/>
|
||||
<source>%1 in use</source>
|
||||
<translation>%1 wird verwendet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="521"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="515"/>
|
||||
<source>%1 as <i>%2</i></source>
|
||||
<translation>%1 als <i>%2</i></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="527"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="521"/>
|
||||
<source>The server version %1 is old and unsupported! Proceed at your own risk.</source>
|
||||
<translation>Die Serververision %1 ist al und nicht unterstützt! Fortfahren auf eigenes Risiko.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="529"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="523"/>
|
||||
<source>Connected to %1.</source>
|
||||
<translation>Verbunden mit %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="531"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="525"/>
|
||||
<source>Server %1 is temporarily unavailable.</source>
|
||||
<translation>Server %1 ist derzeit nicht verfügbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="533"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="527"/>
|
||||
<source>Signed out from %1.</source>
|
||||
<translation>Abgemeldet von %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="535"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="529"/>
|
||||
<source>No connection to %1 at %2.</source>
|
||||
<translation>Keine Verbindung zu %1 auf %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="558"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="552"/>
|
||||
<source>Log in</source>
|
||||
<translation>Einloggen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="642"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="636"/>
|
||||
<source>There are new folders that were not synchronized because they are too big: </source>
|
||||
<translation>Einige neue Ordner konnten nicht synchronisiert werden, da sie zu groß sind:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="682"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="676"/>
|
||||
<source>Confirm Account Removal</source>
|
||||
<translation>Konto wirklich entfernen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="683"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="677"/>
|
||||
<source><p>Do you really want to remove the connection to the account <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p></source>
|
||||
<translation><p>Wollen Sie wirklich die Verbindung zum Konto <i>%1</i> lösen?</p><p><b>Anmerkung:</b> Dieser Vorgang wird <b>keine</b> Dateien löschen.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="689"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="683"/>
|
||||
<source>Remove connection</source>
|
||||
<translation>Verbindung entfernen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="217"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="211"/>
|
||||
<source>Open folder</source>
|
||||
<translation>Ordner öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="145"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="560"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="554"/>
|
||||
<source>Log out</source>
|
||||
<translation>Abmelden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="226"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="220"/>
|
||||
<source>Resume sync</source>
|
||||
<translation>Synchronisation fortsetzen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="226"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="220"/>
|
||||
<source>Pause sync</source>
|
||||
<translation>Synchronisation pausieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="346"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="340"/>
|
||||
<source><p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p></source>
|
||||
<translation><p>Möchten Sie wirklich die Synchronisation des Ordners <i>%1</i> stoppen?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="488"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="482"/>
|
||||
<source>%1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits.</source>
|
||||
<translation>%1 (%3%) von %2 Serverkapazität verwendet. Einige Ordner, einschließlich über das Netzwerk verbundene oder freigegebene Ordner oder geteilte ordner können unterschiedliche Beschränkungen aufweisen. </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="489"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="483"/>
|
||||
<source>%1 of %2 in use</source>
|
||||
<translation>%1 von %2 Serverkapazität verwendet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="498"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="492"/>
|
||||
<source>Currently there is no storage usage information available.</source>
|
||||
<translation>Derzeit sind keine Speichernutzungsinformationen verfügbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="541"/>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="535"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation>Keine %1-Verbindung konfiguriert.</translation>
|
||||
</message>
|
||||
@@ -579,118 +579,118 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="129"/>
|
||||
<location filename="../src/gui/folder.cpp" line="135"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Lokales Verzeichnis %1 existiert nicht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="132"/>
|
||||
<location filename="../src/gui/folder.cpp" line="138"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 sollte ein Ordner sein, ist es aber nicht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="135"/>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 ist nicht lesbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="381"/>
|
||||
<location filename="../src/gui/folder.cpp" line="386"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="491"/>
|
||||
<location filename="../src/gui/folder.cpp" line="496"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 wurde gelöscht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="498"/>
|
||||
<location filename="../src/gui/folder.cpp" line="503"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 wurde heruntergeladen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="510"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 wurde aktualisiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="512"/>
|
||||
<location filename="../src/gui/folder.cpp" line="517"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 wurde in %2 umbenannt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="519"/>
|
||||
<location filename="../src/gui/folder.cpp" line="524"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 wurde in %2 verschoben.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="489"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei wurde gelöscht.</numerusform><numerusform>%1 und %n andere Dateien wurden gelöscht.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="496"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei wurde heruntergeladen.</numerusform><numerusform>%1 und %n andere Dateien wurden heruntergeladen.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="503"/>
|
||||
<location filename="../src/gui/folder.cpp" line="508"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei wurde aktualisiert.</numerusform><numerusform>%1 und %n andere Dateien wurden aktualisiert.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="510"/>
|
||||
<location filename="../src/gui/folder.cpp" line="515"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 wurde in %2 umbenannt und %n andere Datei wurde umbenannt.</numerusform><numerusform>%1 wurde in %2 umbenannt und %n andere Dateien wurden umbenannt.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="517"/>
|
||||
<location filename="../src/gui/folder.cpp" line="522"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 wurde in %2 verschoben und %n andere Datei wurde verschoben.</numerusform><numerusform>%1 wurde in %2 verschoben und %n andere Dateien wurden verschoben.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="524"/>
|
||||
<location filename="../src/gui/folder.cpp" line="529"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei haben Konflikte beim Abgleichen.</numerusform><numerusform>%1 und %n andere Dateien haben Konflikte beim Abgleichen.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="526"/>
|
||||
<location filename="../src/gui/folder.cpp" line="531"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="531"/>
|
||||
<location filename="../src/gui/folder.cpp" line="536"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.</numerusform><numerusform>%1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="533"/>
|
||||
<location filename="../src/gui/folder.cpp" line="538"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="539"/>
|
||||
<location filename="../src/gui/folder.cpp" line="544"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Synchronisierungsaktivität</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="747"/>
|
||||
<location filename="../src/gui/folder.cpp" line="750"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Systemeigene Ausschlussdatei kann nicht gelesen werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<location filename="../src/gui/folder.cpp" line="961"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Ein neue Order größer als %1 MB wurde hinzugefügt: %2. Bitte besuchen Sie die Einstellungen, falls sie ihn herunterladen wollen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="976"/>
|
||||
<location filename="../src/gui/folder.cpp" line="979"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -699,22 +699,22 @@ Die Ursache ist, dass der Ordner entweder neu konfiguriert wurde, oder weil alle
|
||||
Sind Sie sicher, dass Sie diese Operation durchführen möchten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="980"/>
|
||||
<location filename="../src/gui/folder.cpp" line="983"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Alle Dateien löschen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="982"/>
|
||||
<location filename="../src/gui/folder.cpp" line="985"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Lösche alle Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="983"/>
|
||||
<location filename="../src/gui/folder.cpp" line="986"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Dateien behalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1004"/>
|
||||
<source>This sync would reset the files to an erlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -723,17 +723,17 @@ Der Grund dafür ist möglicherweise, dass auf dem Server ein Backup eingespielt
|
||||
Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älteren Versionen überschrieben. Möchten Sie die neueren Dateien als Konflikt-Dateien behalten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1006"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1009"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Backup erkannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1008"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1011"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Normale Synchronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1009"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1012"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Lokale Konfliktdateien behalten</translation>
|
||||
</message>
|
||||
@@ -751,102 +751,102 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter
|
||||
<translation>Ein altes Synchronisations-Journal '%1' wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="927"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="926"/>
|
||||
<source> (backup)</source>
|
||||
<translation>(Sicherung)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="932"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="931"/>
|
||||
<source> (backup %1)</source>
|
||||
<translation>(Sicherung %1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1139"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1138"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Undefinierter Zustand.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1142"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1141"/>
|
||||
<source>Waiting to start syncing.</source>
|
||||
<translation>Wartet auf Beginn der Synchronistation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1145"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1144"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation>Synchronisation wird vorbereitet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1148"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1147"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Synchronisation läuft.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1151"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1150"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Die letzte Synchronisation war erfolgreich.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1156"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1155"/>
|
||||
<source>Last Sync was successful, but with warnings on individual files.</source>
|
||||
<translation>Letzte Synchronisation war erfolgreich, aber mit Warnungen für einzelne Dateien.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1159"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1158"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Installationsfehler.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1162"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1161"/>
|
||||
<source>User Abort.</source>
|
||||
<translation>Benutzer-Abbruch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1165"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1164"/>
|
||||
<source>Sync is paused.</source>
|
||||
<translation>Synchronisation wurde angehalten.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1171"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1170"/>
|
||||
<source>%1 (Sync is paused)</source>
|
||||
<translation>%1 (Synchronisation ist pausiert)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1179"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1178"/>
|
||||
<source>No valid folder selected!</source>
|
||||
<translation>Kein gültige Ordner gewählt!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1190"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1189"/>
|
||||
<source>The selected path is not a folder!</source>
|
||||
<translation>Der gewählte Pfad ist kein Ordner!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1194"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1193"/>
|
||||
<source>You have no permission to write to the selected folder!</source>
|
||||
<translation>Sie haben keine Schreibberechtigung für den ausgewählten Ordner!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1209"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1208"/>
|
||||
<source>The local folder %1 is already used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Der lokale Ordner %1 wird bereits als Synchronisationsordner benutzt. Bitte wählen Sie einen anderen!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1214"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1213"/>
|
||||
<source>The local folder %1 already contains a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Der lokale Ordner %1 liegt innerhalb eines synchronisierten Ordners. Bitte wählen Sie einen anderen aus!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1221"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1220"/>
|
||||
<source>The local folder %1 is a symbolic link. The link target already contains a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Der lokale Ordner %1 ist ein symbolischer Link. Das Ziel des Links beinhaltet schon einen Ordner, der in einer anderen Synchronisation liegt. Bitte wählen Sie einen anderen lokalen Ordner aus!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1228"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1227"/>
|
||||
<source>The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Der lokale Ordner %1 liegt in einem Ordner, der bereits synchronisiert wird. Bitte wählen Sie einen anderen aus!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1234"/>
|
||||
<location filename="../src/gui/folderman.cpp" line="1233"/>
|
||||
<source>The local folder %1 is a symbolic link. The link target is already contained in a folder used in a folder sync connection. Please pick another one!</source>
|
||||
<translation>Der lokale Ordner %1 ist ein symbolischer Link. Das Ziel des Links liegt in einem Ordner, der schon synchronisiert wird. Bitte wählen Sie einen anderen aus!</translation>
|
||||
</message>
|
||||
@@ -1379,27 +1379,27 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="329"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Eine neue Version ist verfügbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="335"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Eine neue Version des %1 - Klients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="348"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Diese Version auslassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="349"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Dieses Mal überspringen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Get update</source>
|
||||
<translation>Update durchführen</translation>
|
||||
</message>
|
||||
@@ -1900,7 +1900,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PUTFileJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="103"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="101"/>
|
||||
<source>Connection Timeout</source>
|
||||
<translation>Zeitüberschreitung der Verbindung</translation>
|
||||
</message>
|
||||
@@ -1908,7 +1908,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PollJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="160"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="158"/>
|
||||
<source>Invalid JSON reply from the poll URL</source>
|
||||
<translation>Ungültige JSON-Antwort von der Poll-URL</translation>
|
||||
</message>
|
||||
@@ -2098,48 +2098,48 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileQNAM</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="297"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="291"/>
|
||||
<source>File Removed</source>
|
||||
<translation>Datei gelöscht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="309"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="303"/>
|
||||
<source>Local file changed during syncing. It will be resumed.</source>
|
||||
<translation>Lokale Datei hat sich während der Synchronisation geändert. Die Synchronisation wird wiederaufgenommen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="321"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="710"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="315"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="704"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Eine lokale Datei wurde während der Synchronisation geändert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="637"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="631"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="645"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="639"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Die Datei wurde von einer Nur-Lese-Freigabe lokal bearbeitet. Die Datei wurde wiederhergestellt und Ihre Bearbeitung ist in der Konflikte-Datei.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="676"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="670"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Poll-URL fehlt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="699"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="693"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Die lokale Datei wurde während der Synchronisation gelöscht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="725"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="719"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Der Server hat den letzten Block nicht bestätigt. (Der E-Tag war nicht vorhanden)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="800"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="792"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Fehler beim Schreiben der Metadaten in die Datenbank</translation>
|
||||
</message>
|
||||
@@ -2479,7 +2479,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Mit Benutzern oder Gruppen teilen…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/shareusergroupwidget.cpp" line="224"/>
|
||||
<location filename="../src/gui/shareusergroupwidget.cpp" line="226"/>
|
||||
<source>No results for '%1'</source>
|
||||
<translation>Keine Ergebnisse für '%1'</translation>
|
||||
</message>
|
||||
@@ -2543,22 +2543,17 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::ShibbolethWebView</name>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="81"/>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="79"/>
|
||||
<source>%1 - Authenticate</source>
|
||||
<translation>%1 - Authentifikation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="91"/>
|
||||
<source>SSL Chipher Debug View</source>
|
||||
<translation>Debug-Ansicht der SSL-Chiffren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="99"/>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="85"/>
|
||||
<source>Reauthentication required</source>
|
||||
<translation>Erneute Authentifizierung erforderlich</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="99"/>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="85"/>
|
||||
<source>Your session has expired. You need to re-login to continue to use the client.</source>
|
||||
<translation>Ihre Sitzung ist abgelaufen. Sie müssen sich zur weiteren Nutzung des Clients neu Anmelden.</translation>
|
||||
</message>
|
||||
@@ -2871,12 +2866,12 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1134"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1132"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1141"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1139"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben</translation>
|
||||
</message>
|
||||
@@ -2991,54 +2986,54 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Synchronisationsbericht kann nicht geöffnet werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="889"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="887"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Der Dateiname enthält mindestens ein ungültiges Zeichen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1093"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1100"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1091"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1098"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1119"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1117"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1161"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1159"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1178"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1198"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1176"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1196"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Löschen nicht erlaubt, Wiederherstellung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1209"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Lokale Dateien und Freigabeordner wurden entfernt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1267"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1265"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Verschieben nicht erlaubt, Element wiederhergestellt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1278"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1276"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Verschieben nicht erlaubt, da %1 schreibgeschützt ist</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1279"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1277"/>
|
||||
<source>the destination</source>
|
||||
<translation>Das Ziel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1279"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1277"/>
|
||||
<source>the source</source>
|
||||
<translation>Die Quelle</translation>
|
||||
</message>
|
||||
@@ -3124,26 +3119,25 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="390"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="544"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="611"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="526"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="593"/>
|
||||
<source>Log in...</source>
|
||||
<translation>Einloggen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="394"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="536"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="613"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="518"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="595"/>
|
||||
<source>Log out</source>
|
||||
<translation>Abmelden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="415"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="456"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="438"/>
|
||||
<source>Recent Changes</source>
|
||||
<translation>Letzte Änderungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="656"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="638"/>
|
||||
<source>Checking for changes in '%1'</source>
|
||||
<translation>Nach Änderungen suchen in '%1'</translation>
|
||||
</message>
|
||||
@@ -3163,27 +3157,27 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>%1 im Browser öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="598"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="580"/>
|
||||
<source>Unknown status</source>
|
||||
<translation>Unbekannter Status</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="600"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="582"/>
|
||||
<source>Settings...</source>
|
||||
<translation>Einstellungen …</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="601"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="583"/>
|
||||
<source>Details...</source>
|
||||
<translation>Details …</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="606"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="588"/>
|
||||
<source>Help</source>
|
||||
<translation>Hilfe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="608"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="590"/>
|
||||
<source>Quit %1</source>
|
||||
<translation>%1 beenden</translation>
|
||||
</message>
|
||||
@@ -3228,63 +3222,63 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Stoppe alle Ordner</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="515"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="497"/>
|
||||
<source>Unpause all synchronization</source>
|
||||
<translation>Setze gesamte Synchronisation fort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="517"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="499"/>
|
||||
<source>Unpause synchronization</source>
|
||||
<translation>Setze Synchronisation fort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="525"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="507"/>
|
||||
<source>Pause all synchronization</source>
|
||||
<translation>Stoppe gesamte Synchronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="527"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="509"/>
|
||||
<source>Pause synchronization</source>
|
||||
<translation>Stoppe Synchronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="534"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="516"/>
|
||||
<source>Log out of all accounts</source>
|
||||
<translation>Bei allen Konten abmelden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="542"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="524"/>
|
||||
<source>Log in to all accounts...</source>
|
||||
<translation>Bei allen Konten anmelden...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="617"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="599"/>
|
||||
<source>Crash now</source>
|
||||
<comment>Only shows in debug mode to allow testing the crash handler</comment>
|
||||
<translation>Jetzt abstürzen lassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="634"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="616"/>
|
||||
<source>No items synced recently</source>
|
||||
<translation>Keine kürzlich synchronisierten Elemente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="661"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="643"/>
|
||||
<source>Syncing %1 of %2 (%3 left)</source>
|
||||
<translation>Synchronisiere %1 von %2 (%3 übrig)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="666"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="648"/>
|
||||
<source>Syncing %1 (%2 left)</source>
|
||||
<translation>Synchronisiere %1 (%2 übrig)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="686"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="668"/>
|
||||
<source>%1 (%2, %3)</source>
|
||||
<translation>%1 (%2, %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="715"/>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="697"/>
|
||||
<source>Up to date</source>
|
||||
<translation>Aktuell</translation>
|
||||
</message>
|
||||
@@ -3505,7 +3499,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>QApplication</name>
|
||||
<message>
|
||||
<location filename="../src/gui/application.cpp" line="593"/>
|
||||
<location filename="../src/gui/application.cpp" line="581"/>
|
||||
<source>QT_LAYOUT_DIRECTION</source>
|
||||
<translation>QT_LAYOUT_DIRECTION</translation>
|
||||
</message>
|
||||
@@ -3513,37 +3507,37 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="473"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="468"/>
|
||||
<source>in the future</source>
|
||||
<translation>in der Zukunft</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="469"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="464"/>
|
||||
<source>%n day(s) ago</source>
|
||||
<translation><numerusform>vor %n Tage(n)</numerusform><numerusform>vor %n Tage(n)</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="477"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="472"/>
|
||||
<source>%n hour(s) ago</source>
|
||||
<translation><numerusform>vor %n Stunde(n)</numerusform><numerusform>vor %n Stunde(n)</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="482"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="477"/>
|
||||
<source>now</source>
|
||||
<translation>jetzt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="484"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="479"/>
|
||||
<source>Less than a minute ago</source>
|
||||
<translation>vor weniger als einer Minute</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="487"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="482"/>
|
||||
<source>%n minute(s) ago</source>
|
||||
<translation><numerusform>vor %n Minute(n)</numerusform><numerusform>vor %n Minute(n)</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="490"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="485"/>
|
||||
<source>Some time ago</source>
|
||||
<translation>vor einiger Zeit</translation>
|
||||
</message>
|
||||
@@ -3570,38 +3564,38 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<source>%L1 B</source>
|
||||
<translation>%L1 B</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="319"/>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="314"/>
|
||||
<source>%n year(s)</source>
|
||||
<translation><numerusform>%n Jahr</numerusform><numerusform>%n Jahre</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="320"/>
|
||||
<source>%n month(s)</source>
|
||||
<translation><numerusform>%n Monat</numerusform><numerusform>%n Monate</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="321"/>
|
||||
<source>%n day(s)</source>
|
||||
<translation><numerusform>%n Tag</numerusform><numerusform>%n Tage</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="322"/>
|
||||
<source>%n hour(s)</source>
|
||||
<translation><numerusform>%n Stunde</numerusform><numerusform>%n Stunden</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="323"/>
|
||||
<source>%n minute(s)</source>
|
||||
<translation><numerusform>%n Minute</numerusform><numerusform>%n Minuten</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="324"/>
|
||||
<source>%n second(s)</source>
|
||||
<translation><numerusform>%n Sekunde</numerusform><numerusform>%n Sekunden</numerusform></translation>
|
||||
<translation>%n Jahr(e)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="348"/>
|
||||
<location filename="../src/libsync/utility.cpp" line="315"/>
|
||||
<source>%n month(s)</source>
|
||||
<translation>%n Monat(e)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="316"/>
|
||||
<source>%n day(s)</source>
|
||||
<translation>%n Tag(e)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="317"/>
|
||||
<source>%n hour(s)</source>
|
||||
<translation>%n Stunde(n)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="318"/>
|
||||
<source>%n minute(s)</source>
|
||||
<translation>%n Minute(n)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="319"/>
|
||||
<source>%n second(s)</source>
|
||||
<translation>%n Sekunde(n)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="343"/>
|
||||
<source>%1 %2</source>
|
||||
<translation>%1 %2</translation>
|
||||
</message>
|
||||
|
||||
+187
-193
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário